2021/10/18-如何调试pwn的exp或payload

3 篇文章 0 订阅

《2021年10月18日》 【连续第18天总结】

首先需要明白的是,你调试的exp.py是你输入的内容(即程序获取用户输入的信息)。
通过exp.py脚本与程序交互执行你的输入,跟手动一次次输入并无两样,所以想通过下断点调试查看你希望看到的具体位置数据的方法是一样的。

pwn调试小技巧

pwntool工具中一些好用的模块

context.log_level="debug"	//输出显示调试信息,即用户输入与程序交互的信息

context.terminal = ["tmux","splitw","-h"] //利用tmux工具分屏显示
这个需要先运行tmux程序,再执行exp.py脚本,
然后配合gdb.attach()使用,才会被启动。

说明:单独使用gdb.attach()会新开启一个调试终端(下面实例展示)。

实例调试exp.py

在这里插入图片描述这是一个两次发送send.line()数据的exp.py,即用户需要两次输入与程序交互的数据。

程序中注释了两个pause()语句,当想查看第一次send.line()后的调试信息时,gdb.attach()放置的位置应该在第一个send.line()位置前方。如果解除第一个pause()语句,断下的位置仍是第一次send.line()后的位置,pause()语句的作用只单独起到等到用户第二次输入与程序交互,即第二次send.line()没被执行。
由于gdb.attach()会引起交互堵塞问题,多个pause()无法实现断电效果,所以如下一对使用才构成断点:

gdb.attach()
...
pause()

所以调试需要多次变成gdb.attach()pause位置。
如上图如需测试第二次send.line()前状态,需要把上面一对gdb.attach()pause打开,把前面一对注释。2023-05-17[补充]

测试:程序断在第一次read()函数读取用户输入数据后
在这里插入图片描述至于什么如下方式为什么无法持续调试?或如何持续调试,不用多次修改注释的方法?
有知道的师傅还请评论区分享告知。

gdb.attach()
pause()	//后续pause()无法使gdb断下
pause()	
pause()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值