做pwn题目到了堆题目就是和glibc打交道,所以系统默认的一个libc肯定是满足不了各种题目类型的需求的,刚开始学习pwn时就看别人文章说最好一起下载ubuntu16\ubuntu18没想明白是为什么,直到接触了堆题,哦~原来如此,不过因为我是将ubuntu20安装在了物理机上,所以就想办法给整合在一起了
试过了通过glibc-all-in-one直接下载编译源码,但是编译的时候一直各种报错,无奈尝试另一种方式
现在我用的方法如下:
下载patchelf , glibc-all-in_one
git clone https://github.com/NixOS/patchelf
git clone https://github.com/matrix1001/glibc-all-in-one
然后根据glibc-all-in_one官方提示说进入到文件目录,如果没有执行权限就给权限download,通过cat list 和 old_list可以看到可下载的libc版本如图:
然后./download 2.23-0ubuntu11_amd64
(ubuntu16.0.4就是用这个),但是因为libc-all-in-one默认使用的是清华的镜像源,所以找不到2.23-0ubuntu11_amd64这个版本,因为我开了代理所以就干脆就将download文件的源改了外网的源(因为外网有这个版本)如图:
下载的deb包在debs文件下面,如图:
就可以下载源码了,最后下的源码在glibc-all-in-one/libs目录下面,如图:
最后通过patchelf工具即可修改程序libc链接.
如下是我写的脚本将要修改的程序当作参数传就ok了
load_libc2_33.sh
patchelf --set-interpreter ~/glibc-all-in-one/libs/2.33-0ubuntu5_amd64/ld-2.33.so "$1" && patchelf --replace-needed libc.so.6 ~/glibc-all-in-one/libs/2.33-0ubuntu5_amd64/libc-2.33.so "$1"
使用:
./load_libc2_33.sh pwn
自行编译glibc(如果是低版本的glibc要用对应低版本的gcc去编译,不然会报错)
wget https://ftp.gnu.org/gnu/glibc/glibc-2.34.tar.gz
tar xvf glibc-2.34.tar.gz
cd glibc-2.34
mkdir 64
mkdir build
cd build
CFLAGS="-g -g3 -ggdb -gdwarf-2 -Og -w" CXXFLAGS="-g -g3 -ggdb -gdwarf-2 -Og -w" ../configure --prefix=/home/hnhuangjingyu/glibc-all-in-one/tmp/glibc-2.34/64
sudo apt-get install bison
sudo apt-get install gawk
make && make install