NSCTF之MD5碰撞和php strcmp函式繞過
阿新 • • 發佈:2020-07-03
1、開啟網頁如圖,F12發現code.txt:
2、需要php程式碼審計,提示需要get方式提交3個引數(v1、v2、v3)且v1和v2的值不同,但md5後的值相同(中間是&&與符號),為真時再利用strcmp函式判斷v3和$flag是否相同,為真輸出flag;
3、在問了幾個朋友後,得到一些提示,首先MD5碰撞有工具,可以生成,另外strcmp函式有繞過漏洞,這就簡單了
4、下載fastcoll工具建立一個文字檔案init.txt,隨便寫入1,使用命令fastcoll -p init.txt -o 1.txt 2.txt就可以在當前目錄生成不同內容但MD5相同的檔案:
5、用下面程式碼計算MD5並URLENCODE;
<?php function readmyfile($path){ $fh = fopen($path, "rb"); $data = fread($fh, filesize($path)); fclose($fh); return $data; } echo 'MD5:'. md5( (readmyfile("1.txt"))); echo "<br><br>"; echo 'URLENCODE '. urlencode(readmyfile("1.txt")); echo"<br><br>"; echo 'URLENCODE hash '.md5(urlencode (readmyfile("1.txt"))); echo "<br><br>"; echo 'MD5::'.md5( (readmyfile("2.txt"))); echo "<br><br>"; echo 'URLENCODE '. urlencode(readmyfile("2.txt")); echo "<br><br>"; echo 'URLENCODE hash '.md5( urlencode(readmyfile("2.txt"))); echo "<br><br>"; ?>