為啥要用 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/ 註冊並登錄
- 在主頁右上角有一個火箭按鈕:
打了馬賽克的位置就是加速器地址
速度推薦:自己拉取了一個 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 的安裝界面了:
- 用戶名 (mysql 的 root 用戶)
- 密碼 (還記得設置的 mysql 的 root 密碼嗎?)
- 數據庫主機(還記得剛剛設置的別名嗎?)
其他默認,就安裝完成了:
一個滲透測試環境就搭建完成了
比較文章開頭提到的文章中下載 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 "^" | awk "{print $3}")
- 要刪除全部 image 的話:docker rmi $(docker images -q)
- 設置容器的端口映射:docker run [-P][-p]
- -P: 對容器所有的端口進行映射
- -p: 指定映射哪些容器的端口
- 幾個例子:
- containerPort 只指定容器的端口,宿主機的端口隨機映射:docker run -p 80 -i -t /bin/bash
- hostPort 同時制定宿主機端口以及容器端口:docker run -p 8080:80 -i -t /bin/bash0
- ip 指定 ip 和容器的端口:docker run -p 0.0.0.0:80 -i -t /bin/bash
- ip:hostPort 同時制定 ip 以及宿主機端口以及容器端口:docker run -p 0.0.0.0:8080:80 -i -t /bin/bash