Metasploit是由HDmoore创立的。它是一个开放的漏洞研究与***代码开发的平台。
Metasploit的***阶段:
使用metasploit分为情报收集阶段、威胁建模阶段、漏洞分析阶段、后******阶段、报告生成阶段五个阶段。
情报收集阶段主要就是通过直接或者间接的情报收集的手段,对目标进行详细的探查分析。
威胁建模阶段主要就是从整体的眼光去对前面情报收集阶段收集到的情报进行分析,决定我们应该利用哪个漏洞,具体的***步骤是什么,然后***。
漏洞分析阶段的话比较高级一点,我们刚开始学metasploit的时候不用进行这个阶段的工作。这个阶段就是利用metasploit里面的各种漏洞分析工具,通过他们的一些反馈自己去挖掘新的漏洞。
后******阶段就是一个扩大战果的阶段。我们在前面***成功后要想将这个目标主机以后还能为我们所用,我们就要进行后******了。
最后,我们需要对我们前面的过程做一个总结,列出漏洞的细节,给出***的路径,这就是报告生成阶段。
Metasploit框架
我们的metasploit是一个框架性的东西,所以我们把这个框架的结构搞清楚后会好学很多。
上图就是我们的metasploit体系框架。
我们metasploit整个的框架由基础库文件、模块、插件、接口、功能程序五个部分组成。
我们最常用的部分是模块部分。模块又可以分为辅助模块auxiliary、******模块exploits、***载荷模块payloads、空指令模块nops、编码器模块encoders和后******模块post模块组成。
辅助模块主要提供大量的辅助功能,包括前期情报收集,漏洞探测等功能。
******模块是在前期情报收集工作完成之后才使用的。这个模块里面包含着各种漏洞的***代码,它可以在知道你漏洞的情况下对目标进行快速而精准的***。
***载荷就是在前面的******完成后向目标系统注入的一段代码,而我们的***载荷模块就是组装***载荷的车间。
空指令模块。我们在0day里面写shellcode时,有时候会用到0x90之类的空指令。我们在构造数据缓冲区时,经常要在真正的shellcode前加上一段足够长的空指令区。而我们用metasploit做这样的事情时,***载荷就是shellcode,这里的空指令模块就为shellcode保驾护航,构造空指令区。
在0day里,我们已经接触到了shellcode的编码。在这里编码器模块就是对我们前面组装出来的***代码进行编码工作,做这样的工作,有时是因为***目标的限制,有时是为了隐藏自身的特征码避免被杀毒软件查杀。
在我们已经对目标***后,我们就要扩大我们的战果了。利用后******模块我们可以完成进一步的***,比如利用这个机器做跳板再***或者***这台机器的内网之类的。
一辆坦克,只有装备动力系统,装甲系统,雷达系统以及杀伤力巨大的炮弹才能发挥出巨大的战斗力。而同样,我们在metasploit的应用过程中,只有根据这些模块的特点加以组合利用才能发挥出metasploit***神器的真正风采。
metasploit目录结构
在使用metasploit时,我们少不了要翻metasploit的存储目录
Kali及bt5中msf的路径为/usr/share/metasploit-framework
Modules目录
首先看modules目录:
这里,
encoders:供msfencode编码工具使用,具体可以使用 msfencode –l
exploits:***模块 每个介绍msf的文章都会提到那个ms08_067_netapi,它就在这个目录下。
nops:空指令。
payloads:这里面列出的是***载荷,也就是***成功后执行的代码。比如我们常设置的windows/meterpreter/reverse_tcp就在这个文件夹下。
Post:后***阶段模块,在获得meterpreter的shell之后可以使用的***代码。比如常用的hashdump、arp_scanner就在这里。
Data目录
其次是data目录:
这里存放的是metasploit的脚本引用文件。
最后是msf下script目录中的resource目录:
这里的.rc脚本相当于windows下的批处理脚本,在某些情况下会有一定便捷性。
metasploit基本命令
在这里,列出了一些关于metasploit的命令,这些命令,在我们舌头过程中经常会用到。如果你是在bt5或者kali平台上运行metasploit的话,还需结合相关的linux命令。
当然,如果你忘记了命令,你可以man一下,search一下,或者help(--help,-h)来查找相应的资料。
show命令:
如果你不知道这个模块里有什么东西的话,你可以show一下来查看。
show命令,show命令的作用是帮助你查看内容及参数。具体的如下图所示。
show options
列出某个******或模块中所有的配置参数。
show targets
列出******所有支持的目标平台。
msf中的编码器
msfconsole
开启metasploit的console,有个重要的参数 –r,加载resources脚本
hosts
这里可以使用hosts查询指定字段的内容,可用的字段下面有列出。或者也可以使用hosts –S “keyword” 进行搜索。
Creds
Creds命令可以列出成功获取到的信息,比如用户名密码,数据库密码,开放端口及服务等。
search
搜索一切可以use的模块,常用的方法是search 直接加关键词,比如search 08_067,但是我们也可以根据cve编号查找。通常用nessus扫到的漏洞都有cve信息,这里我们就可以这样搜索了。
info
展示出制定******或模块的相关信息。
Use:
use 命令的作用就是装载
use name
装载一个******或模块。
use incognito
加载incognito功能(用来盗窃目标主机的令牌或假冒用户)
use priv
加载特权提升扩展模块,来扩展metasploit库。
use sniffer
加载嗅探模式。
Set:
set function
设置特定的配置参数(设置本地或远程主机参数)。
set target num
指定你所知道的目标的操作系统以及补丁版本类型。
set payload name
指定想要使用的***载荷。
check
检测目标是否选定******存在相应的安全漏洞。
Exploit:
exploit
执行******或模块来***目标。
exploit -j
在计划任务下进行******(***将在后台进行)。
exploit -z
******完成后不与回话进行交互。
exploit -e encoder
制定使用的***载荷编码方式(exploit -eshikata_ga_nai)。
exploit -h
列出exploit命令的帮助信息。
List:
list_tokens -u
列出目标主机用户的可用令牌。
list_tokens -g
列出目标主机用户组的可用令牌。
Sessions:
sessions -l
列出可用的交互会话(在处理多个shell时使用)。
sessions -l -v
列出所有可用的交互会话以及详细信息,EG:***系统时使用了哪个安全漏洞。
sessions -s script
在所有活跃的metasploit会话中运行一个特定的metasploit脚本。
sessions -c cmd
在所有活跃的metasploit会话上执行一个命令。
sessions -u sessionID
升级一个普通的win32 shell到metasploit shell。
sniffer:
sniffer_interfaces
列出目标主机所有开放的网络端口。
sniffer_dump interfaceID pcapname
在目标主机上启动嗅探。
sniffer_start interfaceID packet-buffer
在目标主机上针对特定范围的数据包缓冲区启动嗅探。
sniffer_stats interfaceID
获取正在实施嗅探网络接口的统计数据。
sniffer_stop interfaceID
停止嗅探。
数据库有关命令:
db_create name
创建一个数据库驱动***所要使用的数据库(db_createautopwn)。
db_connect name
创建并连接一个数据库驱动***所要使用的数据库(db_connectuser:passwd@ip/sqlname)。
db_namp
利用nmap并把扫描数据存储到数据库中(支持普通的nmap语句,-sT -v -P0)。
db_autopwn -h
展示出db_autopwn命令的帮助信息。
db_autopwn -p -r -e
对所有发现的开放端口执行db_autopwn,***所有系统,并使用一个反弹式shell。
db_destroy
删除当前数据库。
db_destroy user:passwd@host:port/database
使用高级选项来删除数据库。
metasploit 辅助命令
help
打开meterpreter使用帮助。
run scriptname
运行meterpreter脚本,在scripts/meterpreter目录下可查看到所有脚本名。
sysinfo
列出受控主机的系统信息。
ls
列出目标主机的文件和文件夹信息。
ps
显示所有运行的进程以及相关联的用户账户。
migrate PID
迁移到一个指定的进程ID(PID号可通过ps命令从主机上获得)。
execute -f cmd.exe -i
执行cmd.exe命令并进行交互。
reg command
在目标主机注册表中进行交互,创建,删除,查询等操作。
setdesktop number
切换到另一个用户界面(该功能基于那些用户已登录)。
screenshot
对目标主机的屏幕进行截图。
upload file
向目标主机上传文件。
download file
从目标主机下载文件。
keyscan_start
针对远程目标主机开启键盘记录功能。
keyscan_dump
存储目标主机上捕获的键盘记录。
keyscan_stop
停止针对目标主机的键盘记录。
uictl enable keyboard/mouse
接管目标主机的键盘和鼠标。
background
将你当前的metasploit shell转为后台执行。
hashdump
导出目标主机中的口令哈希值。
add_user username password -h ip
在远程目标主机上添加一个用户。
reboot
重启目标主机。
Metasploit的使用
在使用metasploit的时候,基本上就是按照searchàsetàexploitàmetasploit的步骤过来。先是找我们所需要的模块,然后设置模块的参数,然后执行***获取权限,获取权限之后就要巩固并扩大我们所取得的战果
一般的操作方法就是按照这个步骤然根据上面的指令来执行。
***示例
前面我们将metasploit的框架系统将了下,下面来演示一下具体的***实例。这里我选择ms08_067这个漏洞,并且随便输入一个ip。(好吧,每回示例的时候都是08067躺枪)
这个漏洞存在于Windows操作系统下的smb服务,漏洞编码是,ms08_067。
大体的步骤就是下面这四个步骤,当然我们在进行具体的***之前一定要将情报收集工作做好。
1. 选择exploit (useexploit/windows/smb/ms08_067_netapi)
2. 选择payload
3. 设置参数 (setRHOST,set LPORT …)
4. 执行***