glibc版本的更换

前言

在我们学习pwn或者做pwn题的时候,尤其是涉及到堆的时候,glibc版本的要求也是比较重要的。

介绍

Libc,Glibc都是Linux版本下的C语言函数库

Libc(C Library)是ANSI C最基本的C语言函数库,由头文件不同被划分为15个部分。

Glibc(GNU Library)是GNU C函数库的一部分,主要适用于Linux系统。

如何更换glibc版本

1、下载安装patchelf

1
sudo apt install patchelf

输入:

1
patchelf -h

看是否安装成功

image-20230812215516442

2、下载glibc-all-in-one

1
git clone https://username:passwords@github.com/matrix1001/glibc-all-in-one

然后执行:

1
2
3
update_list
./update_list
会出现list和old_list

image-20230812233257619

然后可以使用cat list查看我们需要的libc。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
root@ubuntu:~/glibc-all-in-one# cat list
2.23-0ubuntu11.3_amd64
2.23-0ubuntu11.3_i386
2.23-0ubuntu3_amd64
2.23-0ubuntu3_i386
2.27-3ubuntu1.5_amd64
2.27-3ubuntu1.5_i386
2.27-3ubuntu1.6_amd64
2.27-3ubuntu1.6_i386
2.27-3ubuntu1_amd64
2.27-3ubuntu1_i386
2.31-0ubuntu9.12_amd64
2.31-0ubuntu9.12_i386
2.31-0ubuntu9.7_amd64
2.31-0ubuntu9.7_i386
2.31-0ubuntu9.9_amd64
2.31-0ubuntu9.9_i386
2.31-0ubuntu9_amd64
2.31-0ubuntu9_i386
2.35-0ubuntu3.1_amd64
2.35-0ubuntu3.1_i386
2.35-0ubuntu3.3_amd64
2.35-0ubuntu3.3_i386
2.35-0ubuntu3_amd64
2.35-0ubuntu3_i386
2.36-0ubuntu4_amd64
2.36-0ubuntu4_i386
2.37-0ubuntu2_amd64
2.37-0ubuntu2_i386
2.38-1ubuntu2_amd64
2.38-1ubuntu2_i386
2.38-1ubuntu3_amd64

找到需要的Libc,执行命令

1
./download 版本

更换libc

比如说我们现在有一个ELF文件,我们是希望用libc-2.27.so版本的函数库。

因为本机实验的在Ubuntu16.04下,所以这里用ldd查看文件时libc版本是libc.so.6。所以需要更换为

libc-2.27.so

image-20230812233730097

使用根据上述操作执行

1
cat list

image-20230812234117648

再执行:

1
./download 2.27-3ubuntu1_amd64

这时候会出现两个文件夹image-20230812234229214

然后在libs这个文件下找到对应的ld文件和libc文件。

image-20230812234407774

写命令修改:

1
2
3
patchelf --set-interpreter /root/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/ld-2.27.so ./demo1

patchelf --set-rpath /root/glibc-all-in-one/libs/2.27-3ubuntu1_amd64 ./demo1

执行完之后

image-20230812234559473

可以看见已经成功修改了。