mt_srand()和mt_rand()
mt_srand()函数用于设置Mersenne Twister随机数生成器的种子值,mt_rand()函数会依据种子生成伪随机数。下面是一个示例:
mt_srand(0); |
运行上述代码,会发现三个结果不一样,但是每次运行得到的结果都不变。其实是因为mt_srand(seed)中的seed是确定的,故而同次序下mt_rand()每次生成的随机数一样。
这样也就产生了漏洞:由其中一个随机数,去得到seed,然后就能预测其他随机数。
php_mt_seed
直接下载压缩包到kali中,然后执行下面命令即可。
tar zxvf php_mt_seed-4.0.tar.gz |
漏洞实例
源码:
include("seed.php"); |
分析代码可知,已知一个随机数为 1219893521,如果能知道第二个随机数的值便能获得flag。
既然知道其中一个随机数了,便能利用php_mt_seed工具爆破seed,如图:
得到不同版本php的seed,利用Wappalyzer插件获取题目中的php版本。