SuperAPI AI 工具集

ctf-pwn

安全与审计

查看项目

更新于 10-15 13:54

技能介绍

用途

本技能定位为 CTF 二进制漏洞利用(Pwn)专家,目标是发现内存破坏漏洞并加以利用,从而读取 flag。它强调系统化的漏洞分析与创造性的利用思路,是一套通用利用框架,可适配任意漏洞类型,重点在于理解内存破坏为何发生以及如何操纵它,而非仅识别特定 bug 类别。

核心思维框架

技能从三个层面组织思考:

  • 数据流层:攻击者可控数据流向何处。输入源包括 stdin、网络、文件、环境变量、参数;数据目的地包括栈缓冲区、堆分配、全局变量;转换包括解析、复制、格式化、解码。
  • 内存安全层:程序做了哪些假设。包括缓冲区边界(固定大小数组、分配大小)、类型安全(整数类型、指针有效性、结构布局)、控制流完整性(返回地址、函数指针、虚表)。
  • 利用层:如何违反信任边界。包括内存写入(覆盖返回地址、函数指针、flag)、内存读取(泄露地址、canary、指针值)、控制流劫持(重定向执行到攻击者可控位置)、逻辑操纵(改变程序状态以跳过检查或触发非预期路径)。

核心问题序列

针对每个 pwn 挑战,按顺序提问:我控制什么数据?数据在内存中流向何处?附近有什么有趣数据?发送超量数据会发生什么?可以覆盖什么来改变程序行为?可以把执行重定向到哪里?如何读取 flag?

主要能力与方法论

技能提供漏洞发现、内存布局理解、利用规划三方面的调查方法:

  • 漏洞发现:识别不安全 API 模式(strcpy、strcat、sprintf、gets 等无界复制;read、recv、scanf("%s")、strncpy 等边界不足;printf(user_input) 等格式化字符串 bug;整数溢出)。分析栈布局(函数参数、返回地址、保存的帧指针、局部变量、编译器 canary、填充对齐)。识别堆利用模式(use-after-free、double-free、堆溢出、类型混淆)。
  • 内存布局理解:映射二进制内存段(.text、.data、.bss、heap、stack),识别可执行段与可写段,判断 ASLR 状态,计算关键偏移(缓冲区到返回地址、GOT 到 PLT、堆块间距、libc 基址到有用函数)。
  • 利用规划:分析约束(坏字节、输入大小限制、字符限制、保护机制),制定绕过策略(栈 canary、ASLR、NX/DEP、PIE),构建利用原语(任意写、任意读、控制流劫持、信息泄露),并在需要时串联多个原语。

使用方式

技能以灵活工作流组织,分为若干阶段:

  1. 二进制侦察:识别目标二进制、映射段与保护、统计函数、查找 flag 相关字符串、列出导入函数、识别入口点与输入向量、标记可疑模式。
  2. 漏洞分析:追踪从输入到漏洞的数据流、分析漏洞函数上下文、映射漏洞周围内存布局、进行交叉引用分析。
  3. 利用策略:根据保护情况与可用原语确定利用方式(无保护时栈溢出跳 shellcode;NX 开启但无 ASLR 时 ret2libc、ROP、GOT 覆盖;ASLR 开启时先泄露地址;存在 canary 时泄露或保留 canary,或改用堆利用)。
  4. 载荷构造(概念性):在 Ghidra 之外用 Python/pwntools 构建,但在此规划载荷结构、记录关键地址、记录利用步骤与假设。
  5. 利用验证(迭代):在本地测试、根据崩溃分析调整偏移、处理坏字节或字符限制、细化载荷直至成功,并更新数据库记录发现。

技能中列举了多种利用技术参考,包括栈缓冲区溢出、格式化字符串漏洞、ROP、ret2libc、堆利用,每种都给出概念、发现方法与利用方式。

适用场景

适用于 CTF 二进制漏洞利用(Pwn)挑战,尤其是缓冲区溢出、格式化字符串等内存破坏类题目。

限制

技能本身为思维框架而非固定清单,需根据具体挑战灵活调整。部分步骤(如载荷构造与验证)在 Ghidra 之外进行。ROP gadget 搜索需借助外部工具(如 ROPgadget、ropper),Ghidra 无内置 gadget 搜索。资料未提供具体收费、价格、平台或效果信息。