用patchelf改程序后在exp中用gdb.attach()调试堆栈
用patchelf改程序后在exp中用gdb.attach()调试堆栈
问题来源
在做pwn题时,经常遇到题目的libc版本与自己虚拟机的版本不同,
而用patchelf改链接后,gdb堆栈指令看不了,困扰了我很久,查阅了很多师傅的博客找到了一种解决办法
实现方法:
我这边拿2020纵横杯 wind_farm_panel这道pwn题做演示
它的靶机是Ubuntu 16.04,libc2.23
而我自己的虚拟机为kali 2022.3,libc2.36
首先patchelf改链接:
ld可以在glibc-all-in-one中找到
1 | patchelf --replace-needed libc.so.6 你要换的libc的硬路径 ./pwn |
我这里改为
成功改完之后发现gdb堆栈的指令实现不了
出现报错
这里面的下载了也没用
1 | heap: This command only works with libc debug symbols. They can |
然后那个pwntools里的gdb.attach()显然也用不了那些看堆栈的指令
我们在gdb里输入命令
1 | show debug-file-directory |
可以发现单独调试信息文件的目录在/usr/lib/debug
我们直接找到glibc-all-in-one中对应2.23版本的,然后使用
1 | set debug-file-directory 目录 |
结果:
gdb ./pwn
可以用看堆栈的指令了(虽然它提示no debugging symbols)
然后是pwntool中的gdb.attach()
也可以使用了堆栈的指令了
做题就方便很多了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Daily Study!