第十二屆全國大學生信息安全競賽即將開始,小夥伴們有報名參加的嗎?大家在比賽前是否開始進行模擬演練了?今天,i春秋將與大家分享靶場搭建的相關內容,幫助大家更好的進行實操演練。
學習搭建Docker靶場之前,我們先了解一下為什麼要用Docker?
環境部署
搭建環境>>
卸載原有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 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容器,了解埠映射原理和數據卷掛載原理。
操作過程
第一步:準備工作
第二步:安裝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靶場的全部內容,你學會了嗎?