[CTF]-PWN:更换libc的pwn题(WSL ubuntu更换libc和ld的方法详解)

首先,要下载好patchelf和glibc-all-in-one,这个在这里就不多说了。

第二步,用题目给的libc查看elf文件应该要用的libc版本

strings 题目的libc | grep ubuntu
例如:strings /root/libc.so.6 | grep ubuntu

第三步,从glibc-all-in-one里下载对应的版本,详细看下图

[CTF]-PWN:更换libc的pwn题(WSL ubuntu更换libc和ld的方法详解)_第1张图片

记得要下载相近的版本,最好是一样的版本,不然会打不通,这里只是演示方法。

第四步,用ldd命令查看elf文件当前的libc和ld

如果在不进行更换的情况下,libc默认用本地系统的libc和ld。

如果是打远程的话,用的是远程机子的libc和ld,这就是为什么在python exp里用题目给的libc打远程打得通,打本地打不通的原因,题目里的libc只是用于计算地址,不会更改文件的libc,python exp计算地址是一个libc,程序运行又是一个libc,要文件的libc和python exp里计算地址的libc一致才能解题。

第五步,更改elf文件的libc和ld

更改ld:

patchelf --set-interpreter 新的ld路径 文件名
例如:patchelf --set-interpreter /root/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/ld-2.23.so babyrop2
patchelf --set-interpreter /root/glibc-all-in-one/libs/2.23-0ubuntu3_i386/ld-2.23.so hacknote

更改libc:

patchelf --replace-needed 原来第二行的==>前的libc名 要更换成的libc 文件名
例如:patchelf --replace-needed libc.so.6 /root/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/libc-2.23.so babyrop2
patchelf --replace-needed libc.so.6 /root/glibc-all-in-one/libs/2.23-0ubuntu3_i386/libc-2.23.so hacknote

这里有一个注意的点,路径要从/root开始。用WSL的话要注意这一点

然后更换题目libc和ld就完成了,可以用ldd查看是否更换完成,如果有not found那就是没更换完成,这样有可能程序无法启动。

你可能感兴趣的:(postgresql,数据库,网络安全)