pwntools连gdb调试脚本

使用电脑浏览效果更佳!

摘要

​ 缘起于要了解pwntools编写exp脚本通过send或者sendline发送给二进制程序后,结合gdb调试此刻程序的运行状态,如堆分布。但通过下断点在程序手工输入payload未免太麻烦(也可以说是调试payload吧)。调试的效果如下

1563325392969

解决方案

方案一

利用pwntools的gdb.attach(),直接写在exp里面

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#coding:utf-8

from pwn import *

p = process("hacknote_double_free")
magic = 0x400C23

pwnlib.gdb.attach(proc.pidof(p)[0]) # 链接gdb调试,先在gdb界面按下n下一步返回python控制台enter继续(两窗口同步)
def add(size,data):
print("to send choice") # 添加有意义的调试信息,关键的payload调试线pause一下
pause() #
p.sendafter("choice :","1") # 阻塞,方便gdb的调试
print("to send size of note")
pause()
p.sendafter("size :",str(size))
print("to send data of note")
pause()
p.sendafter("Content :",data)

方案二

1
2
3
4
5
6
7
./hacknote.py # 启动当前binary
gdb ./binary # gdb启动调试
gdb>attach(at) (pid可选) # 直接附加到脚本启动的binary进程
gdb>n
# hacknote.py利用脚本中关键payload前pause()
# 错误解决 gdb attach ptrace: Operation not permitted.
# sudo gdb ./binary
您的支持是对thonsun技术原创分享的最大鼓励!