渗透测试意外之旅之AlienVault OSSIM/USM

渗透测试人员可能自我感觉像一位旅行者,在交战过程中发现机构的内部世界让我们的旅程不乏惊喜。在文本中,我将详述我们如何进入公司的心脏。

几周前,我们的团队在进行内部渗透测试期间提出了一个AlienVault USM解决方案的实例。AlienVault Unified Security Management? (USM) 是一个一体化平台,旨在确保中端市场组织能够有效抵御当今的高级威胁[1]。换言之,其是一个可以从所有服务器/端点收集数据的平台。这意味着其可以随处访问,并包含有关整个基础设施的敏感数据,而这正是我们想要访问的地方。

武器是已知的漏洞

我想到的第一件事是寻找已知的漏洞。因此,我访问了AlienVault安全公告页(https://www.alienvault.com/forums/categories/usm-security-advisory)。如您所见,截至目前有很多安全补丁。为了对已修复的问题一探究竟,我决定下载两个不同版本的AlienVault(5.3.5和5.2.5)。

AlienVault在其网站上不显示旧版本,因此我必须想方设法。我意识到在最新版本下载时使用以下URL。

我访问了http://downloads.alienvault.com/c/download页面,然后突然显示所有已发布的版本。我真的不知道有意启用了目录列表,我直接从该处下载了AlienVault-USM_trial_5.2.4.zip文件,其中包含90天许可的试用OVA文件。

检测编程语言和抓取源代码

AlienVault提供越狱shell。也可ssh到box。

大多数现代框架或编程语言均可通过cookie名称获知。您一定会看见以下其中一个cookie名称 .ASPNETCOOKIE, JSESSIONID, PHPSESSID 。我访问初始页面时通过Set-Cookie头看到了一个PHPSESSID。

我运行了find / -type f|grep .php 命令,以定位web目录。结果发现所有文件均位于 /usr/share/ossim/www。我压缩了整个www目录,并使用scp命令复制到了我的主机。当然,我为两个版本都执行了该步骤。

使用IDE来了解差异

我喜欢IDE,它让我们可以跟踪代码和数据流,只需点击即可跳转到函数定义。为自动完成和计算文件甚或目录之间的差异,大多数现代IDE都是索引项目文件夹。

上图显示了 /www/dashboard/sections 文件夹下的更改文件。当然,选择的版本之间有大量的更改。我用2天时间研究了源代码,我只为本文抓取了必要的更改。

漏洞1 ——PHP对象注入

我发现的一个主要区别是关于对象注入。似乎有人发现了 unserialize() 函数的若干不安全用途,并将其报告给了AlienVault。

我们都知道如何利用对象注入问题,我跳到了IDE,并搜索了拥有神奇函数的类,比如__destruct和__wakeup。但所有函数对对象链接都没有用。

Protip#1:使用cmd + F然后搜索“function __destruct”

Protip#2:在不安全的使用位置之前打印出get_declared_classes()函数输出,以便在命名空间中检索可访问的类。 您无法访问以前没有包括的类。

我决定找到一个关于这些对象注入问题的公告或任何细节(某些人可能已做过深入研究)。我通过谷歌搜索很快找到了Peter Lapp,他向AlienVault报告了unserialize()漏洞。

https://www.exploit-db.com/exploits/40684/

当然,我针对我们的目标及5.3.5和5.2.5测试尝试了该有效载荷,但均不起作用。如公告中所述,该有效载荷应该对5.3.1之前的版本有效。另一方面,我们知道这些对象注入漏洞是有效的。并且也没有是否需要认证的详情。

因此,我决定回到IDE并寻找更有趣的东西。

漏洞2——认证绕过0day漏洞(发现有人也发现这个漏洞)

当我在做源代码审查时,我看到以下授权检查无处不在。

以下是函数定义。

这对我来说是巨大的时刻。我相信现在读这篇文章的每个人都能发现这里的问题。使用AV Report Scheduler作为用户代理将绕过几乎每个端点的认证控制。

结果表明这个问题已被报告过(http://www.zerodayinitiative.com/advisories/ZDI-16-517/)。很可惜,报告这个非常重要的零日漏洞的人不是我。不过,这对我们的调查是一个很大的改善。

漏洞3——通过X-Forwarded-For进行IP欺骗(0day

我在代码审查过程中发现了以下代码块。其抓取X-Forwarded-For头,然后将其保存到数据库。

我将我的IP地址设置为12.0.0.1并发送所有请求。当我查看用户活动详细信息时,我看到以下日志详细信息。

很容易欺骗我们的IP地址,以避免记录我们真正的IP地址。

我们的攻击计划似乎已准备就绪。通过利用漏洞2,我们一定能够在无需认证的情况下利用漏洞1。但首要的事情是,我们需要让漏洞1有效。

回到PHP 对象注入

我们来看看gauge.php文件。有一个有效的对象注入漏洞,但是PoC没有如所述一样起作用。我们需要使其起作用,以执行成功的sql注入攻击。

第7行:我们将利用漏洞2绕过该验证。

第13-15行:获取用户输入

第19-20行:这些输入被验证。id可以为null或0-9位数,type必须为不包含*或%的文本。

第34-41行:这正是我们想进入的地方。这需要几个输入且将被验证,value值参数是对象注入问题的正确位置。

第49-60行:在上一步从用户获取的变量在此处验证。 还有更多的验证。

第70行:这个很重要。$winfo[asset]填充用户数据并进入函数。该函数必须被没有任何问题地返回。我们稍后再看这一点。

第94-96行:您还记得填充有unserialize函数的不安全使用的$chart_info数组变量吗?当$type值也是用户控制下的警报时,它直接进入SQL查询。

这非常棒!但我们需要为$winfo[asset](用作get_asset_filters函数参数)找出一个正确值。

让我们来看看该函数的定义。

这一次,其进入getAssetFilter函数。现在让我们再次深入看一看定义。

我去掉了不必要的代码。因为我们得到了我们所需要的。看看第9行。如果其为空的话将使用ALL_ASSETS。所以我们可以用ALL_ASSETS填充变量。

触发SQLI (SQL 注入)

首先我们需要创建正确的序列化字符串。

然后触发漏洞。我们使用特殊的用户代理,想想漏洞2

可以看到,在mysql用户所有者的/tmp文件夹下创建了pentestblog.txt。

我们成功执行了sql查询并将结果转储到了文件中。产生位于服务器的文件有什么意义?幸运的是,在Alien Vault上全局未禁用错误报告,这意味着我们可以使用基于错误的sql注入有效载荷来获取执行查询的响应。

让我们更改以十六进制形式返回admin密码哈希值的有效载荷。

以下是服务器的响应。

似乎AlienVault也试图保护自己免受网络攻击。我们也需要绕过这一点。我们用BIGINT[2]技术更改我们基于错误的有效载荷。

以下是服务器的响应。

我们的SQLi有效载荷包含不被允许的感叹号。但我相信我们也有一个好消息。WAF(Web应用防护系统)未捕获我们的请求,我们走到这一步不容易,我们不能放弃。

让我们试试extractvalue法[3]。

以下是服务器的响应。

很棒。为利用对象注入漏洞(导致SQL注入攻击),我们成功绕过了WAF、认证机制

懒得破解哈希?让我们劫持管理员会话。

AlienVault在命名为会话的表中存储已认证用户的phpsessid值。不用利用sql注入来获取管理员哈希值,我们只需获取会话id值,然后将其用于会话劫持。

返回的数据将是认证用户的会话ID值。还有一个名为login的列,您可以在此通过WHERE语句获取特定的用户令牌。

如何利用

我们有一个未经验证的sql注入漏洞,但是我们还没有找到一种方法来获取shell。因此我又用谷歌搜索了发表的利用方法。我找到了AlienVault OSSIM 4.3.1版和更低版本的metasploit模块[4]。查看源代码后,我发现了一个名为Action的“特性”,其能够执行操作系统命令。

利用步骤

以下是我们传递我们的有效载荷的方式:

1. 利用认证绕过问题(漏洞2),以到达有漏洞的端点

2. 执行php注入攻击(漏洞1),从而在服务器上执行sql查询。

3. 为基于错误的sqli注入使用extractvalue法。这也将绕过弱WAF保护。

4. 从session表获取会话令牌。

5. 创建自定义AlienVault操作——通过使用捕获的会话令牌来执行我们的有效载荷。

6. 创建一个在发生使用无效凭据尝试SSH登录时触发的策略。

7. 绑定策略和动作。

8. 启动处理程序。

9. 使用无效凭据执行SSH登录。

10. 获得root shell。

模块的PRhttps://github.com/rapid7/metasploit-framework/pull/7893

更新1

AlienVault在本文发表后立即下线了可以下载旧版USM/OSSIM产品的网站。

更新2

本文介绍了我们如何成功访问了AlienVault USM 5.2.5版。目前的USM 5.3.5版解决了所有上述问题。但我认为还存在一个被称为62600BCA031B9EB5CB4A74ADDDD6771E的研究人员发现的、CVSS 得分为10.0的0day问题。

详情见即将发布的ZDI公告

http://www.zerodayinitiative.com/advisories/upcoming/

参考:

[1] – https://www.alienvault.com/products/

[2] – https://www.exploit-db.com/docs/37733.pdf

[3] – https://www.perspectiverisk.com/mysql-sql-injection-practical-cheat-sheet/

[4] – https://www.rapid7.com/db/modules/exploit/linux/http/alienvault_sqli_exec

参考来源:https://pentest.blog/unexpected-journey-into-the-alienvault-ossimusm-during-engagement/

E安全注:本文系“华为未然实验室”投稿至E安全,转载请联系授权,并保留出处与链接,不得删减内容。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部