CTFSHOW-WEB入门-爆破
web22
①题目提示:域名也可以爆破的,试试爆破这个ctf.show的子域名
②emmm,根据提示直接得出flag了
web23
①题目提示:还爆破?这么多代码,告辞!
②题目给出的关键代码为
include('flag.php'); if(isset($_GET['token'])) { $token = md5($_GET['token']); if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)) { if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))) { echo $flag; } } }
<?php error_reporting(0); $string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; print (strlen($string)."\n"); for ($a = 0; $a < 62; $a++) { for ($b = 0; $b < 62; $b++) { for ($c = 0; $c < 62; $c++) { $flag = $string[$a] . $string[$b] . $string[$c]; $token = md5($flag); if (substr($token, 1, 1) === substr($token, 14, 1) && substr($token, 14, 1) === substr($token, 17, 1)) { if ((intval(substr($token, 1, 1)) + intval(substr($token, 14, 1)) + substr($token, 17, 1)) / substr($token, 1, 1) === intval(substr($token, 31, 1))) { echo $flag . "\n"; } } } } }
运行结果有很多
这是假设传入的值是三个字符的情况,如果假设两个字符也完全可以,比如:、
同样也可以
web24
①题目提示:参考PHP随机数的伪随机数 mt_srand(seed); 函数播种 Mersenne Twister 随机数生成器。
②下面是题目关键代码:
if(isset($_GET['r'])) { $r = $_GET['r']; mt_srand(372619038); if(intval($r)===intval(mt_rand())) { echo $flag; } }
首先介绍两个函数:
mt_srand()//播种Mersenne Twister随机生成器 mt_rand()//生成随机数
简单来说mt_srand()通过分发seed种子,然后种子有了,靠mt_rand()生成随机数
<?php mt_srand(372619038); echo mt_rand(); ?>
运行一下得到1155388967,然后传一下参数就得到了。
这题主要考察的是php伪随机数,但题目本身还是比较简单的。
web25
①题目提示:
②题目的关键代码如下:
if(isset($_GET['r'])) { $r = $_GET['r']; mt_srand(hexdec(substr(md5($flag), 0,8))); $rand = intval($r)-intval(mt_rand()); if((!$rand)) { if($_COOKIE['token']==(mt_rand()+mt_rand())) { echo $flag; } }else { echo $rand; } }
首先第一步类似于数学知识,你要得到第一个伪随机数,才能倒推到它的种子值,而要得到第一个伪随机数mt_rand(),只要令r=0,因为这句代码
$rand = intval($r)-intval(mt_rand());
令r=0的话,rand肯定不为0,这样的话下面的if语句就会执行else返回rand值也就是负的mt_rand的值,我得到的第一个伪随机数的值为1313200862
然后根据下面:
if($_COOKIE['token']==(mt_rand()+mt_rand()))
token的值为两个伪随机数相加,不过这边要注意的是这两个伪随机数并不是第一个和第二个,而是第二个和第三个,要得到这两个伪随机数之前,首先要得到种子值,到github上下一下php_mt_rand脚本,放到kali里 gcc php_mt_seed.c -o php_mt_seed 之后运行脚本添加随机数 ./php_mt_seed 1313200862需要跑一段时间
然后将跑出的值放入seed中,运行以下脚本得到第二个和第三个伪随机数的和
<?php mt_srand(651555126); echo mt_rand()."\n"; echo mt_rand()+mt_rand(); ?>
未完待续~~~
本文来自博客园,作者:Athena-ydy,转载请注明原文链接:https://www.cnblogs.com/Athena-ydy/p/15795008.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效