Web 滲透測試
經授權的 Web 應用程序滲透測試——包括偵察、漏洞分析、基於證據的利用以及專業報告編制。採用 Shannon 的“無利用,無報告”(No Exploit, No Report)方法論,並針對範圍、授權和輔助客戶端(aux-client)洩露設置了嚴格的護欄。僅對您擁有或已獲得書面授權測試的運行中應用程序進行主動測試。
技能元數據
| 來源 | 可選 — 使用 hermes skills install official/security/web-pentest 安裝 |
| 路徑 | optional-skills/security/web-pentest |
| 平臺 | linux, macos |
參考:完整 SKILL.md
以下是觸發此技能時 Hermes 加載的完整技能定義。當技能處於活動狀態時,代理將這些內容視為指令。
Web 應用程序滲透測試
針對運行中的 Web 應用程序的分階段滲透測試工作流。改編自 Shannon 的流水線(Keygraph,AGPL 許可——僅借鑑概念,未借用代碼)。圍繞以下三條規則構建:
- 無利用,無報告——每個發現都需要可復現的證據。
- 範圍受限——每個主動請求必須針對操作員預先聲明的目標。拒絕超出範圍的主機。
- 在排除誤報之前先窮盡繞過方法——在嘗試完繞過集合之前,“被攔截”的有效負載並不代表安全無恙。
⚠️ 嚴格護欄——每次參與前必讀
違反任何一條都將導致本次參與無效,並可能構成非法行為。
-
授權關口。 在會話中進行首次主動掃描之前,您必須以書面形式與用戶確認,他們擁有目標的所有權或擁有測試目標的書面授權。將確認記錄在
engagement/authorization.md中(參見模板)。無確認 → 無主動掃描。使用curl讀取公共頁面是可以的;發送有效負載則不行。 -
範圍允許列表。 維護
engagement/scope.txt——每行一個主機名或 CIDR。每個nmap、curl、whatweb、瀏覽器導航或攜帶有效負載的請求必須針對範圍列表中的條目。如果目標將您重定向到範圍外(3xx 重定向到其他主機,或 HTML 中的鏈接),請停止並在跟隨之前與用戶確認。 -
無書面批准不測試生產系統。 如果用戶未明確告知“是的,生產環境在範圍內,且我有書面簽字批准”,則默認假設不在範圍內。默認目標應為預發佈環境(staging)、本地 Docker 容器或專用測試實例。
-
默認禁止探測雲元數據。 除非參與範圍明確將 SSRF 至元數據作為目標,且目標在您控制之下,否則不要探測
169.254.169.254、metadata.google.internal、100.100.100.200、[fd00:ec2::254]或等效地址。代理的瀏覽器工具可以從您的基礎設施內部訪問這些地址——請勿這樣做。 -
破壞性有效負載需批准。 會導致 DROP/DELETE 的 SQL 注入有效負載、文件系統寫入型 SSTI、包含
rm/shutdown/mkfs的命令注入、任何超出單行測試數據的變更操作 → 先詢問。approval.py系統會捕獲部分情況;但不要僅依賴它。 -
輔助客戶端洩露風險(Hermes 特有)。 此技能生成的會話中包含大量 SQLi/XSS/RCE 有效負載、捕獲的憑據、JWT 令牌。Hermes 的壓縮和標題生成路徑會通過輔助客戶端(通常是主模型)重放歷史記錄。您寫入對話的任何敏感信息都可能在下次壓縮時離開本地環境。緩解措施:
- 在任何消息中記錄捕獲的令牌/憑據之前,將其脫敏為最後 6 個字符。完整值應存入
engagement/evidence/文件,絕不要放入聊天曆史。 - 如果參與涉及敏感信息,請在會話期間於
~/.hermes/config.yaml中設置auxiliary.title_generation.enabled: false。
- 在任何消息中記錄捕獲的令牌/憑據之前,將其脫敏為最後 6 個字符。完整值應存入
-
自我速率限制。 針對任何單個主機的主動請求之間默認間隔 200ms。
recon-scan.sh腳本會強制執行此限制。未經操作員批准,不要繞過此限制。 -
報告的權威性。 此技能生成的是安全評估報告,而非“通過”證明。即使是乾淨的運行結果,也應表述為“在時間 T 內使用方法 Y 在範圍 X 中未發現可利用問題”,而非“應用程序是安全的”。報告中應反映這種措辭。
階段 0:參與設置
在進行任何掃描之前,創建參與目錄和授權確認文件。
ENGAGEMENT=engagement-$(date +%Y%m%d-%H%M%S)
mkdir -p "$ENGAGEMENT"/{evidence,findings,reports}
cd "$ENGAGEMENT"
-
向用戶詢問(逐字如下):
“確認:(a) 目標 URL 為 [X],(b) 您擁有此應用程序的所有權或擁有測試它的書面授權,以及 (c) 本次參與從現在起最多運行 [N] 小時。回覆 'authorized' 以繼續。”
-
等待明確的
authorized響應。 任何其他回答均意味著停止。 -
記錄授權至
engagement/authorization.md,使用templates/authorization.md中的模板。包括:- 目標 URL 和 IP
- 授權依據(所有權 / 來自 $name 的書面授權)
- 參與時間窗口
- 範圍外項目(生產環境、第三方服務等)
- 操作員姓名(驅動此會話的用戶)
-
構建 scope.txt:
localhost
127.0.0.1
staging.example.com
192.168.1.0/24 # internal lab only, with operator OK -
在發出第一個活動請求之前,閱讀
references/scope-enforcement.md—— 該文檔包含你在每個命令/URL 發出之前必須應用的主機提取規則。
階段 1:預偵察(代碼分析,可選)
如果沒有源代碼訪問權限(黑盒參與),請跳過此階段。
如果你擁有應用程序源代碼的讀取權限:
- 映射架構 —— 框架、路由、中間件棧
- 清點匯點(sinks) —— 每個
execute(、os.system(、eval(、模板渲染、文件讀/寫、重定向目標 - 映射認證機制 —— Session Cookie 與 JWT、OAuth 流程、密碼重置、特權端點
- 識別信任邊界 —— 哪些是已認證的,哪些不是,哪些來自
request.* - 從每個匯點進行反向汙點追蹤至請求源。當發現適當的 sanitization(參數化查詢、允許列表、
shlex.quote、知名的轉義器)時早期終止。
輸出:evidence/pre-recon.md —— 架構圖、匯點清單、疑似漏洞代碼路徑。
這是離線工作。不向目標發送任何流量。
階段 2:偵察(實時,只讀)
映射攻擊面。所有請求均為公共頁面的 GET 請求,尚不包含 payload。仍然受範圍限制。
-
驗證範圍。 解析每個目標主機名 → IP。確認 IP 在範圍內(避免“DNS 指向意外位置”的陷阱)。
-
網絡表面(僅在範圍允許端口掃描時執行):
nmap -sT -T3 --top-ports 100 -oN evidence/nmap.txt $TARGET使用
-T3(默認),而非-T4/-T5。更隱蔽,避免在共享環境中觸發 IDS/IPS。 -
技術指紋識別:
whatweb -v $TARGET_URL > evidence/whatweb.txt
curl -sIk $TARGET_URL > evidence/headers.txt -
端點發現:
- 使用瀏覽器工具爬取應用(
browser_navigate、browser_get_images,跟隨鏈接)。 - 檢查
robots.txt、sitemap.xml、.well-known/*。 - 通過瀏覽器工具的開發者工具網絡面板捕獲 XHR/fetch 調用。
- 使用瀏覽器工具爬取應用(
-
認證表面: 識別登錄、註冊、密碼重置、Session Cookie 名稱、令牌格式。切勿在此時發送憑據——僅觀察。
-
與預偵察關聯(如果你有源代碼)。對於
evidence/pre-recon.md中的每個發現,標記實時表面是否確認其可訪問。
輸出:evidence/recon.md —— 端點、技術、認證模型、輸入向量。
階段 3:漏洞分析
每個漏洞類別使用一個 delegate_task。每個代理讀取 evidence/recon.md(如果存在則加上 evidence/pre-recon.md),並使用 templates/exploitation-queue.json 生成 findings/<class>-queue.json。
使用 delegate_task 配合以下專注的子代理(儘可能並行):
| 類別 | 目標 | 參考 |
|---|---|---|
injection | SQL 注入、命令注入、路徑遍歷、SSTI、LFI/RFI、反序列化 | references/vuln-taxonomy.md(槽位類型) |
xss | 反射型、存儲型、基於 DOM 的 XSS | references/vuln-taxonomy.md(渲染上下文) |
auth | 登錄繞過、JWT 混淆、會話固定、OAuth 缺陷 | references/exploitation-techniques.md |
authz | IDOR、垂直/水平越權、業務邏輯漏洞 | references/exploitation-techniques.md |
ssrf | 內部可達性、元數據、協議走私 | 除非明確授權,否則跳過元數據 |
infra | 配置錯誤、信息洩露、默認憑據、暴露的管理界面 | references/exploitation-techniques.md |
每個隊列條目包含:id、漏洞類別、來源(如果已知則為 file:line)、端點、參數、槽位類型、疑似防禦措施、判定結果(identified / partial / confirmed / critical)、見證 payload、置信度(0-1)、備註。
分析階段尚未發送惡意 payload——它們只是被暫存。利用階段才會實際發送它們。
階段 4:利用(基於證明,有條件)
僅在分析隊列中存在可操作條目(identified 或 partial)的類別中運行子代理。
對於每個候選者:
- 發送前檢查 — 主機是否在範圍內?是否滿足認證關卡?如果是破壞性操作,載荷(payload)是否已獲批准?
- 發送驗證載荷 — 最小化證明。SQL 注入:先發送
' AND 1=1--,再發送' AND 1=2--。XSS:使用無害標記,如<svg/onload=console.log("HERMES-PENTEST-XSS")>。在存儲型 XSS 中切勿使用alert(1)— 它會在共享環境中對其他用戶觸發。 - 驗證驗證載荷是否觸發 — 對於盲注,使用睡眠探測(
SLEEP(5))並對響應計時。對於 SSRF,使用由測試者控制的、你自己擁有的回調主機(在敏感參與項目中,不要使用 webhook.site 等公共服務 — 以免洩露路徑)。 - 提升等級:
- L1 已識別 — 模式匹配,但無行為變化
- L2 部分 — 到達 sink 點,但有防禦措施
- L3 已確認 — 載荷以可觀察的方式改變了應用行為
- L4 嚴重 — 數據被提取、代碼被執行或權限被提升
- 在歸類為誤報(FP)之前窮盡繞過嘗試。 對於每個被阻斷的候選項:至少嘗試
references/bypass-techniques.md中針對該類列出的繞過集合。只有在窮盡該集合後,才能寫入verdict: false_positive。 - 記錄證據 針對每個 L3/L4:
- 完整請求(方法、URL、頭信息、正文)
- 響應(狀態碼、頭信息、相關正文摘錄)
- 復現命令(curl 單行命令)
- 影響陳述
輸出:findings/exploitation-evidence.md
在證據文件中脫敏:
- 任何捕獲的憑據/令牌 → 聊天中僅保留最後 6 個字符;完整值存入
findings/secrets-vault.md(已在 .gitignore 中)。 - 其他用戶的個人身份信息(PII)→ 脫敏。
- 你的測試憑據 → 可以保留。
階段 5:報告
使用 templates/pentest-report.md 生成最終報告。章節包括:
- 執行摘要
- 參與項目範圍(來自
engagement/scope.txt) - 授權(來自
engagement/authorization.md) - 發現項(僅限 L3/L4 — 需要證明)。每個發現項包含:
- 標題、嚴重程度(CVSS 3.1)、CWE
- 受影響的端點
- 證明(請求 + 響應摘錄)
- 復現步驟
- 影響
- 修復建議
- 未利用的候選項(L1/L2,附註說明是什麼阻斷了它們)
- 範圍外的觀察結果
- 方法論 / 使用的工具
- 侷限性以及未測試的內容
嚴重程度策略: 僅對 L3/L4 使用 CVSS。L1/L2 為“待驗證候選項” — 不要為未驗證的發現項分配 CVSS。
何時停止
- 用戶撤銷授權。
- 候選發現項明顯影響生產數據,且你沒有獲得破壞性測試的批准 — 停止並詢問。
- 目標開始返回大量的 503/429 錯誤 — 退避,並與操作員重新協調。
- 你發現了合同範圍之外的東西(例如,在測試不相關的端點時發現了一個暴露的客戶數據庫)。停止、記錄、向操作員報告。未經明確批准不得橫向移動(pivot)— 這種橫向移動會使滲透測試變得非法。
此技能不包含的內容
- 超出端口掃描的網絡層滲透測試(不使用 Metasploit、Cobalt Strike、AD 攻擊、網絡協議模糊測試)。
- 逆向工程 / 二進制分析(參見 issue #383)。
- 僅基於源代碼的靜態分析(參見 issue #382)。
- 主動社會工程學 / 網絡釣魚。
- 針對操作員未預先授權系統的任何操作。
如果參與項目需要上述任何內容,請升級至專業滲透測試人員。此技能是對專業滲透測試的補充,而非替代。
延伸閱讀
references/scope-enforcement.md— 如何限定每個活動請求的範圍references/vuln-taxonomy.md— 槽位類型、渲染上下文、OWASP 映射references/exploitation-techniques.md— 每類載荷模式references/bypass-techniques.md— 常見的 WAF/過濾器繞過技術templates/authorization.md— 參與項目授權模板templates/pentest-report.md— 最終報告模板templates/exploitation-queue.json— 每類發現項隊列 schemascripts/recon-scan.sh— 速率限制的 nmap+whatweb+headers 包裝腳本