干貨 | 紅隊攻防快速獲取入口權限總結
前言
近年來各種大規模的紅藍對抗逐漸興起,攻防實戰受到了更多的重視。對抗時紅隊模擬真實黑客的攻擊行為,對企業網絡應用系統進行滲透攻擊,最終能發現企業平時未注意到的風險點,達到完善企業的安全體系的目的。
本文站在紅隊攻擊的角度,介紹一種在紅隊攻擊初期快速通過已知Nday漏洞獲取入口權限的思路,并編寫成工具供紅隊滲透測試人員使用。
紅隊攻擊流程概述
在紅藍對抗中紅隊的攻擊流程大致可總結為以下幾點
情報收集 => 入口權限獲取 => 內網信息探測 => 橫向移動 => 權限維持
本文主要針對第二步入口‘入口權限獲取‘展開討論。
獲取入口權限
在真實的企業網絡中內網往往是脆弱的,通過一個入口權限進入內網后往往可以上線大量內網機器。所以入口權限的獲取至關重要。
在大型的紅藍對抗中,要對一定地區的企業應用進行打擊,紅隊初期拿到目標有時會涉及成百上千個url和ip。
在如此龐大的目標面前,初期通過常規滲透測試手法對單一系統進行測試是不合理的,這樣難以涉及到全部目標并且容易漏掉容易出現問題的系統。

比較流行的方法是用工具批量化掃描,比如用goby + awvs + xray等常見漏洞掃描工具進行聯動,以達到批量測試目標獲取入口權限的目的。
利用常見組件的漏洞

利用漏掃聯動批量掃描的確是一個很好打點方法,但避免不了效率慢,ip被ban,流量易被檢測的問題。
所以在紅隊攻擊的初期應該重將心放在各種主流 "中間件 + 開源程序 + Web服務組件" 歷史上爆出的各種Nday漏洞的檢測上面,通過這些漏洞的利用,我們可以很容易的getshell后進入內網。
這里列舉一些常見漏洞組件
struct2 (s2系列rce) thinkphp系列 (tp2x,3x,5x的代碼執行等) Jekins (未授權訪問,命令執行等) weblogic (CVE-2020-2551,CVE-2019-2729等) Jboss (反序列化CVE-2015-7501,CVE-2017-7504,CVE-2017-12149) 各類開源cms的漏洞 (如wordpress,drupal ,discuz,joomla, 帝國cms,織夢cms等) 常見編輯器的歷史漏洞 (如ueditor編輯器解析漏洞,各種越權和后臺地址泄露等) 常見OA漏洞 (用友,泛微,致遠,金蝶等) 各種網關防火墻nday,redis未授權,mongodb未授權,mysql認證繞過等
在信息收集時EHole是一款優秀的紅隊工具,它可以從大量雜亂的資產中找到這些易受攻擊的系統,紅隊人員再利用對應組件的poc驗證目標系統是否存在漏洞,以達到快速獲取入口權限的目的。
項目地址:https://github.com/popmedd/EHole
高危漏洞的檢測與攻擊
* POC:可以理解為一段驗證漏洞是否存在的程序,如果驗證成功,poc可以將漏洞存在的消息返回通知我們。一個poc往往對應一個或一類漏洞,并且poc只提供驗證的功能,不會利用漏洞對目標造成危害。 * EXP:即為一段利用漏洞的程序,與poc對應,exp提供攻擊功能,exp通過利用漏洞攻擊目標以發揮這個漏洞帶來的危害。
在識別到常見組件后,我們往往會利用該組件歷史漏洞的poc,來驗證是否有漏洞的存在
如果驗證成功再利用該漏洞對應的exp攻擊目標系統,以獲取我們想要的信息,這需要紅隊測試人員在平時對常見組件的漏洞足夠了解,需要收集大量的poc/exp并能夠及時對相應漏洞進行復現和利用。

對于紅隊人員來說,最好的情況是利用exp返回一個主機shell,這將直接進入內網滲透階段。
所以在紅隊攻擊初期,一些危害性大的漏洞如 RCE,反序列化,任意文件上傳等往往得到格外的青睞,通過對這些漏洞的檢測利用我們可以很容易的打通入口隧道進入內網。
而反之xss,crsf,業務邏輯漏洞,甚至是一些以時間為成本的sql注入在初期顯得不是特別重要,這些可以在攻擊中后期進行挖掘利用。
goby提供poc驗證的功能,并且goby收集的poc基本都能獲取到主機的shell權限,滿足紅隊初期優先檢測高危漏洞的觀念,但也有很明顯的不足之處
在紅藍攻防中紅隊時間緊任務重,一是goby的掃描速度堪憂,再者普通版goby中poc不能及時更新到新爆的高危漏洞,并且用goby只進行高危poc的檢測掃描無疑大材小用的。
為了解決這種情況,我們可以編寫掃描器來快速對大量目標進行高危漏洞的poc驗證。
POC的集成與自動化驗證
要編寫一款適合紅隊快速打點的掃描器。
掃描器的核心思想在于收集大量常見組件高危漏洞的poc,然后編寫一個框架加載這些poc,批量對多個目標進行fuzz測試。
這款專為紅隊定制的掃描器旨在只要掃出漏洞即可搜索對應exp獲取目標shell權限。
因為常見的poc都是以python腳本的形式分布在互聯網上,所以用python編寫掃描器框架可以很容易的加載調用這些poc進行漏洞驗證,我們只需要不斷收集這些poc并稍加改動即可。
我們可以將一個poc編寫成一個檢測漏洞是否存在的函數存在掃描器的poc模塊中,并用框架去調用這些漏洞驗證函數。
一個漏洞驗證函數的編寫思路可以如下:
- 函數的返回結果以字典的形式返回并且具有name和vulnerable兩個鍵值,name說明漏洞名稱,vulnerable通過True和False的狀態表明漏洞是否存在
- 示例函數如下(以 thinkphp5.0.22/5.1.29 的命令執行漏洞為例)
def thinkphp5022_5129_rce(url):
relsult = {
'name': 'Thinkphp5 5.0.22/5.1.29 Remote Code Execution Vulnerability',
'vulnerable': False
}
try:
......
(用任意方法檢測漏洞)
......
if 存在漏洞:
relsult['vulnerable'] = True # 將relsult的vulnerable的值置為True
relust['xxxxx'] = 'xxxxx' # 可以添加該漏洞相關來源等信息
......
return relsult # 將vulnerable值為True的relsult返回
else: # 不存在漏洞
return relsult # 若不存在漏洞將vulnerable值為False的relsult返回
execpt:
return relsult
這樣掃描器框架可以通過通過調用這個函數來實現poc的掃描驗證,通過返回字典中的vulnerable值來判斷漏洞是否存在。
POC bomber
POC bomber是筆者編寫的一款高危漏洞掃描器,其中集成了各種紅隊攻擊中常見組件高危漏洞的poc并能夠多線程多目標進行fuzz測試,是一款專門為紅隊定制的工具,適合在紅隊攻擊初期快速找到突破口。

項目地址:
https://github.com/tr0uble-mAker/POC-bomber
此款掃描器支持thinkphp全版本,s2全版本,weblogic全版本的漏洞檢測,并整合多個hvv高危漏洞,poc有的是網上收集有的是筆者自己編寫,是很多掃描器的集合體,并且poc經過改動后誤報率很低,能大大減少紅隊人員的手工驗證漏洞時間。
掃描器檢測結果:

目前項目的poc在不斷更新中并及時更新最新高危漏洞的poc驗證(包括最近的泛微任意文件上傳-CNVD-2021-49104)