使用GDB附加调试64位程序

pwntools开发脚本时如何调试:

1、使用proc.pidof§函数先将被测函数的PID打印出来

2、 用GDB Attach上去调试即可

本次实验的代码如下:

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

使用checksec指令来看看

[PWN][进阶篇]使用GDB附加调试64位程序_system函数_02没有nx保护,没有pie保护,地址不随机化,没有栈执行的保护,没有stack保护,64位的程序

使用objdump指令看看汇编语句

[PWN][进阶篇]使用GDB附加调试64位程序_pwn_03典型的64位可以看到rbp什么的

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

看到了expliot函数,这个是我们要利用的函数

[PWN][进阶篇]使用GDB附加调试64位程序_随机化_05

然后开启gdb,老规矩,pattern create 200

r

[PWN][进阶篇]使用GDB附加调试64位程序_随机化_06[PWN][进阶篇]使用GDB附加调试64位程序_随机化_07

现在开始写exp

代码如下

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

输出pid主要是为了下一步附加进程分析用的,p64后面的地址是exploit的函数入口地址

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

getshell成功

调试的话要在sendline之前暂停一下,把gdb附加进去

[PWN][进阶篇]使用GDB附加调试64位程序_寄存器_10暂停成功

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

附加成功,暂停到了cmp指令

[PWN][进阶篇]使用GDB附加调试64位程序_随机化_12然后exp那边先运行了,获取了shell,然后在gdb这边一直单步

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

单步到这里,我们分析一下,gets中我们会获取什么,是不是我们刚才填充的a啊,对吧

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

我们可以看到寄存器中都是a,继续单步

[PWN][进阶篇]使用GDB附加调试64位程序_随机化_15[PWN][进阶篇]使用GDB附加调试64位程序_寄存器_16我们ret到了expliot函数那里,汉看到了call system函数

[PWN][进阶篇]使用GDB附加调试64位程序_随机化_17

调用成功,nice!!如下图

[PWN][进阶篇]使用GDB附加调试64位程序_寄存器_18当我们修改一下exp

[PWN][进阶篇]使用GDB附加调试64位程序_随机化_19

我们运行一下看看哈

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

希望大家有所收获!!!