[GWCTF 2019]枯燥的抽奖

image-20240602143438527

我枯燥你()

image-20240602143503314

源代码让我们查看check.php

听话

image-20240602143535942

mt_srand

伪随机数是吧

mt_srand

mt_srand() 函数播种 Mersenne Twister 随机数生成器
提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数。当不使用随机数播种函数srand时,php也会自动为随机数播种,因此是否确定种子都不会影响正常运行。

也就是我们所说的种子

一个种子对应一串字符

知道种子就能知道字符,知道字符就能知道种子

所以我们开始求种子

下载php_mt_seed工具并且使用

下载链接:php_mt_seed - PHP mt_rand() seed cracker

在这里插入图片描述
下载后,放入linux环境,并且运行

在此之前,要先将字符转化为mt_seed可识别的样子

<?php
$allowable_characters = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$len = strlen($allowable_characters) - 1;
$pass = "Yb5Uor04iN";
for ($i = 0; $i < strlen($pass); $i++) {
$number = strpos($allowable_characters, $pass[$i]);
echo "$number $number 0 $len ";
}
echo "\n";
?>

image-20240602143844987

发现种子

之后执行代码

<?php
mt_srand(467497519);
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){
$str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);
}
echo "<p id='p1'>".$str."</p>";
?>

运行拿到字符串

直接

image-20240602144156759

拿下!!!