更换libc丝滑小连招

更换libc丝滑小连招

主要参考大佬的一篇文章

★pwn 更改pwn题libc保姆级教程★

主要记录一下clibc的脚本

大佬给的脚本不是很符合自己的习惯

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/bash

FILE_NAME=$1
LIBC_VERSION=$2
WORKDIR=$(pwd)

# 判断 ELF 文件位数
EBIT=$(file "$FILE_NAME" | awk '{print $3}' | cut -c 1-2)
if [ "$EBIT" -eq "32" ]; then
LIBC_DIR=/usr/lib/freelibs/i386
elif [ "$EBIT" -eq "64" ]; then
LIBC_DIR=/usr/lib/freelibs/amd64
else
echo "It's not an ELF file."
exit 1
fi

# 查找 libc 文件
libc_dir=$(find "$LIBC_DIR" -name "$LIBC_VERSION*")
if [ -z "$libc_dir" ]; then
echo "Not supported version or your $LIBC_DIR doesn't have libc."
exit 1
fi

# 提取版本号
LIBC_VERSION_CLEAN=$(echo "$LIBC_VERSION" | cut -d '-' -f 1)
LIBC_VERSION_MAJOR=$(echo "$LIBC_VERSION_CLEAN" | cut -d '.' -f 1)
LIBC_VERSION_MINOR=$(echo "$LIBC_VERSION_CLEAN" | cut -d '.' -f 2)

# 组合短版本号
LIBC_VERSION_SHORT="$LIBC_VERSION_MAJOR.$LIBC_VERSION_MINOR"

# 处理动态链接库
if [ "$3" ]; then
if [[ "$LIBC_VERSION_MAJOR" -gt 2 || \
("$LIBC_VERSION_MAJOR" -eq 2 && "$LIBC_VERSION_MINOR" -gt 33) ]]; then
if [ "$EBIT" -eq "32" ]; then
patchelf --set-interpreter "$libc_dir/ld-linux.so.2" --set-rpath "$WORKDIR/" "$FILE_NAME"
else
patchelf --set-interpreter "$libc_dir/ld-linux-x86-64.so.2" --set-rpath "$WORKDIR/" "$FILE_NAME"
fi
else
patchelf --set-interpreter "$libc_dir/ld-$LIBC_VERSION_SHORT.so" --set-rpath "$libc_dir/" "$FILE_NAME"
fi
else
if [[ "$LIBC_VERSION_MAJOR" -gt 2 || \
("$LIBC_VERSION_MAJOR" -eq 2 && "$LIBC_VERSION_MINOR" -gt 33) ]]; then
if [ "$EBIT" -eq "32" ]; then
patchelf --set-interpreter "$libc_dir/ld-linux.so.2" --set-rpath "$libc_dir/" "$FILE_NAME"
else
patchelf --set-interpreter "$libc_dir/ld-linux-x86-64.so.2" --set-rpath "$libc_dir/" "$FILE_NAME"
fi
else
patchelf --set-interpreter "$libc_dir/ld-$LIBC_VERSION_SHORT.so" --set-rpath "$libc_dir/" "$FILE_NAME"
fi
fi

echo "success!!!"

使用教程

1
2
clibc xxx <完整版本号>
#clibc ret 2.27-3ubuntu1.6_amd64

这样就可以丝滑切换任何小版本了

关于下载glibc-all-in-one中没有的小版本

1
https://launchpad.net/ubuntu/+source/glibc/<libc版本> ##例如2.31-0ubuntu9.9

进入网站后点击想要的版本

image-20241120160500490

在Built中下载相应的文件

image-20241120160606618

然后拖进glibc-all-in-one中的debs

执行命令

1
2
./extract debs/libc6_2.31-0ubuntu9.9_i386.deb libs/2.31-0ubuntu9.9_i386
./extract debs/libc6-dbg_2.31-0ubuntu9.9_i386.deb libs/2.31-0ubuntu9.9_i386/.debug