AWD簡單介紹和搭建AWD平台
何為AWD
比賽中每個隊伍維護多台伺服器,伺服器中存在多個漏洞,利用漏洞攻擊其他隊伍可以進行得分,修複漏洞可以避免被其他隊伍攻擊失分。
1、一般配置設定Web伺服器,伺服器(多數為Linux)某處存在flag(一般在根目錄下)
2、可能會提供一台流量分析虛拟機,可以下載下傳流量檔案進行資料分析
3、flag在主辦方的設定下每隔一定實踐重新整理一輪
4、各隊一般都有自己的初始分數
5、flag一旦被其他隊伍拿走,該隊扣除一定積分
6、扣除的積分由擷取flag的隊伍均分
7、主辦方會對每個隊伍的服務進行check,伺服器當機扣除本輪flag分數,扣除的分值由服務check正常的隊伍均分
8、一般每個隊伍會給一個低權限使用者,非root權限
AWD 常見比賽規則說明
Attack With Defence,簡而言之就是你既是一個hacker,又是一個manager。
比賽形式:一般就是一個ssh對應一個web服務,然後flag五分鐘一輪,各隊一般都有自己的初始分數,flag被拿會被拿走flag的隊伍均分,主辦方會對每個隊伍的服務進行check,check不過就扣分,扣除的分值由服務check正常的隊伍均分。
其中一半比賽以WEB居多,可能會涉及内網安全,攻擊和防禦大部分為前期教育訓練内容。
前期準備
1、隊伍分工明确
2、腳本工具環境完整
3、漏洞POC/EXP庫完整
4、安全防禦WAF及批量腳本完整
必備操作
1、備份網站檔案
2、修改資料庫預設密碼
3、修改網頁登陸端一切弱密碼
4、檢視是否留有後門賬戶
5、關閉不必要端口,如遠端登陸端口
6、使用指令比對一句話特性
7、關注是否運作了“特殊”程序
8、權限高可以設定防火牆或者禁止他人修改本目錄
搭建AWD平台
1、更換源
這裡我使用的是kali進行搭建,将kali的源換成阿裡雲或者清華的源即可,這裡不多介紹
參考文章:https://blog.csdn.net/lina_999/article/details/90635959?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163437049816780265461094%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163437049816780265461094&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-90635959.pc_search_result_cache&utm_term=kali%E6%9B%B4%E6%8D%A2%E6%BA%90&spm=1018.2226.3001.4187
2、安裝docker環境
kali這裡是自帶docker環境的,就不需要再去安裝了
3、下載下傳賽題項目
git clone https://github.com/zhl2008/awd-platform
這裡可能需要一個小時以上才能下完,項目比較大
4、下載下傳完後進入項目
cd awd-platform
5、下載下傳鏡像檔案
sudo docker pull zhl2008/web_14.04
這裡下載下傳如果過慢就需要去替換一下docker源
6、更改鏡像名稱
sudo docker tag zhl2008/web_14.04 web_14.04
啟動比賽
1、進入awd項目
cd awd-platform
2、建立隊伍
這裡建立了3個隊伍,賽題是web_yunnan_simple
3、根據賽題修改check.py(awd-platform/check_server/目錄下)檔案,找到check類
class check():
def __init__(self):
print "checking host: "+host
def index_check(self):
res = http('get',host,port,'/','',headers)
if 'Home' in res:
return True
if debug:
print "[fail!] index_fail"
return False
def test_check(self):
res = http('get',host,port,'/about.php?file=header.php','',headers)
if 'About' in res:
return True
if debug:
print "[fail!] test_fail"
return False
def test_check_2(self):
headers['Cookie'] = ''
data = 'key=1'
res = http('get',host,port,'/services.php',data,headers)
if 'Services' in res:
return True
if debug:
print "[fail!] test_2_fail"
return False
4、修改flag重新整理時間,同樣是check.py檔案中,預設120s,2分鐘
5、建立好隊伍後就可以開始比賽了,輸入指令啟動比賽
6、比賽拓撲圖
web站點
team1:192.168.109.128:8801
team2:192.168.109.128:8802
team3:192.168.109.128:8803
ssh連接配接
team1:192.168.109.128:2201
team2:192.168.109.128:2202
team3:192.168.109.128:2203
ssh連接配接的賬号密碼在項目下的
pass.txt
裡面
7、通路web站點
team1web站點
其他隊伍的web站點與team1隊伍完成一緻,隻是端口不同而已
得分
運作修改後的check.py檔案,啟動check伺服器
在這裡可以看到實時分數
如果覺得這個頁面太醜的話,可以自己換個頁面,我這裡用的夜莫離大佬做的頁面
計分闆源碼下載下傳
連結:https://pan.baidu.com/s/1xF9uZpKUZTZt_OOfpoOrOw
提取碼:qwer
計分闆檔案拷貝至awd-platform下的flag_server檔案夾下。要注意将檔案score.txt與result.txt檔案權限調至777,這樣才能重新整理出分值。
記分闆裡面的
index.php
檔案需要将IP換成自己虛拟機的IP
模拟team1攻擊team2得分
通路team2web網站
下載下傳發現一個代碼執行漏洞
檢視根目錄下的檔案
ls /
發現flag,檢視flag内容
cat /flag
送出flag為自己的隊伍加分
加分的方法是通路一個為位址并且以get的形式上交flag
http://主機IP位址:8080/flag_file.php?token=teamx&flag=xxxx (x為隊伍号)
可以看到team1加了兩分,team2減了兩分,但是如果是開賽前三十分鐘的話是攻擊不成功的,前三十分鐘為準備階段
結束比賽
進入項目目錄
sudo python stop_clean.py