PWN题本地更换libc环境攻略
PWN题本地更换libc环境攻略
准备工作
下载工具
patchelf
git clone https://github.com/NixOS/patchelf |
glibc-all-in_one
git clone https://github.com/matrix1001/glibc-all-in-one |
1.查看题目libc版本
大部分情况下,直接运行libc库即可。
如果不行的话,使用下面这个命令
strings libc.so.6 | grep 'Ubuntu GLIBC' |
2.下载指定libc
进入下载好的 glibc-all-in-one 文件夹,
输入下面命令:
./update_list #更新最新版本的glibc |
找到需要的glibc版本,用下面的命令下载到本地
./download 2.31-0ubuntu9.5_amd64 |
如果在list中没有找到需要的 glibc版本(版本较老)
输入下面的命令打开老版本glibc列表:
cat old_list |
然后用这个命令下载:
./download_old 2.26-0ubuntu2.1_amd64 |
这样需要的glibc文件就下载到本地了,在 /glibc-all-in-one/libs 中
3.利用patchelf修改题目环境
输入下面命令即可, 三个[ ]分别对应 ld文件地址、glibc文件夹、题目文件
patchelf --set-interpreter [~/glibc-all-in-one/libs/2.26-0ubuntu2.1_amd64/ld-2.26.so] --set-rpath [~/glibc-all-in-one/libs/2.26-0ubuntu2.1_amd64] [./gundam] |
--set-rpath
后面的地址有时候需要加上 “ / ” 有时候不用,感觉是玄学问题,使用时需要注意一下!!!
原理:
patchelf --set-rpath
的作用是 在ELF文件的 Dynamic section 的中添加一个 RUNPATH 段里面储存着动态链接库的绝对路径,即设置程序的动态链接库
patchelf --set-interpreter
的作用是 在ELF文件的 interp section 设置 interpreter 项的值为 ld加载器绝对路径,即设置程序的动态链接库加载器
如果在 old_list 和 list里都没有找到合适的版本
比如 2.27_1.4版本:
我们可以选择相近的版本,这里选择 2.27_1.5版本 的。
我们可以将题目给予的libc文件 2.27_1.4版本 放入下载的 2.27_1.5版本 的文件夹里,让它代替文件夹里的libc-2.27.so文件,因为两个版本相差不大所以使用 1.5版本的ld文件 链接时一般不会出现问题,这样1.4版本的libc就能被成功加载
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 爱玩且很菜!
评论
ValineDisqus