PWN堆题换libc方法

patchelf

1
2
patchelf --set-interpreter  ld-2.23.so FILENAME   
patchelf --replace-needed libc.so.6 FILENAME

基于pwndocker的换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
#! /bin/bash

if [[ $# < 1 ]]; then
echo "Usage: ./chlibc [your_elf] [libc_version] [arch]"
echo "2.19 2.23 2.24 2.27 2.28 2.29 2.30"
exit
fi

echo $2
#2.19 2.23 2.24 2.27 2.28 2.29 2.30
arch=$3
libc=$2
file=$1

echo "Change $file to libc $libc"
if [[ $libc != '' ]]; then
if [[ $arch == '32' ]];then
patchelf --set-interpreter /glibc/$libc/$arch/lib/ld-$libc.so $file
patchelf --replace-needed libc.so.6 /glibc/$libc/$arch/lib/libc-$libc.so $file
else
arch=64
patchelf --set-interpreter /glibc/$libc/$arch/lib/ld-linux-x86-64.so.2 $file
patchelf --replace-needed libc.so.6 /glibc/$libc/$arch/lib/libc-$libc.so $file
fi
else
echo "Change as default!"
patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 $file
fi
echo "Finished!"

Tips

注意一下,换的libc版本要和lib版本是一样的,所以我们需要将lib也一起换掉,也就是ld-libc.so文件。

可以直接运行libc.so.6 文件来看看libc版本,如果不行,就用main arena offset来查看版本。

https://github.com/bash-c/main_arena_offset.git