0x00 起因

在做 LitCTF 2024 heap-2.27 的时候,由于这个题是一个堆题,题目给了 libc 文件,打算先通过 glibc-all-in-one 得到对应的 ld 文件。

strings libc-2.27.so | grep 'ubuntu'

对应 glibc 版本为:2.27-3ubuntu1.6_amd64

0x01 下载失败

但是当我正想输入

./download 2.27-3ubuntu1.6_amd64

来下载时,得到的结果却是:

Getting 2.27-3ubuntu1.6_amd64
-> Location:https://mirror.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/glibc/libc6_2.27-3ubuntu1.6.deb
-> Downloading libc binary package
Failed to download package from https://mirror.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/glibc/libc6_2.27-3ubuntu1.6.deb

一开始以为是代理的问题,关掉了代理之后还是这样。于是我就点开链接看了一下,发现:
貌似是镜像挂掉了,那只能手动下载安装了,我在网络上搜寻到一篇有讲到关于手动下载glibc的文章

patchelf 与 glibc-all-in-one

其中提到了 如果 /glibc-all-in-one/list 中没有所需的 glibc,还可以手动下载,我的情况是下载一直不成功,所以现在来尝试手动下载,进入文章中的网站

https://launchpad.net/ubuntu/+source/glibc

往下滑即可看到我们想要的版本,点击。
进去之后是这样一个页面,在 Builds 这一栏选择自己想要的架构
我需要的是 amd64 架构的,所以点击 amd64
点开之后在 Binary 这一栏中寻找。到這一步都是跟那個网站中讲的是一样的,但是下载文件这里被他摆了一道,这个作者说的是下载这个文件
但是我在 Binary 这一栏中下载完了之后继续跟着他的步骤走得不到想要的 libc 和 ld 文件:
按照那篇文章中的做法,接下来是放到 /glibc-all-in-one/debs/

./extract debs/libc6-dbg_2.27-3ubuntu1.6_amd64.deb libs

0x02 下错东西了?

但是我得到的结果却与平常直接通过 glibc-all-in-one 下载的不一样,在 extract 之后,我的 /glibc-all-in-one/libs 是这样的:
正常来说应该像 2.23 那样是一个正常的文件夹,但是 2.27 却分成了两个文件夹,当我跟进到最里面时:
发现正常有 libc 和 ld 文件,但当我把这两个文件 patch 上去之后程序竟然无法运行了。

0x03 解决

直接说解决办法吧,要下载的文件应该是 libc6 2.27-3ubuntu1.6 才对:
下载之后还是同样的步骤,放到 /glibc-all-in-one/debs/,然后运行 ./extract debs/libc6-dbg_2.27-3ubuntu1.6_amd64.deb libs 即可得到想要的结果:
里面的 ld 和 libc 文件都是正常能用的。