ctfshow_Web23哈希爆破不写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
error_reporting(0);

include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $flag;
}
}
}else{
highlight_file(__FILE__);

}
?>

tips

substr():切割字符串,参数2为开始切割位置(含该字符),参数3为切割长度。

intval():取整数。

highlight_file(__FILE__):访问该 PHP 文件时高亮显示源码。


md5()函数输出哈希字符串,结合下面的if语句的极端罕见条件,本题只能靠穷举碰运气得出正确的哈希值,才能返回 flag 。

先在 URL 用 GET 方法传参(参数随意),抓包,传到 burp 的 intruder 模块修改。利用 Payloads 中 Payload typeCustom iterator ,组合出大量不同的 Payload 并攻击。最后以响应的长度排序,与其他包长度不一样的就是碰对运气带有 flag 的。