JCG路由命令执行漏洞分析

作者:k0shl 转载请注明出处:https://whereisk0shl.top
一年后重温这个漏洞,突然发现这个JCG漏洞时在某云提交的,好怀念那段时光...


漏洞说明


固件下载地址:
http://www.onlinedown.net/soft/572345.htm

JCG路由固件版本:
JYR-N490R 110.1.2.820

这个漏洞直接在路由web页面里输入即可执行任意命令,没有PoC


漏洞分析


此漏洞是由于JCG路由器中的一个web页面负责处理PING请求和Traceroute请求,用来对IP进行ping操作用于诊断网络链接情况,但由于对于这个命令的检测不严格,导致通过构造特殊的命令,可以执行额外的任意系统命令,下面对此漏洞进行详细分析。

首先,需要获取这个路由器的固件,这里我获取的是型号为JYR-N490R型号的路由器,通过binwalk可以对这个路由器固件结构进行分析。

可以看到,这个固件包含了一个squashfs文件系统,这个系统实际上就是一个类linux系统,再次用binwalk提取这个squashfs文件系统。

这里提示提取错误,看到squashfs-root文件夹里也是空的,但实际上会提取出来一个.squashfs结尾的文件,通过7-zip解压就可以获取到文件内容了。

在web文件夹负责存放路由器的web网页,在这个文件夹内存在一个adminsyscmd_m.htm文件。

分析一下这个文件。

function init()
{
    show_div(false, "syscmd_div");

    var sysCmd = getUrlParam("sysCmd");
    var sysMagic = getUrlParam("sysMagic");

    if (sysCmd.length > 0) {
        document.getElementById("sysCmd").value = sysCmd;
        document.getElementById("sysMagic").value = sysMagic;
        document.getElementById("submitUrl").value = "/result.htm";
        document.formSysCmd.submit();
    }
    else {
        var isDiag = <% jAspWebsGet("diag-support"); %>;
        if (isDiag) {
            show_div(true, "syscmd_div");
            onCmdChange();
        }
        else {
            window.location.href = "/";
        }
    }
}
<

首先会初始化整个页面,其中sysCmd会负责执行系统命令,然后会调用onCmdChange函数。

function onCmdChange()
{
    if (document.getElementById("radio_ping").checked == true)
        document.getElementById("sysCmd").value = "ping";
    else if (document.getElementById("radio_tracert").checked == true)
        document.getElementById("sysCmd").value = "traceroute";
}

随后会执行系统命令,这个过程没有对命令合法性进行检查,导致通过构造特殊的命令可以执行任意系统命令。
例如


接下来只需要在页面里执行代码就可以了。

Comments
Write a Comment
  • 971106029 reply

    您好 请问.squashfs结尾的文件,通过7-zip解压 这个解压使用哪条命令呐?

    • k0shl reply

      @971106029 改一下后缀,然后直接解压