1.根据提示出前十位的号码,猜测应该需要爆破后面十位,抓包发现发送到check.php:
2.跟进查看代码:
原理:因为代码中是通过种子seed生成了随机数,但是mt_srand()这个函数存在漏洞,php中mt_rand()生成的是一个伪随机数,是通过算法生成出来的,可以根据这个来进行爆破得到mt_srand()里的种子
3.将给出前十个密码解析成php_mt_seed需要的参数,伪随机数生成脚本:
str1 ='Xisiab1m0D'
str2 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result =''length = str(len(str2)-1)
for i in range(0,len(str1)):for j in range(0,len(str2)):if str1[i] == str2[j]:result += str(j) + ' ' +str(j) + ' ' + '0' + ' ' + length + ' 'breakprint(result)
4.kali上下载工具php_mt_seed-4.0,使用该工具爆破php伪随机数的种子:
./php_mt_seed 59 59 0 61 8 8 0 61 18 18 0 61 8 8 0 61 0 0 0 61 1 1 0 61 27 27 0 61 12 12 0 61 26 26 0 61 39 39 0 61
5.重新用phpstorm跑一下爆破的种子:
<?php
mt_srand(578931025);$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){$str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);
}
echo $str;
?>
6.将爆破结果进行输入即可:
参考文章:PHP mt_rand安全杂谈及应用场景详解 - FreeBuf网络安全行业门户