Bugku-8.前女友-MD5,strcmp()繞過
阿新 • • 發佈:2021-08-12
原始碼發現連結
<?php if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){ $v1 = $_GET['v1']; $v2 = $_GET['v2']; $v3 = $_GET['v3']; if($v1 != $v2 && md5($v1) == md5($v2)){ if(!strcmp($v3, $flag)){ echo $flag; } } } ?>
1.需要get傳入v1,v2,v3
2.v1!=v2,且v1和v2的md5相等(難道是找碰撞?)
3.strcmp()
返回值:
0 - 如果兩個字串相等
<0 - 如果 string1 小於 string2
>0 - 如果 string1 大於 string2
區分大小寫,!strcmp($v3, $flag)要為1,意思是v3為flag的內容
MD5繞過的技巧 - _Whoami - 部落格園 (cnblogs.com)
php在處理0e開頭的字串存在缺陷,0e開頭字串相比較,會相等,也就是說"0e123"=="0e456"
的值是1。
所以在處理的時候,推薦使用全等於===
md5('240610708') ==md5('QNKCDZO')
返回True
strcmp()5.3之後的有這個漏洞:
strcmp函式無法比較陣列,物件,會返回0
輸入?v1=240610708&v2=QNKCDZO&v3[]=1
獲得flag