第三屆NSCTF測試題Code php 之MD5碰撞和php strcmp函數繞過


 

 

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,這里就是v1和v2參數用的;

<?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>";
?>

 

6、strcmp函數的繞過是這樣的(參考:https://blog.csdn.net/dyw_666666/article/details/82349432),重點截圖如下:

  

 

7、開始burp的操作,參數值不要用雙引號,連接多個參數用&,拿到flag:

 

PS1:后來還找到MD5碰撞繞過的其他思路,利用PHP處理0e開頭md5哈希字符串的缺陷,有空可以試下:

 

PS2:最后又發現一個帖子寫到居然全部用數組參數繞過,也就是strcmp函數和MD5碰撞都可以用數組繞過。。。真是驚喜一波接着一波呀。。。

 

參考:

如何用不同的數值構建一樣的MD5 - 第二屆強網杯 MD5碰撞 writeup - 先知社區 

MD5碰撞和MD5值(哈希值)相等_Sea_Sand息禪-CSDN博客_md5后的值相同 

PHP處理0e開頭md5哈希字符串缺陷/bug & PHP expresses two different strings to be the same [duplicate]_ncafei的博客-CSDN博客_0e830400451993494058024219903391 


免責聲明!

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



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