php伪随机数爆破种子,php伪随机数 ~ chuddy's Blog

前言

这一段遇到了一个关于伪随机数的题目,当时没有做出来,看完writeup之后,感觉很有意思,所以就记录下来

php伪随机数漏洞

php中重要的几个随机函数rand() 不指定参数时,范围0-32767

mt_rand() 不指定参数时,范围0-2^32-1

srand() 给rand()函数播种

mt_srand() 给mt_srand()函数播种

php是基于C开发的,C中生成随机数时,需要自己去一个种子,相同的种子产生的随机数是相同的,php中也一样

自己的理解:mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机数。

所以,当种子一定时,接下来几次的随机数都是固定的

测试代码:<?php

mt_srand(1433223);

echo mt_rand()."
";

echo mt_rand()."
";

echo mt_rand()."
";

echo mt_rand()."
";

echo mt_rand()."
";

?>

页面输出:2068220702

2001673607

410303409

475448501

1250041484

发现随机种子 确定下来 无论怎么刷新 页面返回的一直是这几个随机数

同时我们应该注意,mt_srand()函数播种的时候,只有在第一次调用mt_rand()函数的时候才会使用。所以如果我们知道了第一次生成的随机数值,就可能爆破出随机数种子。

5ddfa541965a1.png!v1

发现爆出了5个可能的种子

通过验证可以知道那个是正确的种子

注意:如果不是第一次生成的随机数,爆出来的种子,不一定正确

在 php > 4.2.0 的版本中,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现已由 PHP 自动完成。php 中产生一系列的随机数时,只进行了一次播种,而不是每次调用 mt_rand() 都进行播种。

# web漏洞

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值