0


【Ctfer训练计划】——(六)

**作者名:Demo不是emo **

主页面链接:主页传送门
创作初心:一切为了她
座右铭:不要让时代的悲哀成为你的悲哀
专研方向:web安全,后渗透技术

每日emo:****别来我梦里了,我已负担不起醒来的失落

一、伪随机数爆破

题目:web25

训练平台****:ctfshow

题目描述爆个**🔨,不爆了**

开启容器页面如下

那这就是一道分析代码的题了,我们来仔细读一下代码的逻辑,为了节省时间就不慢慢读了,给出逻辑如下

1、首先GET传参传入一个r变量,再将flag经过md5加密截取前8位字符,并将截取的字符串转换为10进制,以转换后的十进制作为mt_srand()函数的种子
2、再定义一个rand变量,值为传入的r变量的值-mt_rand()生成的随机数

3、若此时cookie中的token参数的值=mt_rand()第二次产生的随机数的值+第三次产生的随机数的值,那么就输出flag,否则输出rand变量的值

这里的种子(seek)没有明确给出,毕竟flag我们不知道,所以我们需要逆推出种子(seed),仔细看看这段代码

仔细观察,发现根据这个代码逻辑当我们传入的r为0时,rand的值就是负的mt_rand()产生的随机值,而我们就是要通过这个随机值倒推回flag,所以我们先GET传入r,值为0,如下

所以flag经过一系列并作为种子后产生的随机数为

1093633598 

但是知道mt_rand()产生的随机数怎么逆推mt_srand()函数的种子呢?这里就要给大家介绍一个工具了,专门用来跑mt_srand()种子和 mt_rand()随机数的,名字叫php_mt_seed

下载网站:Al1ex/php_mt_seed: php_mt_seed is a PHP mt_rand() seed cracker (github.com)

下载好后放到kali里面,步骤如下

unzip php_mt_seed-master.zip
解压Github自带的压缩包

cd php_mt_seed-master
进入解压后的文件

tar zxvf php_mt_seed-4.0.tar.gz
解压要用的脚本

cd php_mt_seed-4.0
进入解压后的工具目录

make
源码编译,使用后当前目录生成可执行文件

chmod 777 php_mt_seed-4.0
赋予执行权限

到这里工具的配置就完成了,工具的使用也很简单,用法如下

time ./php_mt_seed 需要逆推的随机数

例如这道题,命令如下

time ./php_mt_seed 1093633598 

这个工具就会自己根据随机数去逆推种子的值,效果如下

注意:因为伪随机数生成规则随php版本变化而变化,所以该工具会给出不同版本的种子答案,并且该工具有时跑出来的答案不唯一,需要一个个试,但问题不大,猜测作者用的是php7环境,如果不对的话我们再换就行,上面结果中php版本跑出来的种子有两个,分别是

361284794
3041033333

先试试

 361284794

再来看剩下的代码

意思是当rand等于0时,若token的值等于mt_rand()函数第二次和第三次产生的随机数之和时,打印出flag,先看看什么情况下rand=0呢?就是我们传入的r的值等于mt_rand()产生的第一个随机数时

所以这里mt_rand()产生的三个随机数我们都要用,那我们直接写个代码得到这三个随机数的值

代码如下

得到三次随机数的值

1093633598
1103641603
859442013

所以我们按代码中输出flag的要求传入参数

首先把第二次和第三次随机数相加的值传入cookie的token参数,如下

再GET传参传入r,值为产生的第一个随机数 ,结果如下

那么到这里这道题就拿下了, Game over,明天见同学们,有什么问题随时欢迎私信问哦。

标签: python 开发语言

本文转载自: https://blog.csdn.net/qq_63844103/article/details/128486475
版权归原作者 白昼安全 所有, 如有侵权,请联系我们删除。

“【Ctfer训练计划】——(六)”的评论:

还没有评论