大家好,我是伟伟。上周大家应该都被log4j的日志漏洞刷屏了吧?当我看到这个漏洞时,我注意到它具有“影响范围很广,上手难度很低”的特点。只是想验证一下上手的难易程度,于是看了很多文章,都是大同小异,漏洞都提到了,牛逼,赶紧修,来不及就完了。然后加上一张唤起计算器的截图,就完了,没人告诉我怎么玩。我也想唤起计算器,学会装逼。于是上网查了一系列资料,摸索着。从找到信息到完成攻击,大约用了一个小时。当时我就震惊了:这东西的难度真的很低啊!本来还想写漏洞复现的,写着写着打消了念头。首先,即使我重现了它,我仍然不太明白它是如何工作的。我只知道可以通过JNDI加载攻击者的类,而且因为这个类是攻击者写的,所以里面可以做很多事情。你想想,我可以在你的代码环境下执行我写的一些代码,就算我不会攻击,我也可以写个死循环,写个sleep语句把你弄死。如果真的想写出有价值的文章,研究方向可以看看JNDI相关技术。但是我觉得我不能动,所以我就不写了。其次,我查了,不能写的太详细。毕竟是漏洞,传播其复现的方法也不是很好。好像涉及到法律问题,所以大家都知道如何预防。再说了,这是保安组的工作,我不想吃他们的饭。最后居然发现B站上已经有比较详细的视频演示了,贴个链接,不知道这个视频能保存多久:https://www.bilibili.com/video。..因为目前的解决办法是升级jar包,所以这篇文章我主要介绍给大家介绍一个插件,可以在一定程度上提高你的升级速度。我也经常用,用起来很顺手,味道很好闻。sb日志我没有骂人,我只想说说SpringBoot的日志。现在大家的应用都是基于SpringBoot构建的,那么SpringBoot默认的日志框架是什么呢?我也不知道,所以准备自己搭建一个纯SpringBoot项目来看看。有多纯?即我在通过IDEA新建项目时,除了指定SpringBoot版本号为2.6.1外,没有引入其他包。然后,我们看pom文件,很少的东西:真的很纯净,像纯净水一样。然后我们开始了这个项目:你看,神奇的事情发生了。一行代码都没动,什么也没配置,日志自动打出来了。所以之前一直没有注意到,但是这件事让我想到了这个问题:SpringBoot默认的日志框架是什么?我第一个想到的方法是这样的:猜猜看,如果能用代码解决问题,哔哔声会少一些,再加上两行日志打印出来就完了?从输出可以知道,哦,原来是用了logback。其他方法除了前面的方法,还有什么方法可以知道是logback吗?于是立马想到了看pom依赖图。IDEA中有一种一键查看pom依赖图的方式,非常简单。在maven标签中点击这个图标即可:如果找不到这个图标,也可以在pom文件中右击,然后选择Maven->ShowDependencies:然后会看到这样一个界面,里面包含了logback-corepackage显示引入了logback日志的实现:有朋友会问:依赖里有log4j-api吗?为什么说没有用log4j呢?老铁,只有api没有核心包,核心实现都在核心包里。比如这次导致log4j问题的代码,也就是查找的逻辑,都在core包里面。但是,为什么建议我们耗尽log4j-api和log4j-core的修复程序?个人认为core已经不需要了,api留着意义不大。如果只有log4j-api的依赖,按照我掌握的攻击原理,是没有问题的。好了,话不多说,说说这个纯SpringBoot项目。前面跟大家说的看依赖图的方式,其实我一般不会用。为什么?因为在真实的项目中,依赖关系可能极其复杂,看起来密密麻麻。你不想看到它。比如给大家看一下dubbo项目的pom依赖图。这是非常令人兴奋和震惊的。:说到这里,我们先来思考一个问题:你平时打开pom文件是为了什么?是不是要检查jar包冲突或者找jar包?所以在之前的页面中,可以按Ctrl+F进行搜索,像这样:但是用的时候,真的不好用。于是乎,我要给大家介绍的插件就到这里了。https://plugins.jetbrains.com...这个插件很香。具体如何安装我就不介绍了,注意自己对应的IDEA版本即可。主要是教大家怎么用。安装完成后,你再次打开pom文件,可以看到下面这个东西:长这样:我们主要关注这个地方,我也会给大家写下注意事项:在这个里面,主要有两个核心功能。检查依赖冲突。查询jar包依赖。比如我们看一下我们纯项目中的日志相关的包:一眼望去,我们也看到了上面提到的logback-core包。实战演练只是讲不练假动作。下面给大家来个maven-helper的实战演练。比如我们用Dubbo做手术,其实用起来很简单。以这次log4j漏洞事件为例,我们需要找出项目中所有的log4j-api和log4j-core包。我在Dubbo项目中选择这个模块进行演示:比如先打开autoconfigure包下的pom文件:然后搜索log4j:可以看到spring-boot-starter-logging引入了log4j-api。在这里右击,然后点击Exclude排除:刷新依赖,再次查询就没有了:就这么简单,其他模块也一样,就不一一演示了。但有一个问题。Dubbo作为一个中间件,出院后也不容忽视,不得不推出新的安全版本。我们可以看看这次Dubbo针对log4j漏洞提交的pr:https://github.com/apache/dub...可以看到排除了log4j-api,新版本的log4j-api还介绍了。版本号放在父pom中,实现了版本的统一管理:如果以后需要升级log4j-api,只需要在父pom中调整版本号即可。让我再举一个例子来练习。这个例子借用这个链接:https://juejin.cn/post/694522...首先在之前的纯SpringBoot项目中引入Dubbo包,然后引入zookeeper作为注册中心:
