02 · CTF 路线:题型地图与练习阶梯
覆盖 W3–W6(主攻)+ W13(比赛)。本文件的立场很明确:单人 + 每周 5–10 小时,可玩的是 Jeopardy 赛制里的 misc / 隐写 / 取证 / 古典密码 / 入门 OSINT / 入门 Web / 入门逆向,不是 pwn 与高级 Web。
1. 本模块目标
- 拿到一个文件,30 秒内能跑出「第一步该做什么」的标准流程
- 能独立解 ★2–★3 的 misc / 隐写 / 取证题
- 能读懂入门级古典密码与简单 RSA 题的题意
- 能在 beginner 赛里稳定拿到 2–5 题
- 知道哪些题应该当场放弃(省下的时间比做出来的题更值钱)
2. 先认清「哪种 CTF 适合单人」
| 赛制 | 单人可玩性 | 说明 |
|---|---|---|
| Jeopardy(题库式,给分) | ✅ 完全可玩 | 本路径唯一目标赛制 |
| Attack-Defense(攻防) | ❌ | 需要团队分工与持续在线 |
| King of the Hill | ❌ | 同上 |
| 混合赛(Jeopardy + 靶场) | ⚠️ 只做 Jeopardy 部分 | 别被靶场部分拖住 |
题型可玩性分级
| 题型 | 单人可玩 | 本路径投入 | 理由 |
|---|---|---|---|
| Misc | ✅ | 高 | 杂项靠思路与工具,不靠环境 |
| Stego(隐写) | ✅ | 高 | 单人最舒服的题型之一 |
| Forensics(取证) | ✅ | 中高 | 工具链重,但可独立完成 |
| Crypto(古典 + 入门现代) | ✅ | 中 | 深水区避开 |
| OSINT | ✅ | 中 | 只考检索与常识,单人友好 |
| Web(入门) | ⚠️ | 中低 | 需要靶场,但免费在线 lab 可用 |
| Reverse(入门) | ⚠️ | 低 | 入门可玩,进阶太吃时间 |
| Pwn | ❌ | 0 | 见 总览的「不覆盖清单」 |
| 高级 Web / 云 / 无线 / 硬件 | ❌ | 0 | 同上 |
判据:单人时间预算 ≈ 团队 1/4,所以只做「不依赖队友即时协作」的题。
3. 题型地图(每条都给出「标准动作」)
3.1 Misc(杂项)
考什么:编码套娃、二维码、压缩包、图片拼接、小计算、小游戏。 标准动作:
① file 看类型 → ② strings 搜 flag → ③ binwalk 看有没有藏文件
→ ④ CyberChef Magic 猜编码 → ⑤ 看题目描述里的双关
高频套路
- 多层编码(base64 → hex → 摩斯 混着来):写个循环脚本自动试,别手点。
- 二维码:破损 → 用修复工具补定位点;旋转/反色 → 用工具试;拼接 → 拼图。
- 压缩包:伪加密(改标志位)、已知明文、CRC 碰撞、字典爆破(先看题目描述有没有给线索)。
- 计算类:直接 Python 算,别心算。
3.2 Stego(隐写)
考什么:把数据藏在图片/音频/文档/视频里。
固定检查顺序(背下来,能省一半时间)
1. file → 真实文件类型
2. exiftool → 元数据(作者、注释、GPS、软件名)
3. strings -n 6 → 可打印字符串
4. binwalk → 内部是否还有文件(附加数据)
5. 图片:zsteg / stegsolve / 像素 LSB / 通道对比 / 尺寸异常
6. 音频:看波形与频谱(Audacity / sonic-visualiser)/ 摩斯 / DTMF
7. 文档:docx/zip 解压看内部;PDF 看对象流
8. 视频:ffmpeg 抽帧 / 抽音轨
9. 仍无 → 回看题目描述 + 检查是否有多层(先解出第一层才有下一层)
高频套路
- LSB(最低有效位):
pngcheck看通道,zsteg一把梭。 - 文件尾追加数据:
binwalk -e或tail -c 200 file | xxd。 - 两张图异或:CyberChef 的
XOR操作,或 Python 逐像素异或。 - 音频频谱:把频谱图放大,flag 常以文字形式画在频谱里。
- 压缩包藏在图片里:
binwalk -e拆出来。
3.3 Forensics(取证)
考什么:流量包、磁盘镜像、日志、内存。
标准动作
- pcap:Wireshark 打开 → 过滤
http、tcp.stream eq N→File > Export Objects导出文件 → 跟 HTTP 流。 - tshark 一行版:
tshark -r a.pcap -Y "http.request" -T fields -e http.host -e http.request.uri - 删除恢复:
foremost -i disk.img -o out/ - 日志:
grep+sort | uniq -c找异常 IP/时间。
3.4 Crypto(只学够用部分)
| 层级 | 内容 | 本路径 |
|---|---|---|
| 编码 | base 家族、摩斯 | W2 已学 |
| 古典 | Caesar/Vigenère/替换/换位 | W5 学 |
| 现代入门 | RSA 小 e、RSA 共模、AES-ECB 模式识别、哈希概念 | 认得出、会查、不强求解 |
| 深水区 | 格攻击、ECC、ZKP | 不覆盖 |
判据:看到
n, e, c三个数 → 知道是 RSA;看到密文长度是 16 倍数且分组重复 → 可能是 ECB。会识别 + 会查 writeup 就够 W3–W6。
3.5 OSINT(检索能力)
- 搜索操作符:
site:filetype:intitle:inurl:"精确短语"-排除 - 图片反查:Google Lens / Yandex / TinEye(Yandex 对地理定位常更强)
- 元数据反查:exiftool 拿到 GPS/软件/作者
- 地理定位:街景、招牌文字、植被、车牌格式、日照角度
- 历史页面:Wayback Machine 看旧版本
- whois / DNS:域名注册信息、子域名
3.6 Web(入门止步)
只学「看得懂、手工能验」的部分:
- HTTP 方法与请求头(
curl -v看全流程) - Cookie / Session / JWT 结构(base64 解开头三段)
robots.txt/sitemap.xml/ 常见备份文件- 编码绕过(URL 编码、双写、大小写、
%00) - SQL 注入的最基础形态(
' or 1=1 --),只在靶场上试 - 工具:浏览器 DevTools、
curl、Burp Suite 社区版
不学:SSRF 链、反序列化、云配置、内网穿透——这些需要长时间靶场训练。
3.7 Reverse(入门止步)
strings找线索 →objdump看反汇编 → 关键跳转- 简单算法还原:把汇编里的小循环翻译成 Python
- 工具:
strings、objdump -d、gdb(入门)、Ghidra(重但好用) - 不学:VMP、加壳脱壳、恶意代码分析
4. 工具链(按周分批,见 总览里的分批安装表)
| 周 | 工具 | 用途 |
|---|---|---|
| W3 | file xxd strings binwalk exiftool pngcheck |
文件与隐写 I |
| W3 | CyberChef(网页版) | 编码/变换全家桶 |
| W4 | zsteg、stegsolve、Audacity、sonic-visualiser、ffmpeg | 隐写 II |
| W5 | Wireshark/tshark、foremost、7z、steghide | 取证 |
| W6 | curl、Burp 社区版、浏览器 DevTools | Web / OSINT |
zsteg是 Ruby gem:sudo apt install ruby && gem install zsteg。装不上就用网页版 stegsolve 或自己写 Python。
5. 周任务(W3–W6)
W3 · Misc + 文件与隐写 I
- 学:§3.1、§3.2 的检查顺序
- 练:8 题(Misc 4 + 隐写 4),★1–★2
- 交:8 条速记 writeup
- 验收:能对任意文件说出「接下来 5 步」
W4 · 隐写 II
- 学:音频频谱、图像通道、压缩包异常
- 练:6 题,★2–★3
- 交:6 条速记 + 1 份音频分析笔记(含频谱截图思路)
- 验收:能独立从音频里读出 flag
W5 · 取证 + 古典密码
- 学:§3.3、§3.4 古典部分
- 练:10 题(取证 5 + 古典 5)
- 交:10 条速记
- 验收:能从 pcap 里导出文件并跟出上传内容
W6 · OSINT + 入门 Web + 小赛模拟
- 学:§3.5、§3.6
- 练:OSINT 5 题 + Web 3 题(在靶场上)
- 交:限时 3 小时小赛模拟 + 完整复盘
- 验收:拿到 ≥2 题,且复盘里写清「为什么放弃了哪些题」
6. 比赛怎么打(单人版)
6.1 选赛标准(在 CTFtime 上筛)
| 条件 | 建议 |
|---|---|
| 赛制 | Jeopardy |
| 时长 | 24–48h(单人能分段投入) |
| 难度 | 有 beginner 分类或往年 writeup 显示前几题简单 |
| 时间 | 周末 |
| 队伍 | 单人报名(很多赛允许 solo) |
6.2 赛前 15 分钟
- 把所有题按分类看一眼,标出「misc/stego 里最像 ★1 的 3 道」
- 建
work/比赛名/目录与一个status.md(题号 / 状态 / 卡点 / 用时) - 关掉无关标签页
6.3 赛中策略
- 先扫 easy:misc/stego 先拿分,建立节奏。
- 单题 60 分钟:比赛时比平时更严格,到点就换题(不是放弃,是排期)。
- 不做 pwn/高级 web:看一眼题面就走,别被好奇心拖住。
- 记录卡点:
status.md里写一句卡在哪,赛后复盘用。 - 留 30 分钟收尾:不要卡到最后一分钟。
6.4 赛后 24 小时内复盘(最重要的一步)
按 00 学习法与复盘 的完整复盘模板写,另外必须回答:
- 我拿分的题,是因为我会,还是因为它简单?
- 我放弃的题,如果多给我 2 小时,我看得出下一步吗?
- 我的工具链在哪一步拖慢了我?(现场装工具的痛,要在赛后变成"提前装好")
7. 验收标准
W6 结束时
- 累计 ≥ 24 道题的速记 writeup
- 有任何文件都能说出标准检查顺序(口述 30 秒)
- 独立完成 1 份音频/图片隐写的完整复盘
- 小赛模拟拿到 ≥ 2 题
W13 结束时
- 真实比赛拿到 ≥ 2 题并写完整复盘
- 能在 15 分钟内判断一道题「值得做 / 该跳过」
8. 常见卡点
| 卡点 | 真相 | 处理 |
|---|---|---|
| 文件打不开 | 后缀骗人 | file 才是真的 |
binwalk 拆出一堆 |
正常,逐个看 | 用 -e 自动拆,再 find 找文件 |
| 图片看不到异常 | 隐写不改变外观 | LSB/通道/尾附加,别用肉眼看 |
| 音频听不出 | 信息在频谱不在声音 | 切频谱视图 |
| Web 题没环境 | 需要靶机 | 用 PortSwigger / THM 免费 lab,[S] |
| 比赛里想全做 | 单人不可能 | 目标 2–5 题,写下来贴在屏幕边 |
| 装了工具不会用 | 正常 | 每题只学一个工具的一招 |
9. 一句话自检
「给我一个未知文件,我能在 5 分钟内说出它藏了什么类型的东西,并知道该用哪个工具去挖。」