我的发现200字

2025-02-1808:59:36常识分享0

Apache Log4j2是一款非常受欢迎的Java日志框架,近期由于一个jndi注入的漏洞,其安全性受到了广泛关注。下面我将详细介绍关于这个漏洞的一些调试记录和相关信息。

JNDI,全称Java Naming and Directory Interface,是Java中用于名称和目录服务的接口。简单来说,它就像是一个查找实际对象的服务的接口。JNDI注入漏洞,就是攻击者可以通过注入恶意的JNDI引用,使应用程序加载并执意的类文件,从而实施远程代码执行攻击。

Log4j2在处理日志配置时,默认提供了Lookups功能,这个功能允许在任意位置向Log4j配置添加值。Log4j2在处理这些输入时并未进行充分的安全检查,这就给攻击者提供了可乘之机,可以通过注入恶意的JNDI引用,触发RCE(远程代码执行)攻击。

在调试过程中,我们发现Log4j2在处理${}引用时,会进行递归的处理。例如,当遇到${}时,会对其进行格式化处理,如果其中包含JNDI引用,就会尝试通过javax.naming.InitialContext.lookup去访问。这就是经典的JNDI注入,造成RCE的关键步骤。

攻击者还可以利用一些协议(如lower、upper、jndi等)进行绕过安全检查,构造复杂的payload。在不能RCE的情况下,还可以通过dnslog等方式外带一些敏感信息。

除了JNDI注入,还有一些其他的利用方式。例如,利用JDK中默认支持的JNDI自动协议转换以及对应的工厂类,或者利用LDAP直接返回一个恶意的序列化对象。这些都需要本地存在一些Gadget(利用链),如org.apache.naming.factory.BeanFactory等。

对于JDBC(Java DataBase Connectivity)的利用方式也值得关注。在使用JDBC连接数据库时,如果攻击者能够控制MySQL服务器并搭建恶意MySQL服务,那么就有可能触发MySQL JDBC客户端的反序列化漏洞,从而实施攻击。

为了防范这些攻击,我们需要确保应用程序的Log4j2版本是最新的,并及时修复已知的安全漏洞。还需要对输入进行充分的安全检查,防止注入恶意的JNDI引用或其他恶意代码。对于数据库连接等敏感操作,也需要进行严格的安全配置和监控。

以上就是关于Apache Log4j2 jndi注入漏洞的一些调试记录和相关信息。希望能帮助你更好地理解这个漏洞,并采取有效的措施进行防范。

参考:

paper./1091/

paper./942/

/repo/Ea3i0n/JNDIExploit

/2021/12/13/jndi-injection/

mp.weixin./s/vAE89A5wKrc-YnvTr0qaNg