Metasploit渗透测试魔鬼训练营读书笔记

  最近忙里偷闲,阅读了一下《Metasploit渗透测试魔鬼训练营》,希望能够更加了解Metasploit的框架结构。

信息收集

外围信息收集

目录扫描

  常用模块有:auxiliary/scanner/http/brute_dirauxiliary/scanner/http/dir_scannerauxiliary/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
2
3
4
5
6
7
nmap -sP 192.168.27.0/24 # 扫描存活主机
nmap -PU -sn 192.168.27.0/24 # 扫描存活主机(通过发送UDP包方式)
nmap -Pn -sS 192.168.27.0/24 # 不ping直接syn方式扫描端口
nmap -Pn -sS 192.168.27.0/24 -o output.txt # 保存扫描结果
nmap -Pn -sV 192.168.27.1 # 详细列出服务信息
nmap -Pn -sT 192.168.27.1 # TCP connect方式扫描端口
nmap -Pn 192.168.27.1 -p 22-25,80,110-400 # 指定端口进行扫描

查点与爆破

  通过端口扫描工具搜集到端口以后,需要对端口上运行的服务及其版本进行辨识,还可以对端口上运行的服务进行弱口令爆破。

辨识服务版本

  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
2
3
4
windows/meterpreter/bind_tcp # meterpreter、 目标监听端口
windows/meterpreter/reverse_tcp # meterpreter、 MSF监听端口
windows/shell/bind_tcp # 反弹shell、 目标监听端口
windows/shell/reverse_tcp # 反弹shell、 MSF监听端口

查看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 指令利用漏洞发起攻击了。