为啥要用docker?

在实际学习中,经常需要模拟不同的漏洞环境,而使用公网的实例的话,多多少少又存在一些风险,因此能搭建一个本地的模拟环境去测试漏洞是一个不错的方案。Docker是近两年来十分流行的开源容器引擎,因此也出现了很多使用Docker容器搭建的靶机环境供新手学习和使用。

写这篇文章的原因:我一直知道Docker的强大,但是需要一个例子来开始

这两篇公众号文章:

是我下定决心安装Docker的动力

为什么是在Ubuntu中?

我们常见的测试环境有Win10、Kali、Win7、Win2008、Win2003等,再来一个Linux环境最合适的就是Ubuntu了

我们大部分人常用的环境是Win10(说MacOS的坐下!),那在Win10安装Docker怎么样呢?

Docker for Widows官方文档:https://docs.docker.com/docker-for-windows/install/ 里面说了

Win10家庭版是不支持Docker for Windows的,Win10其他版本,常见的比如专业版(我自己也装的这个)需要在BIOS中开启Virtualization虚拟化功能,我自己试过很多次不能用Docker for windows,开启Hyper-V的话连接校园网的软件会报错“不能在虚拟环境中运行软件”

那不支持安装环境的机器只能使用Docker Toolbox,文档地址:https://docs.docker.com/toolbox/toolbox_install_windows/

Docker Toolbox是需要配合virtualbox使用的,然后我为什么用Ubuntu去安装docker呢?

  • 需要一个轻量级桌面Linux靶机
  • 虚拟机可以经常恢复快照(虽然docker的存在能大幅消减快照的繁琐)
  • 就想用!(傲娇脸)

安装docker

安装

我这里由于比较懒,直接su root切换到了root账户下进行,所以如果命令执行异常的,加上sudo在前面

  • 安装所需要的包(这里默认你的ubuntu已经配置过国内apt镜像):apt install docker.io
  • 安装完成查看版本信息:docker -v
  • 添加权限(可选):将当前用户添加到docker用户组,可以不用sudo运行docker(需要重新登录):sudo usermod -aG docker $USER
配置镜像加速

和Git一样,默认的镜像由于服务器都在国外,速度很慢,所以需要换国内镜像

最新版本的docker的配置文件是/etc/docker/daemon.json,默认安装完docker时是不存在的,使用vim打开则自动创建

vim /etc/docker/daemon.json,将以下代码粘贴进去:

{
  "registry-mirrors": ["http://example.m.daocloud.io"]
}

这个镜像地址有如下推荐:

  • 之后会弹到一个广告界面:https://www.daocloud.io/mirror,看起来是广告,实际已经为我们生成了一个唯一的加速器地址,往下拉一下找到配置教程处:

打了马赛克的位置就是加速器地址

速度推荐:自己拉取了一个wordpress感觉一下,阿里云和DaoCloud的速度差不多,其他的稍差,个人推荐使用DaoCloud

然后重启docker服务:service docker restart就可以了,我们可以拉一个wordpress测试一下:docker pull wordpress

搭建wordpress示例测试环境

可以使用官方出品的Docker镜像:docker pull wpscanteam/vulnerablewordpress

pull完毕后运行,转发80和3306端口。

docker run --name vulnerablewordpress -d -p 80:80 -p 3306:3306 wpscanteam/vulnerablewordpress

打开ip即可进入wordpress安装界面:

也可以自己用wordpress和mysql5.6搭建顺便学习下指令,教程如下:

1.配置好镜像地址后,我们拉取wordpress镜像 docker pull wordpress 和mysql5.6镜像 docker pull mysql:5.6

拉取示意图:

2.创建 mysql 容器

docker run --name testmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=a123456 -d mysql:5.6
#参数解释:
#MYSQL_ROOT_PASSWORD=a123456 设置mysql的root密码是a123456
#testmysql 设置容器名称为testmysql 这个名字以后会用到要记住,生成后会返回一个id

3.登录到 mysql 创建数据库

docker exec -it testmysql mysql -uroot -p
#此处的 testmysql 是之前mysql容器的名字

输入之前设置的root密码(a123456)登录到数据库:

4.创建数据库

create database wordpress;

按ctrl+D或者输入quit;退出

5.创建 wordpress 容器,和创建mysql容器类似

docker run --name testwordpress --link testmysql:db -p 80:80 -d wordpress:latest
#参数解释:
#80:80 将容器的80端口和主机的80端口互通
#testmysql:db 将wordpress容器连接上mysql容器并起别名为db

6.在浏览器打开主机的ip,就能跳转到wordpress的安装界面了:

  • 用户名:root (mysql的root用户)
  • 密码:a123456 (还记得设置的mysql的root密码吗?)
  • 数据库主机:db(还记得刚刚设置的别名吗?)

其他默认,就安装完成了:

一个渗透测试环境就搭建完成了

比较文章开头提到的文章中下载wordpress镜像,用virtualbox搭建是不是方便许多?

常用docker命令

  • docker version:查看版本号
  • docker run hello-world:载入测试镜像测试
  • docker images:查看当前有哪些镜像
  • docker ps:查看所有正在运行容器
  • docker ps -a:查看所有容器
  • docker stop containerId(容器的ID):关闭ID为xxx的容器
  • docker rm containerId(容器的ID):删除ID为xxx的容器
  • 镜像删除:

    • 停止所有的container,这样才能够删除其中的images:docker stop $(docker ps -a -q)
    • 如果想要删除所有container的话再加一个指令:docker rm $(docker ps -a -q)
    • 删除images,通过image的id来指定删除谁:docker rmi
    • 想要删除untagged images,也就是那些id为的image的话可以用:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
    • 要删除全部image的话:docker rmi $(docker images -q)
  • 设置容器的端口映射:docker run -P
  • -P: 对容器所有的端口进行映射
  • -p: 指定映射哪些容器的端口
  • 几个例子:

    • containerPort 只指定容器的端口,宿主机的端口随机映射:docker run -p 80 -i -t /bin/bash
    • hostPort:ContainerPort 同时制定宿主机端口以及容器端口:docker run -p 8080:80 -i -t /bin/bash0
    • ip:containerPort 指定ip和容器的端口:docker run -p 0.0.0.0:80 -i -t /bin/bash
    • ip:hostPort:ContainerPort 同时制定ip以及宿主机端口以及容器端口:docker run -p 0.0.0.0:8080:80 -i -t /bin/bash
最后修改:2019 年 07 月 13 日
如果觉得我的文章对你有用,请随意赞赏