简介
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() 的值
工具以及使用方法
-
php_mt_seed
-
下载网址如下,点击 php_mt_seed 4.0 进行下载
文件下载格式是 tar.