使用电脑浏览效果更佳!
摘要
缘起于要了解pwntools编写exp脚本通过send或者sendline发送给二进制程序后,结合gdb调试此刻程序的运行状态,如堆分布。但通过下断点在程序手工输入payload未免太麻烦(也可以说是调试payload吧)。调试的效果如下
解决方案
方案一
利用pwntools的gdb.attach(),直接写在exp里面
如:
#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)
方案二
./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