簡體   English   中英

為什么這個 PHP 比較它不會返回 True

[英]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 0e2159620170e291242476940776845150308577824 ,注意除了開頭的0e之外的每個字符都是數字。

因此,在比較值時(松散地,使用== ),兩者都評估為零。

感謝 https://github.com/bl4de/ctf/blob/master/2017/HackDatKiwi_CTF_2017/md5games1/md5games1.md ,它完成了(更難)實際找到數字的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM