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

编程入门 行业动态 更新时间:2024-10-24 00:31:44

Java日志组件<a href=https://www.elefans.com/category/jswz/34/1768563.html style=之三Log4j2漏洞剖析及重现"/>

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

一、前言

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

二、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项目,调用接口发送数据。

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

更多推荐

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

本文发布于:2023-11-16 12:56:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1622504.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:之三   漏洞   组件   日志   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!