由于最近曝出来的Log4j2远程执行漏洞过于严重,公司内部也积极展开自查,笔者手头项目比较多,排查起来费时费力,于是总结了以下方法来加快排查速度。
1、最直观方式
- 1、使用pom分析插件,如IDEA上的Dependency Analyzer,打开pom文件后,切换到Dependency Analyzer标签,查看log4j-core的版本号;
- 2、查看lib下jar包的版本;如IDEA中;
以上方法需要每个项目都打开去验证,虽然直观,但是麻烦;于是想到用以下方法,先去服务器上排查,然后再根据结果,打开需要的项目进行修复。
2、服务器上排查
- 1、直接查看jar包或war包内的第三方库。
jar -tf jar包或者war包|grep 'log4j.*jar$'
这句话是用来检查jar包或者war包下有没有log4j的jar包,检查结果如图
- 2、解压后的war项目目录或者lib单独打包放在项目外边的。
find . -name log4j*.jar
使用linux的find命令,直接查找相关的jar包。
- 3、打包到项目中的三方引用包是class而不是jar包(相当于是将第三方的jar作为本地项目使用了)
这种包解包结果类似下图:
所以使用如下命令,查找特定类文件
jar -tf jar包或者war包|grep 'log4j'|grep 'Jndi'
比如将 Jndi 修改为 Deny,则会出现如下结果:
此处修改为过滤 Deny 只为做演示结果,要排查Log4j2的漏洞文件,还是要过滤 Jndi。
特殊说明: 由于这种方式没有办法看到log4j的版本号,所以升过级的项目和未升过级的项目都可以查到 JndiLookup.class 文件,此时需要打开项目做进一步的确认。