- 原文地址:https://github.com/rapid7/metasploit-framework/wiki/How-to-use-a-Metasploit-module-appropriately
- 作者:Metasploit Community
- 譯者:王一航 2018-06-13
- 校對(duì):王一航 2018-06-13
Metasploit 將一些難以理解或者難以設(shè)計(jì)出來(lái)的技術(shù)轉(zhuǎn)換成了非常容易使用的東西。不夸張的說(shuō),只需要點(diǎn)擊幾下即可讓你看起來(lái)像《黑客帝國(guó)》中的 Neo 一樣狂拽酷炫吊炸天。
這樣 Hacking 變得非常簡(jiǎn)單。然而,如果你以前沒(méi)有接觸過(guò) Metasploit,那么你需要知道的是:沒(méi)人能一次成功(譯者注:原文為 Nobody makes their first jump,來(lái)自《黑客帝國(guó)》)。你會(huì)犯錯(cuò)誤,有時(shí)很小,有時(shí)可能會(huì)是災(zāi)難性的......但愿不會(huì)。
在第一次進(jìn)行利用的時(shí)候你很可能會(huì)面對(duì)失敗,就像《黑客帝國(guó)》中的 Neo 一樣。當(dāng)然,要想達(dá)到你的目標(biāo),你必須學(xué)會(huì)適當(dāng)?shù)厥褂眠@些模塊,我們會(huì)教你如何做。
在本篇文檔中,我們不要求讀者有 Exploit 開(kāi)發(fā)的知識(shí)。當(dāng)然如果有一些 Exploit 開(kāi)發(fā)的經(jīng)驗(yàn),那當(dāng)然再好不過(guò)了。
總的來(lái)說(shuō),在漏洞利用之前,實(shí)際上有一些“功課”需要做。
加載一個(gè) Metasploit 模塊
每一個(gè) Metasploit 模塊都會(huì)攜帶一些元數(shù)據(jù)來(lái)解釋這個(gè)模塊的用途,首先你需要加載目標(biāo)模塊。例如:
msf > use exploit/windows/smb/ms08_067_netapi
閱讀一個(gè)模塊的描述和參考文獻(xiàn)
可能聽(tīng)起來(lái)讓人驚訝,但是有時(shí)候我們?nèi)匀粫?huì)被問(wèn)道一些已經(jīng)在文檔中解釋過(guò)的問(wèn)題。所以,在你決定究竟一個(gè)模塊是不是應(yīng)該被使用的時(shí)候,你應(yīng)該先在模塊提供的文檔和參考文獻(xiàn)中尋找如下問(wèn)題的答案:
哪個(gè)具體產(chǎn)品和哪個(gè)具體版本是存在漏洞的:關(guān)于一個(gè)具體漏洞,這是你應(yīng)該明確的最基礎(chǔ)的問(wèn)題
漏洞的類(lèi)型是什么?漏洞是如何被利用的?基本上來(lái)說(shuō),你正在學(xué)習(xí)的是漏洞利用的副作用。例如:如果你正在嘗試?yán)靡粋€(gè)內(nèi)存破壞(譯者注:原文 memory corruption)漏洞,如果因?yàn)槟承┰颍檬×?,你可能?huì)讓目標(biāo)服務(wù)器直接崩潰掉。就算利用成功,得到了一個(gè) Shell,當(dāng)你已經(jīng)完成了你想要在目標(biāo)系統(tǒng)上做的事情,并在 Shell 中輸入 exit 退出的時(shí)候,目標(biāo)服務(wù)器也會(huì)崩潰掉。高層(譯者注:原文 High level,個(gè)人理解相對(duì)于底層漏洞,一個(gè)不小心系統(tǒng)可能會(huì)直接 crash,但是如果高層的漏洞利用,如果只是一個(gè) WEB 漏洞,那么肯定對(duì)操作系統(tǒng)造成不了什么影響)的漏洞一般來(lái)說(shuō)比較安全,但是也不是百分之百安全。例如:某一個(gè)漏洞利用程序可能需要修改配置文件或安裝可能導(dǎo)致應(yīng)用程序中斷的內(nèi)容,這些可能成為對(duì)目標(biāo)系統(tǒng)的永久性破壞。
哪些目標(biāo)環(huán)境是通過(guò)漏洞利用測(cè)試的? 當(dāng)一個(gè)漏洞利用程序開(kāi)發(fā)完成的時(shí)候,如果目標(biāo)操作系統(tǒng)種類(lèi)太多,通常情況下很難去在每一個(gè)可能的目標(biāo)系統(tǒng)上進(jìn)行測(cè)試。通常開(kāi)發(fā)者僅會(huì)在他們手頭現(xiàn)有的目標(biāo)系統(tǒng)上進(jìn)行測(cè)試。所以,如果你的目標(biāo)系統(tǒng)不在支持的目標(biāo)系統(tǒng)列表中的時(shí)候,請(qǐng)了解我們并不能保證漏洞利用程序會(huì)百分之百利用成功。最安全的做法是你可以先重新搭建一個(gè)和目標(biāo)系統(tǒng)一模一樣的靶場(chǎng)環(huán)境進(jìn)行漏洞利用測(cè)試,測(cè)試通過(guò)后在進(jìn)行實(shí)際的對(duì)目標(biāo)系統(tǒng)的測(cè)試。
服務(wù)器必須滿足什么條件才可以被利用?通常,一個(gè)漏洞利用需要很多條件同時(shí)滿足才可以成功。有些情況下,你可以使用 Metasploit 的 check 命令 來(lái)檢查目標(biāo)系統(tǒng)是否可以被利用,因?yàn)?Metasploit 將某一個(gè)事物標(biāo)記為存在漏洞的時(shí)候,事實(shí)上是利用了目標(biāo)的 BUG。對(duì)于使用 BrowserExploitServer mixin 的瀏覽器攻擊程序,會(huì)在加載漏洞利用之前檢查可利用的條件是否滿足。但是自動(dòng)化的檢查并不是每個(gè)模塊都有的,所以你應(yīng)該在執(zhí)行 exploit 命令之前先嘗試搜集這些信息,這應(yīng)該是一個(gè)攻擊者的常識(shí)。例如:一個(gè) WEB 應(yīng)用的文件上傳功能就很容易被濫用,被用來(lái)上傳一個(gè)基于 WEB 的后門(mén)程序,但是這個(gè)漏洞要成功利用的條件是用戶必須有對(duì)上傳文件夾的訪問(wèn)權(quán)限。如果你的目標(biāo)系統(tǒng)不滿足這些必要條件,那就沒(méi)有必要再進(jìn)行嘗試了。
你可以通過(guò)輸入如下命令來(lái)查看模塊的描述信息:
msf exploit(ms08_067_netapi) > info
目標(biāo)列表(譯者注:Target List,具體目標(biāo)操作系統(tǒng)列表,包括版本等)
每一個(gè) Metasploit 漏洞利用都有一個(gè)(可用)目標(biāo)列表。
開(kāi)發(fā)人員在公開(kāi)發(fā)布漏洞利用程序之前,會(huì)進(jìn)行一系列的測(cè)試。
如果目標(biāo)系統(tǒng)不在這個(gè)列表中,最好假設(shè)該漏洞利用程序從未在該特定的設(shè)置上進(jìn)行過(guò)測(cè)試。
如果漏洞利用程序支持自動(dòng)選擇目標(biāo)系統(tǒng),那么列表中的第一項(xiàng)就會(huì)是 “自動(dòng)選擇目標(biāo)系統(tǒng)”(Automatic Targeting)(也就是索引為 0 的一項(xiàng))。第一項(xiàng)總是會(huì)被默認(rèn)選中,這意味著如果你以前并沒(méi)有使用過(guò)這個(gè)漏洞利用程序那么你就永遠(yuǎn)不應(yīng)該假設(shè)漏洞利用程序會(huì)為你自動(dòng)選擇目標(biāo)系統(tǒng),并且這個(gè)默認(rèn)值并不一定是你正在測(cè)試的目標(biāo)所使用的操作系統(tǒng)
"show options" 命令可以告訴我們哪些目標(biāo)系統(tǒng)已經(jīng)被選擇,例如:
msf exploit(ms08_067_netapi) > show options
“show targets” 命令會(huì)列出所有該漏洞利用程序支持的目標(biāo)操作系統(tǒng)列表
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(windows/smb/ms08_067_netapi) > show targets
Exploit targets:
Id Name
-- ----
0 Automatic Targeting
1 Windows 2000 Universal
2 Windows XP SP0/SP1 Universal
3 Windows 2003 SP0 Universal
4 Windows XP SP2 English (AlwaysOn NX)
5 Windows XP SP2 English (NX)
6 Windows XP SP3 English (AlwaysOn NX)
7 Windows XP SP3 English (NX)
8 Windows XP SP2 Arabic (NX)
9 Windows XP SP2 Chinese - Traditional / Taiwan (NX)
...
檢查所有選項(xiàng)
所有的 Metasploit 模塊都預(yù)先配置了大部分的數(shù)據(jù)存儲(chǔ)的選項(xiàng)。然而,它們可能并不適合于你正在測(cè)試的目標(biāo)系統(tǒng)。你可以使用 “show options” 命令來(lái)進(jìn)行一次快速檢查:
msf exploit(ms08_067_netapi) > show options
然而,“show options” 僅為你顯示所有的基礎(chǔ)選項(xiàng),一些逃避(譯者注:原文 evasion,該選項(xiàng)主要用于逃避反病毒軟件或者攻擊檢測(cè)系統(tǒng)的審查,例如在 WEB 漏洞的利用中可以通過(guò)隨機(jī) HTTP User-Agent 字段來(lái)逃避某些審查,例如 Pull Request 5872)和高級(jí)選項(xiàng)并不會(huì)被顯示出來(lái)(使用 "show evasive" 和 “show advanced”),可以使用 set 命令來(lái)對(duì)數(shù)據(jù)存儲(chǔ)選項(xiàng)進(jìn)行配置:
msf exploit(ms08_067_netapi) > set
尋找模塊對(duì)應(yīng)的 Pull Request
Metasploit 倉(cāng)庫(kù)是托管在 GitHub 上的(嗯,其實(shí)就是你正在瀏覽的網(wǎng)站),開(kāi)發(fā)者和貢獻(xiàn)者在開(kāi)發(fā)中嚴(yán)重依賴 GitHub。在一個(gè)模塊被公開(kāi)之前,它將會(huì)被作為一個(gè) Pull Request 提交到 Metasploit 倉(cāng)庫(kù),之后該 Pull Request 將會(huì)被測(cè)試以及被 Review。在一個(gè)模塊的 Pull Request 頁(yè)面,你將會(huì)找到你需要知道的關(guān)于該模塊的 所有信息 ,你或許還能得到一些從模塊描述或者一些別的博客文章中沒(méi)有的信息。這些信息是非常有價(jià)值的!
你可以從 Pull Request 中學(xué)到的有:
- 搭建漏洞環(huán)境的步驟
- 哪些目標(biāo)環(huán)境已經(jīng)被測(cè)試過(guò)
- 該模塊應(yīng)該如何使用
- 模塊如何被檢驗(yàn)并通過(guò)審核
- 哪些問(wèn)題是已經(jīng)被確定的,其中可能就有你想要知道的
- Demo
- 其他的驚喜
有兩種主要的方法可以找到一個(gè)指定模塊的 Pull Request
- 通過(guò) Pull Request 的序號(hào):如果你已經(jīng)知道了具體的 Pull Request 序號(hào),那么就很簡(jiǎn)單了,只需要訪問(wèn)如下連接
https://github.com/rapid7/metasploit-framework/pull/[PULL REQUEST NUMBER HERE]
-
通過(guò)搜索(過(guò)濾器) 這個(gè)方法更加通用。首先你應(yīng)該先訪問(wèn):https://github.com/rapid7/metasploit-framework/pulls。在頁(yè)面頂部,你將看到一個(gè)搜索輸入框和一個(gè)默認(rèn)的過(guò)濾器:
is:pr is:open,這些默認(rèn)值意味著你正在查看 Pull Request,并且你正在查看那些待定的 Pull Request (等待被合并到 Metasploit 中的 Pull Request)。因?yàn)槟阏趯ふ乙呀?jīng)被合并到 Metasploit 的模塊,所以你需要按照如下操作:
- 選擇已經(jīng)關(guān)閉的 Pull Request
- 選擇 “模塊” 標(biāo)簽
- 在搜索框中,輸入其他和你要搜索的模塊相關(guān)的關(guān)鍵字。一般來(lái)說(shuō),模塊的標(biāo)題即可。
注意:如果你想要找的模塊是 2011 年寫(xiě)的,那么將不會(huì)有關(guān)于這個(gè)模塊 Pull Request (譯者注:可能是因?yàn)?2011 年才開(kāi)始在 GitHub 上托管?或者 GitHub 2011 年才上線 Pull Request 功能?)