用patchelf改程序后在exp中用gdb.attach()调试堆栈

用patchelf改程序后在exp中用gdb.attach调试堆栈

问题来源:

在做pwn题时,经常遇到题目的libc版本与自己虚拟机的版本不同,
而用patchelf改链接后,gdb堆栈指令看不了,困扰了我很久,终于想到一种
解决方法

实现方法:

我这边拿[2020 新春红包题]这道pwn题做演示
题目可在buuctf中找,它的靶机是Ubuntu 19.04,libc2.29
而我自己的虚拟机为18.04,libc2.27

首先patchelf改链接:
ld可以在glibc-all-in-one中找到

patchelf --replace-needed libc.so.6 你要换的libc的硬路径 ./pwn
patchelf --set-interpreter ld的硬路径 ./pwn

我这里改为
请添加图片描述
成功改完之后发现gdb堆栈的指令实现不了
出现报错
这里面的下载了也没用

heap: This command only works with libc debug symbols. They can
probably be installed via the package manager of your choice. See
also:
https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html

E.g. on Ubuntu/Debian you might need to do the following steps (for
64-bit and 32-bit binaries): sudo apt-get install libc6-dbg sudo dpkg
–add-architecture i386 sudo apt-get install libc-dbg:i386

请添加图片描述
然后那个pwntools里的gdb.attach()显然也用不了那些看堆栈的指令

我们在gdb里输入命令

show debug-file-directory

在这里插入图片描述
可以发现单独调试信息文件的目录在/usr/lib/debug
我们直接找到glibc-all-in-one中对应2.29版本的,把原来的删了,再拷贝2.29的过去就ok了
(只要改一下~/glibc-all-in-one/libs/2.29/这个路径,)
(建议干这之前vmware先拍个快照,题目完事了再复原就好了)

sudo rm -rf /usr/lib/debug
sudo cp -r ~/glibc-all-in-one/libs/2.29/.debug/ /usr/lib/debug

结果:
gdb ./RedPacket_SoEasyPwn1
可以用看堆栈的指令了(虽然它提示no debugging symbols)
请添加图片描述
然后是pwntool中的gdb.attach()
也可以使用了堆栈的指令了
做题就方便很多了
请添加图片描述
参考师傅:
https://blog.csdn.net/huzai9527/article/details/118558784?spm=1001.2014.3001.5506
在他的基础上更近一步

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值