EZMD5

代码审计
include "flag.php";
highlight_file(__FILE__);
包含了 flag.php 文件并展示源代码。
if (isset($_GET['QC'])) {
$qc = (string)$_GET['QC'];
$hp = md5($qc);
要求 get 传参 QC 并且设置了一个变量保存这个 QC 的字符串格式,其后有设置一个变量$hp 为其的 md5 值。
if ($hp == $admin_hash) {
echo "<br>Welcome, admin!<br>";
echo $flag;
} else {
echo "<br>Login failed.";
}
最后对比$admin_hash 和$hp 这两个变量且是松散比较(==)。若相等则返回 flag 的值。
这里观察到最开始的变量像是一个科学计数法的表示。而且当使用
==比较两个字符串时,如果它们看起来像科学计数法表示的数字,PHP 会尝试将它们转换为数字进行比较。
- '0e830400451993494058024219903391'会被当作科学计数法:0 × 10^830400451993494058024219903391,其计算结果为 0。
- 同理,如果 md5($qc)的结果也是一个以 0e 开头、后面全是数字的字符串,它也会被转换为数字 0。
所以只需要找到一个 MD5 值也为 0e 开头且后面是数字的字符串。
有以下几个:QNKCDZO, 240610708, aabg7XSs, s878926199a。
最终 payload:?QC=QNKCDZO














