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()
- 连接到远程服务,相当于使用了
nc vuln.khyan.top 9527。 - 启动本地进程。
- 接收一行数据。
- 接收所有数据。
- 接收指定字节数的数据。
- 接收直到特定字符串的数据。
- 发送一行数据。
- 发送原始字节数据。
其他常用功能¶
cyclic¶
cyclic函数创建一个有状态的循环生成器,它可以生成连续的德布鲁因(de Bruijn)序列块。德布鲁因序列是一种特殊的字符串序列,其中每个可能的子串都恰好出现一次,可以用于分析地址偏移等问题。
cyclic_data = cyclic(100) # 生成一个长度为100的德布鲁因序列块
print(cyclic_data) # (1)!
offset = cyclic_find(cyclic_data[7:11]) # 查找子串在序列中的偏移位置 (2)
print(offset) # (3)!
b'aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa'- 默认情况下生成的是4字节长度的子串,因此也只需提供4个字节。即使只有4个字节,也可以提供约446KB的总空间1!
7