跳到主要內容

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 許可——僅借鑑概念,未借用代碼)。圍繞以下三條規則構建:

  1. 無利用,無報告——每個發現都需要可復現的證據。
  2. 範圍受限——每個主動請求必須針對操作員預先聲明的目標。拒絕超出範圍的主機。
  3. 在排除誤報之前先窮盡繞過方法——在嘗試完繞過集合之前,“被攔截”的有效負載並不代表安全無恙。

⚠️ 嚴格護欄——每次參與前必讀

違反任何一條都將導致本次參與無效,並可能構成非法行為。

  1. 授權關口。 在會話中進行首次主動掃描之前,您必須以書面形式與用戶確認,他們擁有目標的所有權或擁有測試目標的書面授權。將確認記錄在 engagement/authorization.md 中(參見模板)。無確認 → 無主動掃描。使用 curl 讀取公共頁面是可以的;發送有效負載則不行。

  2. 範圍允許列表。 維護 engagement/scope.txt ——每行一個主機名或 CIDR。每個 nmapcurlwhatweb、瀏覽器導航或攜帶有效負載的請求必須針對範圍列表中的條目。如果目標將您重定向到範圍外(3xx 重定向到其他主機,或 HTML 中的鏈接),請停止並在跟隨之前與用戶確認。

  3. 無書面批准不測試生產系統。 如果用戶未明確告知“是的,生產環境在範圍內,且我有書面簽字批准”,則默認假設不在範圍內。默認目標應為預發佈環境(staging)、本地 Docker 容器或專用測試實例。

  4. 默認禁止探測雲元數據。 除非參與範圍明確將 SSRF 至元數據作為目標,目標在您控制之下,否則不要探測 169.254.169.254metadata.google.internal100.100.100.200[fd00:ec2::254] 或等效地址。代理的瀏覽器工具可以從您的基礎設施內部訪問這些地址——請勿這樣做。

  5. 破壞性有效負載需批准。 會導致 DROP/DELETE 的 SQL 注入有效負載、文件系統寫入型 SSTI、包含 rm/shutdown/mkfs 的命令注入、任何超出單行測試數據的變更操作 → 先詢問approval.py 系統會捕獲部分情況;但不要僅依賴它。

  6. 輔助客戶端洩露風險(Hermes 特有)。 此技能生成的會話中包含大量 SQLi/XSS/RCE 有效負載、捕獲的憑據、JWT 令牌。Hermes 的壓縮和標題生成路徑會通過輔助客戶端(通常是主模型)重放歷史記錄。您寫入對話的任何敏感信息都可能在下次壓縮時離開本地環境。緩解措施:

    • 在任何消息中記錄捕獲的令牌/憑據之前,將其脫敏為最後 6 個字符。完整值應存入 engagement/evidence/ 文件,絕不要放入聊天曆史。
    • 如果參與涉及敏感信息,請在會話期間於 ~/.hermes/config.yaml 中設置 auxiliary.title_generation.enabled: false
  7. 自我速率限制。 針對任何單個主機的主動請求之間默認間隔 200ms。recon-scan.sh 腳本會強制執行此限制。未經操作員批准,不要繞過此限制。

  8. 報告的權威性。 此技能生成的是安全評估報告,而非“通過”證明。即使是乾淨的運行結果,也應表述為“在時間 T 內使用方法 Y 在範圍 X 中未發現可利用問題”,而非“應用程序是安全的”。報告中應反映這種措辭。


階段 0:參與設置

在進行任何掃描之前,創建參與目錄和授權確認文件。

ENGAGEMENT=engagement-$(date +%Y%m%d-%H%M%S)
mkdir -p "$ENGAGEMENT"/{evidence,findings,reports}
cd "$ENGAGEMENT"
  1. 向用戶詢問(逐字如下):

    “確認:(a) 目標 URL 為 [X],(b) 您擁有此應用程序的所有權或擁有測試它的書面授權,以及 (c) 本次參與從現在起最多運行 [N] 小時。回覆 'authorized' 以繼續。”

  2. 等待明確的 authorized 響應。 任何其他回答均意味著停止

  3. 記錄授權engagement/authorization.md,使用 templates/authorization.md 中的模板。包括:

    • 目標 URL 和 IP
    • 授權依據(所有權 / 來自 $name 的書面授權)
    • 參與時間窗口
    • 範圍外項目(生產環境、第三方服務等)
    • 操作員姓名(驅動此會話的用戶)
  4. 構建 scope.txt:

    localhost
    127.0.0.1
    staging.example.com
    192.168.1.0/24 # internal lab only, with operator OK
  5. 在發出第一個活動請求之前,閱讀 references/scope-enforcement.md —— 該文檔包含你在每個命令/URL 發出之前必須應用的主機提取規則。


階段 1:預偵察(代碼分析,可選)

如果沒有源代碼訪問權限(黑盒參與),請跳過此階段。

如果你擁有應用程序源代碼的讀取權限:

  1. 映射架構 —— 框架、路由、中間件棧
  2. 清點匯點(sinks) —— 每個 execute(os.system(eval(、模板渲染、文件讀/寫、重定向目標
  3. 映射認證機制 —— Session Cookie 與 JWT、OAuth 流程、密碼重置、特權端點
  4. 識別信任邊界 —— 哪些是已認證的,哪些不是,哪些來自 request.*
  5. 從每個匯點進行反向汙點追蹤至請求源。當發現適當的 sanitization(參數化查詢、允許列表、shlex.quote、知名的轉義器)時早期終止。

輸出:evidence/pre-recon.md —— 架構圖、匯點清單、疑似漏洞代碼路徑。

這是離線工作。不向目標發送任何流量。


階段 2:偵察(實時,只讀)

映射攻擊面。所有請求均為公共頁面的 GET 請求,尚不包含 payload。仍然受範圍限制。

  1. 驗證範圍。 解析每個目標主機名 → IP。確認 IP 在範圍內(避免“DNS 指向意外位置”的陷阱)。

  2. 網絡表面(僅在範圍允許端口掃描時執行):

    nmap -sT -T3 --top-ports 100 -oN evidence/nmap.txt $TARGET

    使用 -T3(默認),而非 -T4/-T5。更隱蔽,避免在共享環境中觸發 IDS/IPS。

  3. 技術指紋識別:

    whatweb -v $TARGET_URL > evidence/whatweb.txt
    curl -sIk $TARGET_URL > evidence/headers.txt
  4. 端點發現:

    • 使用瀏覽器工具爬取應用(browser_navigatebrowser_get_images,跟隨鏈接)。
    • 檢查 robots.txtsitemap.xml.well-known/*
    • 通過瀏覽器工具的開發者工具網絡面板捕獲 XHR/fetch 調用。
  5. 認證表面: 識別登錄、註冊、密碼重置、Session Cookie 名稱、令牌格式。切勿在此時發送憑據——僅觀察。

  6. 與預偵察關聯(如果你有源代碼)。對於 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 配合以下專注的子代理(儘可能並行):

類別目標參考
injectionSQL 注入、命令注入、路徑遍歷、SSTI、LFI/RFI、反序列化references/vuln-taxonomy.md(槽位類型)
xss反射型、存儲型、基於 DOM 的 XSSreferences/vuln-taxonomy.md(渲染上下文)
auth登錄繞過、JWT 混淆、會話固定、OAuth 缺陷references/exploitation-techniques.md
authzIDOR、垂直/水平越權、業務邏輯漏洞references/exploitation-techniques.md
ssrf內部可達性、元數據、協議走私除非明確授權,否則跳過元數據
infra配置錯誤、信息洩露、默認憑據、暴露的管理界面references/exploitation-techniques.md

每個隊列條目包含:id、漏洞類別、來源(如果已知則為 file:line)、端點、參數、槽位類型、疑似防禦措施、判定結果(identified / partial / confirmed / critical)、見證 payload、置信度(0-1)、備註。

分析階段尚未發送惡意 payload——它們只是被暫存。利用階段才會實際發送它們。


階段 4:利用(基於證明,有條件)

僅在分析隊列中存在可操作條目(identifiedpartial)的類別中運行子代理。

對於每個候選者:

  1. 發送前檢查 — 主機是否在範圍內?是否滿足認證關卡?如果是破壞性操作,載荷(payload)是否已獲批准?
  2. 發送驗證載荷 — 最小化證明。SQL 注入:先發送 ' AND 1=1--,再發送 ' AND 1=2--。XSS:使用無害標記,如 <svg/onload=console.log("HERMES-PENTEST-XSS")>。在存儲型 XSS 中切勿使用 alert(1) — 它會在共享環境中對其他用戶觸發。
  3. 驗證驗證載荷是否觸發 — 對於盲注,使用睡眠探測(SLEEP(5))並對響應計時。對於 SSRF,使用由測試者控制的、你自己擁有的回調主機(在敏感參與項目中,不要使用 webhook.site 等公共服務 — 以免洩露路徑)。
  4. 提升等級:
    • L1 已識別 — 模式匹配,但無行為變化
    • L2 部分 — 到達 sink 點,但有防禦措施
    • L3 已確認 — 載荷以可觀察的方式改變了應用行為
    • L4 嚴重 — 數據被提取、代碼被執行或權限被提升
  5. 在歸類為誤報(FP)之前窮盡繞過嘗試。 對於每個被阻斷的候選項:至少嘗試 references/bypass-techniques.md 中針對該類列出的繞過集合。只有在窮盡該集合後,才能寫入 verdict: false_positive
  6. 記錄證據 針對每個 L3/L4:
    • 完整請求(方法、URL、頭信息、正文)
    • 響應(狀態碼、頭信息、相關正文摘錄)
    • 復現命令(curl 單行命令)
    • 影響陳述

輸出:findings/exploitation-evidence.md

在證據文件中脫敏:

  • 任何捕獲的憑據/令牌 → 聊天中僅保留最後 6 個字符;完整值存入 findings/secrets-vault.md(已在 .gitignore 中)。
  • 其他用戶的個人身份信息(PII)→ 脫敏。
  • 你的測試憑據 → 可以保留。

階段 5:報告

使用 templates/pentest-report.md 生成最終報告。章節包括:

  1. 執行摘要
  2. 參與項目範圍(來自 engagement/scope.txt
  3. 授權(來自 engagement/authorization.md
  4. 發現項(僅限 L3/L4 — 需要證明)。每個發現項包含:
    • 標題、嚴重程度(CVSS 3.1)、CWE
    • 受影響的端點
    • 證明(請求 + 響應摘錄)
    • 復現步驟
    • 影響
    • 修復建議
  5. 未利用的候選項(L1/L2,附註說明是什麼阻斷了它們)
  6. 範圍外的觀察結果
  7. 方法論 / 使用的工具
  8. 侷限性以及未測試的內容

嚴重程度策略: 僅對 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 — 每類發現項隊列 schema
  • scripts/recon-scan.sh — 速率限制的 nmap+whatweb+headers 包裝腳本