利用docker搭建php7cms靶机

前言

今天应师父要求,写一篇利用docker搭建渗透靶机的文章来记录一下自己的菜鸟时光,要求是小白照着一步一步走就能搭建成功(即使我也是小白)。想来想去还是从docker的安装说起吧。

一、docker的安装及相关配置

系统版本:centos7
内核版本:3.10.0

1、yum更新
yum update
2、安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置yum源

国外镜像一般很难访问,建议配置阿里云镜像。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装docker

这里默认安装最新版本。

yum install docker-ce
5、启动并加入开机启动
systemctl start docker
systemctl enable docker
6、验证安装是否成功 (有client和service两部分表示docker安装启动都成功了)
docker version
7、配置加速器

这个纯属个人喜好,因为dockerhub国内访问的限制加上国内几个加速器个人感觉不好用,所以我选择了阿里云的容器镜像服务中的加速器(免费的,个人感觉超赞)。在这里插入图片描述
在这里插入图片描述在这里插入图片描述
获取镜像加速器后,阿里云非常贴心的给出了使用配置步骤:在这里插入图片描述

二、对于docker的理解和基本使用命令
1、仓库、镜像和容器之间的关系
  • 镜像:本人理解的docke镜像就像Vmware虚拟及里面的快照,可恢复成运行中的虚拟机,也可以保存在本地。
  • 容器:镜像运行起来便是容器。如果按照上面这个比喻的话,容器就是快照恢复后的虚拟机。
  • 仓库:用来存储镜像,比较大的有docker hub和阿里云。
2、仓库、镜像和容器之间的命令使用
  • 仓库—镜像:从仓库拉取(下载)镜像docker pull [仓库地址及镜像版本]
  • 镜像—仓库:从本地上传镜像到仓库docker push [仓库地址及镜像版本]
  • 镜像—容器:镜像运行成容器docker run [参数] [镜像名称或ID]
  • 容器—镜像:将容器保存为镜像docker commit [容器ID] [参数及其他]
三、docker搭建php7cms靶场
1、php7cms下载

本次搭建靶机是为了写poc验证漏洞,对应的php7cms版本是2018-10-09,
下载地址:https://www.a5xiazai.com/php/138976.html
下载后:
在这里插入图片描述

2、拉取所需环境的docker镜像

这个php7cms需要php版本为php7以上和mysql数据库5.6以上,而docker的强大之处之一就是非常方便,可以拉取别人搭建好的环境直接使用。
对应这次搭建靶场所需环境,本人推荐一个链接,里面有php几个常用版本的lamp镜像。
在这里插入图片描述比如我们要拉取php7.1版本:

 docker pull thiagobarradas/lamp:php-7.1

然后就进入了等待中:
在这里插入图片描述当然也可以搜索官方的镜像仓库:docker search [关键词]
在这里插入图片描述或者还有阿里云仓库:
在这里插入图片描述

拉取成功之后查看一下本地的镜像:

docker images

在这里插入图片描述如果要删除镜像使用命令docker rmi [仓库:版本]就行。如:docker rmi thiagobarradas/lamp:php-7.1

3、启动容器

启动容器用 docker run,这里我使用了 -it -d -p80:80 --privileged=true这几个参数。解释一下:-d 后台运行;-p80:80 将docker容器的80端口映射到系统系统的80端口;-it 可以理解为稳定运行;privileged=true 是使容器内用户权限为真正的root权限。

docker run -it -d -p80:80 --privileged=true thiagobarradas/lamp:php-7.1

在这里插入图片描述注意命令下回显的这一长串数字加字母就是容器ID,一般在使用容器ID时不用全部输进去,输入前几位能识别就行。可以利用命令docker ps查看开启的容器。
在这里插入图片描述如果要删除容器使用docker rm -f [容器ID]就行了。

4、将解压后的php7cms拷贝到docker容器内

命令:docker cp [文件路径] [目的路径]这里说一下,目的路径一般为
[容器ID]:[容器内路径]

docker cp /PHP7CMS 48:/app
5、进入容器
docker exec -it 48 bash
6、配置cms的安装环境并安装

在这里插入图片描述
我拉取的这个镜像是里面吧网站根目录设置成了/app,进入后看到了我们刚刚拷贝的PHP7CMS,还有index.html和phpinfo.php,咱们再浏览器上访问一下看看能否正常访问服务。
在这里插入图片描述注意这里的ip地址是centos7的虚拟机地址,因为在启动容器时我把容器的80端口映射到了外部的80端口。这时候我们就要保证虚拟机centos7的80端口仅被docker服务占用。
删除多余文件,将PHP7CMS目录中的文件拷贝到 /app

rm -f index.html phpinfo.php
cp -r PHP7CMS/. /app

在这里插入图片描述这时候按照php7cms的说明文档直接访问install.php安装。
这时候提醒我们目录不可写
在这里插入图片描述
因为本人比较懒,而且说不定还有其它不可写问题,所以直接把网站根目录及里面的所有文件设置成了 777 命令:chmod -R 777 /app再访问:
在这里插入图片描述这时候我们看到需要使用数据库,经本人测试,这个镜像的mysql数据库root密码为空,所以密码不用填就行
在这里插入图片描述在这里插入图片描述

四、将靶场保存为镜像并推送至仓库
1、将搭建好的靶场保存为镜像

首先在容器内输入exit退出容器,使用命令

docker commit 48 php7cms

将容器保存为镜像(我这里是把ID为48的容器保存为name是php7cms的镜像)
利用docker images查看本地镜像发现保存成功。在这里插入图片描述

2、将本地镜像上传到仓库

因个人喜好,我这里使用的是阿里云的仓库
先创建镜像仓库:
在这里插入图片描述然后选择本地仓库就行。
在这里插入图片描述进入仓库后可以发现阿里云很贴心的把使用方法给了出来在这里插入图片描述登录:
登录
标记本地镜像(用IMAGE ID标记),将其归入仓库改名字上传&等待
在这里插入图片描述上传后刷新仓库
在这里插入图片描述