CTF伪随机数爆破

文章探讨了PHP中的伪随机数生成机制,特别是rand()和mt_rand()函数,以及它们如何受种子值影响。作者指出,虽然这些函数看似随机,但可通过预设种子值导致可预测性,展示了随机数生成的漏洞实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要了解伪随机数的爆破首先你的先知道什么是PHP种子,

借用在rand()函数中,我们可以通过设置随机数种子来影响随机数的生成。例如,在rand()函数中加入了随机数种子编码后,每次运行程序将会生成同样的随机整数序列。这个就是伪随机数,因为种子是已知的。

这里使用

X1NOoo大神的举例:

mt_scrand()
mt_rand()  
mt_scrand(seed)这个函数的意思就是分发seed种子,种子有了后,靠mt_rand()生成随机数。

例如我们写一个脚本

<?php  
mt_srand(55555);    
echo mt_rand()."<br/>";
?> 
//输出277249736
如果我们多输入几次呢

<?php  
mt_srand(12345);    
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
?>

//输出277249736
230135029
1872932720
1536240435
大家可以发现,这就是伪随机数的漏洞,存在可预测性。

例如,下面的程序演示如何使用rand()函数和随机数种子:

1

2

3

4

5

6

7

8

<?PHP

$seed = 10;

srand($seed);

for ($i=0; $i<10; $i++) {

    echo rand(), "<br/>";

}

?>

上述代码中,我们指定了随机数种子为10。通过srand()函数设置随机数种子后,程序将会生成一个包含10个整数的随机数序列。每次运行程序都会生成同样的10个整数。这就是随机数种子的作用。

例题:

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

这道题目也是一样,由于种子是可以猜出的,所以

这道题实际上是一个伪随机数,因为在随机数生成中,种子值是一个起始点,它用于初始化随机数生成器。随机数生成器根据种子值生成一系列伪随机数。如果使用相同的种子值,随机数生成器将生成相同的随机数序列。

直接上脚本

r=1155388967

得到flag

### CTF伪协议与iconv使用及其安全上下文 在CTF竞赛中,`iconv`函数常用于字符编码转换场景。此函数能够处理多种字符集之间的转换,在涉及国际化应用或需解析不同编码文件的任务里尤为有用[^1]。 然而,当不恰当地运用`iconv`时可能会引入安全隐患。例如,如果未能正确验证传入的数据,则可能导致缓冲区溢出或其他类型的注入攻击。因此,在编写依赖于`iconv`的应用程序代码时应格外小心,确保所有外部输入都经过严格净化和校验[^2]。 下面是一个简单的PHP示例,展示了如何安全地使用`iconv`进行字符串编码转换: ```php <?php // 安全地设置目标编码和源编码 $target_encoding = 'UTF-8'; $source_encoding = 'ISO-8859-1'; // 对用户提交的内容做适当清理 $safe_input = filter_var($_GET['text'], FILTER_SANITIZE_STRING); // 使用iconv进行编码转换并检查是否有错误发生 $converted_string = @iconv($source_encoding, $target_encoding . '//IGNORE', $safe_input); if ($converted_string === false) { echo "Error during conversion."; } else { echo htmlspecialchars($converted_string); // 输出已转码后的文本 } ?> ``` 值得注意的是,在实际比赛中遇到基于`iconv`设计的挑战题目时,除了考虑上述提到的安全措施外,还应该关注特定平台上的实现细节差异可能带来的影响。比如某些版本可能存在未公开的行为特性或是已被修复的历史漏洞等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值