文章首发于freebuf:https://www.freebuf.com/sectool/269963.html
0x00 前言
本文主要记录了如何修改skysider/pwndocker
成为我们学习pwn入门的环境。
万事开头难,我试过了四五天,在kali、ubuntu18.04和ubuntu14.04之间徘徊,最后还是发现,
pwndocker
这个最能满足需求,其他环境总有一些奇奇怪怪到问题(不知道是不是因为我的是mac系统导致的。。。),是我现在新手期无法解决的。。。
0x10 使用 skysider/pwndocker
在开始我们的修改之前,我们首先要把原来的环境给跑起来先。
0x11 安装docker和加速
那么第一步就是怎么装 docker 和如何给 docker 配置阿里源加速了,这里百度一大堆的文章,我就不多bb了,直接给出docker官网地址:https://www.docker.com/get-started 和阿里云加速地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors ,自己去配置一下就行
0x12 运行 pwndocker
docker跑起来之后,然后就是把skysider/pwndocker
拉下来了。这里提供其官网:https://hub.docker.com/r/skysider/pwndocker
docker pull skysider/pwndocker
这里因为我之前已经pull过了,所以提示已经存在了
然后我们新建一个空的文件夹,这里是classic-stack-based-buffer-overflow
,用于装将要跑的代码。然后定义ctf_name
变量值为它。
然后按照其官网的命令运行pwndocker,以及打开一个终端
docker run -d \
--rm \
-h ${ctf_name} \
--name ${ctf_name} \
-v $(pwd)/${ctf_name}:/ctf/work \
-p 23946:23946 \
--cap-add=SYS_PTRACE \
skysider/pwndocker
docker exec -it ${ctf_name} /bin/bash
无法关闭地址随机化
注意:,这里有个坑,如果你按照官网提供的命令执行,你是无法关闭地址随机化的。。。 。。。会提示randomize_va_space
不可修改。。。如下图:
因此我们需要加一个参数:--privileged
,让其可以修改randomize_va_space
,即
docker run -d \
--rm \
-h ${ctf_name} \
--name ${ctf_name} \
-v $(pwd)/${ctf_name}:/ctf/work \
-p 23946:23946 \
--privileged \
--cap-add=SYS_PTRACE \
skysider/pwndocker
docker exec -it ${ctf_name} /bin/bash
把刚刚启动的容器停掉,加上--privileged
再试试
可以看到已经关闭地址随机化了没有提示错误,且用ldd /bin/bash
发现地址也没有改变了,即地址随机化关闭成功。
无法使用systemctl
注意:,这里还有一个坑,就是无法使用systemctl
,因为后面的修改,因为大家都知道的原因,网络不好,需要装v2ray,因此会用到这个命令。
直接使用会提示下图内容
这时候就需要给容器启动参数再增加一个东西了--/sbin/init
,即
docker run -d \
--rm \
-h ${ctf_name} \
--name ${ctf_name} \
-v $(pwd)/${ctf_name}:/ctf/work \
-p 23946:23946 \
--privileged \
--cap-add=SYS_PTRACE \
skysider/pwndocker \
/sbin/init
docker exec -it ${ctf_name} /bin/bash
同样的操作,我们把容器停掉,再跑一遍
这时已经可以成功使用systemctl
了,当然我还没有搞v2ray,所以提示没有v2ray的service
0x13 pwndocker需要修改的地方
如下图,pwndocker用的gcc版本是9.3.0的,而gcc-9.x在编译的时候会在栈中插入一些自己的内容,对于新手入门来说不是很友好,因此我们需要装上老版本的gcc,这里打算装gcc-4.8
同时,pwndocker用的是python3.8,虽然全世界都在用python3,但是,有一说一,对于pwntools
来说,还是python2资料多,对我们新手友好。。。
此外,我发现它没有peda
,虽然.gdbinit
里面有peda的路径,但是那是不存在的文件。。。
综上,我需要做四个修改:
- v2ray(方便下面的安装)
- Python2
- gcc-4.8
- peda
0x20 修改 pwndocker
0x21安装v2ray(可选)
-
下载安装脚本, 去 https://github.com/v2fly/fhs-install-v2ray 找,以下两个链接任选一个,这里我直接使用第二个cdn加速链接
https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh https://cdn.jsdelivr.net/gh/v2fly/fhs-install-v2ray@master/install-release.sh
-
去https://github.com/v2fly/v2ray-core/releases/ 找最新到v2ray,然后用代理下载好,或者用迅雷也行
https://github.com/v2fly/v2ray-core/releases/download/v4.36.2/v2ray-linux-64.zip
-
把安装脚本和v2ray放到容器映射的目录上,我这里是
/Users/hua/Desktop/pwn/stack/classic-stack-based-buffer-overflow
-
给安装脚本执行权限,然后使用安装脚本本地安装v2ray
chmod +x install-release.sh ./install-release.sh -l v2ray-linux-64.zip
-
开机启动v2ray
systemctl enable v2ray systemctl start v2ray
-
修改配置文件
vim /usr/local/etc/v2ray/config.json
-
重启v2ray服务
systemctl restart v2ray
-
安装proxychains4
apt update apt install proxychains4
修改配置,这里具体根据你的v2ray配置来
vim /etc/proxychains4.conf
最后测试v2ray是否生效
proxychains4 curl https://www.google.com
0x22 安装gcc4.8
参考链接:https://blog.csdn.net/qq_42566274/article/details/106399531
-
增加源
vim /etc/apt/sources.list
deb http://dk.archive.ubuntu.com/ubuntu/ xenial main deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe
-
安装gcc4.8
apt update apt install gcc-4.8 g++-4.8 g++-4.8-multilib gcc-4.8-multilib
-
切换gcc为4.8
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 100 update-alternatives --config gcc update-alternatives --config g++
-
查看当前gcc版本
gcc --version
0x23 安装Python2
-
先安装python2
apt install python2.7 python2.7-dev
-
再安装python-pip
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
0x24 重新安装常用工具
pwntools
pip install --upgrade pip capstone pwntools
pwndbg
cd /pwndbg/
proxychains4 ./setup.sh
小小错误,问题不大,以后用不了再说
peda
cd /
proxychains4 git clone https://github.com/longld/peda.git
然后修改~/.gdbinit
,把里面的source ~/peda/peda.py
改成source /peda/peda.py
即可
vim ~/.gdbinit
注意:pwndbg和peda不能共存,所以可以在
~/.gdbinit
里面进行手动注释切换
ROPGadget
cd /
proxychains4 git clone https://github.com/JonathanSalwan/ROPgadget.git
cd ROPgadget
python setup.py install
LibcSearcher
cd /
proxychains4 git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
python setup.py develop
0x25 vimplus(可选)
proxychains4 git clone https://github.com/chxuan/vimplus.git ~/.vimplus
cd ~/.vimplus
./install.sh
YouCompleteMe
需要安装python2的版本,如下
cd ~/.vim/plugged/
rm -rf YouCompleteMe/
proxychains4 git clone https://github.com/ycm-core/YouCompleteMe.git
git checkout -b legacy-py2 origin/legacy-py2
proxychains4 git submodule update --init --recursive
python install.py
0x30 保存修改
至此,修改基本完成,接下来就是保存修改了
退出容器后,查看容器id,然后直接commit就行,容器名字可以随便起,版本号这里就起1.0
docker commit 03d9d4fc27cf fengwenhua/pwndocker:v1.0
然后push到hub中即可
以后启动就用以下命令:
docker run -d \
--rm \
-h ${ctf_name} \
--name ${ctf_name} \
-v $(pwd)/${ctf_name}:/ctf/work \
-p 23946:23946 \
--privileged \
--cap-add=SYS_PTRACE \
fengwenhua/pwndocker:v1.0 \
/sbin/init
docker exec -it ${ctf_name} /bin/bash
这里我已经另外做了一个fengwenhua/pwndocker-pub
,只是去掉了v2ray的配置,有需要的同学可以直接拉下来用
0x40 尾巴
可能我以上的修改会把 pwndocker 给搞坏,没事,现阶段能用就行,以后遇到问题,再继续解决呗。
当然,如果有大佬知道更快的入门环境,或者更好的修改方法,欢迎赐教!!
下篇文章将学习栈溢出,敬请期待!!
版权属于:江南小虫虫
本文链接:https://fengwenhua.top/index.php/archives/69/
转载时须注明出处及本声明