libc版本问题

之前做堆的题总是会与到与libc版本的相关问题,这里开一篇新文,讲一讲目前遇到的有关于在做题的的libc版本不同的问题与解决方案。

patchelf

这个可以说是做堆题的必备神器,大多数的堆的漏洞与版本有关,不同的版本的堆题对bin和chunk的管理方式各不相同,故很多题目在附件中会一同把libc版本一同下发,遇到这种事便可以直接在我们本地的libc库中寻找到相应的版本然后直接patchelf上题就行。关于这个工具的使用具体可以看之前的有篇文章,写的有这里不细讲

食用方法

1
patchelf --set-interpreter libc文件名(包括路径) --set-rpath libc文件所在的文件夹全名(包括路径) pwn(文件名)	

寻找libc

有的题目并不会直接把libc文件下发,而是同题目一起发一个libc.so.6文件,这个文件其实也能看出这道题要使用的libc版本,不过要使用一个命令。

1
strings libc.so.6  | grep GLIBC

image-20240610153131951

这样也能知道这个的libc版本为Ubuntu GLIBC 2.31-0ubuntu9.2然后在patchef相应的libc做这道题就行。

libc版本下载

关于libc版本的的下载,这个确实在glibc-all-in-one这里面就已经有大部分的libc版本。

先讲这个里面有的libc版本的食用吧

image-20240610153937881

这是里面有的文件,在这里面的libc文件夹里面就是我们已经下了的libc文件,如果里面没有我们需要的libc版本,这我们可以这里在个页面下,

image-20240610154438708

先使用cat list查看我们可以再这里面下的版本,先确定要下的版本的名字后使用下面这个命令下载

1
./download 版本名字

image-20240610154926138

像这样就算这个版本下好了,然后便可以去之前那个的libc文件夹中食用了。

出了这些之外,还可以使用宁外一个命令查看和下载宁外一些版本

1
cat old_list

image-20240610155344821

这里面也有一些版本的现在,不过由于是过时的版本所以加上了old,

同样的在下载时也要用不同的命令下载

1
./download_old 版本名

image-20240610155728919

这样下好之后就可以去libc文件夹中食用了。

如果你发现这两个里面都没有你所要的libc版本(有的题目是真的ex,非要用一些小版本)

那便要去网上下相应的文件解压食用了。

拿上面的需要的libc2.31的9.2版本来说,这个版本在我们的这里是没有的我们只能去网上找了下来用,

在之前的文件中有一个debs的文件夹其中放着的就是各个libc版本的deb文件,我们要下的也是这种文件,

amd64 build : 2.31-0ubuntu9.2 : glibc package : Ubuntu (launchpad.net)

可以在这个网站上下载

image-20240610161714030

把这个标黄的下载来就行

image-20240610161813782

拖动到之前的那个debs文件夹中便是这个样子,

然后解压就行,

以下来源于Ubuntu系统下deb包的解压、打包、安装、卸载及常用命令_ubuntu解压deb-CSDN博客这篇文章。

1.首先下载deb包,比如:将其放在 /home/tools/ 根目录下:

2.进入到tools根目录下的终端,输入下面命令创建文件夹extract,并在extract文件夹下创建DEBIAN文件夹

1
mkdir -p extract/DEBIAN

3.将deb包解压到extract文件夹下

1
dpkg -X ./xxx.deb extract

4.解压deb包中的control信息(包的依赖在这里面的control文件中)

1
dpkg -e ./xxx.deb extract/DEBIAN

5.创建build文件夹

1
mkdir build

6.将解压到extract文件夹中所有的内容重新打包为deb包

1
dpkg-deb -b extract build/

7.安装deb包

1
dpkg -i xxx.deb  (如果出现权限拒绝,在 dpkg 前加上 sudo 即可)

8.卸载deb包

1
dpkg -r xxx.deb  ( -r 参数只是删除了软件包,不能完全删除其配置文件,如果想要连同配置文件一起删除,可以使用 -P 参数)

常用命令参数实例

1
2
3
4
5
6
7
8
9
10
dpkg -i package.deb #安装包 
dpkg -r package #删除包
dpkg -P package #删除包(包括配置文件)
dpkg -L package #列出与该包关联的文件
dpkg -l package #显示该包的版本
dpkg --unpack package.deb #解开deb包的内容
dpkg -S keyword #搜索所属的包内容
dpkg -l #列出当前已安装的包
dpkg -c package.deb #列出deb包的内容
dpkg --configure package #配置包

我们只要运行的第四部就可以食用了

打开同目录的extract文件夹,在打开里面的lib文件夹里面的那个就存放这我们要的libc版本,然后使用相同的patchelf就可以开始食用题目了。