由于要开始调试高版本glibc的pwn题,但是搞了很久的环境。之前也写过一篇通过 PRELOAD 换glibc的方法,但是这个方法不同版本的 Glibc都要去自行编译一下,然后替换ld.so 和 libc.so,觉得有点麻烦,而且试了几次有时候也会出问题。所以有了这次尝试在docker下搭建各种环境。
Patchelf
最开始看的是 ble55ing 大佬的博客,准备向他一样采用 ubuntu2.7搭建 docker,然后再docker里配好所有的 glibc 的 ld.so 和 libc.so ,使用patchelf 来修改程序的 加载项。但是我失败了,使用 patchelf 能够把 ld.so 换成自己的,但是 libc.so 没有换成功。
但是还是记录一下 patchelf的用法吧:
1 | patchelf --set-interpreter /ctf/work/ld-linux-x86-64.so.2 printf |
通过这两条指令可以 直接将 printf 程序的 ld.so 和 libc.so 换成自己指定目录下的链接库。
我的问题在于,我使用了第二条指令后,我的 libc.so 还是系统库,并没有换成我的,
然后我运行程序时 就会报错,希望有哪位大佬知道能指点我一下。
不同ubuntu版本的docker
由于上面 patchelf 失败了,又经过同学 提醒可以直接安装有不同glibc版本的多个 ubuntu docker,所以又开始了直接搭建不同Ubuntu版本的docker。
下面是可以查看 ubuntu版本的 glibc版本的地址:
https://launchpad.net/glibc/+packages
在上面找到后:
1 | ubuntu16.04 glibc2.23 |
然后就是拉去对应版本的docker,布置pwn环境了。然后可以直接使用 Dockerfile 来创建,可以参考https://www.lyyl.online/2020/08/06/docker-pwn-%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/
这里面的 dockerfile 还是很全面,可以直接使用。
注意:ubuntu17.04 ubuntu17.10 ubuntu19.04 这些版本都不是 ubuntu官方长期支持的,所以使用源时:
1 | sudo sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list |
得使用 old-release 版本。
不然用官方版本,就会报错,然后apt-get install 下载不了东西,这个是我踩的最深的坑了。
Docker内的环境:
pwndbg:
1 | git clone https://github.com/pwndbg/pwndbg |
pwntools:
1 | python3 -m pip install --upgrade pwntools |
32位环境:
1 | sudo dpkg --add-architecture i386 |
其他工具:
1 | python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U pip && \ |
- 本文作者: A1ex
- 本文链接: http://yoursite.com/2020/09/24/Docker下PWN环境搭建/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!