?前言
在上一篇文章中匕积,我們說到了一個非常有意思的模式: AWD (Attack With Defense匆绣,攻防兼?zhèn)?模式最盅。你需要在一場比賽里要扮演攻擊方和防守方突雪,攻者得分,失守者會被扣分涡贱。也就是說欢峰,攻擊別人的靶機可以獲取 Flag 分數(shù)時粘室,別人會被扣分弄匕,同時你也要保護自己的主機不被別人得分恨豁,以防扣分。
沒接觸過的同學(xué)第一次玩這種模式時激挪,很可能都是一臉懵逼辰狡,最近我也打了一次比較簡單的小型 AWD,借 NeverSec 公眾號來介紹一下一般的 AWD 比賽流程和所需準(zhǔn)備的地方垄分。由于我負責(zé) Web 比較多宛篇,因此這篇文章不會涉及到二進制方面,主要從 Web 方向介紹锋喜。
AWD流程
1. 出題方會給每一支隊伍部署同樣環(huán)境的主機些己,主機有一臺或者多臺。
2. 拿到機器后每個隊伍會有一定的加固時間或沒有加固時間嘿般,這個視規(guī)則而定段标。
3. 每個服務(wù)、數(shù)據(jù)庫炉奴、主機上都會可能存在 flag 字段逼庞,并且會定時刷新。通過攻擊拿到 flag 后需要提交到裁判機進行得分瞻赶,一般會提供指定的提交接口赛糟。下一輪刷新后,如果還存在該漏洞砸逊,可以繼續(xù)利用漏洞獲取 flag 進行得分璧南。
通常來說,如果攻防賽時間比較短的話师逸,一般只會考核 Web 司倚、數(shù)據(jù)庫的滲透、已有漏洞的利用;如果時間較長动知,很可能還需要做內(nèi)網(wǎng)滲透皿伺,由于這塊比較深入,這篇文章暫時不講盒粮,因為我自己也不太會鸵鸥。
一般一個隊伍由三人組成。負責(zé)兩個方面:一方面負責(zé)防守加固丹皱、做基線妒穴、加WAF、流量回放等等种呐。一方面負責(zé)源碼審計宰翅、寫攻擊腳本、維持權(quán)限爽室、持續(xù)滲透,具體怎么安排都視三人能力而定淆攻。
攻擊流程
在 AWD 中阔墩,Web 攻擊流程一般分為信息收集、攻擊端口瓶珊、攻擊Web服務(wù)啸箫、維持權(quán)限四步,只要能快速得分伞芹,也不一定按照這四步來忘苛。
信息收集
第一步,探測主機唱较。用 Nmap 或者 HTTPScan等工具扎唾,先掃描主辦方給的內(nèi)網(wǎng)存活主機,弄明白網(wǎng)絡(luò)拓撲南缓。如果主辦方給了主機范圍的話就更加省事兒了胸遇。
第二步,探測端口汉形。因為主辦方給的機器都是一樣的纸镊,所以直接看自己開了什么端口就行。如果不一樣的話概疆,使用 Nmap 進行常見端口掃描逗威,先攻擊常見端口,再放后臺進行全端口的掃描岔冀,發(fā)現(xiàn)新端口再加入到攻擊隊列中凯旭。
第三步,探測端口服務(wù)。端口服務(wù)一般用 Nmap 就能掃到尽纽,并且可以用 Nmap 的腳本掃一下漏洞咐蚯,但是需要注意 Nmap 的相關(guān)參數(shù),這要根據(jù)情況靈活運用弄贿。
簡單的信息收集到此完成春锋,除了 Nmap 外可以使用自己熟悉的工具,比如說 msf 啥的差凹,方便后續(xù)滲透期奔。
端口攻擊
由于 AWD 需要的就是手快,端口一般也會有弱口令的情況存在危尿,比如常見的 22呐萌、3389、1443谊娇、3306 等主機登陸肺孤、數(shù)據(jù)庫端口。
我打過的一次省賽中济欢,就遇到了這種情況赠堵。主辦方只給隊伍機器的 IP,給定用戶名法褥,需要自行爆破進入機器茫叭,并修改密碼。如果這個時候你的手慢半等,爆破腳本沒準(zhǔn)備好揍愁,你的機器就會淪入別人之手。當(dāng)時我們就是手慢了杀饵,只能眼睜睜看著別人拿到了我們的機器莽囤,一輪輪掉分了……
Web 攻擊
Web 方面的語言多為 PHP,小部分為 Java 和 Python凹髓。這里的 Web 環(huán)境分兩種情況烁登,一種是已有漏洞的框架,一種是出題人寫的框架蔚舀。
如果是已有漏洞的框架饵沧,通常會比較明顯。比如說 Struts 2 各種漏洞等等赌躺,用工具掃就可以掃出來狼牺。這個需要準(zhǔn)備得比較充分,在電腦中備好 EXP 庫礼患、漏洞庫和各種掃描工具庫是钥,以便能夠快速利用比較明顯的漏洞掠归。總之手要快悄泥!
如果是出題人出的框架虏冻,常用并且簡單有效的做法是把整站源碼下載下來,直接用工具審計弹囚。以 PHP 舉例厨相,一般的流程是先D盾查殺,發(fā)現(xiàn)有帶有預(yù)留后門或者 Webshell 馬上報給防守隊友進行加固鸥鹉。
把后門的問題搞定蛮穿、防止別人快速拿分后,其次才是源碼審計毁渗,發(fā)現(xiàn)問題點后迅速驗證践磅,報給防守隊友,并且開始寫攻擊腳本灸异。以 PHP 舉例府适,一般是使用 Seay 等源碼審計工具,審核出比較明顯的漏洞绎狭。
完成了工具掃描后细溅,開始常規(guī)的滲透測試,比如說文件上傳儡嘶、SQL 注入等等,看是否能繞過恍风,找到一個點馬上寫利用腳本蹦狂。
維持權(quán)限
一頓操作猛如虎,拿到 Webshell 朋贬,之后干啥呢凯楔?
當(dāng)然是要維持權(quán)限啦!簡單的 Webshell 一眼就看出來了好伐锦募,在 AWD 中優(yōu)先考慮種不死馬摆屯、反彈 shell,用一般木馬的留后門方式維持權(quán)限糠亩,以便后續(xù)刷 flag虐骑,再考慮提升權(quán)限。有的同學(xué)不知道啥叫“不死馬”赎线,解釋一下廷没,“不死馬”的主要功能是執(zhí)行后會不斷在該路徑生成一個 shell 文件,用于菜刀等工具進行連接垂寥,是一種維持權(quán)限的方法颠黎。
> 小 Trick: 使用 `find / -name *flag*` 或 `grep -rn "flag" *` 類似的語句可以快速發(fā)現(xiàn) flag 所在的地方另锋,方便后續(xù)拿分。
防守流程
防守隊友做的事情簡單來說狭归,按優(yōu)先級有以下幾個:
1. 重中之重:備份網(wǎng)站源碼和數(shù)據(jù)庫夭坪。這個作用有二,一是以防自己魔改網(wǎng)站源碼或數(shù)據(jù)庫后無法恢復(fù)过椎,二是裁判一般會定時 Check 服務(wù)是否正常室梅,如果不正常會進行扣分,因此備份也可以防對手入侵主機刪源碼后快速恢復(fù)服務(wù)潭流。
2. 系統(tǒng)安全性檢查竞惋。就是不該開的端口 3306 有沒有開啟、有沒有限制 SSH 登陸灰嫉、SSH密碼 修改拆宛、MySQL 是否為默認密碼等等,這里可以用腳本刷一遍讼撒。
3. 部署 WAF浑厚。用自己提前準(zhǔn)備好的 WAF,使用腳本進行快速部署根盒,但是要注意驗證會不會部署完后服務(wù)不可用钳幅。
4. 修改權(quán)限。比如說 MySQL 用戶讀表權(quán)限炎滞,上傳目錄是否可執(zhí)行的權(quán)限等等敢艰。
5. 部署文件監(jiān)控腳本。監(jiān)控可讀寫權(quán)限的目錄是否新增册赛、刪除文件并及時提醒钠导。這里說下,如果被種了不死馬的話通常有以下幾種克制方法森瘪。
? ? - 強行 kill 掉進程后重啟服務(wù)
? ? - 建立一個和不死馬相同名字的文件或者目錄
? ? - 寫腳本不斷刪除文件
? ? - 不斷寫入一個和不死馬同名的文件
6. 部署流量監(jiān)控腳本或開啟服務(wù)器日志記錄牡属。目的主要是為了進行流量回放,看其它大佬如何用我們沒發(fā)現(xiàn)的漏洞來打我們的機子扼睬,抓取到之后把看不懂的流量直接回放到別的機子去逮栅,這里還得提到,我們自己在攻擊的時候窗宇,也要試著混淆一下自己的攻擊流量措伐,不能輕易被別人利用。
總結(jié)
說了這么多担映,總結(jié)一下废士。AWD 攻防賽前需要準(zhǔn)備的有:
1. 各種軟件包,如 Python蝇完、CURL 等等官硝,以備機器上沒有而陷入尷尬
2. 一大堆 EXP 庫和漏洞庫矗蕊,可以放個烏云的虛擬機備用
3. 加固、基線檢查腳本
4. WAF 代碼和部署腳本
5. AWD 專用的批量拿 Webshell氢架、批量交 flag傻咖、批量維持權(quán)限的基本代碼或小框架
希望自己以后有時間能整理一個腳本集,整合到一個框架岖研,這樣打 AWD 會很舒服~
為了不讓文章太臃腫卿操,我將寫文章中搜集的關(guān)于 AWD 的一些文章、Github 鏈接放在了博客中孙援,方便各位的查閱和學(xué)習(xí)害淤,詳情可以點擊或復(fù)制該鏈接進行查看,希望可以幫到你拓售。
https://neversec.top/20190415/how-to-awd.html
新的一周窥摄,繼續(xù)開干!