在Metasploit中通过`route add`添加内网路由后,目标主机仍无法访问内网段,常见原因有三:一是未正确设置**pivot会话**(如使用`set AutoLoadStdapi false`或未启用stdapi扩展,导致缺少`getsystem`/`migrate`后缺失网络转发能力);二是路由仅作用于MSF框架的**payload通信层**,若shell为非stdapi(如raw meterpreter或普通cmd shell),则无内置路由转发功能;三是目标主机本身**无通往内网的二层可达性**(如防火墙拦截、ACL限制、NAT/网关未配置回程路由),MSF路由不解决底层网络连通性。此外,`route list`显示正常不代表生效——需确认当前session已绑定至该路由,且`use auxiliary/scanner/portscan/tcp`等模块启用了`RHOSTS`和`THREADS`并指定`SESSION`参数。排查时应优先执行`run get_local_subnets`验证本地子网识别,并用`execute -f cmd.exe -i -H`手动测试内网IP连通性。
1条回答 默认 最新
巨乘佛教 2026-04-11 11:00关注```html一、现象层:路由看似添加成功,但内网探测完全失联
执行
route add 192.168.10.0/24 1后,route list显示条目存在且 Session ID 匹配,但使用auxiliary/scanner/portscan/tcp扫描该网段时超时无响应;甚至post/multi/manage/execute_command调用ping 192.168.10.1也返回“请求超时”。此时切勿假设“MSF 路由已生效”——route list 的存在 ≠ 网络层转发能力就绪。二、会话层:Pivot 会话未真正“激活”网络代理能力
- 关键前提:
route仅对启用stdapi扩展的 Meterpreter session 生效;若初始 payload 为payload/windows/x64/meterpreter/reverse_tcp但设置了set AutoLoadStdapi false,则 session 缺失getsystem、migrate、portfwd及路由转发所需的 IPC 通道。 - 验证命令:
run get_system报错 “stdapi not loaded” 或sysinfo中无OS字段完整输出,即为典型标志。 - 修复路径:先
load stdapi(若权限允许),再migrate至 svchost.exe 等高完整性进程,最后getsystem提权确保 IPC 管道稳定。
三、协议栈层:MSF 路由 ≠ 系统级路由,仅作用于 Payload 数据平面
Shell 类型 是否支持 route 转发机制 典型失效场景 stdapi meterpreter ✅ 原生支持 MSF 框架在 payload 层封装/解封装 IP 包,通过 session 隧道透传 未 migrate 至稳定进程导致隧道中断 raw meterpreter ❌ 不支持 无 stdapi,无 socket 重定向能力 误用 payload/windows/meterpreter/reverse_tcp(非 x64/x86/stdapi 变体)cmd shell / powershell ❌ 完全不支持 纯命令行交互,MSF 无法劫持其网络调用 试图对 cmd session 执行 route add—— 语法虽接受,实为无效操作四、网络基础设施层:二层可达性缺失是根本性硬伤
即使 MSF 层面一切配置正确,以下底层问题仍会导致“路由表存在却无法通信”:
- 目标主机所在 VLAN 与内网段之间 ACL 显式 deny ICMP/TCP;
- 网关设备(如核心交换机或防火墙)缺失回程路由(例如内网段 192.168.10.0/24 未指向攻击者控制的 pivot 主机);
- 目标主机启用了 Windows Defender 防火墙出站规则,或企业级 EDR(如 CrowdStrike)拦截了非标准端口的 socket 创建;
- NAT 设备未配置端口映射或 hairpin NAT,导致从 pivot 主机发往内网的流量被丢弃。
五、验证闭环:结构化排错流程图
graph TD A[执行 route add X.X.X.X/Y S] --> B{route list 是否显示?} B -->|否| C[检查 session 是否活跃且未过期] B -->|是| D[run get_local_subnets] D --> E{是否识别出目标内网子网?} E -->|否| F[说明 pivot 主机自身未感知该网段 → 检查其网络接口/IP 配置] E -->|是| G[execute -f cmd.exe -i -H -c \"ping -n 1 192.168.10.1\"] G --> H{CMD 层能否通?} H -->|否| I[确认二层可达性:ARP 表、网关连通性、ACL/NAT] H -->|是| J[启用 scanner 模块并显式设置 SESSION 参数]六、模块调用规范:易被忽略的参数绑定陷阱
常见错误示例:
use auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.10.0/24
set THREADS 10
run✅ 正确写法必须包含:
set SESSION 1
set RHOSTS 192.168.10.0/24
set THREADS 10
run否则 MSF 默认走本地 Kali 接口发包,完全绕过 route 隧道。所有依赖 pivot 的模块(如
auxiliary/gather/enum_domain、post/multi/gather/hashdump)均需显式set SESSION。七、深度加固建议:构建可审计的 pivot 健康检查清单
- 【会话】
ps查看进程列表,确认当前 session 运行在svchost.exe或lsass.exe等系统进程; - 【扩展】
load kiwi成功后运行creds_all,验证横向移动基础能力; - 【路由】
run get_local_subnets输出应含至少两个子网(本机网段 + 内网段); - 【隧道】
portfwd add -l 3389 -p 3389 -r 192.168.10.100并本地 telnet 测试,验证端口转发链路; - 【日志】开启
set LogLevel 5捕获 route 包封装/解封装过程,定位 payload 层丢包点。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 关键前提: