[英]Why this PHP comparison it wont return True
為什么這個 PHP 比較它不會返回真,有沒有辦法讓它返回真?
<?php
highlight_file(__FILE__);
error_reporting(0);
$first = $_GET['first_flag'];
echo ' :: ' . md5($first);
echo ' :: ' . $first ."<br/>";
if($first == md5($first)){
echo "True";
}else {
echo "False";
}
?>
當我把 QNKCDZO 它返回:
:: 0e830400451993494058024219903391:: QNKCDZO 錯誤
關鍵是要注意比較是使用==
完成的,它打開了涉及類型雜耍的選項。
PHP 將1e2
格式的字符串(其中 1 和 2 是任意大小的數字)解釋為科學計數法浮點值。 因為0e...
形式的任何值的計算結果為零(零到任何冪仍然等於零),下一步是找到一個數字X
,0eX 的 md5 0eX
的形式相同。
0e215962017 的 MD5 0e215962017
是0e291242476940776845150308577824 ,注意除了開頭的0e
之外的每個字符都是數字。
因此,在比較值時(松散地,使用==
),兩者都評估為零。
感謝 https://github.com/bl4de/ctf/blob/master/2017/HackDatKiwi_CTF_2017/md5games1/md5games1.md ,它完成了(更難)實際找到數字的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.