首页 > 其他分享 >WEB|[GWCTF 2019]枯燥的抽奖

WEB|[GWCTF 2019]枯燥的抽奖

时间:2023-05-06 15:47:35浏览次数:49  
标签:WEB 随机数 61 mt GWCTF seed 2019 str rand


页面提示需要输入以lw1ar7AWmn开头的20位字符串才能获得flag,查看页面源码发现check.php

访问check.php,发现源码

伪随机数

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

可以发现这里是使用mt_rand()来随机生成字符串,但是mt_rand()存在一个问题,同一个种子下随机生成的随机数值是相同的,只要获得了seed值就可以生成相同的字符串

CTF| web篇之伪随机数
mt_rand()存在的问题:
由于mt_rand()的生成的随机数只跟seed和调用该函数的次数有关。假设使用mt_srand(1111111)进行了一次播种操作,接下来调用mt_rand()函数,第一次生成的数值为a,第二次生成的为b,第三次生成的为c。任何一个人拿到这样的一串代码,所执行的结果都是跟刚刚描述的一样。所以当你的seed数值被他人知道后,就可以预测出你接下来的数值是多少,这就是该函数的一个问题,他并不能起到一个真随机数的作用。

获取seed

php_mt_seed可以根据一串int 或者一串由许多4个一组的数字组成的数据爆破出seed

根据已有字符串转换数据

php_mt_seed需要的是一串由许多4个一组的数字组成的数据,所以需要根据已有字符串进行转换

str1 = "lw1ar7AWmn"
str2 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
length = 61
result = ''

for i in range(0, len(str1)):
    for j in range(0, len(str2)):
        if str1[i] == str2[j]:
            result += str(j) + ' ' + str(j) + ' ' + '0' + ' ' + str(length) + ' '
            break

print(result)

11 11 0 61 22 22 0 61 27 27 0 61 0 0 0 61 17 17 0 61 33 33 0 61 36 36 0 61 58 58 0 61 12 12 0 61 13 13 0 61

4个一组的数字格式
前面两个数是随机数的结果区间,后两位是随机数的随机范围区间,中间以一个空格为间隔
前面两个数是随机数的结果区间:str1在str2的位置,两位都一位
后两位是随机数的随机范围区间:str2的范围,每组都是一样,str2有62位,因为从0开始计数所以为61

爆破seed

./php_mt_seed 11 11 0 61 22 22 0 61 27 27 0 61 0 0 0 61 17 17 0 61 33 33 0 61 36 36 0 61 58 58 0 61 12 12 0 61 13 13 0 61

使用php_mt_seed爆破出seed为156489612

计算完整字符串

<?php
mt_srand(156489612);
$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 $str;
?>

计算出20位完整字符串为lw1ar7AWmnI0Pp0fPEOC

获取flag

flag{8f018bcf-6b8d-4228-b246-8cd0eaeb83d0}

标签:WEB,随机数,61,mt,GWCTF,seed,2019,str,rand
From: https://www.cnblogs.com/scarecr0w7/p/17377296.html

相关文章

  • APP和WEB的测试区别
    在功能测试时,要考虑手机应用的特性:1)手机屏幕尺寸偏小,所以手机应用一般就占满了全屏,因此要考虑手机在前后端切换时被测试应用在资源使用时的优先级变化情况;还要考虑手机横竖屏切换时的测试2)手机是智能移动终端,因此要考虑网络运营商、网络信号强弱、网络信号有无、被测试应用在低电......
  • WEB|[FBCTF2019]RCEService
    页面提示输入json格式的命令{"cmd":"ls"}输入ls命令查看当前目录文件,当前目录仅有index.php文件读取index.php文件,发现被检测到{"cmd":"cat./index.php"}经过测试发现很多命令和符号都被过滤,自己是没有做出来,在看别人的wp时发现他们不知道从哪里找到的源码源码<?ph......
  • WEB|[极客大挑战 2019]RCE ME
    <?phperror_reporting(0);if(isset($_GET['code'])){$code=$_GET['code'];if(strlen($code)>40){die("ThisistooLong.");......
  • WEB|[极客大挑战 2019]FinalSQL
    提示点击获取flag,依次点击可以发现注入点应该是在id,id=5提示试试id=6id=6也没有什么特殊内容,对id进行了简单测试,发现存在过滤,fuzz一下,发现对if、and、空格和()等部分符号进行了过滤过滤字符可使用其他字符绕过,页面存在盲注入,存在非法字符提示“你可别被我逮住了,臭弟弟”,输入......
  • WEB|[红明谷CTF 2021]write_shell
    源码:<?phperror_reporting(0);highlight_file(__FILE__);functioncheck($input){#过滤字符if(preg_match("/'||_|php|;|~|\\^|\\+|eval|{|}/i",$input)){//if(preg_match("/'||_|=|php/",$input)){die(......
  • WEB|[NPUCTF2020]ReadlezPHP
    打开网页发现什么都没有,burpsuite抓包查看源码发现链接./time.php?source,访问链接发现源码<?php#error_reporting(0);classHelloPhp{public$a;public$b;publicfunction__construct(){$this->a="Y-m-dh:i:s";$this->b="date&qu......
  • WEB|[NCTF2019]True XML cookbook
    题目提示XML,直接抓包注入XML<?xmlversion="1.0"?><!DOCTYPElkj[<!ENTITYadminSYSTEM"file:///flag">]><user> <username>&admin;</username> <password>1</password></user>读取失败修改......
  • WEB|[MRCTF2020]套娃
    查看网页源码发现代码$query=$_SERVER['QUERY_STRING'];if(substr_count($query,'_')!==0||substr_count($query,'%5f')!=0){die('Y0uareSocutE!');}if($_GET['b_u_p_t']!=='23333'&&am......
  • Net Core Web Api 配置Swagger
    一、创建NETCoreAPI项目NETCore版本:NETCore2.21.创建coreweb应用程序2.选择API3.下图为生成后的项目二、安装Swagger1.打开NuGet包管理器2.搜索Swashbuckle.AspNetCore安装在项目上3.点击我接受三、配置Swagger对于ConfigureServices和Configure的配置点击可参考1.ConfigureS......
  • WEB|[SUCTF 2019]Pythonginx
    源码@app.route('/getUrl',methods=['GET','POST'])defgetUrl():url=request.args.get("url")host=parse.urlparse(url).hostnameifhost=='suctf.cc':#解析主机名,不能是suctf.ccreturn......