影评周公子 2026-04-11 11:00 采纳率: 99%
浏览 0
已采纳

MSF中添加路由后为何目标主机仍无法访问内网段?

在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 缺失 getsystemmigrateportfwd 及路由转发所需的 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_domainpost/multi/gather/hashdump)均需显式 set SESSION

    七、深度加固建议:构建可审计的 pivot 健康检查清单

    1. 【会话】ps 查看进程列表,确认当前 session 运行在 svchost.exelsass.exe 等系统进程;
    2. 【扩展】load kiwi 成功后运行 creds_all,验证横向移动基础能力;
    3. 【路由】run get_local_subnets 输出应含至少两个子网(本机网段 + 内网段);
    4. 【隧道】portfwd add -l 3389 -p 3389 -r 192.168.10.100 并本地 telnet 测试,验证端口转发链路;
    5. 【日志】开启 set LogLevel 5 捕获 route 包封装/解封装过程,定位 payload 层丢包点。
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 4月12日
  • 创建了问题 4月11日