我的滲透測試方法論
0x01 滲透測試概述
滲透測試:比較官方的解釋可以查看百度百科,我的理解為滲透測試就是通過一些手段找到網站、APP、網絡服務、軟件、服務器等網絡設備和應用的漏洞,告知管理員有哪些漏洞,應該怎么填補以防止入侵
下圖,為我在學習課程之前了解到的滲透測試流程:

而本次課程中,將滲透測試的流程就更加簡化了,總共分為了三個步驟 ——
- 信息收集階段:通過已知信息去收集滲透測試目標所有暴露在邊界上的系統和信息,從而掌握目標外圍所有可能訪問到的資產信息
- 漏洞發現階段:對收集到的資產進行劃分,然后針對不同的目標執行不同的測試方案
- 報告編寫階段:將之前的所有成果進行匯總,將測試的方法、流程、結果以及漏洞修復建議體現在報告中
其中可以使用腳本自動化完成的步驟為信息收集和漏洞發現,接下來我就來具體介紹一下課程中關于這兩個部分的內容
0x02 信息收集階段
資產范圍 → 子域名數據 → 域名對應的IP數據
通常情況下,我們拿到的資產范圍都是一些域名列表,類似于下圖

所以,我們第一步需要做的工作通常是收集主域名下的子域名與其對應的IP
子域名收集工具使用amass收集國內第三方平臺數據的子域名收集工具oneforall收集國內第三方平臺數據的子域名收集工具dnsgen根據提供的域名數據生成新的子域名字典的工具ksubdomain子域名枚舉工具

具體步驟如下:
- 在獲取到目標資產范圍后,先進行第三方平臺的子域名信息收集,使用到的工具有
oneforall(國內)和amass(國外) - 使用子域名枚舉工具
ksubdomain的enum模塊,利用子域名字典對目標進行子域名枚舉,獲取相應數據 - 將前兩步收集到的信息去重后傳入域名字典生成工具
dnsgen生成新的域名字典 - 使用子域名枚舉工具
ksubdomain的verify模塊,利用新生成的域名字典進行域名枚舉,獲取相應數據,值得注意的是,verify模塊產生的數據不會對泛解析域名進行處理,這里還需要增加一個處理泛解析域名的操作 - 將所有的得到的數據匯總去重,即可得到一份子域名 + IP的目標數據
子域名與IP的映射關系 → 獲取http://domain:port格式的URL數據僅僅知道站點域名是不足以確定一個WEB站點的,所以我們還需要獲取其WEB服務對應的端口號,最終拿到對應的URL數據
端口掃描工具使用naabu集成工具,傳入域名列表可以直接獲取數據,但是速度很慢nmap端口掃描工具,速度一般,能夠很方便的獲取端口指紋信息masscan端口掃描工具,速度很快,但是無法獲取端口指紋信息fingerprintx端口指紋識別工具

想要通過域名IP數據獲取URL數據方式有三種,可以根據個人需求選擇對應的方式進行操作:
方式一:直接使用naabu工具進行收集,輸入域名列表,輸出http://domain:port格式的URL數據,但是速度很慢
方式二:使用Nmap工具的-sV參數對IP列表進行掃描,能夠直接獲取IP開放的端口和對應的服務信息,通過對服務信息的分類能夠獲取到開放WEB服務的端口,最后再將端口與域名數據拼接,即可獲取http://domain:port格式的URL數據。這種方式不復雜,但是速度也不算快,建議針對單個站點使用
方式三:使用Masscan對IP列表進行掃描,獲取其開放的端口,然后使用fingerprintx工具進行端口指紋識別,獲取其中的開放WEB服務的端口,最后再將端口與域名數據拼接,即可獲取http://domain:port格式的URL數據。這種方式經過測試,速度是方式二的兩到三倍
URL數據 → 站點驗活 → 站點去重 → 站點指紋識別 + WAF檢測 → 目標站點列表
在獲取到URL數據之后,我們可以對每個URL進行進一步的驗證,排除掉所有失活的站點,再基于站點哈希值進行去重,最后排除掉存在WAF站點,即可獲取最終的目標站點列表,然后可以根據需求進行站點指紋識別,為NDay漏洞的利用做準備
站點信息收集工具使用httpx收集站點返回信息的工具,能夠自動進行站點驗活,站點去重可以根據站點hash值進行TideFinger站點指紋識別工具Wafw00f站點WAF檢測工具,能夠識別WAF種類

站點信息收集的具體步驟如下 :
- 使用
httpx工具收集所有URL對應站點的哈希值,工具會默認排除失活站點,然后根據哈希值進行去重 - 使用
wafw00f工具對所有存活的站點進行WAF驗證,排除掉存在WAF的站點并收集WAF指紋數據入庫(若沒有WAF指紋識別的需求,僅僅只是進行排除,也可以自己編寫WAF判定的腳本),獲取經過篩選的站點作為目標站點數據保存下來 - 如果有需求,可以通過
TideFinger工具收集目標站點的站點指紋信息進行入庫/存入文件
目標站點列表 → 站點列表
在獲取到站點列表之后,需要尋找注入點,即網站的接口(GET、POST傳參的參數)
站點接口收集工具使用gospider爬蟲工具,自動獲取站點公開接口uro站點接口去重工具x8針對單個站點的接口枚舉工具,配合字典使用

尋找網站接口的方式有二:
方式一:通過接口字典枚舉的方式尋找,用到的工具是x8,需要指定對應的參數字典,這個方式效率不高,在站點數量較少的時候可以嘗試用
方式二:使用網站爬蟲的方式尋找公開的接口信息,用到的工具是gospider,這款爬蟲工具為動態爬蟲,利用無頭瀏覽器,可以動態加載網頁中的 JavaScript 腳本,相比靜態爬蟲可以獲取 POST 請求中的參數,以及可以利用 API 進行數據交互
在收集完網站接口數據之后,可以利用uro工具對數據進行去重,避免重復操作
總結
至此,信息收集步驟已經全部完成,我們再來回顧一下 ——
- 收集目標站點資產范圍,通常為域名范圍
- 子域名收集
- WEB端口收集,匯總為URL數據
- URL去重、驗活以及排除存在WAF的站點
- 站點指紋識別,信息入庫
- 站點接口數據收集
0x03 自動化測試
在之前的信息收集步驟中,我們獲取了目標站點的URL數據和接口數據,接下來,就可以利用這些數據進行自動化測試了
在開始前,我們需要了解一下常見的漏洞掃描以及模糊測試工具
漏洞掃描工具使用AWVSBS架構的漏掃工具,適合掃描單個站點AppScanCS架構的漏掃工具,可以自定義規則,適合掃描單個站點Xray漏掃腳本,適合掃描多個站點,支持靜態被動掃描Crawlergo瀏覽器內核爬蟲,可用于Xray聯動使用SNETCrackerWindows下的弱口令枚舉工具HydraLinux下的弱口令枚舉工具,kali自帶ffufFuzzing工具
其中弱口令枚舉工具是對一些非WEB端口可能存在弱口令的應用進行測試;而漏掃工具和Fuzzing工具則是針對WEB服務進行測試

AVWS和AppScan通常是使用針對單個站點進行漏掃的工具,簡單易用但是擴展性較差
而這里重點介紹xray工具的使用思路——
- 被動掃描:在進行手工測試的時候,可以開啟xray的被動掃描模式,讓它幫助你做一些常見WEB漏洞的探測,而人工的重心可以放在邏輯漏洞的發現上
- 主動探測:利用
xray的主動探測功能對站點接口收集階段的接口數據進行探測 - 聯動
Crawlergo進行探測:先用Crawlergo對站點的URL數據進行爬取,再將流量轉發給xray對得到的數據進行探測
這三款工具都能自動生成漏洞掃描報告,報告編寫可以將其作為參考資料
0x04 總結

最后的最后,放一張圖來總結一下這次滲透實訓的整體思路,以上就是我這次參加實訓的所有收獲。