最近忙里偷闲,阅读了一下《Metasploit渗透测试魔鬼训练营》,希望能够更加了解Metasploit的框架结构。
信息收集
外围信息收集
目录扫描
常用模块有:auxiliary/scanner/http/brute_dir
、auxiliary/scanner/http/dir_scanner
和auxiliary/scanner/http/dir_listing
用法都比较相似,均可以设置字典路径、代理、目标IP或域名、目标端口、是否为https协议、线程数量
等选项。
目标域名或IP可以设置多个,所有rhosts
的参数都支持以下4种格式:
192.168.27.0/24
192.168.27.1-100
192.168.27.1 192.168.27.136
192.168.27.1
模块运行效果如下:
该模块自动判断not found
的状态码,不太稳定,在测试过程中发现过将302、500
当作not found
状态码的情况。
收集邮箱
metasploit中有一个根据网站域名在Google、Bing、Yahoo三个搜索引擎搜索暴露邮箱的模块-auxiliary/gather/search_email_collector
国内无法访问Google,使用Yahoo搜索报错,因此只能使用bing进行搜索,效果较差,尝试了几个学校的网站,一个邮箱没收集到。
子域名收集
metasploit中auxiliary/gather/searchengine_subdomains_collector
模块是通过Bing、Yahoo来进行子域名收集的工具,他支持两种类型,通过根域名和通过IP进行收集。
百度的子域名只找到两个,还有些网站子域名都找不到,效果很差劲。
主机发现
metasploit中提供了很多扫描模块,均存放在auxiliary/scanner
中。
arp_sweep
auxiliary/scanner/discovery/arp_sweep
模块是通过发送ARP请求包来发现存活主机的,其局限性是只能发现局域网中的存活主机。
Nmap扫描主机
- nmap -sP 192.168.27.0/24
基于ping的主机扫描
- nmap -PU -sn 192.168.27.0/24
通过对开放的UDP端口进行检测判断主机是否存活,-PU
检测到主机存活后会列出开放的TCP端口,若要加快速度则用-sn
选项告诉Nmap只检测存活,不扫描TCP端口。
操作系统辨识
操作系统辨识主要用的是nmap的-O
选项。
端口扫描
Metasploit的portscan
Metasploit中提供了5种端口扫描的模块:
auxiliary/scanner/portscan/tcp
通过一次完整的TCP连接来判断端口是否开放,这种扫描方式最准确,但扫描速度慢。
auxiliary/scanner/portscan/ack
通过ACK扫描的方式对防火墙上未被屏蔽的端口进行探测。
auxiliary/scanner/portscan/syn
通过发送TCP SYN标志的方式探测开放的端口,也是最常用的扫描方式。
auxiliary/scanner/portscan/xmas
一种更为隐蔽的扫描方式,通过发送FIN、PSH和URG标志,能够躲避一些高级的TCP标记检测器的过滤。
auxiliary/scanner/portscan/ftpbounce
通过FTP bounce攻击的原理对TCP服务进行枚举,在旧的Solaris和FreeBSD系统的FTP服务中此攻击可以被利用。
这些模块需要设置的参数和用法是完全一致的,如下图:
nmap扫描端口
常用的Nmap扫描类型选项:
-sT:通过完成一次完整的TCP连接的方式进行端口探测
-sS:TCP SYN扫描,速度较
-sT
选项快很多-sF、-sX、-sN:通过发送一些特殊的标志位以避开设备或软件的检测
-sP:通过发送ICMP echo请求探测主机是否存活,原理同Ping
-sU:探测目标主机开放了哪些UDP端口
-SA:TCP ACK扫描
常用的Nmap扫描选项:
-Pn:在扫描之前,不发送ICMP请求测试目标是否存活
-O:探测远程主机的操作系统类型等信息
-F:快速扫描模式,只扫描在nmap-services中列出的端口
-p:指定希望扫描的端口
常用的Nmap扫描选项组合:
1 | nmap -sP 192.168.27.0/24 # 扫描存活主机 |
查点与爆破
通过端口扫描工具搜集到端口以后,需要对端口上运行的服务及其版本进行辨识,还可以对端口上运行的服务进行弱口令爆破。
辨识服务版本
Metasploit中有很多的以_version
结尾的辅助模块,其功能是判断服务的版本,可以通过search name:_version
进行搜索。
例如对MySQL服务进行查点:
爆破弱口令
Metasploit中有很多的以_login
结尾的辅助模块,其功能是对服务进行弱口令爆破,可以通过search name:_login
进行搜索。
以MySQL的弱口令爆破为例:
漏洞扫描wmap
在Metasploit中提供了这么多的扫描模块,若一个一个的使用去探测会很麻烦并且很浪费时间,因此Metasploit提供了wmap来解决这个问题,wmap可以一次性的去扫描多个模块,并且将扫描结果存放在数据库。
添加站点
wmap在运行之前需要先添加站点,其命令为为wmap_sites
:
wmap_sites -a domain
# 添加站点wmap_sites -l
# 查看站点
wmap_sites -d ids
# 删除站点
设置扫描目标
在添加完站点以后,需要设置扫描目标才能进行扫描,其命令为wmap_targets
:
wmap_targets -t
# 设置扫描目标(域名)wmap_targets -d
# 设置扫描目标(id->wmap_sites中的id)wmap_targets -l
# 查看目标列表wmap_targets -c
# 清除所有目标
开始扫描
完成前面两步以后即可开始扫描了,扫描选项命令为wmap_run
:
wmap_run -t
# 查看扫描模块wmap_run -m ^((?!version).*)$
# 正则表达式来指定要使用的扫描模块的名称wmap_run -p ^(.*(version).*)$
# 正则表达式来指定要使用的扫描模块的路径wmap_run -e [/path/to/profile]
# 加载profile中的模块进行扫描
profile的模板在/usr/share/metasploit-framework/data/wmap/wmap_sample_profile.txt
中。
看到如下图所示,则表示扫描完成:
查看结果
查看扫描结果使用的命令为wmap_vulns -l
扫描结果的准确性取决于使用模块的准确性,个人觉得Metasploit在Web信息收集等方面准确性还是比较差的。并且在使用wmap时,会将域名转化成IP,遇到只能域名访问的情况就无法扫描了。
Exploit的使用
Windows的Exploit存放在exploit/windows
下,linux的Exploit存放在exploit/linux
下,除了此两个还有其他的exploit存放目录,如下图:
选择Exploit
在MSF框架中,选择exploit使用的命令是use exploitPath
,例如:use exploit/windows/iis/iis_webdav_upload_asp
,如下图:
如果想根据CVE编号
或其他编号查找exploit可以使用search
命令。
查看exploit支持的payload
不同的exploit支持的payload也有所不同,这是因为漏洞所提供的shellcode空间的大小不同所产生的差异。当然也可以根据自己的需求选择payload,比如MSF在公网可以选择reverse类型的payload让运行MSF的机器监听端口(默认监听端口是4444,可以通过lport选项设置),目标服务器来连接;或者MSF在内网中可以选择bind类型的payload让目标服务器监听端口(默认监听端口也是4444,可以通过lport选项设置),MSF去连接。
查看exploit所支持的payload的命令为:show payloads
常用的payload如下:
1 | windows/meterpreter/bind_tcp # meterpreter、 目标监听端口 |
查看exploit选项
不同的exploit都有不同的选项需要设置,查看有哪些选项需要设置的命令为show options
:
设置某个选项,使用的是set
命令,比如:set rhost 192.168.27.1
查看目标
有些exploit适用于多个操作系统,而如果不设置目标操作系统类型的话,msf默认是一一进行尝试。对于远程溢出漏洞,使用错误的payload进行尝试则会覆盖应有的正确代码,导致漏洞无法再成功利用(如CVE-2017-7269
)。因此,如果在信息收集的过程中,你已经知道目标操作系统的类型,则可以自己指定目标类型,来增加成功率。
查看支持哪些目标:show targets
,设置目标:set target xxx
利用漏洞
填写完以上Payload以后,就可以使用exploit
或者 run
指令利用漏洞发起攻击了。