mt_srand以及mt_rand函数的伪随机数爆破
mt_srand()函数以及mt_rand()函数
mt_scrand(seed)这个函数的意思是,通过分发seed种子,然后种子有了后,靠mt_rand()生成随机数
实例
1 | <?php |
但是生成的随机数是有线性关系的,所以可以理解为伪随机数,因此我们可以
1 | 1. 知道种子后,确定伪随机数的序列 |
所以我们可以使用php_mt_seed爆破
1 | 下载地址:https://www.openwall.com/php_mt_seed/ |
打开题目后,我们可以看见10个字符,然后我们猜后面10个字符
1 | 前10个字符:xxxq9Bgc67 |
然后打开页面源码,发现一串代码中有一个可疑文件check.php
1 | $(document).ready(function(){ |
因此,我们查看check.php文件,发现源码
1 | <?php |
所以我们需要知道前10个字符的随机数是多少,从而爆破出种子数,exp
1 | str1 ='xxxq9Bgc67' |
然后在ubuntu中运行这个命令
1 | ./php_mt_seed 23 23 0 61 23 23 0 61 23 23 0 61 16 16 0 61 35 35 0 61 37 37 0 61 6 6 0 61 2 2 0 61 32 32 0 61 33 33 0 61 |
其中23是随机数,0和61是范围,下面的数以此类推,但是如果mt_rand()没有设定范围的话,直接将生成的随机数放进php_mt_seed中爆破即可
发现只有一个php7.1+版本的种子,但是运行php脚本的版本必须在7.4以上才可以成功,所以exp
1 | <?php |
即可得到20个字符,获取flag