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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM