前言
在做CTF pwn中的堆题时,由于glibc版本不同,很多堆的利用方式也不同,因此需要频繁更换libc版本,为了更加便捷的做题,在本文中我将介绍kali linux下用glibc-all-in-one与patchelf的方式进行glibc版本的更换
参考大佬链接:
https://www.cnblogs.com/tolele/p/16534014.html
https://blog.csdn.net/weixin_49764009/article/details/124970461
工具准备:安装glibc-all-in-one与patchelf
cd ~ #个人习惯安装到根目录下,记得进入自己想要安装的路径下再进行git clone
sudo git clone https://github.com/matrix1001/glibc-all-in-one.git #若是不成功多试几次或者重启,一般都为网络原因
安装glibc-all-in-one
cd glibc-all-in-one
ls
sudo python3 updata_list
下载所需libc
这是glibc-all-in-one提供可下载的glibc版本
下载:
# sudo ./download 所需libc版本的名字
# 例如
sudo ./download 2.23-0ubuntu11.3_amd64
安装patchelf
sudo apt install patchelf
patchelf --version #验证是否安装成功
更改ELF的libc文件
以buu上的第一道堆题为例,其版本为Ubuntu16
因此我们就将其libc版本更改为刚刚下载的glibc2.23
# 更换链接器:
# patchelf --set-interpreter 更换libc的绝对路径 要更换的文件
# 例如:
patchelf --set-interpreter /home/tokoyomi/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so ./pwn
# 更换glibc搜索路径:
# 用法与更换解释器类似:
# patchelf --set-rpath libc文件所在文件夹的绝对路径 要更换的文件
# 例如:
patchelf --set-rpath /home/tokoyomi/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64 ./pwn
此时该ELF文件执行便会按照指定libc运行,大功告成
Comments | NOTHING