跳转至

Pwntools

Pwntools是一个CTF框架和漏洞利用开发库。它用Python编写,专为快速原型设计和开发而设计,旨在使漏洞利用的编写尽可能简单。

基础使用流程

from pwn import *

# 连接到环境
p = remote('vuln.khyan.top', 9527) # (1)!
p = process('./some_elf') # (2)!

# 接收数据
data = p.recvline() # (3)!
data = p.recvall() # (4)!
data = p.recv(1024) # (5)!
data = p.recvuntil('End of data') # (6)!

# 发送数据
p.sendline('your_input') # (7)!
p.send(b'your_input') # (8)!

# 打开交互式终端
p.interactive()
  1. 连接到远程服务,相当于使用了nc vuln.khyan.top 9527
  2. 启动本地进程。
  3. 接收一行数据。
  4. 接收所有数据。
  5. 接收指定字节数的数据。
  6. 接收直到特定字符串的数据。
  7. 发送一行数据。
  8. 发送原始字节数据。

其他常用功能

cyclic

cyclic函数创建一个有状态的循环生成器,它可以生成连续的德布鲁因(de Bruijn)序列块。德布鲁因序列是一种特殊的字符串序列,其中每个可能的子串都恰好出现一次,可以用于分析地址偏移等问题。

cyclic_data = cyclic(100) # 生成一个长度为100的德布鲁因序列块
print(cyclic_data) # (1)!
offset = cyclic_find(cyclic_data[7:11]) # 查找子串在序列中的偏移位置 (2)
print(offset) # (3)!
  1. b'aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa'
  2. 默认情况下生成的是4字节长度的子串,因此也只需提供4个字节。即使只有4个字节,也可以提供约446KB的总空间1
  3. 7