第十二屆全國大學生信息安全競賽即將開始,小夥伴們有報名參加的嗎?大家在比賽前是否開始進行模擬演練了?今天,i春秋將與大家分享靶場搭建的相關內容,幫助大家更好的進行實操演練。

學習搭建Docker靶場之前,我們先了解一下為什麼要用Docker?

  • 相對於虛擬機,Docker啟動更快。
  • 成本考慮
  • 更安全

環境部署

搭建環境>>

  • OS: Ubuntu 16.04
  • 設備類型: VM
  • 宿主機:ESXI 6.5

卸載原有Docker>>

安裝>>

Ubuntu 16.04 + 上的Docker CE默認使用overlay2存儲層驅動,無需手動配置。

使用APT安裝:由於APT源使用HTTPS以確保軟體下載過程中不被篡改。因此,我們需要添加使用HTTPS傳輸的軟體包以及CA證書。

鑒於國內網路問題,建議使用國內源。

為了確認所下載軟體包的合法性,需要添加軟體源的GPG密鑰。

然後,我們需要向source.list中添加Docker軟體源。

以上命令會添加穩定版本的Docker CE APT鏡像源,如果需要測試或每日構建版本的Docker CE請將stable改為test或者nightly。

安裝 Docker CE>>

更新APT軟體包緩存,並安裝 docker-ce:

Tips:

  • 使用腳本自動安裝
  • 在測試或開發環境中Docker官方為了簡化安裝流程,提供了一套便捷的安裝腳本,Ubuntu系統上可以使用這套腳本安裝。

執行這個命令後,腳本就會自動的將一切準備工作做好,並且把Docker CE的Edge版本安裝在系統中。

啟動Docker CE>>

建立Docker用戶組>>

默認情況下,Docker命令會使用Unix socket與Docker引擎通訊。而只有Root用戶和Docker組的用戶才可以訪問Docker引擎的Unix socket。出於安全考慮,一般Linux系統上不會直接使用Root用戶。因此,更好地做法是將需要使用Docker的用戶加入Docker用戶組。

建立Docker組:

$ sudo groupadd docker

$ sudo usermod -aG docker $USER

退出當前終端並重新登錄,進行如下測試。

測試Docker是否安裝正確>>

若能正常輸出以上信息,則說明安裝成功。

環境測試

搭建>>

首先製作一個WEB容器,了解埠映射原理和數據卷掛載原理。

操作過程

第一步:準備工作

  • 根目錄: /opt/docker
  • 網站根目錄:/opt/docker/www
  • nginx相關目錄:/opt/docker/nginx/conf.d

第二步:安裝php7,nginx,mysql

注意!MySQL務必加上版本號,否則會拉取MySQL8.0的鏡像下來導致後面各種奇奇怪怪的錯。

第三步:啟動基礎環境

命令詳解

-v /opt/docker/www/:/var/www/html/:把宿主機(Ubuntu)的/opt/docker/www/掛載到了docker的/var/www/html/

--name php 命名為php

-p 80:80 把宿主機的80映射到docker的80端

-e MYSQL_ROOT_PASSWORD=123456

設置MySQL密碼為123456

測試環境是否正確>>

編輯文件/opt/docker/www/index.php

然後在宿主機目錄/opt/docker/nginx/conf.d/新建index.conf

內容如下:

然後重啟nginx docker

訪問10.16.11.231【你部署Docker的機器的地址】查看是否輸出PHPINFO

如圖即為成功。

定製Docker

MySQL配置>>

由於Docker的MySQL默認是開放了Root的外連許可權,因此在比賽中為了安全,Root用戶務必設置強密碼,比賽前資料庫務必先備份原始庫,方便資料庫被清了恢復,許可權務必配置為一個庫一個用戶,禁止該庫所有權用戶訪問其他庫和禁掉相關高危許可權。

部署靶場Docker>>

以dedecms為例子

首先從pull下來一個集成環境然後啟動並掛載到宿主機的一個數據卷上:

docker pull chengxulvtu/dedecms:utf8_full_5.7

docker run -d --name dede-lantinghe -p 8081:80 -v /opt/docker/

www/dedecms:/var/www/html chengxulvtu/dedecms:utf8_full_5.7

然後正常安裝,配置資料庫。

然後kill掉該docker並rm掉,FTP連接到宿主機找到安裝好dedecms的目錄/opt/docker/www/dedecms

在目錄下創建一個新的文件夾(這裡我用的src)並把dedecms的所有文件src文件夾內,再/opt/docker/www/dedecms新建一Dockerfile文件,操作後的/opt/docker/www/dedecms目錄應該類似這樣。

編輯Dockerfile文件內容如下:

解釋下每行命令

在Dockerfile中第一條非注釋INSTRUCTION一定是FROM,它決定了以哪一個鏡像作為基準,<image>首選本地是否存在,如果不存在則會從公共倉庫下載(當然也可以使用私有倉庫的格式)。這裡引用了eboraas最新的apache-php集成環境。

將文件<src>拷貝到container的文件系統對應的路徑<dest>下。

其中<src>可以是文件、文件夾,對於文件和文件夾<src>必須是在Dockerfile的相對路徑下,即只能是相對路徑且不能包含../path/。

<dest>只能是容器中的絕對路徑。如果路徑不存在則會自動級聯創建,根據你的需要是<dest>里是否需要反斜杠/,習慣使用/結尾從而避免被當成文件。

與ADD命令相比,ADD支持遠程URL獲取文件,但官方認為是strongly discouraged,建議使用wget或curl代替。

COPY的語法和功能與ADD相同,只是不支持上面講到的<src>是遠程URL、自動解壓這兩個特性,但是Best Practices for Writing Dockerfiles建議盡量使用COPY,並使用RUN與COPY的組合來代替ADD,這是因為雖然COPY只支持本地文件拷貝到container,但它的處理比ADD更加透明,建議只在複製tar文件時使用ADD,如ADD trusty-core-amd64.tar.gz /,會先自動解壓內容再COPY到在容器的/目錄下。

在本例中

複製相對於Dockerfile文件位置的src/下的所有內容到/var/www/html/下:

RUN指令會在當前鏡像的頂層執行任何命令,並commit成新的(中間)鏡像,提交的鏡像會在後面繼續用到。

另外RUN命令的格式有兩種寫法。

shell格式,相當於執行/bin/sh -c "<command>":

RUN apt-get install vim -y

exec格式,不會觸發shell,所以$HOME這樣的環境變數無法使用,但它可以在沒有bash的鏡像中執行,而且可以避免錯誤的解析命令字元串:

功能與shell風格相同

配置Flag項>>

進入src目錄,配置你需要的Flag項目,然後就可以打包了。

打包成鏡像>>

創建完上面的Dockerfile後在當前目錄執行。

命令原型

稍等片刻就可以運行docker images指令並能看到名為ctf,TAG為list1的鏡像了。

以上就是搭建WEB Docker靶場的全部內容,你學會了嗎?


推薦閱讀:
相关文章