【代码审计】buu_[GWCTF 2019]枯燥的抽奖

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 + ' '
            break

print(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网络安全行业门户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值