注意,此文搭建的docker仅满足安全学习,不满足开发要求,因为少了一些东西。另外本文用的是mousepad而非vim。文章算是我的学习笔记,欢迎讨论交流。
安装docker前的准备工作
apt换源,配置docker镜像加速器
apt相当于kali的应用商店,但是这个商店在国外下载东西慢,换源相当于换了个下载速度快的应用商店
配置docker镜像加速器和apt换源原因一样,也是因为原来的下载镜像太慢了
1,apt换源
1.1,进入kali先切换到root用户
sudo su
注意输入密码时候是不显示的,输完回车就行
1.2,apt换源
mousepad /etc/apt/sources.list
这时候进入了一个类似记事本的页面,把里面东西删完,把下面的阿里源粘贴进去,保存一下(坐上角file里面的save点一下),然后退出这个记事本页面(右上角×点一下就退出)
#阿里源
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
1.3,更新apt源
相当于商店刷新一下,刷新后的商店就变成换源后的商店了,下载东西更快
apt update
2,配置docker镜像加速器
2.1获取一个阿里加速器,这个是免费的
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
支付宝扫码登录
复制我红色框框内容
2.2配置docker加速器
在kali输入
mousepad /etc/docker/daemon.json
回车进入了一个记事本页面,把2.1复制的粘贴到这里
保存,退出记事本
开始安装docker并搭建靶场(以安装dvwa靶场为例)
方法一,新人使用(注意新手初学可以这么安装,实际工作不要这样安装,会缺少很多东西)
整体流程为:安装docker------启动docker------安装镜像(包含:搜索镜像名字-------找下载量最大的镜像--------copy里面镜像下载代码--------回到kali粘贴复制的代码,开始下载镜像)-------安装容器---------启动容器--------访问靶场
1,安装docker
apt install docker.io
2,启动docker
systemctl start docker
3,安装镜像(以安装dvwa镜像为例)
3.1,找dvwa镜像
docker镜像安装是要去docker镜像网站找镜像
需要科学上网才能访问,自己想办法吧
搜索dvwa
找下载量最大的进去
右边红框框里面就是镜像下载代码,复制一下
docker pull sagikazarmark/dvwa
3.2,下载dvwa镜像
回车,等待下载完成
下载完成
可以查看都下载哪些镜像
docker images
我这里有两个镜像,dvwa和lamp ,lamp是我之前下载的,dvwa是我刚才新下载的,你们只有一个dvwa镜像
3.3,docker安装镜像为容器
关于镜像和容器的关系我不明了,目前我的理解是:镜像相当于软件安装包,容器相当于安装后的软件,软件安装好了才能使用,镜像安装好了才能使用容器。(不一定对哈,欢迎讨论)
docker run -dit -p 80:80 sagikazarmark/dvwa
可以查看都有哪些容器并查看容器ID
docker ps -a
我这里有lamp和dvwa容器,lamp是我之前安装的,你们只有dvwa容器
可以看到第一列是容器的ID,而启动容器要用容器ID前三位,容器的ID就相当于每个同学都有自己的学号一样,我们可以通过ID前三位找到这个容器。
注意,每个人的容器ID是不一样的,下面的步骤都要用你自己电脑上显示的ID前三位
3.4,启动容器
我的理解是:容器相当于安装好了的软件,只有启动了软件才能使用软件,容器只有启动了才能使用容器的靶场。启动容器就是搭建靶场。
#注意要用自己的容器ID前三位,每个人的不一样。我的前三位是064
docker start 064
容器启动成功了,这时候可以访问一下靶场
3.5,访问搭建好的dvwa靶场
这里我使用虚拟机的eth0网卡IP访问,首先看一下IP是多少
ifconfig
打开kali里面的Firefox浏览器输入这个eth0的IP并回车
只输入IP就行,我截图中IP后面的login.php是自动添加的
靶场访问成功,说明靶场搭建好了
其他操作
为了方便新手安装,我并没有写镜像的删除,容器的关闭和删除,docker的重启和关闭,安装过程中代码是什么意思,现在我逐一解释
docker操作
1,启动docker
systemctl start docker
2,重启docker
有时候docker太卡了,重启一下就行
systemctl restart docker
3,关闭docker
systemctl stop docker
镜像操作
1,下载镜像
docker pull 镜像名字
#比如下载dvwa镜像
#docker pull sagikazarmark/dvwa
2,查看镜像ID
docker images
3,删除镜像
docker rmi 镜像ID前三位
容器操作
1,安装镜像为容器
docker run -dit -p 80:80 镜像名字
#例如下载dvwa镜像时候,用的就是它的名字
#docker run -dit -p 80:80 sagikazarmark/dvwa
用的是镜像名字,安装的其实是容器
2,关闭容器
docker stop 容器ID前三位
#比如现在有个容器前三位是345,我要关闭这个容器
#docker stop 345
3,删除容器
docker rm -f 容器ID前三位
#比如现在有个容器前三位是345,我要删除这个容器
#docker rm -f 345
方法二,docker-compose自动化docker部署
(仅满足安全学习,不满足开发要求,会缺少一些东西)
方法二比方法一简单易操作
以搭建靶场thinkphp5.0.9为例
1,安装docker-compose
apt insatll docker-compose
2,查找靶场
在docker靶场网站找靶场,我找一下thinkphp5.0.9靶场
注意找靶场其实找的是靶场的名字
我选择第一个,点一下Tags看有没有thinkphp5.0.9版本的靶场
在Tag里面找靶场是为了看存不存在想要的靶场,其实还是在找靶场名字
发现确实有5.0.9版本靶场
3,安装靶场
mousepad docker-compose.yaml
把下面的复制到打开的记事本里去
version: '3'
services:
web:
image: vulhub/thinkphp:5.0.9
ports:
- "8080:80"
保存,退出记事本
4,启动靶场
docker-compose up -d
5,登录靶场
先看一下登录靶场IP,复制eth0的IP,每个人的可能不一样,你用你电脑上显示的IP
ifconfig
访问靶场
#注意这里是http,不是https
http://192.168.238.128:8080
访问成功,靶场搭建成功
报错处理
1,删除镜像时候报错
Error response from daemon: conflict: unable to delete c15726116aef (cannot be forced) - image is being used by running container e6d8ca77d8b9
这是因为有容器正在运行,关闭或者删除正在运行的容器,我这里直接删除了
现在就可以删除镜像了
2,在docker-compose里搭建多个靶场
你会发现,我们在方法二中搭建靶场时候使用命令修改了一个文件
mousepad docker-compose.yaml
修改了docker-compose.yaml文件。文件内容修改成什么靶场才能搭建什么靶场,那如果我要搭建另一个靶场时候就要删除前一个靶场在docker-compose.yaml的内容了吗?其实不然,方法如下:
每个文件夹里面就只有一个docker-compose.yaml文件,那创建两个文件夹,在不同的文件夹中修改各自的docker-compose.yaml就行了。
比如我现在要安装thinkphp5.0.23和thinkphp5.0.20
2.1,创建两个文件夹,我创建了thinkphp5.0.23文件夹和thinkphp5.0.20文件夹
mkdir thinkphp5.0.23
mkdir thinkphp5.0.20
2.2,在各自文件夹内修改docker-compose.yaml文件
进入thinkphp5.0.23文件夹
cd thinkphp5.0.23
打开docker-compose.yaml
mousepad docker-compose.yaml
修改docker-compose.yaml
version: '3'
services:
web:
image: vulhub/thinkphp:5.0.23
ports:
- "8080:80"
退出thinkphp5.0.23文件夹
cd ..
进入thinlphp5.0.20文件夹
cd thinphp5.0.20
打开并修改docker-compose.yaml等操作同上
2.3,在各自文件夹内启动靶场即可
3,端口冲突
在创建靶场时候有8080:80,这是干什么的呢?
前面的8080是虚拟机端口号,可以修改为0~65535之间任意数字
后者80端口是靶场的端口,不要修改靶场端口
当在创建靶场时候这个8080是默认的,在创建多个靶场时候如果都用这个8080端口那就会端口冲突,就相当多个人重名,一叫这个名字大家不知道在叫谁。
因此,在创建多个靶场时候要注意修改前面的端口,在访问靶场时候把端口号加上,比如我这里端口是6666