Java日志组件之三Log4j2漏洞剖析及重现

news/2025/3/14 22:54:02/

一、前言

这一篇我们来介绍一下史上第二严重的安全漏洞是个什么情况,原理是什么,如何重现。

二、Log4j2 Lookup机制

Log4j2 Lookup机制最重要的功能就是提供一个可扩展的方式让你可以添加某些特殊的值到日志中。你调用logger.info(name);这样的语句,如果要输出的name是带了 ${},它就会给你分发到对应的Lookup具体类去执行而不是直接输出字符串。

先搭建一个SpringBoot项目,然后将spring-boot-starter-logging这个依赖移除,自己引用log4j-api-2.13.3.jar、log4j-core-2.13.3.jar这两个包,注(这是我们从自己以前老机器上找到的,现在官方应该是已经修复了,直接maven依赖进来应该是不能重现了)。

注:用POSTMAN调用发送请求传参数值为  ${java.os},

控制台会输出:Mac OS X 10.15.7 unknown, architecture: x86_64-64,其执行时序图如下

1、MessagePatternConverter.format

2、StrSubstitutor.resolveVariable

3、Interpolator.lookup

4、SystemPropertiesLookup.lookup

这就把我操作系统的信息就输出来了,就是用Log4j2可以输出变量,但好像这问题也不大吗,输出就输出呗有毛关系,请看下图红色标出来的,这才是大漏洞。

三、他是怎么来黑的呢

注:用JNDI注入,变量可以用来被执行远端代码。

1、JndiObj

注:这里写的是rm -rf * ,您可别执行,不然把自己服务器干掉了。

2、JndiServer

注:在你的机器上启动JNDI服务,然后jndiObj里你想做什么都行,

Runtime.getRuntime().exec()会在调用jndi接口的机器上执行。

3、发送请求

启动SpringBoot项目,调用接口发送数据。

注:我这里演示用的是同一台机器,但也可以很明显看得出来是在服务器上去执行远程黑客机器上的代码(那个代码在你的服务器上执行,而不是黑客自己的机器)。


http://www.ppmy.cn/news/1191305.html

相关文章

[Linux 基础] Linux使用git上传gitee三板斧

文章目录 1、使用git1.1 安装git1.2 在Gitee上创建项目1.2.1 使用Gitee创建项目1.2.2 上传本地代码到远端仓库 1.3 git上传三板斧1.3.1 三板斧第一招:git add1.3.2 三板斧第二招:git commit1.3.3 三板斧第三招:git push 1、使用git 1.1 安装…

【排序算法】 计数排序(非比较排序)详解!了解哈希思想!

🎥 屿小夏 : 个人主页 🔥个人专栏 : 算法—排序篇 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言🌤️计数排序的概念☁️什么是计数排序?☁️计数排序思想⭐绝对…

css中flexbox和grid的区别

css中flexbox和grid的区别 我们是不是被那些不会按预期排列的元素所影响?这篇文章我们将深入探讨css中flexbox和grid的布局。通过了解他们的主要差异,我们会发现这些布局是如何改变我们网站的风格。 理解CSS布局 css布局是网页设计的一个重要方面&…

软考高项-49个项目管理过程输入、输出和工具技术表

知识领域数量五大过程组启动规划执行监控收尾整体7制订项目章程制订项目管理计划指导与管理项目工作 管理项目知识 监控项目工作 实施整体变更控制 结束项目或阶段范围6规划范围管理 收集需求 定义范围 创建WBS 确认范围 控制范围 进度6规划进度管理 定义活动

Vectrosity 插件使用

1 下载 https://download.csdn.net/download/moonlightpeng/88490704?spm1001.2014.3001.5503 2 使用,目前在2020.3.3上测试可以 导入时选5.6 再导入demo

Handler面试题

Handler面试题 1、子线程到主线程通信都有哪些方式?子线程到主线程通信的原理 handler 内存:线程间共享 主线程:处理消息 Handler.handlerMessage() Looper.loop()死循环取消息 -> queue.next ->handler.dispatchMessage()->handle…

HTTP和HTTPS本质区别——SSL证书

HTTP和HTTPS是两种广泛使用的协议,尽管它们看起来很相似,但是它们在网站数据传输的安全性上有着本质上的区别。 HTTP是明文传输协议,意味着通过HTTP发送的数据是未经加密的,容易受到拦截、窃听和篡改的风险。而HTTPS通过使用SSL或…

分布式事务(再深入)——分布式事务理论基础 Java分布式事务解决方案

前言 事务(TRANSACTION)是一个不可分割的逻辑单元,包含了一组数据库操作命令,并且把所有的命令作为一个整体向系统提交,要么都执行、要么都不执行。 事务作为系统中必须考虑的问题,无论是在单体项目还是在分布式项目中都需要进行…