x.
x. 拓展部分
x.x 伪随机数
mt_rand() 属于伪随机数函数,其结果并不是真正随机,而是基于“随机种子”通过固定算法计算得到;当开发者手动使用 mt_srand(固定值) 初始化种子时,后续生成的随机数序列会完全固定,例如第一次、第二次、第三次 mt_rand() 的结果永远一致,因此攻击者只需知道种子即可精准预测随机数,而不是盲目爆破;如果不手动指定种子,PHP 会自动根据时间、系统熵等信息初始化随机种子,所以每次运行程序时生成的随机数通常都会不同。
结论是不要用 mt_rand() 做任何安全相关的事,应改用 PHP random_int 官方文档 或 PHP random_bytes 官方文档;其中 random_int() 适合生成安全验证码、Token、随机ID,random_bytes() 适合生成高强度随机字节流或加密材料。
<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
评论