Add files via upload

This commit is contained in:
雾島风起時
2025-09-25 03:24:57 +08:00
committed by GitHub
parent 770173d4a3
commit 6faa3b7354
28 changed files with 1149 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
### Log4j 漏洞原理
**1. Log4j 的“查找”(Lookups)功能**
Log4j 是一个强大的日志框架,它有一个非常实用的功能叫做 **“查找”(Lookups)**。这个功能允许在日志配置或日志消息中动态地获取一些信息
比如,你可以用 `${sys:user.name}` 来打印当前系统的用户名,或者用 `${env:PATH}` 来打印系统的环境变量
这些 Lookups 机制让日志功能变得非常灵活
**2. JNDI 查找的引入**
在 Log4j 的 2.x 版本中,引入了一种新的查找类型:**JNDI Lookup**
- **JNDI**Java Naming and Directory Interface)是 Java 平台的一个 API,它允许程序通过名字来查找和访问各种资源,比如数据库、远程对象等
- JNDI 查找支持多种协议,例如:`LDAP` (轻量级目录访问协议)、`RMI` (远程方法调用) 和 `DNS`
有了 JNDI Lookup,你就可以在日志消息中通过 `${jndi:协议://地址}` 的形式去查询一个远程资源
**3. 漏洞的核心:JNDI 远程加载类**
漏洞的真正核心在于 **JNDI 协议的特性**
当 Log4j 看到一个 `${jndi:ldap://...}` 字符串时,它会:
1. **解析**:识别这是一个 JNDI 查找
2. **请求**:向 `ldap://` 指定的远程服务器发起请求
3. **接收响应**LDAP 服务器会返回一个恶意的 **Java 对象**(或者说,指向这个对象的引用)。这个对象通常是一个恶意的 `.class` 文件
4. **远程加载**:客户端(即 Log4j 所在的程序)在处理这个返回的对象时,会自动去加载并实例化这个恶意的 `.class` 文件
这个过程,就是 **JNDI 注入**。它利用了 JNDI 协议的特性,让程序主动去加载并执行远程服务器上的代码