-
-
[翻译]rConfig v3.9.2 两个 RCE 漏洞(CVE-2019-16663、CVE-2019-16662)
-
发表于: 2019-11-12 01:12 6443
-
翻译人:cherrir
校对人:lipss
原文:
rConfig是一个开放源码的网络设备配置管理实用工具,用于网络工程师对其网络设备的配置。
我在两个文件中分别发现了两个远程代码执行漏洞。第一个是ajaxServerSettingsChk.php,攻击者可以通过rootUname参数发送精心构造的一个GET请求,触发未授权RCE漏洞。rootUname参数在源文件第2行中定义,随后会在第13行传递给exec函数,攻击者可以构造参数接收内容实现让操作系统执行恶意命令。这个漏洞很容易利用和发现,后面的篇幅中我将介绍如何发现并利用这个漏洞。
第二个漏洞是在search.crud.php发现的,这文件需要通过身份验证才能触发远程代码执行漏洞。这个漏洞可以通过构造一个包含有两个参数的GET请求触发,
其中searchTerm参数可以包含任意值,但该参数必须存在,才能执行到第63行的exec函数。
跟我平常找RCE漏洞的方法一样,因此我使用自己开发的一个Python脚本来列出有哪些不安全的函数。这个脚本在先前的案例研究中曾经使用过。
运行这个脚本过后输出了一些结果,我开始分析这些输出结果并且注意到路径为install/lib/ajaxHandlers/的ajaxServerSettingsChk.php文件,部分代码如下:
从代码可以看出,第2行脚本代码的意思是将GET请求中的rootUname参数值赋值到$rootUname变量中。
在第12行,代码将$rootUname与一些字符串拼接在一起,保存到rootTestCmd1变量,然后传递给第13行的exec函数。后续代码执行了相同的操作。
因此,我们只需注入特定构造命令,在第13行跳出转义字符串来执行命令,为此,我们可以使用如下的Payload:
为了方便测试,我修改了13行的exec函数,把exec执行后的命令返回结果显示到页面上,然后编码发送Payload,得到了如下结果:
我们可以看到发送编码后Payload,rootUname参数里经过编码的【; id #】命令被成功执行了两次。
为了得到shell,使用下面的Payload:
默认的CentOS 7.7 mini版本没有安装nc,所以使用这条Payload更方便测试。
在使用Burp编码并发送有效Payload之后,我们将获得以下内容:
我们反弹回一个shell!
为了自动化完成该过程,我简单编写了一个python代码来利用这个漏洞:
脚本地址:https://gist.github.com/mhaskar/ceb65fa4ca57c3cdccc1edfe2390902e
如下是执行脚本的结果:
再次反弹得到shell!
RCE扫描器的另一个结果路径在:lib/crud/的search.crud.php文件中,
这个漏洞需要登录验证后才能利用。片段代码如下:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课