PWN环境配置
pwntools
pwntools 是一个用于 CTF 和漏洞利用开发的 Python 库,它提供了许多功能,如本地执行、远程连接、shellcode 生成、ROP 链构建、ELF 解析等。
Pwntools 对 Ubuntu 12.04 和 14.04 支持较好,同时也支持 Debian、Arch、FreeBSD、OS X 等系统。
先安装 Python、pip 以及相关依赖:
sudo apt-get update
sudo apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential
然后安装 pwntools:
sudo pip install --upgrade pwntools
安装完成后可以进入 Python 测试:
from pwn import *
如果没有报错,说明安装成功。
gdb
GDB(GNU Debugger)是 GNU 提供的调试器,是进行 PWN 和二进制程序调试时最常用的工具之一。
安装:
sudo apt-get update
sudo apt-get install gdb
输入:
gdb
即可进入 GDB。
不过原生 GDB 在调试漏洞利用程序时并不是特别方便,因此一般还会安装一些扩展插件。
pwndbg
pwndbg 是一个面向漏洞利用和逆向分析的 GDB 插件,可以在调试过程中直接显示寄存器、栈、反汇编代码以及内存信息。
安装:
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
安装完成以后重新打开 GDB。
如果需要检查 GDB 加载了哪些插件,可以查看:
cat ~/.gdbinit
如果之前没有安装过其他插件,一般只会看到 pwndbg 对应的加载配置。
如果以前安装过其他 GDB 插件,可以把不需要的配置注释掉。
这些插件的功能有不少重合的地方,选择一个自己习惯的即可,并没有必要全部安装。
最后我选择 pwndbg,单纯觉得比较好看。
GEF
2017年4月补充
GEF(GDB Enhanced Features)也是一个针对 GDB 的增强插件,主要面向 Linux 下的漏洞利用、逆向分析和程序调试。
可以从 GitHub 获取:
git clone https://github.com/hugsy/gef.git ~/gef
然后在 .gdbinit 中加载:
echo "source ~/gef/gef.py" >> ~/.gdbinit
检查配置文件:
cat ~/.gdbinit
需要注意路径格式。
错误示例:
source "~/gef/gef.py"
正确示例:
source ~/gef/gef.py
如果遇到 GDB 自动加载相关的安全限制,也可以根据具体情况修改:
set auto-load safe-path /
GEF 和 pwndbg 的功能有比较多的重合,一般选择其中一个使用即可。
IDA Pro
IDA Pro,全称 Interactive Disassembler Professional,是一款非常强大的交互式反汇编工具。
对于逆向工程和漏洞分析来说,IDA 基本属于必备工具之一。
它能够分析多种处理器架构,包括:
- Intel x86
- x86-64
- ARM
- MIPS
- PowerPC
- 68000
- Z80
- 8051
等。
IDA 不仅能够完成静态反汇编,还可以通过图形化控制流、函数识别、交叉引用等功能帮助分析程序结构。
PWN 中经常需要先使用 IDA 分析目标程序,再配合 GDB 动态调试。
目前使用 IDA Pro 6.8 即可。
cyclic
cyclic 主要用于确定缓冲区溢出时的偏移量,是 pwntools 自带的一个非常实用的工具。
例如:
cyclic 200
可以生成一段具有规律的字符串。
程序崩溃以后,根据覆盖到寄存器中的值,可以继续计算偏移:
cyclic -l 0x6161616c
这样就不需要手动数缓冲区长度。
checksec
checksec 是一个用于检查 ELF 二进制程序安全保护机制的小工具。
它可以查看程序是否开启了:
- RELRO
- Stack Canary
- NX
- PIE
等保护。
安装:
sudo apt-get install checksec
使用方式:
checksec --file=/usr/bin/ls
在做 PWN 题之前先使用 checksec 看一下程序开启了哪些保护,通常可以帮助判断后面的利用思路。
例如:
RELRO STACK CANARY NX PIE
Partial RELRO No canary found NX enabled No PIE
不同保护机制会直接影响漏洞利用方式。
ROPgadget
ROPgadget 是一个用于搜索二进制程序中 ROP gadgets 的工具。
ROP,即 Return-Oriented Programming,可以通过组合程序中已经存在的短指令序列构造利用链。
安装:
git clone https://github.com/JonathanSalwan/ROPgadget.git
cd ROPgadget
sudo python setup.py install
安装完成以后可以:
ROPgadget --binary ./test
查找程序中的 gadgets。
例如:
ROPgadget --binary ./test | grep "pop rdi"
在进行 ROP 利用时会比较方便。
基本的 PWN 环境到这里就差不多搭好了。
常用工具主要就是:
pwntools
GDB
pwndbg / GEF
IDA Pro
cyclic
checksec
ROPgadget
之后做题时再根据实际需要补充其他工具即可。











这一切,似未曾拥有