log4j2低版本jndi漏洞修复及测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j2低版本jndi漏洞修复及测试相关的知识,希望对你有一定的参考价值。
参考技术A参考:
PS:小于2.16还需要检查$ctx:xxx删除
由于低版本(<2.10)的log4j2不支持log4j2.formatMsgNoLookups配置,设置后不会生效。
低版本除了升级版本、修改log4j2的类外,还可以通过简单的修改配置临时解决。
修复方法主要是指定日志不做转义,需要修改log4j2的Layout,即在%m %msg %message后加nolookups
修改前为
修改后为
如果有公网可以申请DNSLOG通过DNSLOG的解析记录验证,如果在内网无法访问公网可以启动rmi服务远程调起计算器【这里选择的是Tomcat的一个,可以根据自己的JDK版本选择】
参考: 《JDK 8u191之后的JNDI注入(RMI)》_公众号shadow sock7-CSDN博客
这里简单写个demo打印用户输入参数:
使用curl构造请求参数利用漏洞访问刚才启动的http服务
请求后可以看到应用日志中参数已经被转成了ELProcessor对象且计算器被运行了
按照修复方法进行修复后,重新运行应用:
重新执行curl,参数被原样打印:
处理日志信息的类:org.apache.logging.log4j.core.pattern.MessagePatternConverter在初始化时会判断nolookups参数:
在处理日志时,会根据noLookups判断是否处理$
2.10以后的版本也大致相同:
这个环境变量在2.15后被废弃了,默认是nolookups.
关于log4j漏洞修复解决方案及源码编译
最近log4j爆出重大漏洞,程序员要赶紧修复了!文末提供已经编译好的jar包。
建议最好修复到log4j-2.15.0-rc2版本,临时解决方案还是存在jndi漏洞。
打开log4j官网https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
发现官方网站给的是源码,没有jar包怎么办,这下在阿里云仓库找了rc2版本结果发现也是不能用的,于是自己就开始编译源码。
一.编译环境:
windows10
maven3.2.5(笔者采用此版本,建议大家maven版本不要超过3.6)
jdk8以及以上
需要jdk9或者jdk11,我采用jdk11(一定要有,主要是解决log4j-api-java9编译报错问题)。
二.编辑toolchains.xml文件,注意该文件位置在.m2目录下。
在toolchains.xml添加如下红框中内容,jdkHome修改自己本地的路径。
<toolchain> <type>jdk</type> <provides> <version>11</version> <vendor>sun</vendor> </provides> <configuration> <jdkHome>D:\\jdk\\jdk-11.0.13</jdkHome> </configuration> </toolchain>
三.切到log4j-2.15.0-rc2目录下
四.执行 mvn install -Dmaven.test.skip=true
五.等待编译结果,install成功后依赖就在本地仓库
六.最后分享一下log4j-2.15.0-rc2源码编译后的jar包链接:https://pan.baidu.com/s/1U5kqGZ-RKLSkmbDkOVGsIg,某度网盘分享给大家,提取码请大家在评论区回复。
你们的赞是我前进的动力。谢谢
以上是关于log4j2低版本jndi漏洞修复及测试的主要内容,如果未能解决你的问题,请参考以下文章
腾讯安全刚刚给出了Log4j2核弹级漏洞线上修复方案!紧急修复
漏洞复现Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)