CTF 解题报告
嘿,大家好,我是肖恩,平时喜欢在空闲时间做 CTF 题目。目前的工作让我花大量时间在二进制漏洞利用和软件逆向上,所以我倾向于关注这两个方向。网上看到的大部分解题报告质量都不高,希望我的这份能更好地解释一些基本概念。
在所有的解题方案中,我都会尽力包含一个可复现的、用 pwntools 编写的脚本。重要的不是 flag,而是获得 flag 的过程。
希望这不会过时得太快,不过我确实也为其中一些 CTF 题目录制了视频讲解。你可以在 YouTube 上观看。
下面是一个常见的 Unix 访问相关知识点列表,以及与它们对应的 CTF 挑战。
Unix 访问知识
漏洞类别
展示利用漏洞类别的能力
- 从头编写可工作的 shellcode,并展示编写 shellcode 的所有步骤:
- 带或不带以下缓解措施的栈缓冲区溢出:地址空间布局随机化 (ASLR)、非可执行内存 (NX)、栈金丝雀:
- 利用堆喷射和包含函数指针的对象进行堆缓冲区溢出:
- 通过破坏堆数据结构进行堆缓冲区溢出:
- 包含函数指针的对象的 UAF(释放后使用)漏洞:
- 允许任意读写原语的对象上的 UAF 漏洞:
- 数据类型混淆漏洞
- 用于任意读写原语的格式化字符串漏洞:
- 未初始化变量如何被用于漏洞利用:
展示实现漏洞利用原语的能力
- 任意写原语:
- 相对写原语:
- 任意读原语:
- 如何将原语串联起来构建漏洞利用
- 写原语如何用于提升权限/执行任意代码:
描述以下 ELF 链接结构的目的和结构,以及它们如何在二进制漏洞利用中被滥用
- 过程链接表 (PLT):
- 全局偏移表 (GOT):
从 PLT/GOT 数据结构交互的角度描述以下动态重定位模式,以及不同模式下的漏洞利用原语有何区别
展示实现 ROP/JOP 的能力,以
- 寻找 ROP/JOP 小工具:
- 调用 libc 函数和系统调用:
- 串联小工具执行代码:
- 执行任意 shellcode
描述漏洞利用缓解措施的目的和实现
- ASLR
- 数据执行保护 (DEP)/NX:
- 位置独立可执行文件 (PIE)
- PIE 如何影响漏洞利用
- 栈金丝雀:
- 安全链表解除链接
软件逆向工程
比较和对比以下技术和用例
展示熟悉使用以下类型的工具进行静态和动态逆向工程
模糊测试技术
- 盲目模糊测试技术
- 基于代码覆盖率的模糊测试
- 符号执行
我认为有用的 CTF 博客文章