ctfshow-web入门-爆破(web25)及php_mt_seed工具的安装与使用

爆个🔨,不爆了

hexdec() 函数用于将十六进制字符串转换为十进制数;

注意:

我最开始做这道题时看错了,误以为随机数的种子直接来自于 flag 的前八位,以为就是 ctfshow{

这八个字符然后 md5 加密再截取,其实这里不是的,是先对 flag 整体进行 md5 加密后再截取出来的 8 位转为十进制后,作为随机数的种子,这里正确获取随机数的方法是令 r 等于 0 。

从后面的 if((!rand)){ ,需要为真才会执行后面输出 flag 的语句,因此 rand 需要为 0 ,而 rand = intval(r)-intval(mt_rand()); 换句话说就是 intval($r) 需要等于 intval(mt_rand())。

我们令 r=0,就可以得到 rand = -intval(mt_rand()),只要设置了 r,就会 echo rand;

因此我们可以得到 mt_rand() = 646081337

但是这里还有一个问题:token==mt_rand()+mt_rand()

看似 token 就是 mt_rand() 的两倍,但是并不能单纯的将 token = 2*mt_rand()

看一个简单的测试:

php 复制代码
<?php
mt_srand(123456);
$rand1 = mt_rand();
$rand2 = mt_rand();
echo $rand1,"\n",$rand2;
?>

都是一样的种子,但是第一次和第二次生成的随机数结果是不一样的

这里正确的做法是由随机数逆推种子,理论上可以通过写脚本爆破,但是太慢了。

这里推荐 php_mt_seed :一个专门用于从已知随机数逆推出 Mersenne Twister 种子的工具。

在 kali 安装 php_mt_seed,我这里直接从 github 克隆:

bash 复制代码
git clone https://github.com/openwall/php_mt_seed

切换到 php_mt_seed 目录下:

bash 复制代码
cd php_mt_seed

编译:

bash 复制代码
make

该工具的基础用法:

time 开头,使用 ./ 执行我们的程序,后面再接上希望逆推的随机数

bash 复制代码
time ./php_mt_seed 646081337

这里推出来的结果有很多,我们需要根据 php 的版本来选择:

使用 wappalyzer 看一下,是 php 7.3.11

筛选下来这里只有两种情况:1183822455 或者 3291176586

根据这两个随机数种子,分别生成不同的情况:

特别注意,这里的 mt_rand()+mt_rand() 是第二次和第三次生成的随机数之和,因为前面已经使用过一次 mt_rand() 了。

php 复制代码
<?php
mt_srand(1183822455);
$rand = mt_rand();
$rand1 = mt_rand();
$rand2 = mt_rand();
echo $rand,"\n",$rand1,"\n",$rand2,"\n",$rand1+$rand2,"\n\n";
mt_srand(3291176586);
$rand = mt_rand();
$rand1 = mt_rand();
$rand2 = mt_rand();
echo $rand,"\n",$rand1,"\n",$rand2,"\n",$rand1+$rand2;
?>

构造 payload:?r=646081337

Cookie:token=2766556611或者 token=494441971

测试第一个 token=2766556611 就可以成功回显 flag:

ctfshow{a6e871e8-c8d2-49f7-b958-0ca335272712}

再试一下 token=494441971,发现不行

当然,我们通过 hackbar 来请求也是可以的

相关推荐
观书喜夜长1 分钟前
每日一练:攻防世界「easyupload文件上传漏洞」详细解析与防御
学习·web安全·网络安全
廋到被风吹走3 分钟前
持续学习方向 低代码/平台工程
学习·低代码
·中年程序渣·12 分钟前
Spring AI Alibaba入门学习(一)
人工智能·学习·spring
开开心心_Every13 分钟前
PDF密码移除工具,解除打印编辑复制权限免费
linux·运维·服务器·pdf·web3·ocr·共识算法
白帽黑客-晨哥15 分钟前
湖南网安基地的野蛮生长:当网络安全沦为“做题家”比赛,湖南网安基地在尝试另一种可能
web安全·网络安全·渗透测试·漏洞挖掘·漏洞扫描·湖南网安基地
卓律涤15 分钟前
【工作篇】 Dell机架式服务器,采用RAID 5,怎么部署win系统
运维·服务器·单片机·嵌入式硬件·深度学习·程序人生·安全
生活很暖很治愈16 分钟前
Linux——UDP编程&通信
linux·服务器·c++·ubuntu
就不掉头发16 分钟前
Linux与数据库
linux·运维·数据库
Engineer邓祥浩18 分钟前
JVM学习笔记(1) 总述
jvm·笔记·学习
xuansec23 分钟前
【JavaEE安全】JNDI 注入从原理到实战:RMI、LDAP 与高版本绕过
python·安全·java-ee