CTF經典題型 md5()函數數組繞過


下面是php源碼

<?

include_once “flag.php”;
ini_set(“display_errors”, 0);
$str = strstr($_SERVER[‘REQUEST_URI’], ‘?’);
$str = substr($str,1);
$str = str_replace(‘key’,”,$str);
parse_str($str);
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag.”取得flag”;
}
?>

//意思是將get的兩個參數中的key替換為空(這里可以用kekeyy繞過),然后對key1,key2的值進行md5加密,並進行比較,

//如果md5加密的值一樣而未加密的值不同,就輸出flag.

有兩種方法繞過:

1,md5()函數無法處理數組,如果傳入的為數組,會返回NULL,所以兩個數組經過加密后得到的都是NULL,也就是相等的。

2,利用==比較漏洞

如果兩個字符經MD5加密后的值為 0exxxxx形式,就會被認為是科學計數法,且表示的是0*10的xxxx次方,還是零,都是相等的。

下列的字符串的MD5值都是0e開頭的:

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a

 

參考https://blog.csdn.net/zpy1998zpy/article/details/80582974


免責聲明!

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



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