为啥要用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"]
}
这个镜像地址有如下推荐:
- 网易加速器:http://hub-mirror.c.163.com
- 官方中国加速器:https://registry.docker-cn.com
- ustc的镜像:https://docker.mirrors.ustc.edu.cn
可以去阿里云上配置一个自己的镜像加速器:
- 先登录阿里开发者平台:https://dev.aliyun.com/search.html
- 登录后,进入Docker 镜像仓库:https://cr.console.aliyun.com/cn-hangzhou/mirrors,选中加速器 Tab,这里可以看到,系统已经为我们生成了一个专属加速器地址:https://xxxxx.mirror.aliyuncs.com
也可以在DaoCloud上配置一个:
- 在Daocloud主业:https://www.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