[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

图片

posted @ 2025-08-05 17:39  呆羊Zz  阅读(42)  评论(0)    收藏  举报