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