這篇不講新的漏洞。我們停下來,回頭看看走過的路:哪些是真正重要的觀念?這些漏洞之間有什麼關聯?如果今天從頭來過,該怎麼有系統地攻擊一台機器?
這篇是整個 Metasploitable2 系列的收尾,也是銜接下一階段的橋樑。
Metasploitable2 漏洞地圖
Metasploitable2(192.168.145.132)
│
├── 網路服務層(直接攻擊開放的 port)
│ │
│ ├── Port 21 - FTP
│ │ └── vsftpd 2.3.4 後門(第 1 篇)
│ │ → 供應鏈攻擊,輸入特定使用者名稱觸發 → root shell
│ │
│ ├── Port 22 - SSH
│ │ └── 弱密碼 msfadmin:msfadmin
│ │ → 可直接登入,配合 sudo 提權
│ │
│ ├── Port 139/445 - Samba
│ │ └── usermap_script 命令注入(第 2 篇)
│ │ → CVE-2007-2447,在使用者名稱中注入 shell 指令 → root shell
│ │
│ ├── Port 1099 - Java RMI
│ │ └── RMI Registry 反序列化(第 4 篇)
│ │ → 利用 Gadget Chain 執行任意程式碼 → root shell
│ │
│ ├── Port 2049 - NFS
│ │ └── 設定不當 no_root_squash(第 6 篇)
│ │ → 掛載共享目錄 → 寫入 SSH 公鑰 → root SSH 登入
│ │
│ ├── Port 3306 - MySQL
│ │ └── root 空密碼(第 7 篇)
│ │ → 讀取資料、讀寫檔案、但不直接拿 shell
│ │
│ ├── Port 3632 - distcc
│ │ └── 缺乏存取控制 CVE-2004-2687(第 5 篇)
│ │ → 任何人都可以送編譯任務執行指令 → daemon shell
│ │
│ ├── Port 5432 - PostgreSQL
│ │ └── 弱密碼 postgres:postgres(第 7 篇)
│ │ → 讀取資料、用 COPY 讀寫檔案
│ │
│ ├── Port 6667 - IRC
│ │ └── UnrealIRCd 3.2.8.1 後門(第 3 篇)
│ │ → 供應鏈攻擊,特定前綴觸發指令執行 → root shell
│ │
│ └── Port 8180 - Tomcat
│ └── Manager 弱密碼 tomcat:tomcat(第 8 篇)
│ → 上傳 WAR WebShell → tomcat55 shell → 需提權
│
├── Web 應用層(攻擊 HTTP 上的應用程式)
│ │
│ ├── /dvwa/ - DVWA
│ │ └── SQL Injection Low/Medium/High(第 9 篇)
│ │ → 字串串接漏洞 → UNION SELECT 提取帳密
│ │ → Low:直接注入
│ │ → Medium:數字型注入 + Burp 攔截
│ │ → High:# 註解 LIMIT 1
│ │ → Impossible:參數化查詢(正確寫法)
│ │
│ └── /mutillidae/ - Mutillidae
│ ├── Reflected XSS(第 10 篇)
│ │ → <script>alert(document.cookie)</script> 竊取 cookie
│ ├── Stored XSS(第 10 篇)
│ │ → 留言板存入惡意腳本,所有訪客中招
│ └── Command Injection(第 10 篇)
│ → DNS Lookup 輸入框注入系統指令 → www-data shell
│
└── 提權(拿到 shell 之後)(第 11 篇)
│
├── SUID - nmap --interactive → !sh → root(最快)
├── sudo - msfadmin sudo su → root
├── Kernel Exploit - Linux 2.6.24 已知漏洞
├── Cron Job - 修改 root 定時腳本
├── 密碼挖掘 - 設定檔、bash_history、SSH key
└── /etc/passwd - 可寫則直接加 root 使用者
攻擊的完整流程(Kill Chain)
回顧整個系列,每一篇都對應到滲透測試的某個階段:
┌─────────────────────────────────────────────────────────────────┐
│ 滲透測試流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. 偵察(Reconnaissance) │
│ │ nmap -sV -sC -p- <靶機IP> │
│ │ → 發現開放的 port 和服務版本 │
│ │ → 每一篇的起點都是 nmap │
│ │ │
│ 2. 漏洞識別(Vulnerability Identification) │
│ │ → searchsploit、search(Metasploit) │
│ │ → 查 CVE 資料庫 │
│ │ → 嘗試預設/弱密碼 │
│ │ │
│ 3. 漏洞利用(Exploitation) │
│ │ → Metasploit exploit(第 1-5 篇) │
│ │ → 手動利用:mount、mysql、curl(第 6-8 篇) │
│ │ → Web 注入:SQL、XSS、Command(第 9-10 篇) │
│ │ │
│ 4. 提權(Privilege Escalation) │
│ │ → SUID、sudo、kernel exploit(第 11 篇) │
│ │ │
│ 5. 後滲透(Post-Exploitation) │
│ │ → 資訊收集、橫向移動、持久化 │
│ │ → 這部分我們沒有深入,留給進階學習 │
│ │ │
│ 6. 報告撰寫(沒有做) │
│ │ → 把發現的漏洞、影響、修復建議整理成報告 │
│ │ → 我們的每篇文章就是一份小型報告 │
│ │
└─────────────────────────────────────────────────────────────────┘
防禦是多層的
沒有單一的防禦措施可以擋住所有攻擊:
防火牆 → 擋不住合法 port 上的攻擊(Web 漏洞)
WAF → 擋不住新的繞過手法
強密碼 → 擋不住軟體漏洞
更新軟體 → 擋不住設定不當
安全設定 → 擋不住供應鏈攻擊
所以需要 Defense in Depth(縱深防禦):
每一層都假設其他層會被突破
每一層都獨立提供保護
偵察決定一切
每一篇的開頭都是 nmap。
不是因為它是教學套路,而是因為:
不知道目標跑了什麼服務 → 不知道能攻擊什麼
不知道服務的版本 → 不知道有什麼漏洞
不知道有什麼漏洞 → 只能盲猜
偵察做得好 → 攻擊路徑自然浮現
偵察做不好 → 浪費時間在不存在的漏洞上
回顧這趟旅程,最重要的不是記住每個漏洞的具體指令,而是理解三個核心觀念: