[GWCTF 2019]枯燥的抽奖

知识点:伪随机数构造

文章目录

  • [GWCTF 2019]枯燥的抽奖
    • 解题过程
      • 1. 伪随机数(引用上面的链接内容)
      • 2. 将已知的部分伪随机数转化为php_mt_seed工具可以看懂的数据
      • 3. 下载php_mt_seed工具并且使用
      • 4. 得到完整字符串
    • 参考文章链接

解题过程

打开题目,是个这,让我们去搞一个20位的字符串,已经给了一部分字符串

同时发现了check.php,注意这个php函数中含有mt_rand函数,这牵扯到一个安全问题。贴一下大牛的链接:PHP mt_rand安全杂谈及应用场景详解

Hg11vtADEm
<?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){xecho "<p id=flag>抽奖,就是那么枯燥且无味,给你flag{xxxxxxxxx}</p>";}else{echo "<p id=flag>没抽中哦,再试试吧</p>";}
}
show_source("check.php");

1. 伪随机数(引用上面的链接内容)

伪随机数是用确定性的算法计算出来的随机数序列,它并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。在计算伪随机数时,若使用的初值(种子)不变,那么伪随机数的数序也不变。伪随机数可以用计算机大量生成,在模拟研究中为了提高模拟效率,一般采用伪随机数代替真正的随机数。模拟中使用的一般是循环周期极长并能通过随机数检验的伪随机数,以保证计算结果的随机性。伪随机数的生成方法有线性同余法、单向散列函数法、密码法等。

mt_rand就是一个伪随机数生成函数,它由可确定的函数,通过一个种子产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。

所以:大致过程就明了了,我们根据已经给出的部分随机数,利用工具找出seed(种子),然后得到完整的随机数。

2. 将已知的部分伪随机数转化为php_mt_seed工具可以看懂的数据

str1 ='Hg11vtADEm'
str2 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result =''length = str(len(str2)-1)
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' + ' ' + length + ' 'breakprint(result)

结果:

43 43 0 61 6 6 0 61 27 27 0 61 27 27 0 61 21 21 0 61 19 19 0 61 36 36 0 61 39 39 0 61 40 40 0 61 12 12 0 61

3. 下载php_mt_seed工具并且使用

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


下载后,放入linux环境,并且运行

得到种子348806110,同时要注意php版本是php7.1以上的。

4. 得到完整字符串

执行代码的环境要是php7.1以上的,我当时就踩了一下这个坑。

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

我的虚拟机的中php环境是php7.0.33,执行的结果是

肯定是错的,前10个字符和环境给的就不一样
然后在php7.4环境下运行,结果是对的。

将完整的字符串提交,就可得到flag.

参考文章链接

  1. PHP mt_rand安全杂谈及应用场景详解
  2. 「配枪朱丽叶。」
  3. 工具下载链接:php_mt_seed - PHP mt_rand() seed cracker
  4. 2018SWPUCTF-Web全详解

[GWCTF 2019]枯燥的抽奖相关推荐

  1. [GWCTF 2019]枯燥的抽奖 1——php_mt_seed

    又是一道php伪随机数 记录它不是因为难 而是看到wp里有个比较好的脚本 遂收藏一波 (上一次做伪随机数的脚本都找不到了QWQ 编程能力是硬伤QWQ tcl) <?php #这不是抽奖程序的源代 ...

  2. [wp][GWCTF 2019]枯燥的抽奖

    感觉网上的wp互相抄的写得不明不白,只简单说下我对这题的理解,如有错误地方望各位师傅指正 <?php #这不是抽奖程序的源代码!不许看! header("Content-Type: t ...

  3. [GWCTF 2019]枯燥的抽奖 1

    周末时间,抽个奖助助兴! 打开题目,发现是一个猜字符串的游戏,就问你枯不枯燥? 看到这想都不用想,CTRL+U查看后台代码,果然不出所料,发现了存在check.php 通过代码审计并结合题目来看,这是 ...

  4. 【代码审计】buu_[GWCTF 2019]枯燥的抽奖

    1.根据提示出前十位的号码,猜测应该需要爆破后面十位,抓包发现发送到check.php: 2.跟进查看代码: 原理:因为代码中是通过种子seed生成了随机数,但是mt_srand()这个函数存在漏洞, ...

  5. BUUCTF--[GWCTF 2019]枯燥的抽奖

    此题与BUUCTF--[MRCTF2020]Ezaudit类似 利用dirsearch扫描到check.php查看源码 <?php #这不是抽奖程序的源代码!不许看! header(" ...

  6. [GWCTF 2019]babyvm

    系统学习vm虚拟机逆向 64位vm的题目 找到主函数 分析sub_CD1函数: sub_B5F代表mov操作,其中 0xE1,0xE2...代表不同的寄存器. sub_A64是一个异或操作xor. s ...

  7. [GWCTF 2019]pyre.pyc [CISCN2018]2ex

    文章目录 [GWCTF 2019]pyre.pyc 反编译 脚本 [CISCN2018]2ex 查看txt 分析 [GWCTF 2019]pyre.pyc 反编译 uncompyle6 pyre.py ...

  8. BUUCTF RE WP31-32 [WUSTCTF2020]level1、[GWCTF 2019]xxor

    31.[WUSTCTF2020]level1 得到的 flag 请包上 flag{} 提交. 感谢 Iven Huang 师傅供题. 比赛平台:https://ctfgame.w-ais.cn/ 给了 ...

  9. [BUUCTF]REVERSE——[GWCTF 2019]pyre

    [GWCTF 2019]pyre 附件 步骤: 1.附件是pyc文件,用python打不开,百度后得知用python反编译工具打开,分享一个python反编译在线网站 反编译后是这段代码 #!/usr ...

最新文章

  1. C/C++包管理工具Conan简介
  2. == Equals ReferenceEquals 的区别
  3. 试试回答Frankyang的问题-什么样的人适合攻读博士学位?
  4. 【收藏】Windows编译安装Redis 6.0
  5. java jint,JNI:将unsigned int转换为jint
  6. java文件下载的utils_Java文件操作Utils
  7. STM32中断方式接收方式每次一个字节同时发生接收一段时间后不能再次接收问题
  8. goroutine 修改全局变量无效问题
  9. Bootstrap Table插件 页面跳转后再回来保存搜索的值
  10. phpstudy 提示安装VC9 VC14等,MySQL启动失败红色小点点,解决办法。PHP VC版本下载集合
  11. TypeError: Object of type xxx is not JSON serializable错误解决
  12. ckeditor4 使用总结
  13. win7升级到win10所遇到的坑
  14. 基于STM32和ESP8266的天气预报系统
  15. 中职计算机应用基础word表格,计算机应用基础-word表格编辑.ppt
  16. Java之驼峰命名法
  17. 百度智能云服务器BCC实例在线配置变更
  18. 完美解决MSSQL安装问题“Polybase要求安装Oracle JRE 7更新51(64位)”方案
  19. 通过小型机液晶面板查看FSP/ASMI IP地址
  20. 滴滴一下,美好不再,学会自我保护才是王道!

热门文章

  1. DISPO与EKGRP 的关系(MRP控制者和采购组)
  2. 微信小程序----封装request以及对接口进行模块化
  3. 天敏机顶盒T2四核增强强制安装驱动和刷机(转载且实践认证过)
  4. (考研)数据结构及算法
  5. (2011-12-11 旧博文搬运)away3d太阳系DEMO
  6. informatica 初级操作流程
  7. 2021年茶艺师(中级)最新解析及茶艺师(中级)考试总结
  8. java返回pdf文件流给前端_如何实现springmvc将返回的给前端的pdf文件放在浏览器里预览?...
  9. VSCode PlatformIO 开启RTTI
  10. vue实现单选做题根据对错标色,作对跳转下一题,实现思路详解