跳到主要内容CTFShow Web 入门:题目 21-28 爆破解析 | 极客日志PHP大前端算法
CTFShow Web 入门:题目 21-28 爆破解析
综述由AI生成CTFShow Web 入门系列第 21 至 28 题的解题思路与爆破方法。涵盖 Basic Auth 自定义迭代器爆破、MD5 哈希逻辑漏洞、PHP mt_rand 伪随机数种子预测与逆向、AJAX 接口参数分析、身份证号暴力破解及目录扫描等技术点。通过 Burp Suite、Python 脚本及工具辅助,详细演示了从源码审计到实际利用的全过程,帮助读者掌握常见 Web 安全漏洞的挖掘技巧。
清酒独酌31 浏览 1. web21
抓包发现用户名和密码被放到了 Authorization: Basic YWRtaW46YWRtaW4=请求头里面,经过 Base64 加密。

使用 Burp Suite 的 Intruder Custom Iterator 模块进行爆破。BurpSuite 的 Custom Iterator(自定义迭代器)模式可以灵活生成认证凭证组合,尤其适用于 Basic Auth 这种 用户名:密码 格式并经过 Base64 编码的场景。
1.1. 选中 payload

1.2. 设置 payloads
设置 Payload Type 为 Custom Iterator;在设置 Position 1、2、3。



1.3. 设置 Payload Processing


1.4. 取消 Payload Encoding

1.5. 开始爆破
2. web22
题目提示:域名更新后,flag.ctf.show 域名失效。
3. web23
<?php
error_reporting(0);
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;
}
}
}else{
highlight_file(__FILE__);
}
?>
3.1. 方法一:根据源码写脚本
import hashlib
import itertools
chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
for length in range(1, 4):
for combo in itertools.product(chars, repeat=length):
token = "".join(combo)
md5_str = hashlib.md5(token.encode('utf-8')).hexdigest()
c1, c14, c17 = md5_str[1], md5_str[14], md5_str[17]
if c1 != c14 or c14 != c17:
continue
try:
x1 = int(c1)
x2 = int(c14)
x3 = int(c17)
y = int(md5_str[31])
if x1 == 0:
continue
if ((x1 + x2 + x3)/x1) == y:
print(f"Found matching token: {token}, MD5: {md5_str}")
except:
continue
3.2. 方法二:使用 BP
Payload Type 设置成 Brute Forcer 模式。
4. web24
<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
?>
4.1. mt_srand() 是什么?
mt_srand(种子值)是 PHP 的伪随机数种子初始化函数:
mt_rand()是 PHP 生成'伪随机数'的函数,但它的随机序列由'种子'决定;
- 只要给
mt_srand() 传入固定的种子值,后续 mt_rand() 生成的随机数序列就是完全固定、可预测的。
4.2. 解题突破口
因为 mt_srand(372619038) 用了固定种子,所以 mt_rand() 生成的第一个随机数是固定的。
计算种子 372619038 对应的第一个 mt_rand() 结果,作为 r 的参数传入即可拿到 flag。
<?php
mt_srand(372619038);
echo "第一次调用 mt_rand():" . mt_rand() . "\n";
echo "第二次调用 mt_rand():" . mt_rand() . "\n";
echo "第三次调用 mt_rand():" . mt_rand() . "\n";
?>
5. web25
<?php
error_reporting(0);
include("flag.php");
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;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
?>
先审一遍代码:$rand = intval($r)-intval(mt_rand())。
传个 r=0,倒推出来第一次生成的 mt_rand() 伪随机数:1988627019。
使用 php_mt_seed 工具倒推随机数的种子值。
5.1.1. 下载导入 Linux 系统
5.1.2. tar -zxvf filename 解压
5.1.3. cd 进该目录
5.1.4. chmod +x php_mt_seed.c 赋可执行权限
5.1.5. 输入:make
查看版本可知,这里我们选 php 7.1.0+ 的。
seed = 0x0ac64537 = 180766007 (PHP 7.1.0+)
seed = 0x2a0d8bda = 705530842 (PHP 7.1.0+)
seed = 0x2bc4c8c5 = 734316741 (PHP 7.1.0+)
seed = 0x967716e2 = 2524387042 (PHP 7.1.0+)
seed = 0xe37f57b9 = 3816773561 (PHP 5.2.1 to 7.0.x; HHVM)
seed = 0xe37f57b9 = 3816773561 (PHP 7.1.0+)
<?php
$seed = [180766007,705530842,734316741,2524387042,3816773561,3816773561];
for ($i = 0; $i < 5; $i++) {
mt_srand($seed[$i]);
mt_rand();
$token[$i] = intval(mt_rand())+intval(mt_rand());
echo "Token:".$token[$i]."\n";
}
?>
6. web26
function check(){
$.ajax({
url:'checkdb.php',
type: 'POST',
dataType:'json',
data:{
'a':$('#a').val(),
'p':$('#p').val(),
'd':$('#d').val(),
'u':$('#u').val(),
'pass':$('#pass').val()
},
success:function(data){
alert(data['msg']);
},
error:function(data){
alert(data['msg']);
}
});
}
直接抓包:后端返回的内容是 JSON 格式!!!不需要前端传 JSON 格式。
7. web27
function check(){
$.ajax({
url:'checkdb.php',
type: 'POST',
dataType:'json',
data:{
'a':$('#a').val(),
'p':$('#p').val()
},
success:function(data){
alert(data['msg']);
},
error:function(data){
alert(data['msg']);
}
});
}
高先伊 621022199002015237 02015237
8. web28
如果爆破跑一半中断,可以尝试把 redirections 选成 always。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online