让程序强行加载特定版本Glibc

Chiu Lv4

通过 LD_LIBRARY_PATH 或者 LD_PRELOAD(库打桩机制:运行时打桩)

因为 ld.so 和 libc.so 不匹配的原因,所以直接设置 LD_PRELOAD 可能会炸,就如下所示…

1
2
$ LD_PRELOAD=./libc.so.6 ./baby_tcache
段错误 (核心已转储)

可以将配套的 ld 和 libc 一起使用即可实现动态加载 libc。只需将下面代码中 LD_PRELOAD 后面的 “/path/to/libc.so.6” (要加载的 libc 的路径)和第二行的 “/path/to/ld.so” (要加载的 ld 的路径)替换成相应文件的路径就行了。

1
2
$ LD_PRELOAD=/path/to/libc.so.6;
$ /path/to/ld.so ./test

在 pwntools 启动程序时,可以按照下面的代码进行设置。

1
2
p = process(["/path/to/ld.so", "./test"],
env={"LD_PRELOAD":"/path/to/libc.so.6"})

通过 patchelf 修改 ELF 文件

1
2
$ patchelf --set-interpreter /opt/libs/2.27-3ubuntu1_amd64/ld-2.27.so ./patchelf
$ patchelf --replace-needed libc.so.6 /opt/libs/2.27-3ubuntu1_amd64/libc-2.27.so ./patchelf

​ 先用 “–set-interpreter“ 这个选项来将旧的 ld.so 替换为要加载的 ld.so,然后使用 “–replace-needed“ 这个选项将旧的 libc.so 替换成要加载的 libc.so。在使用 “–replace-needed” 时,第 2 个参数是程序原本的动态库的路径,可以由 ldd $目标文件 得到,第 3 个参数是新的动态库的路径第 4 个参数为要修改文件的路径

更换libc脚本:

我写了个简单脚本,使用 “patchelf” 给 ELF 文件 Patch 上 “glibc all in one” 下载的 libc。将下面脚本以 “chlibc.sh” 保存后,只需要

使用 ./chlibc.sh $libc所在目录 $目标文件 就能修改 libc 了

例如 ./chlibc.sh /opt/libs/2.23-0ubuntu10_i386 echo3 就是将 “echo3” 这个 ELF 文件的 libc 和 ld 换成 /opt/libs/2.23-0ubuntu10_i386 这个目录下的 libc 和 ld。

1
2
3
4
5
6
7
8
9
10
11
set -x
libc_path=$1
elf_path=$2
patchelf_bin_path="/path/to/patchelf"
if [ -f ${libc_path}/ld-[2].[0-9][0-9].so ]; then
$patchelf_bin_path --set-interpreter $libc_path/ld-[2].[0-9][0-9].so $elf_path
fi
if [ -f $libc_path/libc-[2].[0-9][0-9].so ]; then
$patchelf_bin_path --replace-needed libc.so.6 $libc_path/libc-[2].[0-9][0-9].so $elf_path
fi
set +x

需要注意的是 patchelf 可能会有 Bug,所以使用从 Github 上的代码进行编译得到的 patchelf 能避开一些 Bug。

编译时使用特定libc和ld

1
2
gcc xxx.c -o xxx -L/path/to/libc.so -Wl,--rpath=/path/to/libc.so -lc -Wl,--dynamic-linker=/path/to/ld.so

eg:

1
gcc fastbin_dup.c -o fastbin_dup3 -L/home/kali/Desktop/Chall/fastbin_dup -Wl,--rpath=/home/kali/Desktop/Chall/fastbin_dup -lc -Wl,--dynamic-linker=/home/kali/tools/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so

原文链接:[原创]关于不同版本 glibc 更换的一些问题-Pwn-看雪-安全社区|安全招聘|kanxue.com

  • Title: 让程序强行加载特定版本Glibc
  • Author: Chiu
  • Created at : 2024-07-31 14:04:20
  • Updated at : 2024-07-31 14:07:06
  • Link: https://github.com/Idealist17/github.io/2024/07/31/让程序强行加载特定版本Glibc/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments