【php】mt_rand 伪随机数漏洞

简介

        php伪随机漏洞由于 mt_srand(seed) 函数和 mt_rand() 函数产生。

        在执行 mt_rand() 函数生成随机数之前,先要执行 mt_srand(seed) 函数分发种子,使 mt_rand() 函数能够生成随机数,但是此处生成的随机数实际上是伪随机的。

由例子来引入

<?php
// 要注意该函数生成的伪随机数在不同的 php 版本下是不同的,分界线版本是 7.0.+
// 下面我们以 7.0.+ 以上版本为例
mt_srand(123); // 填入种子
echo mt_rand(); // 输出结果 1495656191
echo mt_rand(); // 输出结果 1531059894
?>

        乍一看好像没啥问题,但你可以试试创建一个新的php文件,然后写进如上的相同代码(包括其他方法,不管怎么试),会发现输出结果是相同的,也就是说 mt_rand() 生成的是伪随机数。

        所以这就可以爆破了,根据生成的第一个结果来对种子进行爆破,从而预测接下去所有 mt_rand() 的值

工具以及使用方法

文件下载格式是 tar.gz ,于是我们丢到 linux 中进行解压。

tar -zxvf php_mt_seed-4.0.tar.gz

解压完成后进入目录

执行如下命令

make # 生成一个可执行文件
time ./php_mt_seed [第一个结果]

        这时候就会开始爆破了,会把结果和对应的 php 版本均显示出来,要用对应的版本号进行调试哦!

        比如我们试试刚刚的 123

make
time ./php_mt_seed 1495656191 # 1495656191 是 123 生成的第一个结果

如图所示就是结果:

有的情况下会爆破出好几个种子 根据实际情况取用。

猜你喜欢

转载自blog.csdn.net/BrosyveryOK/article/details/127061458
今日推荐