md5、sha1弱比较,md5($pass,true)总结
------------恢复内容开始------------
一、md5、sha1弱比较
1.md5
-
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){...}一般遇到这种情况,都可以用md5的弱比较绕过
部分字符串md5加密之后为0exxxx的格式,相当于0的xxxx次方,所以无论xxxx是什么,函数判断时都会认为相等。例如
a=QNKCDZO,加密后为0e830400451993494058024219903391
b=240610708,加密后为0e462097431906509019562988736854
所以既满足了a!=b,也满足了md5($a) == md5($b)
这里附上常见的0E开头的MD5
0e开头的md5和原值:
QNKCDZO
0e830400451993494058024219903391
240610708
0e462097431906509019562988736854
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s532378020a
0e220463095855511507588041205815
s1665632922a
0e731198061491163073197128363787
s1184209335a
0e072485820392773389523109082030
s1885207154a
0e509367213418206700842008763514
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020 -
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2']))
对于这种post传值的情况,md5函数无法处理数组,也就是如果把a、b变成两个数组传入变量时,可以绕过md5
例如
a[]=1&b[]=2
既满足a!=b,也可以绕过md5()函数
2.类似的函数还有
以下串在sha1加密后以0E开头,并且后面均为纯数字
aaroZmOk
aaK1STfY
sha1对数组不敏感,所以也可以用同上的数组方法绕过
二、md5($pass,true)
https://blog.csdn.net/March97/article/details/81222922
师傅已经讲得很详细了,总而言之就是当注入的pass=ffifdyop时,ffifdyop经过md5加密后变成 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c 被返回, ' \ '后面的3个字符连同' \ '算一个字符,比如’ \xc9 ‘,所以上述一共16个字符。函数md5($pass,true)返回为true。
------------恢复内容结束------------