MD5碰撞

PHP在处理哈希字符串时,

会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

"==="和"!=="即strict比较符,只有在类型相同时才相等。"=="和"!="即non-strict比较符,会在类型转换后进行比较。

此外0 == 字符会被认为是正确的,可以绕过验证

 


 

例子1:bugku的碰撞题目

md5 collision(NUPT_CTF)

输入一个a,但我们不知道其确切的值,就用md5碰撞来绕过:

 

字母数字混合类(MD5值):

s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
 
大写字母类:
QLTHNDT
0e405967825401955372549139051580
 
QNKCDZO
0e830400451993494058024219903391
 
EEIZDOI
0e782601363539291779881938479162
 
纯数字类:
240610708
0e462097431906509019562988736854
 

绕过以后返回flag值

 

 

例子2:


 


 

题目的php代码,需要传两个参数v1和v2,v1必须为字母,v2必须为数字,如果两者的MD5值相同,打印flag

用到上面提到的MD5碰撞数,就能返回flag

posted @ 2020-02-14 19:45  ch0bits  阅读(1651)  评论(0编辑  收藏  举报