JCG路由命令执行漏洞分析

  • A+
所属分类:颓废's Blog
摘要

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

漏洞说明

固件下载地址:
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可以对这个路由器固件结构进行分析。

JCG路由命令执行漏洞分析

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

JCG路由命令执行漏洞分析

这里提示提取错误,看到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"; }

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

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

作者:k0shl 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: