前段时间看了雨牛发布在先知平台的PHPCMS MT_RAND SEED CRACK致authkey泄露
然后自己也合计出了一道随机数预测的题
废话
伪随机在日常的开发中经常使用到,但是其实有很多安全问题。
这里我们主要探讨php中的伪随机产生函数mt_rand()的缺陷。
php官方手册的英文版
而中文版却没有这个注释
mt_rand()
mt_rand()函数是基于梅森旋转算法的,按照官方的说法mt_rand()函数的质量高于rand()函数,但是官方也提到了这不是一个用来产生安全值的函数,因此使用需要谨慎
梅森旋转算法
hack it!
因为现在php版本至少都是5以上了,因此5以前的mt_rand()使用不探讨,php5以后mt_rand()不需要在使用前播种
以apache为例,KeepAlive选项是为了保持Tcp连接,以增加一个连接内的http包,提升用户体验。但是php在一个tcp连接中对于种子的处理却是只产生一个种子也即,此连接中的种子如果泄漏后面的序列均可以预测。
1.php
<?php
mt_srand(123789178);
for($i=0;$i<10;$i++){
echo mt_rand()."\r\n";
}
?>
获取种子可以使用
php_mt_seed
暴力出种子,然后就可以在同一个连接内胡作非为了
此处评论已关闭