php伪随机数 ctf,[GWCTF 2019]枯燥的抽奖
题目一览
直接看源码,发现输入的值会被POST的check.php:
访问一下Check.php,给了源码:
分析吧。
分析: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 "
".$str_show."
";
if(isset($_POST[‘num‘])){
if($_POST[‘num‘]===$str){x
echo "
抽奖,就是那么枯燥且无味,给你flag{xxxxxxxxx}
";
}
else{
echo "
没抽中哦,再试试吧
";
}
}
show_source("check.php");
思路是:
如果没有session首先rand()初始化session,然后作为种子传给mt_srand.
之后构造20位密码,只截取前10位给你。
如果最后能POST正确的20位,获得flag。
那么关键就是,要根据给你的10位密码,反推出mt_srand的种子是什么,从而依葫芦画瓢构造私钥。
之前做过的[MRCTF]Ezaudit里学习了这个问题,这回实践一波。
Step 1 因为要交给php_mt_seed去跑,我们先把给的密码转成它能读懂的形式:
$pass = "2dHUhTubvf"; //密钥
$alphabet = ‘abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ‘;//字母表
$len = strlen($alphabet) - 1; //区间长度
for($j = 0; $j < strlen($pass); $j++) //遍历密钥,确定当前字符在密钥的顺序
{
for ($i = 0; $i <= $len; $i++) { //遍历字母表,确定当前字符在字母表的顺序
if($pass[$j] == $alphabet[$i])//是找到了对应的随机数
{
echo "$i $i 0 $len "; //输出符合要求的参数格式
break;
}
}
}
?>
获得结果:
28 28 0 61 3 3 0 61 43 43 0 61 56 56 0 61 7 7 0 61 55 55 0 61 20 20 0 61 1 1 0 61 21 21 0 61 5 5 0 61
Step 2 利用php_mt_seed去爆破种子:
成功获得种子。注意有版本要求 PHP 7.1.0+
Step3 还原:
mt_srand(119825810);
$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";
?>
用phpstudy环境,在PHP 7.1.13下跑出来的结果:
前10位完美匹配,爆破成功:
Step 4
提交
flag到手:
这道题当初比赛的时候没做出来(整个就做出来一道Web……)。
最近刷了不少题,做到这个了,尝试一波,没想到拿下了。
而且还考的是之前刷题时研究过的知识点。挺高兴的,记录一下!希望之后更进一步!
php伪随机数 ctf,[GWCTF 2019]枯燥的抽奖相关推荐
- [GWCTF 2019]枯燥的抽奖
[GWCTF 2019]枯燥的抽奖 知识点:伪随机数构造 文章目录 [GWCTF 2019]枯燥的抽奖 解题过程 1. 伪随机数(引用上面的链接内容) 2. 将已知的部分伪随机数转化为php_mt_s ...
- [GWCTF 2019]枯燥的抽奖 1——php_mt_seed
又是一道php伪随机数 记录它不是因为难 而是看到wp里有个比较好的脚本 遂收藏一波 (上一次做伪随机数的脚本都找不到了QWQ 编程能力是硬伤QWQ tcl) <?php #这不是抽奖程序的源代 ...
- [GWCTF 2019]枯燥的抽奖 1
周末时间,抽个奖助助兴! 打开题目,发现是一个猜字符串的游戏,就问你枯不枯燥? 看到这想都不用想,CTRL+U查看后台代码,果然不出所料,发现了存在check.php 通过代码审计并结合题目来看,这是 ...
- [wp][GWCTF 2019]枯燥的抽奖
感觉网上的wp互相抄的写得不明不白,只简单说下我对这题的理解,如有错误地方望各位师傅指正 <?php #这不是抽奖程序的源代码!不许看! header("Content-Type: t ...
- 【代码审计】buu_[GWCTF 2019]枯燥的抽奖
1.根据提示出前十位的号码,猜测应该需要爆破后面十位,抓包发现发送到check.php: 2.跟进查看代码: 原理:因为代码中是通过种子seed生成了随机数,但是mt_srand()这个函数存在漏洞, ...
- BUUCTF--[GWCTF 2019]枯燥的抽奖
此题与BUUCTF--[MRCTF2020]Ezaudit类似 利用dirsearch扫描到check.php查看源码 <?php #这不是抽奖程序的源代码!不许看! header(" ...
- [GWCTF 2019]babyvm
系统学习vm虚拟机逆向 64位vm的题目 找到主函数 分析sub_CD1函数: sub_B5F代表mov操作,其中 0xE1,0xE2...代表不同的寄存器. sub_A64是一个异或操作xor. s ...
- [GWCTF 2019]pyre.pyc [CISCN2018]2ex
文章目录 [GWCTF 2019]pyre.pyc 反编译 脚本 [CISCN2018]2ex 查看txt 分析 [GWCTF 2019]pyre.pyc 反编译 uncompyle6 pyre.py ...
- BUUCTF RE WP31-32 [WUSTCTF2020]level1、[GWCTF 2019]xxor
31.[WUSTCTF2020]level1 得到的 flag 请包上 flag{} 提交. 感谢 Iven Huang 师傅供题. 比赛平台:https://ctfgame.w-ais.cn/ 给了 ...
- [BUUCTF]REVERSE——[GWCTF 2019]pyre
[GWCTF 2019]pyre 附件 步骤: 1.附件是pyc文件,用python打不开,百度后得知用python反编译工具打开,分享一个python反编译在线网站 反编译后是这段代码 #!/usr ...
最新文章
- 提取点的dn值_干货在线 | DEM数据如何生成高程点
- DC/DC变换器的典型拓扑
- Kafka分区分配策略(4)——分配的实施
- pom添加依赖后不报错但是代码依然缺少依赖
- 虚拟桌面的备份恢复最佳实践 第二部分
- Python 中xrange和range区别
- Git submodule 知识总结
- 380免费云存储_从四个方面分析:云存储服务的特点、影响
- Java接口xss,Java审计之XSS篇
- kotlin中的异常处理_Kotlin异常处理
- ubuntu报错:RuntimeError : unexcepted EOF, excepted 2599001 more bytes. The file might be corrupted.
- 如何在Mac上恢复未保存的word文档
- 记dubbo consumer服务因订阅其他有异常的服务导致超时的问题
- 广东未来科技:书写立体显示事业传奇的行业独角兽
- 乔布斯当场“复活”,苹果发AirPods 3和地表最强电脑芯片,秀刘海屏Macbook Pro
- java 记录微信转发次数_微信分享追踪分析系统 ,可以精细统计朋友圈访客来访次数及时间和转发...
- 解决win10自带播放器 HEVC视频扩展 需付费方法
- iApp4Me一周年记
- 《代号:魂之刃2》- 身处黑暗的勇者游戏
- 搭建SpringBoot+Vue 项目 完整流程