CTFshow-WEB入门-爆破(web24)

释放双眼,带上耳机,听听看~!

打开题目,有效代码为:

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');
}

代码里面有两个函数:
mt_srand(seed)         //播种Mersenne Twister 随机数生成器。
mt_rand()                   //生成随机数
mt_srand()分发seed种子,然后种子有了后,靠mt_rand()生成随机数。mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机 数。 提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数 因此不需要播种,并且如果设置了 seed参数 生成的随机数就是伪随机数,意思就是每次生成的随机数 是一样的。我们可以先用PHP跑一下生成随机数,记得加PHP标记,先生成3个随机数:

error_reporting(0);
mt_srand(372619038);
echo mt_rand();
echo "-";
echo mt_rand();
echo "-";
echo mt_rand();

得到随机数:1155388967-125197722-1461103528,然后我们再生成2个随机数:

error_reporting(0);
mt_srand(372619038);
echo mt_rand();
echo "-";
echo mt_rand();

得到随机数:1155388967-125197722,发现只要种子没变,随机数就不变,即伪随机数漏洞,我们试一下r=1155388967,得到flag。

给TA打赏
共{{data.count}}人
人已打赏
CTF笔记PHP

CTFshow-WEB入门-爆破(web23)

2022-3-29 21:20:15

CTF笔记KaliPHP

CTFshow-WEB入门-爆破(web25)

2022-3-30 0:41:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索