Metasploit是一款開源的安全漏洞檢測工具,能夠幫助安全和IT專業人士識別安全性問題,驗證漏洞的緩解措施,並管理專家驅動的安全性進行評估,適合於須要覈實漏洞的安全專家,同時也適合於強大進攻能力的滲透測試專家。Metasploit提供真正的安全風險情報,這這種能夠擴展的模型將負載控制、編碼器、無操做生成器和漏洞整合在一塊兒,使Metasploit成爲一種研究高危漏洞的途徑。它集成了各平臺上常見的溢出漏洞和流行的shellcode ,而且不斷更新。最新版本的MSF包含了750多種流行的操做系統及應用軟件的漏洞,以及224個shellcode,做爲安全工具,Metasploit在安全檢測中用着不容忽視的做用,併爲漏洞自動化探測和及時檢測系統漏洞提供了有力保障。php
Metasploit使用教程java
1、搭建metasploit環境
Windows環境下安裝
安裝時須要注意要關閉殺毒軟件,若是安裝有殺毒軟件,會提示在metasploit的安裝目錄下檢測到病毒或木馬。
2、metasploit的使用
Metasploit目前提供了三種用戶使用接口,一個是GUI模式,另外一個是console模式,第三種是CLI(命令行)模式。原來還提供一種WEB模式,目前已經再也不支持。目前這三種模式各有優缺點,建議在MSF console模式中使用。在console中幾乎可使用MSF所提供的全部功能,還能夠在console中執行一些其它的外部命令,如ping。
Windows下GUI啓動方式,從開始菜單——Metasploit Framework——Metaspliit GUI便可。以下圖所示:
其GUI模式啓動後界面如圖2所示:
Windows下console模式的啓動方式與GUI方式相似,啓動後界面如圖3所示:
Metasploit的使用較爲簡單,瞭解其基本命令便可。下面以console的使用方式爲例說明如何使用:
輸入help或?可查看幫助信息。
下面以exploit中的ms04_045_wins爲例進行說明。
一、show exploits,
二、info exploit/windows/wins/ms04_045_wins,查看其描述信息。
三、use exploit/windows/wins/ms04_045_wins,使用此exploit。
四、show options,查看相應的選項
五、set RHOST 192.168.1.200,設置目標
六、set RPORT 7777,設置端口
七、set PAYLOAD generic/shell_bind_tcp,設置使用的shellcode
八、exploit,執行攻擊
對於上面的步驟,有些並非必須,好比第2步,GUI界面的使用方法與其相似,而且更加簡單,但有些功能可能沒法使用。
在Linux上使用時,在終端上輸入msfconsole便可啓動終端模式。輸入msfgui便可啓動GUI模式。使用方式與windows上相似。
3、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。
4、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。
5、Metasploit二次開發方法
Metasploit中的類和方法具備很好的可讀性,而且採用了元編程的思想,使得進行二次開發更加方便快捷。簡單的說一個程序可以產生另外一個程序,就是元編程。ruby、python等都可方便的採用元編程思想。metasploit中前四個字母正好是meta,猜想其是Metaprogramming的含義。
Metasploit中全部的模塊都從Msf::Module中繼承,而且全部的模塊有一個共享的API庫。
在Metasploit中修改的exploit、payload等模塊時,直接找到相應的文件修改並保存,從新啓動console便可看到本身修改後的模塊的效果。
在metasploit當中增長exploit、auxiliary等模塊時,最快捷的方法是仿照現有的模塊方式、使用metasploit中提供的協議(好比使用metasploit中的socket方法,而不使用ruby中的socket方法,meterpreter對socket進行的封裝和擴展功能,使用起來更加方便,增長了代理、ssh等特徵)。模塊寫好後放在相應的目錄,從新啓動console便可看到本身所增長的模塊部分。
下面是一些攻擊常用的模塊的位置:
auxiliary模塊位於/msf3/modules/auxiliary/下。
Exploits模塊位於/msf3/modules/exploits/下。
Payloads模塊位於/msf3/modules/payloads/下。
Nops模塊位於/msf3/modules/nops下。
Encoders模塊位於/msf3/modules/encoders/下。
另外在core部分也有一些exploit、aux等,其做用是爲上述的攻擊部分提供基礎,被上述模塊調用。在windows或是在linux中都使用上述方法進行二次開發。後面會詳細的介紹新增一個exploit的方法和過程。
6、安全軟件經常使用檢測方法
一、基於事務發生的時間戳,時間
二、發現可疑文件時,尋找其它具備相似MAC地址的文件,位置
三、根據文件擴展名和簽名,文件特徵
四、對於系統內文件建立MD5校驗,內容
五、查找相應的關鍵字,關鍵字
六、對文件的內容進行行爲分析,行爲分析。安全軟件預先知道大量的病毒指令序列,可對文件內容進行檢測,若是發現匹配的序列就發出警告。
七、檢查當前的進程、端口、文件系統等,狀態檢查
八、在文件寫入磁盤時進行檢測。
7、Metasploit反檢測方法
針對安全軟件經常使用的檢測方法,metasploit當中集成了一些反檢測的方法。還有一些相應的建議。
一、在metasploit中使用了meterpreter方法提供一些實用的API。可是meterpreter整個運行在內存當中;但它並不建立新的進程;而且使用了加密的通訊方法;而且可以有效的消除入侵證據。整個過程大約在1秒內完成。避免了一些安全軟件對於進程的檢測。
二、內置了27種encode模塊,可對metasploit中的exploit進行編碼(encode),以免反病毒軟件檢測。27 種encode以下:
Name Rank Description
-------------------
cmd/generic_sh good Generic Shell Variable Substitution Command Encoder
cmd/ifs low Generic ${IFS} Substitution Command Encoder
cmd/printf_php_mq good printf(1) via PHP magic_quotes Utility Command Encoder
generic/none normal The "none" Encoder
mipsbe/longxor normal XOR Encoder
mipsle/longxor normal XOR Encoder
php/base64 great PHP Base64 encoder
ppc/longxor normal PPC LongXOR Encoder
ppc/longxor_tag normal PPC LongXOR Encoder
sparc/longxor_tag normal SPARC DWORD XOR Encoder
x64/xor normal XOR Encoder
x86/alpha_mixed low Alpha2 Alphanumeric Mixedcase Encoder
x86/alpha_upper low Alpha2 Alphanumeric Uppercase Encoder
x86/avoid_utf8_tolower manual Avoid UTF8/tolower
x86/call4_dword_xor normal Call+4 Dword XOR Encoder
x86/context_cpuid manual CPUID-based Context Keyed Payload Encoder
x86/context_stat manual stat(2)-based Context Keyed Payload Encoder
x86/context_time manual time(2)-based Context Keyed Payload Encoder
x86/countdown normal Single-byte XOR Countdown Encoder
x86/fnstenv_mov normal Variable-length Fnstenv/mov Dword XOR Encoder
x86/jmp_call_additive normal Jump/Call XOR Additive Feedback Encoder
x86/nonalpha low Non-Alpha Encoder
x86/nonupper low Non-Upper Encoder
x86/shikata_ga_nai excellent Polymorphic XOR Additive Feedback Encoder
x86/single_static_bit manual Single Static Bit
x86/unicode_mixed manual Alpha2 Alphanumeric Unicode Mixedcase Encoder
x86/unicode_upper manual Alpha2 Alphanumeric Unicode Uppercase Encoder
不少反病毒軟件是基於簽名(signature-based)技術來進行病毒檢測的,metasploit可使用相應的payload將簽名更改,從而達到反檢測的目的。好比對一個軟件採用多種編碼方法以應對安全軟件的檢測,好比"ABC"這三個字母對於某個漏洞而言具備攻擊性,編碼時對每一個字母採用不一樣的編碼方式以逃避安全軟件的檢測。
三、內置日誌刪除模塊,能夠刪除相應的事務日誌,以免檢測。
四、metasploit framework中集成了timestomp(用於修改文件時間戳)、slacker(用於隱藏文件)、SAM Juicer(meterpreter的一部分,用於從SAM中轉儲哈希)、僞造MAC地址等工具用於消除入侵證據。
五、避免使用一些明顯具備木馬或病毒含義的名子或關鍵字,如"灰鴿子"等確定會引發安全軟件的注意。
六、所開發的模塊儘可能放在目標機多個存儲位置,以免全部的模塊被安全軟件一次清除
七、攻擊安全軟件,使安全軟件失效,目前還未開發。python