ctf-pwn-patchelf-用题目给的libc运行二进制文件
用给定的libc进行调试首先根据题目给你的libc,查找相应版本的连接器然后去glibc-all-in-one中下载相应的ld文件glibc-all-in-one安装步骤https://github.com/matrix1001/glibc-all-in-one使用查看各unbuntu版本的glibc./update_listcat list下载对应版本的glibc./download 2.27-
文章共1,053字 · 阅读需要大约4分钟
一键AI生成摘要,助你高效阅读
问答
·
用给定的libc进行调试
-
首先根据题目给你的libc,查找相应版本的连接器
-
然后去glibc-all-in-one中下载相应的ld文件
-
glibc-all-in-one
安装步骤https://github.com/matrix1001/glibc-all-in-one
-
使用
-
查看各unbuntu版本的glibc
./update_list cat list
-
下载对应版本的glibc
./download 2.27-3ubuntu1_amd64
-
下载好的glibc在lib文件夹中
-
然后复制ld文件到pwn题目录下,此命令我是在题目终端下执行的,题目文件夹下面应该有这三个文件
cp ~/ctf2021/tools/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/ld-2.27.so ./ld-2.27.so
-
-
-
有了libc文件和ld文件,就可以使用
patchelf
,修改pwn文件的执行环境-
patchelf安装,可以直接下载realse版本
https://github.com/NixOS/patchelf
-
查看,pwn原本的libc和ld
ldd ldd Mynote_Max
-
更新!这里需要生成符号连接然后再patchelf!【2021/9/26】
- 可以直接对源文件操作
sudo ln ld-2.26.so /lib64/ld-2.26.so
#然后设置解释器和libc,这样就能进行debug
#设置解释器
patchelf --set-interpreter /lib64/ld-2.26.so ./gundam
#设置libc
patchelf --replace-needed libc.so.6 ~/2.26-0ubuntu2_amd64/libc-2.26.so ./gundam
- 也可以直接在exp启动的时候操作
p = process(['/home/xuehuzhou/2.27-3ubuntu1_amd64/ld-2.27.so', './gundam'], env={"LD_PRELOAD":'/home/xuehuzhou/2.27-3ubuntu1_amd64/libc.so.6'})
-
替换libc文件
patchelf --replace-needed libc.so.6 ./libc-2.27.so ./Mynote_Max -------------------------原本的libc----要替换的libc-----pwn文件
-
设置ld文件
patchelf --set-interpreter ./ld-2.27.so ./Mynote_Max ---------------------------对应的ld文件----pwn文件
-
执行一下文件,应该是可以运行的,如果不行,很可能是ld与libc不对应,也可能是ld和libc没有执行权限
最后,如果想用gdb进行调试,显示一些堆栈格式的话,需要在gdb中设置debug文件夹
-
不设置的话会出现如下的问题
-
从
glibc-all-in-one
中复制.debug
文件夹到题目目录中cp -r ~/ctf2021/tools/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/.debug/ ./debug
-
在gdb中设置debug file,就能正常使用gdb的功能了
set debug-file-directory debug/
更多推荐
已为社区贡献1条内容
所有评论(0)