作者名: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,明天见同学们,有什么问题随时欢迎私信问哦。

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: