pwntools工具的使用
引入pwntools库
# 虽然不太符合pylint代码规范
# 但官方也推荐这样引用
from pwn import *
基本的输入输出和交互
绑定要处理的程序
# 远程
# remote(ip/hostname, port)
p = remote("127.0.0.1", 8888)
# 本地
# 注意process中参数一定要有./
p = process("./pwn")
设置上下文环境
# 设置上下文环境主要用于一些需要上下文的漏洞利用
# 比如:shellcode的生成
# 设置操作系统
context.os = "linux"
# 设置32位的体系架构
context.arch = "i386"
# 设置64位的体系架构
context.arch = "amd64"
# 打印交互中的输入和输出
context.log_level = "debug"
# 也可以直接这样写
context(os="linux", arch="amd64", lod_level="debug")
# 清空之前的上下文
context.clear()
# 清空之前的上下文并设置为64位的体系架构
context.clear(arch="amd64")
获取程序输出
p.recv() # 默认接受最大为4096字节的输出
p.recvline() # 接受程序的一行输出
p.recvall() # 接受程序的当前全部输出,直到遇到EOF
# 直到接收到\n为止,drop=True表示丢弃\n,buf为接收到的输出但不包括丢弃的\n
buf = p.recvuntil("\n", drop=True)
payload的构造
pad = cyclic(0x10)
# 可以用上面的代码替代传统的构造方式 pad = b"A" * 0x10
# 其结果为 b'aaaabaaacaaadaaa'
of