freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

pwn学习之环境搭建-pwndocker
2021-04-18 20:21:02

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,因为后面的修改,众说周知,网络不好,需要那个啥,因此会用到这个命令。

直接使用会提示下图内容

这时候就需要给容器启动参数再增加一个东西了--/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

0x13 pwndocker需要修改的地方

如下图,pwndocker用的gcc版本是9.3.0的,而gcc-9.x在编译的时候会在栈中插入一些自己的内容,对于新手入门来说不是很友好,因此我们需要装上老版本的gcc,这里打算装gcc-4.8

同时,pwndocker用的是python3.8,虽然全世界都在用python3,但是,有一说一,对于pwntools来说,还是python2资料多,对我们新手友好。。。

此外,我发现它没有peda,虽然.gdbinit里面有peda的路径,但是那是不存在的文件。。。

综上,我需要做四个修改:

  • Python2

  • gcc-4.8

  • peda

0x20 修改 pwndocker

0x21 安装gcc4.8

参考链接:https://blog.csdn.net/qq_42566274/article/details/106399531

  1. 增加源

    vim /etc/apt/sources.list
    
    deb http://dk.archive.ubuntu.com/ubuntu/ xenial main
    deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe
    

  2. 安装gcc4.8

    apt update
    apt install gcc-4.8 g++-4.8 g++-4.8-multilib gcc-4.8-multilib
    
  3. 切换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++
    
  4. 查看当前gcc版本

    gcc --version
    

0x22 安装Python2

参考链接:https://zhuanlan.zhihu.com/p/137114974

  1. 先安装python2

    apt install python2.7 python2.7-dev
    
  2. 再安装python-pip

    curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
    

0x23 重新安装常用工具

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

0x24 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,只是去掉了那啥的配置,有需要的同学可以直接拉下来用

0x40 尾巴

我只是个正在入门的pwn小白,可能我以上的修改会把 pwndocker 给搞坏,没事,现阶段能用就行,以后遇到问题,再继续解决呗。

当然,如果有大佬知道更快的入门环境,或者更好的修改方法,欢迎赐教!!

下篇文章将学习栈溢出,敬请期待!!

# pwndocker
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录