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