[CTFSHOW WEB入门]爆破 WEB21-WEB28 面向萌新 持续更新
爆破
WEB21
提示:爆破什么的,都是基操
yakit爆破base64编码:https://blog.csdn.net/qq_43583125/article/details/133962798

tomcat 认证爆破之custom iterator使用 (https://www.cnblogs.com/007NBqaq/p/13220297.html)
WEB22
提示:域名也可以爆破的,试试爆破这个ctf.show的子域名
OneForAll - 功能强大的子域收集工具:https://www.cnblogs.com/xingxia/p/one_for_all.html

WEB23
提示:还爆破?这么多代码,告辞!
安装vscode+php环境:https://www.cnblogs.com/wuhongbin/p/14318557.html
安装vscode+python环境:https://blog.csdn.net/qq_29108959/article/details/131681588
分析源码:
<?php
// 引入包含flag的文件,通常该文件中定义了$flag变量
include('flag.php');
// 检查是否通过GET请求传递了token参数
if(isset($_GET['token'])){
// 对获取到的token参数值进行MD5哈希处理
$token = md5($_GET['token']);
// 第一个条件判断:
// 检查MD5值的第2个字符(索引1)、第15个字符(索引14)、第18个字符(索引17)是否完全相同
// substr函数参数:字符串, 起始位置(从0开始), 截取长度
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
// 第二个条件判断(数学运算):
// 1. 取出三个相同位置的字符并转换为整数
// 2. 计算三者之和除以第一个字符的结果
// 3. 检查结果是否等于MD5值最后一个字符(索引31)转换的整数
// 注意:这里substr($token, 17,1)缺少intval转换,但PHP会自动类型转换
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
// 所有条件满足,输出flag
echo $flag;
}
}
}else{
// 如果没有传递token参数,就高亮显示当前文件的源代码
highlight_file(__FILE__);
}
?>
(豆包)写爆破脚本:
<?php
// 爆破脚本:寻找符合条件的token
$found = false;
$attempts = 0;
$startTime = microtime(true);
// 尝试不同的token值
for ($i = 0; $i < 10000000; $i++) {
$attempts++;
$token = (string)$i;
$hash = md5($token);
// 检查第一个条件:位置1、14、17的字符相同
if (isset($hash[1], $hash[14], $hash[17], $hash[31]) &&
$hash[1] === $hash[14] && $hash[14] === $hash[17]) {
// 确保这些字符是数字
if (ctype_digit($hash[1]) && ctype_digit($hash[31])) {
$a = intval($hash[1]);
$b = intval($hash[14]);
$c = intval($hash[17]);
$d = intval($hash[31]);
// 避免除零错误
if ($a != 0) {
// 检查第二个条件
if (($a + $b + $c) / $a === $d) {
echo "找到符合条件的token: $token\n";
echo "MD5哈希值: $hash\n";
echo "位置1字符: $hash[1]\n";
echo "位置14字符: $hash[14]\n";
echo "位置17字符: $hash[17]\n";
echo "位置31字符: $hash[31]\n";
echo "尝试次数: $attempts\n";
echo "耗时: " . (microtime(true) - $startTime) . "秒\n";
$found = true;
break;
}
}
}
}
// 每100万次尝试显示进度
if ($attempts % 1000000 == 0) {
echo "已尝试 $attempts 次...\n";
}
}
if (!$found) {
echo "尝试了 $attempts 次,未找到符合条件的token\n";
}
?>
爆破获得符合条件的token

GET传参:url/?token=422获得flag

WEB24
提示:爆个🔨
源码分析:
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:26:39
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
// 关闭错误报告,不在页面上显示任何错误信息
error_reporting(0);
// 包含flag.php文件,通常该文件中定义了需要获取的$flag变量
include("flag.php");
// 检查是否通过GET请求传递了名为'r'的参数
if(isset($_GET['r'])){
// 将GET参数'r'的值赋给变量$r
$r = $_GET['r'];
// 使用固定的种子372619038初始化Mersenne Twister随机数生成器
// 种子固定意味着后续生成的随机数序列是可预测的
mt_srand(372619038);
// 比较$r转换为整数后的值与mt_rand()生成的随机数转换为整数后的值是否相等
// 由于mt_srand使用了固定种子,mt_rand()会生成固定的第一个随机数
if(intval($r)===intval(mt_rand())){
// 如果相等则输出flag
echo $flag;
}
}else{
// 如果没有传递'r'参数,就高亮显示当前文件的源代码
highlight_file(__FILE__);
// 执行系统命令查看操作系统版本信息并输出结果
echo system('cat /proc/version');
}
?>
这段代码的核心逻辑是:当传入 GET 参数r时,会将其与基于固定种子372619038生成的第一个随机数进行整数比较,若相等则输出 flag。由于随机数生成器使用了固定种子,因此可以预先计算出这个随机数的具体值,从而构造对应的r参数获取 flag。
编写伪随机数破解脚本:
<?php
// 使用与目标代码相同的种子初始化随机数生成器
mt_srand(372619038);
// 生成第一个随机数,这将与目标代码中生成的随机数完全相同
$correct_r = mt_rand();
echo "符合条件的r值是: " . $correct_r . "\n";
echo "可以使用这个URL访问: ?r=" . $correct_r . "\n";
?>

GET传参:url/?r=1155388967获得flag

WEB25
题目:爆个🔨,不爆了
wp:https://jishuzhan.net/article/1797821287490392065
git clone https://gitee.com/jrand/php_mt_seed.git

代码:
<?php
mt_srand(1893630080);
$rand = mt_rand();
$rand1 = mt_rand();
$rand2 = mt_rand();
echo $rand,"\n",$rand1,"\n",$rand2,"\n",$rand1+$rand2,"\n\n";
mt_srand(4252296834);
$rand = mt_rand();
$rand1 = mt_rand();
$rand2 = mt_rand();
echo $rand,"\n",$rand1,"\n",$rand2,"\n",$rand1+$rand2;
?>

*拓展知识:php_mt_seed - PHP mt_rand() seed cracker(https://www.openwall.com/php_mt_seed/)
WEB26
提示:这个可以爆

太难爆了,看答案爆了,另:bp爆破表现比YAKIT好很多(貌似)
WEB27
提示:CTFshow菜鸡学院招生啦!
抓包爆破,由于爆的是身份证,注意格式对1990-2025的数字进行爆破

回显学号和初始密码的线索

输入即可得flag

WEB28
提示:大海捞针
打开靶机,发现跳转到url/0/1/2.txt
发现上两级目录都是纯数字,猜测爆破一下目录试试
打开bp抓到请求包,发送到Intruder攻击模块将目录中的0和1设置为变量,Attack type设置为Cluster bomb模式,Payloads中两个Payload type都改为Numbers,给Numbers设置初始值0和终止值为100,开始爆破,爆破结束后,将Status code字段升序排序,找到一个状态码为200的响应包,查看响应包,可获取flag


浙公网安备 33010602011771号