更改pwn题libc

参考:
★pwn 更改pwn题libc保姆级教程★_pwn libc-CSDN博客

glibc-all-in-one

我已经有了

仓库链接:
https://github.com/matrix1001/glibc-all-in-one

patchelf

我也有了

glibc-all-in-one下载与调整libc

如果题目没有给libc
则需要泄漏并使用LibcSearcher

如果题目给了libc:

1
strings libc.so.6 | grep ubuntu


glibc版本为2.23-0ubuntu11.3(主版本号-某一系统特定的版本修订号)
在glibc-all-in-one下

1
cat list


可以查看所有能够下载的libc版本

现在我们可以下载2.23-0ubuntu11.3_amd64

1
./download 2.23-0ubuntu11.3_amd64

执行后即可下载
下载完它会保存在~/glibc-all-in-one/libs

进入该libc中

可以发现有一个.debug目录,这个目录中保存了该libc的符号表信息
进入.debug/lib/x86_64-linux-gnu,可以找到libc-2.23.so文件

将这个文件,放到.debug/目录下。
也可以把这些文件全部拖到.debug/

这样,就可以在不动用gdb的命令的情况下,patchelf更改好文件libc后,
gdb打开后就能直接加载好符号表

但是,ubuntu版本在2.31和2.34后的符号信息表位置发生了些许变化

我们只需要省流操作:
.debug/目录下执行

1
cp .build-id/*/* ./

./build-id/目录以及其子目录下的文件,都复制到.debug/目录下


使用patchelf

接下来, 是使用patchelf更改libc的操作

先将~/glibc-all-in-one/libs/下的2.23-0ubuntu11.3_amd64移动到pwn题目文件的同级目录下,然后执行: 即可

1
patchelf <fileName> --set-interpreter ./2.23-0ubuntu3_amd64/ld-2.23.so --set-rpath ./2.23-0ubuntu3_amd64

-set-interpreter:设置ld,要指定为目录下的ld文件
-set-rpath:设置了运行环境,要指定为libc的目录

2.25以上:

1
patchelf <fileName> --set-interpreter ./2.35-0ubuntu3.8_amd64/ld-linux-x86-64.so.2 --set-rpath ./2.35-0ubuntu3.8_amd64

(ld换成了默认的了,没有具体的版本名了)


LibcSearcher项目
zarkivy/LibcSearcher: 🔍 LibcSearcher-ng – get symbols’ offset in glibc.


学了一些命令

1
lsof | grep /path/to/your_binary

查看目标程序的进程

1
killall -9 your_binary

强制终止所有相关进程




可以使用

然后再patchelf即可


更改pwn题libc
http://example.com/2025/03/04/更改pwn题libc/
作者
yvyvSunlight
发布于
2025年3月4日
许可协议