Metasploit#
簡介###
Metasploit是一款開源的安全漏洞檢測工具,可以幫助安全和IT專業人士識別安全性問題,驗證漏洞的緩解措施,並管理專家驅動的安全性進行評估,提供真正的安全風險情報。這些功能包括智能開發,密碼審計,Web應用程序掃描,社會工程。團隊合作,在Metasploit和綜合報告提出了他們的發現。
Metasploit是一個免費的、可下載的框架,通過它可以很容易地獲取、開發並對計算機軟件漏洞實施攻擊。它本身附帶數百個已知軟件漏洞的專業級漏洞攻擊工具。當H.D. Moore在2003年發布Metasploit時,計算機安全狀況也被永久性地改變了。仿佛一夜之間,任何人都可以成為黑客,每個人都可以使用攻擊工具來攻擊那些未打過補丁或者剛剛打過補丁的漏洞。軟件廠商再也不能推遲發布針對已公布漏洞的補丁了,這是因為Metasploit團隊一直都在努力開發各種攻擊工具,並將它們貢獻給所有Metasploit用戶。
Metasploit的工作方式##
開源軟件Metasploit是H.D. Moore在2003年開發的,它是少數幾個可用於執行諸多滲透測試步驟的工具。在發現新漏洞時(這是很常見的),Metasploit會監控Rapid7,然后Metasploit的200,000多個用戶會將漏洞添加到Metasploit的目錄上。然后,任何人只要使用Metasploit,就可以用它來測試特定系統的是否有這個漏洞。
Metasploit框架使Metasploit具有良好的可擴展性,它的控制接口負責發現漏洞、攻擊漏洞,提交漏洞,然后通過一些接口加入攻擊后處理工具和報表工具。Metasploit框架可以從一個漏洞掃描程序導入數據,使用關於有漏洞主機的詳細信息來發現可攻擊漏洞,然后使用有效載荷對系統發起攻擊。所有這些操作都可以通過Metasploit的Web界面進行管理,而它只是其中一種種管理接口,另外還有命令行工具和一些商業工具等等。
攻擊者可以將來漏洞掃描程序的結果導入到Metasploit框架的開源安全工具Armitage中,然后通過Metasploit的模塊來確定漏洞。一旦發現了漏洞,攻擊者就可以采取一種可行方法攻擊系統,通過Shell或啟動Metasploit的meterpreter來控制這個系統。
這些有效載荷就是在獲得本地系統訪問之后執行的一系列命令。這個過程需要參考一些文檔並使用一些數據庫技術,在發現漏洞之后開發一種可行的攻擊方法。其中有效載荷數據庫包含用於提取本地系統密碼、安裝其他軟件或控制硬件等的模塊,這些功能很像以前BO2K等工具所具備的功能。
特點##
這種可以擴展的模型將負載控制,編碼器,無操作生成器和漏洞整合在一起,使 Metasploit Framework 成為一種研究高危漏洞的途徑。它集成了各平台上常見的溢出漏洞和流行的 shellcode ,並且不斷更新。最新版本的 MSF 包含了750多種流行的操作系統及應用軟件的漏洞,以及224個 shellcode 。作為安全工具,它在安全檢測中用着不容忽視的作用,並為漏洞自動化探測和及時檢測系統漏洞提供了有力保障。
Metasploit自帶上百種漏洞,還可以在online exploit building demo(在線漏洞生成演示)上看到如何生成漏洞。這使自己編寫漏洞變得更簡單,它勢必將提升非法shellcode的水平,並且擴大網絡陰暗面。與其相似的專業漏洞工具,如Core Impact和Canvas已經被許多專業領域用戶使用。Metasploit降低了使用的門檻,將其推廣給大眾。
搭建metasploit環境##
Windows環境下安裝。
從官方網站http://www.metasploit.com/下載windows版本的安裝版,直接安裝即可。安裝的版本是3.5.1。安裝時需要注意以下兩點:
在安裝的時候要關閉殺毒軟件。否則的話會導致殺毒軟件和metasploit沖突,導致安裝失敗。
在控制面版——區域和語言選項——選擇英文(美國)——高級選項卡中選擇英文(美國)。因為在安裝的時候,會進行檢測,如果屬於非英文地區會導致安裝失敗。
如果安裝有殺毒軟件,會經常提示在metasploit的安裝目錄下檢測到病毒或木馬。
Linux下環境下安裝。
官方網站提供了兩種Linux下的安裝方式,一種是打包好的metasploit安裝包,如framework-3.5.1-linux-i686.run,里面包含了安裝所需要的各種包,下載后直接在電腦上安裝即可。安裝的時候需要具有root權限。如果裝有殺毒軟件,在安裝的時候需要關閉殺毒軟件。
另一種是源碼包方式,下載到本機后自己安裝。需要事先安裝各種所信賴的包,安裝后需要進行一定的配置,較為麻煩。本例使用了源碼包安裝方式,因為之前安裝了postsql,在使用framework-3.5.1-linux-i686.run安裝時會報錯已經安裝好了postsql數據庫等。使用windows下的metasploit時,學習到一定階段后,感覺有些東西搞不明白,就安裝了Linux版本下的metasploit來學習。
Metasploit攻擊方法分類##
使用的版本共有635種溢出(exploit)模塊,314種輔助(auxiliary)模塊,215種加載(payload)模塊,27種編碼(encoder),8種nops。
exploits總的來說共分為兩類溢出(exploit)攻擊方法,即主動溢出和被動溢出。主動溢出是針對目標主機的漏洞主動的進行攻擊以獲得控制權限,被動溢出是針對目標主機被動的監聽然后獲得相應的操作。在所有的exploit中,針對windows平台的最多,比其它所有平台的總和還要多。
緩沖區溢出是指當計算機向緩沖區內填充數據位數時超過了緩沖區本身的容量溢出的數據覆蓋在合法數據上,理想的情況是程序檢查數據長度並不允許輸入超過緩沖區長度的字符,但是絕大多數程序都會假設數據長度總是與所分配的儲存空間相匹配,這就為緩沖區溢出埋下隱患.操作系統所使用的緩沖區又被稱為"堆棧". 在各個操作進程之間,指令會被臨時儲存在"堆棧"當中,"堆棧"也會出現緩沖區溢出。
緩沖區溢出是一種非常普遍、非常危險的漏洞,在各種操作系統、應用程序中廣泛存在。利用緩沖區溢出可民導致程序運行失敗、系統死機、重新啟動等后,也可以利用其獲得非授權指令,甚至系統特權,進而進行各種非法的操作。
在當前網絡與分布式系統安全中,被廣泛利用的50%以上都是緩沖區溢出。緩沖區溢出中,最為危險的是堆棧溢出,因為入侵者可以利用堆棧溢出,在函數返回時改變返回程序的地址,讓其跳轉到任意地址,帶來的危害一種是程序崩潰導致拒絕服務,另外一種就是跳轉並且執行一段惡意代碼,比如得到shell,然后為所欲為。
通過往程序的緩沖區寫超出其長度的內容,造成緩沖區的溢出,從而破壞程序的堆棧,造成程序崩潰或使程序轉而執行其它指令,以達到攻擊的目的。造成緩沖區溢出的原因是程序中沒有仔細檢查用戶輸入的參數。
隨便往緩沖區中填東西造成它溢出一般只會出現"分段錯誤"(Segmentation fault),而不能達到攻擊的目的。最常見的手段是通過制造緩沖區溢出使程序運行一個用戶shell,再通過shell執行其它命令。如果該程序屬於root且有suid權限的話,攻擊者就獲得了一個有root權限的shell,可以對系統進行任意操作了。
緩沖區溢出攻擊之所以成為一種常見安全攻擊手段其原因在於緩沖區溢出漏洞太普遍了,並且易於實現。而且,緩沖區溢出成為遠程攻擊的主要手段其原因在於緩沖區溢出漏洞給予了攻擊者他所想要的一切:植入並且執行攻擊代碼。被植入的攻擊代碼以一定的權限運行有緩沖區溢出漏洞的程序,從而得到被攻擊主機的控制權。
緩沖區溢出攻擊的目的在於擾亂具有某些特權運行的程序的功能,這樣可以使得攻擊者取得程序的控制權,如果該程序具有足夠的權限,那么整個主機就被控制了。一般而言,攻擊者攻擊root程序,然后執行類似"exec(sh)"的執行代碼來獲得root權限的shell。為了達到這個目的,攻擊者必須達到如下的兩個目標:
1. 在程序的地址空間里安排適當的代碼。
2. 通過適當的初始化寄存器和內存,讓程序跳轉到入侵者安排的地址空間執行。
每當一個函數調用發生時,調用者會在堆棧中留下一個活動紀錄,它包含了函數結束時返回的地址。攻擊者通過溢出堆棧中的自動變量,使返回地址指向攻擊代碼。通過改變程序的返回地址,當函數調用結束時,程序就跳轉到攻擊者設定的地址,而不是原先的地址。這類的緩沖區溢出被稱為堆棧溢出攻擊(Stack Smashing Attack),是目前最常用的緩沖區溢出攻擊方式。
函數指針可以用來定位任何地址空間。例如:"void (* foo)()"聲明了一個返回值為void的函數指針變量foo。所以攻擊者只需在任何空間內的函數指針附近找到一個能夠溢出的緩沖區,然后溢出這個緩沖區來改變函數指針。在某一時刻,當程序通過函數指針調用函數時,程序的流程就按攻擊者的意圖實現了。它的一個攻擊范例就是在Linux系統下的superprobe程序。
在C語言中包含了一個簡單的檢驗/恢復系統,稱為setjmp/longjmp。意思是在檢驗點設定"setjmp(buffer)",用"longjmp(buffer)"來恢復檢驗點。然而,如果攻擊者能夠進入緩沖區的空間,那么"longjmp(buffer)"實際上是跳轉到攻擊者的代碼。象函數指針一樣,longjmp緩沖區能夠指向任何地方,所以攻擊者所要做的就是找到一個可供溢出的緩沖區。
在metasploit中溢出模塊(Exploit)共分為13種,分別是:ais、bsdi、dialup、freebsd、hpux、irix、linux、multi、netware、osx、solaris、unix、windows。其中windows下面的最多。
輔助(Auxiliary)模塊共分為13種,分別是admin、client、crawler、dos、fuzzers、gather、pdf、scanner、server、sniffer、spoof、sqli、voip。
加載(payload)模塊共分為13種,分別是aix、bsd、bsdi、cmd、generic、java、linux、netware、osx、php、solaris、tty、windows。
Metasploit架構##
Metasploit Framework並不止具有exploit(溢出)收集功能,它使你專注於創建自己的溢出模塊或者二次開發。很少的一部分用匯編和C語言實現,其余均由ruby實現。總體架構如圖所示:
TOOLS 集成了各種實用工具,多數為收集的其它軟件
PLUGINS 各種插件,多數為收集的其它軟件。直接調用其API,但只能在console模式下工作。
MODULES 目前的Metasploit Framework 的各個模塊
MSF core 表示Metasploit Framework core 提供基本的API,並且定義了MSF的框架。並將各個子系統集成在一起。組織比較散亂,不建議更改。
MSF Base 提供了一些擴展的、易用的API以供調用,允許更改
Rex LIBRARIES Metasploit Framework中所包含的各種庫,是類、方法和模塊的集合
CLI 表示命令行界面
GUI 圖形用戶界面
Console 控制台用戶界面
Web 網頁界面,目前已不再支持
Exploits 定義實現了一些溢出模塊,不含payload的話是一個Aux
Payload 由一些可動態運行在遠程主機上的代碼組成
Nops 用以產生緩沖區填充的非操作性指令
Aux 一些輔助模塊,用以實現輔助攻擊,如端口掃描工具
Encoders 重新進行編碼,用以實現反檢測功能等
/msf3/plugins主要包括一些數據庫插件、會話插件、線程插件、socket插件等;
/ postgresql/lib/plugins主要是postgresql的調試插件和分析插件。還有一些其它的插件,比如ruby插件等。
/tools主要是一些輔助工具,如vncviewer、7za等。
/msf3/tools主要是一些轉化工具,如memdump、ruby工具等。
MSF core定義了整個軟件的架構方式,提供了一些基本的API,主要由匯編和C語言來實現,一般情況下不允許直接調用。共有136個匯編文件,7個.h文件,681個.C文件。MSF core組織的比較散亂,不建議更改。
匯編部分主要完成的是與相應的操作系統(如windows、linux等)有關的功能,主要是shellcode的實現等。
C語言完成的功能比較多,主要是meterpreter的實現和一些工具性的應用,包括ruby相關、內存相關(如memdump.c,屬於memdump軟件包,用於在DOS和Windows 9x 中dump或copy 4GB以內的地址空間)、網絡相關(pcaprub.c,屬於libpcap軟件包的一部分,是ruby中網絡的一部分)、反檢測相關(timestomp.c,屬於timestomp軟件,用於修改文件的時間戳)等。其工具性的應用多是直接來自於其它工具軟件。
Meterpreter是MSF core中最重要的一部分,其本身是一個具有多種功能的動態payload,並且可以在運行時動態擴展。它提供了交互式shell的基礎。整個運行在內存當中,但它並不創建新的進程,並且使用了加密的通信方法,能有效避免檢測。
MSF base分布在很多文件夾當中,定義了大量的實用API,例如svn API、scan API、encode API、更新API、操作API、數據庫API、exploit API、GUI API、java API、meterpreter API、php API、snmp API、模塊API、ruby API、網絡API等……主要供modules下的相關程序進行調用,開發人員也可直接調用其API。