在CTF PWN竞赛中,一个得心应手的调试环境往往能让你事半功倍。本文将带你打造一个专为PWN选手优化的Ubuntu 20.04工作环境,从GDB插件选型到实战工具链配置,助你提升解题效率。
GDB作为二进制调试的核心工具,其插件生态直接影响调试体验。主流的三款插件各有特色:
bash复制telescope $esp # 自动展开指针链
heap # 专为堆题设计的命令
bash复制pattern create 200 # 生成定位字符串
searchmem "/bin/sh" # 搜索内存
bash复制heap bins # 堆bin可视化
checksec # 安全机制检查
提示:可通过修改~/.gdbinit快速切换插件,建议保留各插件安装目录以便随时切换
面对不同libc版本的题目时,快速定位是关键。以下是提升LibcSearcher效率的方法:
bash复制cd ~/tools/LibcSearcher
git submodule update --init
cd libc-database && ./get
| libc版本 | 下载命令 |
|---|---|
| 2.23 | ./download ubuntu glibc 2.23-0ubuntu11 |
| 2.27 | ./download ubuntu glibc 2.27-3ubuntu1 |
| 2.31 | ./download ubuntu glibc 2.31-0ubuntu9 |
python复制from LibcSearcher import *
# 指定优先搜索本地库
obj = LibcSearcher("puts", 0x7f123456, db_path="~/tools/LibcSearcher/libc-database")
bash复制# ARM调试示例
qemu-arm -g 1234 ./challenge
gdb-multiarch -ex "target remote :1234"
bash复制sudo apt install gcc-arm-linux-gnueabi gdb-multiarch
bash复制sudo apt install gcc-mipsel-linux-gnu qemu-user
python复制#!/usr/bin/env python3
from pwn import *
context.update(arch='amd64', os='linux')
def start():
if args.REMOTE:
return remote("ctf.example.com", 1234)
else:
return process("./challenge")
io = start()
# 自动attach GDB
if args.GDB:
gdb.attach(io, gdbscript='''
break *main+0x42
continue
''')
| 工具 | 快捷键/命令 | 使用场景 |
|---|---|---|
| ROPgadget | ROPgadget --binary ./elf |
ROP链构造 |
| one_gadget | one_gadget libc.so.6 |
快速查找execve跳转 |
| seccomp-tools | seccomp-tools dump ./elf |
沙盒规则分析 |
bash复制cd ~/tools/pwndbg && git pull
bash复制tar czf pwn_env_backup.tar.gz ~/.gdbinit ~/tools
在实际解题过程中,我发现将常用工具路径加入环境变量能显著提升效率。例如在~/.bashrc中添加:
bash复制export PATH=$PATH:~/tools/ROPgadget
alias gdb-pwndbg="gdb -x ~/tools/pwndbg/gdbinit.py"