-3

为什么这个 PHP 比较它不会返回 True 有没有办法让它返回 true ?

<?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 错误

4

1 回答 1

5

关键是要注意比较是使用 完成的==,这会打开涉及类型杂耍的选项。

格式中的字符串1e2(其中 1 和 2 是任意大小的数字)被PHP解释为科学记数法浮点值。因为表单中的任何值的0e...计算结果都为零(任何幂的零仍然等于零),下一步是找到一个X其 md5 散列具有0eX相同形式的数字。

的 MD5 哈希0e2159620170e291242476940776845150308577824,请注意除首字母之外的每个字符0e都是数字。

因此,在比较值时(松散地,使用==),两者都评估为零。

感谢https://github.com/bl4de/ctf/blob/master/2017/HackDatKiwi_CTF_2017/md5games1/md5games1.md,它完成了(更难)实际找到数字的工作。

于 2020-04-16T18:33:06.013 回答