1392081456/ctf-notes
GitHub: 1392081456/ctf-notes
这是一个深入的CTF解题笔记仓库,覆盖二进制、逆向、密码学、Web和取证领域,专注于方法论和利用陷阱的学习。
Stars: 0 | Forks: 0
# ctf 笔记
[](LICENSE)


## 关于本仓库
这些是我参与公开 CTF 平台(BUUCTF、SCTF、NSSCTF、NewStarCTF 等)挑战后重建的解题笔记。它们作为个人技术参考而编写,也用于分享那些已被公开记录多年的方法论。
每篇解题笔记都遵循相同的结构:
1. **文件概述** — 保护机制、libc 版本、远程端点
2. **漏洞分析** — 哪里出了问题以及为什么
3. **利用路径** — 原语链
4. **完整利用** — 带注释的 payload 脚本
5. **陷阱/经验教训** — 让我耗费数小时的坑以及不同的处理方式
## 作者
拥有对抗性机器学习同行评审出版物的安全研究人员。
DOI: [10.3778/j.issn.1002-8331.2311-0227](https://doi.org/10.3778/j.issn.1002-8331.2311-0227)
CTFtime: [@colorfulwhitez](https://ctftime.org/user/colorfulwhitez) (队伍 APWN)
## 索引
### Pwn (二进制漏洞利用)
- [axb_2019_heap — 格式化字符串泄露 + unsafe unlink → BSS 自引用](pwn/axb2019_heap.md) — glibc 2.23 / unsafe unlink / `__free_hook` 劫持
- [axb_2019_brop64 — ret2libc 与 libc 替换陷阱](pwn/axb2019_brop64.md) — glibc 版本检测 / Partial RELRO ret2libc
- [SCTF 2019 easy_heap — null 字节 off-by-one → tcache 投毒 → mmap shellcode](pwn/sctf2019_easy_heap.md) — glibc 2.27 / consolidation 泄露 / RWX 页面
- [ACTF 2019 — babyheap: UAF + tcache 复用 + printf %s GOT 泄露](pwn/actf2019_babyheap.md) — glibc 2.27 / system@PLT 预解析 / 无需 libc 泄露
- [ACTF 2019 — babystack: 栈迁移 ret2libc](pwn/actf2019_babystack.md) — 16 字节溢出 / 栈地址泄露 / leave;ret 迁移
- [CISCN 2019 — n_3: 32 位 tcache UAF + strbuf 覆写](pwn/ciscn2019_n_3.md) — 记录结构体函数指针 → `system("sh;#")`
- [NPUCTF 2020 — easyheap: off-by-one 重叠 ×2](pwn/npuctf2020_easyheap.md) — 泄露 + 写原语 / `__free_hook` 劫持
- [SUCTF 2018 — stack: 经典 ret2win 后门](pwn/suctf2018_stack.md) — `system("/bin/sh")` gadget / +1 栈对齐
### 逆向工程
- [WMCTF 2020 — easy_re: 解包 PerlApp 二进制文件](reverse/wmctf2020_easy_re.md) — PerlApp BFS 资源提取
- [SCTF 2019 — creakme: AES-CBC、Base64 和 SEH 自解密节](reverse/sctf2019_creakme.md) — 多层 crackme
- [王鼎杯 2020 青龙 — jocker: SMC 与栈指针修复](reverse/wangdingcup2020_jocker.md) — 自修改代码分析
- [长城杯 第三届 — vvvmmm: UPX + 嵌入 Unicorn 的 RISC-V 虚拟机](reverse/changcheng3_vvvmmm.md) — 硬编码密钥多项式哈希驱动 12 个流字与用户输入异或;陷阱是 `UC_RISCV_REG` 枚举偏移量(`0xb = X10 = a0`,而非 `a1`)
### 密码学
- [GUET-CTF 2019 — encrypt: RC4 + 偏移的 Base64 字母表](crypto/guetctf2019_encrypt.md) — 自定义编码组合
- [GKCTF 2021 — XOR: 从 XOR + 乘积恢复素因子](crypto/gkctf2021_xor.md) — Hensel 式提升 / 乘积范围剪枝 / 比特反转耦合
- [MRCTF 2020 Easy_RSA — 从 `φ(n)` 和 `e·d` 分解 `n`](crypto/mrctf2020_easy_rsa.md) — 两阶段 Vieta 归约 / 小 k 暴力破解
- [LitCTF 2025 — math: RSA `hint = (p+noise)(q+noise)` 泄露](crypto/litctf2025_math.md) — 对 `hint−n` 使用 Pollard rho 以恢复 40 位噪声 / Vieta 关联到 `p, q`
- [XCTF 第九届决赛 — Tch3s: 可预测的 `srand(time())` 种子](crypto/xctf2025_tch3s.md) — 从测试 1 的明文暴力破解 Unix 时间戳种子,然后通过 gdb-python 将恢复的密钥注入二进制文件并调用其自身的解密函数
- [GHCTF 2025 — baby_signin: e=4 非互质 AMM 根提取](crypto/ghctf2025_baby_signin.md) — 通过 AMM 的平方根注册
- [GHCTF 2025 — EZ_Fermat: 多项式 GCD RSA 分解](crypto/ghctf2025_ez_fermat.md) — 费马小定理 / `Z/n` 上的多项式 GCD
- [GHCTF 2025 — MIMT_RSA: 中间相遇 36 位复合密钥恢复](crypto/ghctf2025_mimt_rsa.md) — 乘法同态 MITM
- [UTCTF 2020 — basic-crypto: 4 层编码洋葱](crypto/utctf2020_basic_crypto.md) — 二进制 → Base64 → ROT10 → 替换
- [杨启倍 2025 — big_e_rsa: 艾森斯坦整数 RSA](crypto/yangqibei2025_big_e_rsa.md) — 艾森斯坦素数 / 浮点 `d` 恢复
### Web 漏洞利用
- [Drupalgeddon2 — CVE-2018-7600 渲染数组 RCE](web/drupalgeddon2_rce.md) — Drupal 8 / Form API AJAX / `#post_render` 注入
- [GYCTF 2020 Ez_Express — Unicode 大小写折叠 + EJS 原型污染](web/gyctf2020_ez_express.md) — Node.js / `outputFunctionName` 注入 / `U+0131` 过滤器绕过
- [王鼎杯 2020 玄武 SSRFMe — Gopher → Redis webshell](web/wangdingbei2020_ssrfme.md) — SSRF / `0.0.0.0` 绕过 / 双重 URL 编码
- [CISCN 2019 Dropbox — PHP Phar 反序列化 + POP 链](web/ciscn2019_dropbox.md) — `__call` 桥接 / `GIF89a` 占位符 / `file_exists` 触发
- [DASCTF 2023 EzFlask — 通过 `__globals__` 的 Python 类污染](web/dasctf2023_ezflask.md) — Flask / 递归合并 / `__file__` 覆写
- [CISCN 2019 东南赛 — double_secret: Flask RC4 泄露 + Jinja2 SSTI RCE](web/ciscn2019_double_secret.md) — 调试页 RC4 / SSTI 命令执行
- [CISCN 2019 决赛 — easyweb: `\0` 引号消耗 SQLi + Cookie XOR 伪造 + 日志 shell](web/ciscn2019_easyweb.md) — 多阶段链
- [GHCTF 2025 — EZ_readfile: MD5 强碰撞 + 文件读取](web/ghctf2025_ez_readfile.md) — `docker-entrypoint` 信息泄露
- [GHCTF 2025 — SQL: 严格 WAF 下的 UNION 注入](web/ghctf2025_sql.md) — 绕过所有函数调用的直接列名猜测
- [LitCTF 2025 — easy_file: PHP LFI + 上传链](web/litctf2025_easy_file.md) — 静默 WAF 基线 / `=` 短标签上传绕过
- [LitCTF 2025 — multiverse_diary: Express 原型污染 → `isAdmin`](web/litctf2025_multiverse_diary.md) — Node.js 合并污染
- [LitCTF 2025 — nest_js: Next.js 弱密码 + JS 捆绑包标志泄露](web/litctf2025_nest_js.md) — 客户端捆绑包泄露
- [LitCTF 2025 — star_wish: Jinja2 SSTI `{% %}` 标签绕过](web/litctf2025_star_wish.md) — 命令拼接
- [NewStarCTF 2023 — medium_sql: 布尔盲注 + `%53ELECT` 绕过](web/newstarctf2023_medium_sql.md) — `innodb_table_stats` 备用方案
- [NPUCTF 2020 — yanzhengma: saferEval 正则绕过 + 箭头函数参数遮蔽](web/npuctf2020_yanzhengma.md) — `String → Function` 原型链 RCE
- [SWPUCTF 2025 — sql_not_just_sql: 数字注入 + `multi_query` 堆叠 + UDF RCE](web/swpuctf2025_sql_not_just_sql.md) — 权限提升链
- [王鼎杯 2020 白虎 — picdown: 任意文件读取 + `/proc/fd` 秘密恢复](web/wangdingbei2020_picdown.md) — 隐藏路由 RCE
- [玄武杯 2025 — ez_fastapi: 盲注 SSTI 内存马 + `sudo chmod` 提权](web/xuanwu2025_ez_fastapi.md) — FastAPI 内存路由劫持
- [玄武杯 2025 — jinja: 无过滤器的 Jinja2 SSTI](web/xuanwu2025_jinja.md) — 入门级 SSTI
- [羊城杯 2020 — break_the_wall: `eval` 后门 + 函数名黑名单绕过](web/yangchengbei2020_break_the_wall.md) — 环境变量中的标志
### 取证 / 事件响应
- [OtterCTF 2018 — Name Game (内存取证)](forensics/otterctf2018_name_game.md) — Volatility 3 `pslist` 备用方案 / WZ 记录解析 / dump 定位
- [合诚杯 2021 — 流量分析 (布尔盲注 SQLi PCAP)](forensics/hcb2021_traffic_analysis.md) — `tcp.stream` 配对 / 频率交叉验证 / `tshark` 字段提取
- [长城杯 2024 — SnakeBackdoor (Linux 木马 + 自定义协议)](forensics/changcheng2024_snake_backdoor.md) — 33 层 base64+zlib 解包 / glibc `srand+rand` 会话密钥 / LD_PRELOAD 二进制预言机
- [0x401 CTF 2025 — TECI (.NET NativeAOT 木马)](forensics/0x401_2025_teci.md) — NativeAOT 字符串重建 / RC4+XOR 双密钥交换陷阱 / 长度前缀协议解析
- [玄机供应链 第二部分 — caterpillar / cheshire-cat / twiddledee](forensics/xuanji_sc_supply_chain_part2.md) — 多阶段供应链投毒 + 反向 shell 后门 IR
- [玄机供应链 第三部分 — Jenkins + Gitea CI/CD 妥协](forensics/xuanji_sc_supply_chain_part3.md) — webhook 劫持 / 命令注入 / 凭证窃取
- [铁人三项 2024 决赛 — APK + Tomcat + PAM 后门 (18 问全链)](forensics/tieren_2024_apk_pam_incident.md) — JWT 角色伪造 / 蚁剑 per-session AES / PAM `repz cmpsb` 魔法密码 / `/tmp/.sshlog` 凭证窃取
- [玄机实验室 2025 — 流量分析 (11 问 IR)](forensics/xuanji_2025_cs_traffic_analysis.md) — CS 4.4 stager 提取 / 1768.py 配置解析 / Docker 2375 未授权 → teamserver 密钥库 / RSA-1024 私钥恢复 / per-session AES 流量解密
- [0x401 CTF 2025 — FlagSyndicate (仙机 #328 / #329, 18 问 IR)](forensics/0x401ctf2025_flag_syndicate.md) — VMDK NBD 只读挂载 / 使用 john 的 yescrypt 破解 / **AES 密钥+IV 附加在密文末尾**的 ELF 逆向 / base64 嵌套 base64 载荷 / 通过 Docker 的 MySQL 8.0.36 InnoDB 离线复活
- [振兴杯 2025 — 钓鱼疏忽 (EML 取证)](forensics/zhenxing2025_phishing_oversight.md) — `X-HAS-ATTACH: no` 伪造 / 实际上是 XOR 密钥的 base64 诱饵(`ctf_is_good_boy`)/ 从 XOR 加密的 ZIP 修复 docx
- [振兴杯 2025 — ICS C2 (OPC UA 流量)](forensics/zhenxing2025_ics_c2.md) — OPC UA 节点值被滥用为双向 C2(`REACTOR-001-SEG##` 命令 / `RESULT-SEG##` 响应)/ 分段 base64 重组为 JSON / 未使用加密
- [GHCTF 2025 — mybrave: bkcrack ZipCrypto 已知明文 + PNG 隐写](forensics/ghctf2025_mybrave.md) — ZIP 加密破解 + 图像隐写
- [GHCTF 2025 — mypcap: 蚁剑 Tomcat webshell AES 流量解密 + MySQL 数据提取](forensics/ghctf2025_mypcap.md) — per-session AES 密钥恢复
- [NewStarCTF 2023 — last_traffic: 布尔盲注 PCAP 重建](forensics/newstarctf2023_last_traffic.md) — HTTP 响应长度 True/False 区分
- [玄机 DMZ2 Ubuntu — IR: Nacos CVE-2021-29442 + UID=0 隐藏后门 `sys-update`](forensics/xuanji_dmz2_ubuntu.md) — 多阶段服务器分流
### 实验室 (漏洞复现)
在 **本地 Docker 实验室** (主要是 vulhub) 中复现已发布 CVE 的攻击者视角解题笔记。补充了防御者视角的取证章节。请参阅 [`labs/README.md`](labs/README.md) 获取完整章节概述和约束。
- [Apache Shiro 1.2.4 — `rememberMe` 反序列化 RCE (CVE-2016-4437)](labs/shiro_550/writeup_en.md) — 硬编码 AES 密钥 / CommonsBeanutils1 gadget 链 / `TemplatesImpl` 字节码加载
- [Apache ActiveMQ — OpenWire 反序列化 RCE (CVE-2023-46604)](labs/activemq_2023_46604/writeup_en.md) — 通过 OpenWire 线协议的 Spring `ClassPathXmlApplicationContext` gadget
- [Jenkins CLI — `expandAtFiles` 任意文件读取 → RCE (CVE-2024-23897)](labs/jenkins_2024_23897/writeup_en.md) — args4j `@filename` 扩展 / 匿名 CLI / 凭证解密跳板
- [Grafana — DuckDB SQL 注入 → RCE (CVE-2024-9264)](labs/grafana_2024_9264/writeup_en.md) — SQL Expressions API / `read_blob()` 文件读取 / `shellfs` 扩展命令执行
- [TeamCity — 认证绕过 → 管理员 RCE (CVE-2024-27198)](labs/teamcity_2024_27198/writeup_en.md) — Servlet 路径参数技巧 / 未认证 REST API / 管理员账户创建
## 完整训练目录
上述挑战是精选的 **深度解题笔记**。有关我已完成的约 300 个挑战的完整索引(涵盖 BUUCTF、NSSCTF、GHCTF、NewStarCTF、LitCTF 和其他平台),请参阅 **[CATALOG.md](CATALOG.md)**。
## 方法论
我在解题笔记中记录的常见模式:
- **侦察纪律** — 在打开 IDA 之前使用 `checksec`、`file`、`strings`、`readelf -s`
- **Libc 版本意识** — 永远不要相信默认的 libc;使用 `strings libc.so.6 | grep release` 进行验证
- **陷阱文档** — 任何耗费超过 10 分钟的问题都会标注为 "陷阱" 以供未来参考
- **方法论重于标志** — 解题笔记更注重 *为什么* 每一步有效,而非 *什么* 是每一步
## 范围与免责声明
此处记录的所有内容均涉及来自 **公开举办的 CTF 活动、培训平台以及已发布 CVE 的独立本地 Docker 实验室**(vulhub 风格)的挑战。CTF 二进制文件由组织者分发用于教育目的;实验室目标是供应商已修补软件的 vulhub Docker 镜像,运行在 `127.0.0.1` 上,无远程访问。本仓库中的任何内容均无意应用于真实系统、第三方服务或生产软件。所描述的技术是通用的逆向工程和利用方法论,已在学术文献和会议演讲中公开记录多年。
## 许可证
[MIT](LICENSE) — 欢迎学习/参考这些笔记;如果在衍生作品中使用,请引用。
标签:BUUCTF, CTF平台, exploit开发, glibc漏洞利用, GOT覆盖, meg, NewStarCTF, NSSCTF, pwn, ret2libc, SCTF, shellcode, tcache攻击, web安全, 二进制分析, 云安全运维, 云资产清单, 信息安全, 取证, 堆溢出, 学习笔记, 密码学, 对抗性机器学习, 手动系统调用, 方法论, 栈溢出, 格式化字符串, 网络安全, 请求拦截, 逆向工程, 隐私保护