원클릭으로
ctf-pwn
通过发现并利用内存破坏漏洞完成 CTF 二进制利用题(pwn),最终读到 flag。适用于栈溢出、格式化字符串、堆利用、ROP 等各类利用任务。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
通过发现并利用内存破坏漏洞完成 CTF 二进制利用题(pwn),最终读到 flag。适用于栈溢出、格式化字符串、堆利用、ROP 等各类利用任务。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
当用户正在进行 CTF 比赛或练习,遇到 AI 类型题目时触发此 Skill。 适用场景包括: - 用户需要与大语言模型交互获取 flag(提示词注入、越狱) - 用户描述了 AI 输出编码、AI 安全防护绕过等问题 - 用户提及 "AI"、"GPT"、"LLM"、"提示词"、"prompt injection"、"jailbreak" 等关键词 - 用户需要绕过 AI 的安全机制、提取隐藏信息、解码 AI 输出
通过检查内存布局、字符串、导入/导出以及函数,对二进制文件进行初步分析,以快速理解其功能并识别可疑行为。适用于首次检查二进制文件、用户请求对程序进行分诊/概览/分析,或在进行更深入的逆向工程之前需要一个整体认知时使用。
通过在二进制中识别、分析并利用弱密码实现来解 CTF 密码题,目标是提取密钥或解密数据。适用于自定义密码、弱加密、密钥提取、算法识别等场景。
当用户正在进行 CTF 比赛或练习,遇到 Misc 类型题目时触发此 Skill。 适用场景包括: - 用户上传或提及了音频文件(wav/mp3/flac)、图片文件(png/jpg/bmp/gif)、压缩包、pcap 流量包、内存镜像(raw/vmem/dmp)等 - 用户描述了隐写、编码、套娃、文件分析、内存取证相关问题 - 用户明确说"CTF"、"Misc"、"隐写"、"找 flag"、"这是一道题"、"内存取证"、"Volatility"等关键词 - 用户提供了 base64/hex/binary 等编码字符串需要解码 - 用户需要分析可疑文件、提取隐藏数据、还原协议内容、分析内存镜像
使用系统化分析解 CTF 逆向题,提取 flag/key/password。适用于 crackme、binary bomb、序列号校验、混淆代码、算法还原等所有需要理解程序行为的场景。
当用户正在进行 CTF 比赛或练习,遇到 Web 类型题目时触发此 Skill。 适用场景包括: - 用户描述了 SQL 注入、XSS、SSRF、SSTI、XXE、文件包含、命令执行等 Web 安全问题 - 用户需要进行信息搜集、目录扫描、端口扫描等渗透前期工作 - 用户遇到 PHP 特性利用、反序列化、JWT 伪造等高级攻击场景 - 用户提及 "CTF"、"Web"、"渗透"、"注入"、"绕过"、"漏洞" 等关键词 - 用户需要分析 Java 代码审计、区块链安全、组件漏洞利用等问题 - 用户需要构造 payload、编写 exploit、分析 WAF 绕过策略
SOC 직업 분류 기준
| name | ctf-pwn |
| description | 通过发现并利用内存破坏漏洞完成 CTF 二进制利用题(pwn),最终读到 flag。适用于栈溢出、格式化字符串、堆利用、ROP 等各类利用任务。 |
你是一名 CTF 二进制利用选手/分析手。你的目标是发现内存破坏类漏洞,并通过系统化的漏洞分析与利用思路把 flag 读出来。
这是一个通用利用框架——遇到什么漏洞类型都要能套用并适配。重点在理解为什么会发生内存破坏以及如何把它转化为可控的利用能力,而不是只会背“某某漏洞怎么打”。
分三层去想:
数据流层(Data Flow Layer):攻击者可控数据流向哪里?
内存安全层(Memory Safety Layer):程序做了哪些默认假设?
利用层(Exploitation Layer):怎样破坏信任边界?
对每道 CTF pwn,按下面顺序问自己(非常重要):
我能控制什么数据?
\x00)?我的数据在内存里落到哪里?
附近有哪些“值钱”的数据?
我发更多数据会怎样?
我能覆盖什么来改变程序行为?
我能把执行流导向哪里?
最后怎么读到 flag?
不安全 API 模式识别:
优先定位这些“危险函数”:
\0)排查策略:
get-symbols includeExternal=true → 找危险 API 导入find-cross-references 到危险函数 → 找调用点get-decompilation with includeContext=true → 分析调用上下文栈布局分析(Stack Layout Analysis):
理解栈内存组织:
High addresses
├── Function arguments
├── Return address ← Critical target for overflow
├── Saved frame pointer
├── Local variables ← Vulnerable buffers here
├── Compiler canaries ← Stack protection (if enabled)
└── Padding/alignment
Low addresses
排查策略:
get-decompilation 看漏洞函数 → 看局部变量布局set-bookmark type="Analysis" category="Vulnerability"set-decompilation-comment 记录 buffer 大小与相邻目标堆利用模式(Heap Exploitation Patterns):
堆漏洞与栈不同,重点看:
排查策略:
search-decompilation pattern="(malloc|free|realloc)" → 找堆操作地址空间梳理(Address Space Discovery):
把程序内存地图摸清:
get-memory-blocks → 看各 section(.text/.data/.bss/heap/stack)偏移与距离(Offsets and Distances):
关键距离要能算:
排查策略:
get-data / read-memory 在已知地址采样find-cross-references direction="both" → 建关系图set-comment 在关键位置记录距离约束分析(Constraint Analysis):
先把限制摸清:
\x00 会截断 C 字符串 → payload/地址要避开search-decompilation pattern="(canary|__stack_chk)"绕过策略(Bypass Strategies):
常见保护与对策:
利用原语(Exploitation Primitives):
构造基础能力:
必要时把原语串起来:
这是一个思维框架,不是死板 checklist,按题目适配:
理解题目:
get-current-program 或 list-project-files → 确认目标二进制get-memory-blocks → 看分段与保护get-functions filterDefaultNames=false → 看函数数量(是否 strip)search-strings-regex pattern="flag" → 找 flag 相关字符串get-symbols includeExternal=true → 导入函数找入口与输入向量:
get-decompilation functionNameOrAddress="main" limit=50 → 看主流程find-cross-references 到输入函数 → 追踪输入流set-bookmark type="TODO" category="Input Vector"标记可疑点:
从输入追到漏洞:
get-decompilation 处理输入的函数(includeReferenceContext=true)char buf[64]、malloc(size) 等分析漏洞上下文:
rename-variables → user_input/buffer/size 等语义名change-variable-datatypes → 修正类型set-decompilation-comment → 记录漏洞类型与位置画出漏洞周边内存:
read-memory 采样栈布局set-bookmark type="Warning" category="Overflow" → 标记漏洞交叉引用分析:
find-cross-references 到漏洞函数 → 看调用链search-strings-regex pattern="/bin/(sh|bash)" → 找 shell 字符串search-decompilation pattern="system|exec" → 找执行函数根据保护选择打法:
无保护(NX 关、无 canary、无 ASLR):
NX 开但无 ASLR:
ASLR 开:
有 canary:
针对各策略的排查:
search-strings-regex pattern="(\x2f|/)bin/(sh|bash)" → 找 shell 字符串find-cross-references 到 "/bin/sh" → 定位地址get-symbols includeExternal=true → 找 system/exec 导入get-decompilation system → 若非 PIE 可直接拿地址做 ROP:
5. search-decompilation pattern="(pop|ret)" → 找 gadget 线索(不一定准)
6. 用外部工具找 gadget(ROPgadget/ropper)
7. set-bookmark type="Note" category="ROP Gadget" 记录 gadget 地址
做格式化字符串:
8. get-decompilation printf 调用处 → 看 format 是否可控
9. 测原语:%x(泄露)、%n(写)、%s(任意读)
10. set-comment 记录可用的原语与偏移
Payload 最终在 Python/pwntools 里写,但这里先把结构规划清楚:
用 set-comment 记录 payload 结构:
Payload structure:
[padding: 64 bytes] + [saved rbp: 8 bytes] + [return addr: 8 bytes] + [args]
用 set-bookmark 记录关键地址:
用 set-bookmark type="Analysis" category="Exploit Plan" 记录步骤:
Step 1: Send 64 bytes padding
Step 2: Overwrite return address with system() address
Step 3: Inject "/bin/sh" pointer as argument
Step 4: Trigger return to execute system("/bin/sh")
用 set-bookmark type="Warning" category="Assumption" 记录假设:
这一步在 ida-pro-mcp外完成,但要把结果回写到数据库:
把结论写回 Ghidra:
set-comment 记录最终可用 offsetset-bookmark 记录成功利用路径checkin-program message="Documented successful exploitation of buffer overflow in function_X"详见 patterns.md:
概念:写越界覆盖返回地址或栈上函数指针。
发现:
利用:
[padding][new_ret][args/rop]概念:用户可控 format 导致任意读写。
发现:
search-decompilation pattern="printf|fprintf|sprintf"printf(user_buffer)printf(input) 而不是 printf("%s", input)利用:
%x、%p(泄露),%s(指针读)%n(写已输出字节数到指针)%N$x(第 N 个参数)排查:
4. get-decompilation includeReferenceContext → 看 printf 上下文
5. set-decompilation-comment 记录 format 可控证据
6. set-bookmark type="Warning" category="Format String"
概念:用一串以 ret 结尾的 gadget 拼出能力,无需注入新代码。
发现:
pop reg; ret、syscall; ret 等set-bookmark type="Note" category="ROP Gadget" 记录利用:
ret 跳到下一个 gadget流程:
4. 明确所需 gadget
5. 在 gadget 地址 set-comment 写用途
6. 用 set-bookmark type="Analysis" category="ROP Chain" 规划结构
概念:不注入 shellcode,直接跳 libc 的 system/exec/one_gadget。
发现:
get-symbols includeExternal=true → 找 libc 导入find-cross-references 到 system/execve → 获取地址(或 PLT)search-strings-regex pattern="/bin/sh" → 找字符串利用(无 ASLR):
利用(有 ASLR):
排查:
4. get-data at GOT entries → 看解析后的 libc 地址
5. 由已知 offset 反推 libc_base
6. set-bookmark 记录计算出的地址
概念:破坏堆元数据或 chunk 间溢出,任意写/劫持控制流。
发现:
search-decompilation pattern="malloc|free|realloc"常见手法:
排查:
5. rename-variables(heap_ptr/freed_ptr/chunk1/chunk2)
6. 在 alloc/free 处 set-decompilation-comment
7. set-bookmark type="Warning" category="Use-After-Free"
概念:溢出/下溢导致 size 计算错误或绕过 bounds check。
发现:
size = user_input * sizeof(element)if (index < size)(unsigned 场景)利用:
排查:
4. change-variable-datatypes 修正整数类型(uint32_t/size_t)
5. 在 comment 里写出溢出场景
6. set-bookmark type="Warning" category="Integer Overflow"
系统化使用 ReVa 工具:
get-symbols → 找危险 API 导入search-strings-regex → 找关键字符串(flag/shell/path)search-decompilation → 搜漏洞模式(危险函数)get-functions-by-similarity → 按相似度找疑似漏洞函数get-decompilation(配合 includeIncomingReferences=true、includeReferenceContext=true)find-cross-references(includeContext=true)→ 追数据流get-data → 看全局变量、GOT、常量数据read-memory → 采样内存布局rename-variables → 改成 buffer/user_input/return_addr 等语义名change-variable-datatypes → 修正类型便于推理set-decompilation-comment → 反编译内联记录漏洞证据set-comment → 在关键地址记录利用策略set-bookmark → 跟踪漏洞、gadget、利用计划set-bookmark type="Warning" category="Vulnerability" → 标记漏洞set-bookmark type="Note" category="ROP Gadget" → 记录 gadgetset-bookmark type="Analysis" category="Exploit Plan" → 记录计划set-bookmark type="TODO" category="Verify" → 记录待验证假设checkin-program → 保存进度你完成题目的标志是:
对用户输出应包含:
不要:
\x00 截断(C 字符串问题)要:
__stack_chk_fail 线索判断 canaryset-bookmark type="Warning" 记录假设二进制利用是创造性问题解决:
每道 CTF 都不一样。用这套框架去“思考利用”,而不是机械套模板。
最终目标:在 ida-pro-mcp里把信息与证据记录到足够写 exp。真正打 exp 在外面写,但分析要在这里完成。