題目鏈接:http://123.206.87.240:8002/web16/
題解:
打開題目鏈接,得到一串東西
題目標題為”備份是個好習慣“,故考慮修改url為index.php.bak(bak為網站的備份文件),修改后自動得到一個備份文件
http://123.206.87.240:8002/web16/index.php.bak
打開此文件,是一段PHP源代碼
可以看出題目需要我們傳入兩個值,分別為key1和key2,且key1和key2的值不能相同但md5值相同,通過傳入值不相同的數組可以實現。但是有一點需要注意,語句str_replace(‘key’,’ ',$str)會將key替換為空格,這一點我們可以通過雙寫key對其進行繞過,最終的payload:?kekeyy1[]=1&kekeyy2[]=2
有兩種方法繞過:
md5()函數無法處理數組,如果傳入的為數組,會返回NULL,所以兩個數組經過加密后得到的都是NULL,也就是相等的。 payload: ?kkeyey1[]=1&kkeyey2[]=2
利用==比較漏洞 如果兩個字符經MD5加密后的值為 0exxxxx形式,就會被認為是科學計數法,且表示的是0*10的xxxx次方,還是零,都是相等的。 下列的字符串的MD5值都是0e開頭的: QNKCDZO 240610708 s878926199a s155964671a s214587387a s214587387a 最后看看d41d8cd98f00b204e9800998ecf8427e是什么意思,拿到MD5解密試一下,結果為NULL,也就是說這是NULL的MD5值,因為默認是沒有傳入key1和key2的,這兩個值也就是null. payload: ?kkeyey1=QNKCDZO&kkeyey2=s878926199a
d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e的MD5解密為空【MD5在線解密鏈接:https://www.cmd5.com/】
綜上所述,兩種方法可行:
或者:
即flag為:Bugku{OH_YOU_FIND_MY_MOMY}