BUUCTF(23)

402 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

[GWCTF 2019]枯燥的抽奖

猜字符串游戏(大小写字母+数字),猜中全部20位得flag+送去非洲,你不小心偷看到了一部分是:


NssQvWQ6a1

不知所云,看看有啥提示

看源码发现有个check.php,直接访问一下

NssQvWQ6a1
<?php
#这不是抽奖程序的源代码!不许看!
header("Content-Type: text/html;charset=utf-8");
session_start();
if(!isset($_SESSION['seed'])){
$_SESSION['seed']=rand(0,999999999);
}


mt_srand($_SESSION['seed']);
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){
    $str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);       
}
$str_show = substr($str, 0, 10);
echo "<p id='p1'>".$str_show."</p>";




if(isset($_POST['num'])){
    if($_POST['num']===$str){x
        echo "<p id=flag>抽奖,就是那么枯燥且无味,给你flag{xxxxxxxxx}</p>";
    }
    else{
        echo "<p id=flag>没抽中哦,再试试吧</p>";
    }
}
show_source("check.php");

大体看了一下,我认为是一个随机的种子分配一个值,我们就是要找到种子数

其中有个函数没见过

mt_srand()

mt_srand() 函数播种 Mersenne Twister 随机数生成器。mt_rand()生成随机数

php_mt_seed-4.0

首先用到一个工具php_mt_seed-4.0

这里贴一个大佬博客讲的很详细

www.cnblogs.com/zaqzzz/p/99…

我们要先转换,把数据转能工具能解读的状态

这里直接贴一个脚本

str1='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
str2='NssQvWQ6a1'
str3 = str1[::-1]
length = len(str2)
res=''
for i in range(len(str2)):  
    for j in range(len(str1)):
        if str2[i] == str1[j]:
            res+=str(j)+' '+str(j)+' '+'0'+' '+str(len(str1)-1)+' '
            break
print(res)

接出来

49 49 0 61 18 18 0 61 18 18 0 61 52 52 0 61 21 21 0 61 58 58 0 61 52 52 0 61 32 32 0 61 0 0 0 61 27 27 0 61 

kali先进入文件夹,然后make

之后time ./php_mt_seed 第一个随机数 

Found 0, trying 0x36000000 - 0x37ffffff, speed 45.9 Mseeds/s 

seed = 0x37d845d8 = 936920536 (PHP 7.1.0+)

之后用脚本转字符

需要注意的一点是,php版本要对的上才能跑出来正确的字符,很关键的一步

<?php
mt_srand(936920536);
$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>";
?> 

[Running] php "c:\Users\XINO\Desktop\1 (2).php"

NssQvWQ6a1O0pXe8nMxb

[Done] exited with code=0 in 0.135 seconds

直接出交上就给flag

flag{c8be10cb-9d75-4cdb-85f8-d0a8e329863a} 

#之前没接触过这种题,www.cnblogs.com/zaqzzz/p/99…这个大佬讲的很好