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