你現在手上有一張攻擊面總表,上面列了 20 多個服務和一堆可能的漏洞。
問題來了:該先打哪個?
如果你是在打 CTF,答案是「都試一遍」。但如果你是在做滲透測試,時間是有限的——客戶給你一週,不可能每個漏洞都深入。你必須在最短時間內找到最有價值的突破口。
這篇要講的不只是「MS3 該怎麼打」,而是一套通用的攻擊路徑規劃方法論——這是 OSCP 考試和實際滲透測試都需要的核心能力
┌──────────────────────────────────────────────────────────────┐
│ 攻擊優先順序評估矩陣 │
├──────────────┬───────────────────────────────────────────────┤
│ │ │
│ 維度 1 │ Exploit 可用性 │
│ 有沒有現成 │ │
│ 武器? │ 3 分:有公開 exploit,可直接使用 │
│ │ 2 分:有 exploit 但需要修改或條件 │
│ │ 1 分:只有漏洞描述,需要自己寫 exploit │
│ │ 0 分:沒有已知漏洞 │
│ │ │
├──────────────┼───────────────────────────────────────────────┤
│ │ │
│ 維度 2 │ 認證需求 │
│ 需不需要 │ │
│ 帳密? │ 3 分:無需認證,直接存取 │
│ │ 2 分:有預設帳密可試 │
│ │ 1 分:需要有效帳密(可能要爆破) │
│ │ 0 分:需要高權限帳號 │
│ │ │
├──────────────┼───────────────────────────────────────────────┤
│ │ │
│ 維度 3 │ 影響程度 │
│ 打穿之後 │ │
│ 能拿到什麼?│ 3 分:直接 RCE(遠端程式碼執行) │
│ │ 2 分:可讀寫檔案或存取敏感資料 │
│ │ 1 分:資訊洩漏(有助於下一步攻擊) │
│ │ 0 分:只有 DoS 或無實質影響 │
│ │ │
├──────────────┼───────────────────────────────────────────────┤
│ │ │
│ 維度 4 │ 時間成本 │
│ 要花多少 │ │
│ 時間? │ 3 分:< 15 分鐘 │
│ │ 2 分:15-60 分鐘 │
│ │ 1 分:1-3 小時 │
│ │ 0 分:> 3 小時或不確定 │
│ │ │
└──────────────┴───────────────────────────────────────────────┘
總分 = Exploit 可用性 + 認證需求 + 影響程度 + 時間成本
滿分 12 分,越高越優先
攻擊路徑的三種策略
拿到評分之後,還要選擇攻擊策略。不同場景適合不同策略:
策略 A:速攻型(Speed Run)
━━━━━━━━━━━━━━━━━━━━━━━━━━━
適用:CTF 比賽、OSCP 考試、時間極度有限
原則:只打總分最高的,拿到 shell 就往下走
路線:
Elasticsearch RCE (12分)
→ 成功? → 提權 → 結束
→ 失敗? → Jenkins Console (11分)
→ 成功? → 提權 → 結束
→ 失敗? → UnrealIRCd 後門 (12分)
→ ...
時間預算:每個目標最多 30 分鐘
放棄標準:超時就換下一個
目標:最短時間拿到 root
策略 B:廣度型(Breadth First)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
適用:正式滲透測試報告、漏洞評估
原則:每個攻擊面都要碰到,記錄所有發現
路線:
Phase 1: 快速驗證所有高分目標(每個 15 分鐘)
→ Elasticsearch:試 exploit → 記錄結果
→ Jenkins:試登入 → 記錄結果
→ MySQL:試預設帳密 → 記錄結果
→ ProFTPD:試 mod_copy → 記錄結果
→ ...全部過一遍
Phase 2: 深入利用成功的目標
→ 回到 Phase 1 中成功的,做完整利用
→ 拿 shell、提權、截圖、記錄步驟
Phase 3: 補充中低分目標
→ Samba 列舉、CUPS 探測等
時間預算:Phase 1 全部完成再進 Phase 2
目標:完整的漏洞清單 + 風險評估報告
策略 C:攻擊鏈型(Kill Chain)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
適用:紅隊演練、APT 模擬、學習攻擊思維
原則:像真正的攻擊者一樣,把多個弱點串起來
路線:
Step 1: 資訊收集
Samba 匿名列舉 → 找到設定檔和帳密
↓
Step 2: 初始存取
用找到的帳密登入 MySQL/phpMyAdmin
↓
Step 3: 據點建立
MySQL INTO OUTFILE 寫 WebShell
或 ProFTPD mod_copy 放 WebShell
↓
Step 4: 提權
WebShell → 反彈 shell → LinPEAS → root
↓
Step 5: 持久化
加 SSH key、建立後門帳號
↓
Step 6: 橫向移動
(如果有 Windows VM)SMB/WinRM 到 Windows
時間預算:不限,重在過程
目標:完整的攻擊鏈,模擬真實入侵
放棄的藝術
放棄標準(Stop Criteria):
┌─────────────────────────────────────────────────┐
│ 什麼時候該放棄當前目標? │
│ │
│ 1. 時間到了 │
│ → 設定好的時間預算用完(15/30/60 分鐘) │
│ → 嚴格遵守,不要「再試最後一次」 │
│ │
│ 2. 前提條件不成立 │
│ → exploit 需要特定版本,但目標版本不對 │
│ → 例:Drupalgeddon 需要 7.x < 7.32 │
│ 但目標是 7.38 → 直接放棄 │
│ │
│ 3. 環境不允許 │
│ → 防火牆擋了反彈連線 │
│ → 目標沒有你需要的工具 │
│ → 記錄下來,稍後用其他方法繞過 │
│ │
│ 4. 已經拿到同等權限 │
│ → 已經從 Elasticsearch 拿到 shell 了 │
│ → Jenkins 也能拿 shell 但同樣權限 │
│ → 除非報告需要,否則跳過 │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 什麼時候不該放棄? │
│ │
│ 1. 有明確進展但尚未完成 │
│ → exploit 跑了但 shell 沒彈回來 │
│ → 可能是 payload 或網路問題,值得排錯 │
│ │
│ 2. 這是唯一的攻擊路徑 │
│ → 其他目標都試過了 │
│ → 這是最後的希望 │
│ │
│ 3. 能拿到更高權限 │
│ → 當前 shell 是低權限 │
│ → 某個漏洞可能直接給 root │
└─────────────────────────────────────────────────┘
視覺化:攻擊路徑規劃全流程
┌─────────────┐
│ Nmap 掃描 │
│ 結果 │
└──────┬──────┘
│
▼
┌─────────────┐ ┌─────────────┐
│ 服務清單 │────→│ searchsploit│
│ + 版本號 │ │ 查漏洞 │
└──────┬──────┘ └──────┬──────┘
│ │
└─────────┬─────────┘
│
▼
┌─────────────────┐
│ 四維度評分 │
│ Exploit/認證/ │
│ 影響/時間 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 選擇策略 │
│ 速攻/廣度/鏈式 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 寫攻擊計畫 │
│ 排優先順序 │
│ 設時間預算 │
└────────┬────────┘
│
▼
┌─────────────────────────┐
│ 執行 │
│ │
│ 目標 #1 ──→ 成功? │
│ │ │ │ │
│ │ YES NO │
│ │ │ │ │
│ │ ▼ ▼ │
│ │ 後利用 超時?│
│ │ 提權 │ │
│ │ │ YES │
│ │ │ │ │
│ │ ▼ ▼ │
│ │ root 目標#2│
│ │ │
└─────────────────────────┘