红队故事0x02-从SQLi到Domain Admin

对一个SQL注入引发的威胁进行思考。

背景介绍

红队运营中包含的一项活动是搜索客户使用的软件中的漏洞,有时这项活动会发现0day。在一般情况下,漏洞是公开的,因此,我们只需要合理有效的利用。

在这篇文章中,我们将讨论一个已经被公开的漏洞(也就是指定的CVE),但这个漏洞没有公开细节。我将描述在功能性利用之前所遵循的逆向工程过程。 最后,利用此漏洞导致我们能获取域的管理员凭据,如本文末尾所示。

应用过程

0x01 – 序言

通过对客户的不同IP地址块进行全面扫描, 发现对应于ManageEngine Applications Manager 应用程序的公开Web服务。这个应用程序允许管理和监控IT基础设施,这使其成为一个关键的资产,因此是红队的优先目标。



通过对应用程序版本(12900)进行琐碎的搜索,可以发现在2017年4月有人报告了一些关于该程序该版本的漏洞。在这些报告中,它强调了一个非常有趣的SQL注入(CVE-2016-9488),因为它不需要身份验证。但是,易受攻击d额参数的详细信息以及当时利用的场景并没有完全公布,我们仅仅只知道易受攻击的应用程序组件(/servlet/MenuHandlerServlet)。

SQL注入(CVE-2016-9488) 未经身份验证的用户可以访问易受SQL注入攻击的URL /servlet/MenuHandlerServlet。请注意,攻击者除此之外还能够提取用户的密码Hash,这些Hash是没有salt的MD5Hash值。 根据使用的数据库类型及其配置,攻击者还可以使用SQL查询执行操作系统命令 。

0x02 – 识别SQL注入

在缺乏信息的情况下,红队可以继续通过逆向工程分析应用程序,以识别易受攻击的参数,并找出如何利用它。为此,我们使用制造商在其网站上提供的demo,尽管它是最新版本且已经修复了该漏洞,但我们仍然可以研究之前受影响组件接收的参数。

解压缩包含类MenuHandlerServlet(易受攻击资源的名称)的.jar文件。在这种情况下,我通常使用jad具对此类进行反编译,以通过ServletRequest.getParameter()方法执行搜索来查找现有HTTP参数。



在对不同的参数进行了不同的测试之后,可以确定config_id参数是受SQL注入影响的参数,如下所示。





0x03 – 数据提取

确定了可以注入的参数之后,我们再对其数据库(PostgreSQL)结构进行分析,以便我们提取。此时的目标是获取允许访问平台的管理凭据。

首先找到表am_userpasswordtable,从中获取应用程序的用户列表以及在没有salt的MD5中找到的密码。



credentialdetails表获取到了用于监视不同服务(Tomcat、Apache、数据库)的应用程序凭证(其中许多是域)。



在这种情况下,密码是被加密过的。但是,验证应用程序中有一个执行解码的函数(convertFromBase(String paramString)),用于获取明文。



0x04 – 对应用程序的最终访问权限

在逆向工程的过程中,在我们的hash破解完成之前,又发现了制造商在其中设置了默认密码(admin/admin),可以进入控制面板。但是,如果应用程序与其它产品OpManager)集成,则采用不同的值。



0x05 – 获取域管理员凭据

进入应用程序后,我将验证管理面板中是否存在允许本地和远程执行命令的组件(操作)。虽然此组件不返回已执行命令的输出,但可以将输出转储到文件并使用应用程序本身的日志查看器查看。确定命令是以 NT AUTHORITY \ SYSTEM 权限执行。



另外,我发现管理面板允许将文件上传到服务器。此功能用于在服务器(Windows)上承载sysinternals的ProcDump实用程序。此实用程序用于将LSASS进程的内存转储到文件中,这可能是由于缺少对内存访问的安全限制导致的。

procdump.exe -accepteula -ma lsass.exe out

此文件被渗透到此次目标的本地计算机中,以便之后提取域用户的密码,获取对域管理员帐户的访问权限。

结论

在一个暴露于互联网的web应用程序中,一个漏洞可能会导致公司基础设施被入侵。出于这个原因,重要的是要考虑避免暴露关键平台的必要性,例如本文中所示的平台。

在必要的情况下,必须及时更新应用程序,对服务器的外围和基础进行防御,并定期对漏洞进行审计。

坚持原创技术分享,您的支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------