[PWN][进阶篇]使用GDB附加调试64位程序

使用GDB附加调试64位程序

pwntools开发脚本时如何调试:
1、使用proc.pidof§函数先将被测函数的PID打印出来
2、 用GDB Attach上去调试即可

本次实验的代码如下:
[PWN][进阶篇]使用GDB附加调试64位程序_第1张图片
使用checksec指令来看看
在这里插入图片描述没有nx保护,没有pie保护,地址不随机化,没有栈执行的保护,没有stack保护,64位的程序
使用objdump指令看看汇编语句
[PWN][进阶篇]使用GDB附加调试64位程序_第2张图片典型的64位可以看到rbp什么的
[PWN][进阶篇]使用GDB附加调试64位程序_第3张图片
看到了expliot函数,这个是我们要利用的函数

[PWN][进阶篇]使用GDB附加调试64位程序_第4张图片
然后开启gdb,老规矩,pattern create 200
r
[PWN][进阶篇]使用GDB附加调试64位程序_第5张图片在这里插入图片描述
现在开始写exp

代码如下
[PWN][进阶篇]使用GDB附加调试64位程序_第6张图片
输出pid主要是为了下一步附加进程分析用的,p64后面的地址是exploit的函数入口地址

[PWN][进阶篇]使用GDB附加调试64位程序_第7张图片
getshell成功

调试的话要在sendline之前暂停一下,把gdb附加进去
[PWN][进阶篇]使用GDB附加调试64位程序_第8张图片暂停成功
[PWN][进阶篇]使用GDB附加调试64位程序_第9张图片

附加成功,暂停到了cmp指令
[PWN][进阶篇]使用GDB附加调试64位程序_第10张图片然后exp那边先运行了,获取了shell,然后在gdb这边一直单步
[PWN][进阶篇]使用GDB附加调试64位程序_第11张图片
单步到这里,我们分析一下,gets中我们会获取什么,是不是我们刚才填充的a啊,对吧
[PWN][进阶篇]使用GDB附加调试64位程序_第12张图片
我们可以看到寄存器中都是a,继续单步
[PWN][进阶篇]使用GDB附加调试64位程序_第13张图片[PWN][进阶篇]使用GDB附加调试64位程序_第14张图片我们ret到了expliot函数那里,汉看到了call system函数

[PWN][进阶篇]使用GDB附加调试64位程序_第15张图片
调用成功,nice!!如下图
[PWN][进阶篇]使用GDB附加调试64位程序_第16张图片当我们修改一下exp
[PWN][进阶篇]使用GDB附加调试64位程序_第17张图片
我们运行一下看看哈
[PWN][进阶篇]使用GDB附加调试64位程序_第18张图片
希望大家有所收获!!!

你可能感兴趣的:(PWN,pwn)