pwn题更换libc版本

做pwn题的时候会遇到本地libc版本与远程libc版本不一样的问题,在打本地时和远程会有明显的差别。

可以不需要下载ubuntu的各种版本,使用patchelf + glibc-all-in-one就可以了。

安装patchelf

1
$ sudo apt install patchelf

不可以直接安装patchelf的话,从github上下载:

1
$ git clone https://github.com/NixOS/patchelf

下载 glibc-all-in_one

1
$ git clone https://github.com/matrix1001/glibc-all-in-one

下载完glibc-all-in_one之后,进入此文件夹

1
2
3
$ ./update_list             #更新最新版本的glibc
$ cat list #查看可下载的glibc
$ ./download 2.23-0ubuntu11.2_amd64 #glibc为你想要下载glibc的名字

可以下载自己需要的glibc版本,list没有,可以使用./download_old libc版本号来下载

使用patchelf修改本地pwn的libc版本 如:修改原来libc.so.6版本为libc-2.23.so

1
2
$ patchelf --replace-needed libc.so.6 ./2.23/libc-2.23.so ./xuxu
$ pathcelf ----set-interpreter ./2.23/ld-2.23.so ./xuxu

修改成功之后可以ldd查看

1
$ ldd xuxu

libc版本已经更改成功可以在本地愉快的调试啦

pwndbg不能heap的话设置一下debug

1
pwndbg> set debug-file-directory ./2.23/.debug/