Web開發-JavaEE應用動態接口代理原生反序列化危險Invoke重寫方法利用鏈

知識點:
1、安全開發-JavaEE-動態代理&序列化&反序列化
2、安全開發-JavaEE-readObject&toString方法

一、演示案例-WEB開發-JavaEE-動態代理

動態代理

在這里插入圖片描述
代理模式Java當中最常用的設計模式之一。其特征是代理類與委托類有同樣的接口,代理類主要負責為委托類預處理消息、過濾消息、把消息轉發給委托類,以及事后處理消息等。而Java的代理機制分為靜態代理和動態代理,而這里我們主要重點學習java自帶的jdk動態代理機制

通俗來講這個動態代理可以理解為歌手的經紀人,明星本人只需要做好自己要做的事情(只負責好唱歌),假設有商務活動想邀請這個明星去唱歌,就會找歌手的經紀人(確認合同、確認金額、確認唱什么歌等等前置流程),一切確定后,歌手本人只需要去到現場唱歌即可,后續收演出費什么也都是經紀人去完成(后置流程)

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

1、創建接口及定義方法

在這里插入圖片描述

2、實現接口及定義方法操作

在這里插入圖片描述
在這里插入圖片描述

3、實現接口及重寫invoke方法

在這里插入圖片描述
在這里插入圖片描述

4、創建代理對象并調用方法

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

安全總結:利用條件分析&執行invoke

在這里插入圖片描述
在這里插入圖片描述

安全案例:Ysoserial-CC1鏈-LazyMap

在這里插入圖片描述
在這里插入圖片描述

二、演示案例-WEB開發-JavaEE-序列化&反序列化&利用鏈&危險方法&重寫方法

1、序列化與反序列化

在這里插入圖片描述
在這里插入圖片描述

序列化:將內存中的對象壓縮成字節流
反序列化:將字節流轉化成內存中的對象
序列化與反序列化其實就是對象與數據格式的轉換。

2、為什么有序列化技術

序列化與反序列化的設計就是用來傳輸數據的。
當兩個進程進行通信的時候,可以通過序列化反序列化來進行傳輸。
能夠實現數據的持久化,通過序列化可以把數據永久的保存在硬盤上,也可以理解為通過序列化將數據保存在文件中。

通俗來講就是你出國旅游,不可能跟外國人直接說中文,他聽不懂,這個時候就會借助翻譯器把中文翻譯成對方識別的語言,在把對方的語言翻譯成中文。這個翻譯的過程就是序列化和反序列化

應用場景:
(1) 想把內存中的對象保存到一個文件中或者是數據庫當中。
(2) 用套接字在網絡上傳輸對象。
(3) 通過RMI傳輸對象的時候。

3、常見的創建的序列化和反序列化協議

JAVA內置的writeObject()/readObject()
JAVA內置的XMLDecoder()/XMLEncoder
XStream
SnakeYaml
FastJson
Jackson

4、為什么會出現反序列化安全問題

JAVA內置的writeObject()/readObject()內置原生寫法分析:
writeObject():主要用于將 Java 對象序列化為字節流并寫入輸出流
readObject():主要用于從輸入流中讀取字節序列反序列化為 Java 對象
FileInputStream:其主要作用是從文件讀取字節數據
FileOutputStream:其主要作用是將字節數據寫入文件
ObjectInputStream:用于從輸入流中讀取對象,實現對象的反序列化操作
ObjectOutputStream:用于將對象并寫入輸出流的類,實現對象的序列化操作

序列化-writeObject()

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

反序列化-readObject()

在這里插入圖片描述
在這里插入圖片描述

利用看下面

1、看序列化的對象有沒有重寫readObject方法(方法里是否包含危險代碼)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
2、看序列化的對象有沒有被輸出就會調用toString方法(方法里是否包含危險代碼)
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
3、其他類的readObjecttoString方法(反序列化類對象可控)
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

5、反序列化利用鏈

(1) 入口類的readObject直接調用危險方法
(2) 入口參數中包含可控類,該類有危險方法,readObject時調用
(3) 入口類參數包含可控類,該類又調用其他有危險方法類,readObject調用
(4) 構造函數/靜態代碼塊等類加載時隱式執行

6、反序列化利用條件

1、可控的輸入變量進行了反序列化操作

你輸入的數據被網站接收并進行了反序列化操作

2、實現了Serializable或者Externalizable接口的類的對象

在這里插入圖片描述

3、能找到調用方法的危險代碼或間接的利用鏈引發(依賴鏈)

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

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

相關文章

K8s是常用命令和解釋

K8s高頻命令 獲取資源信息,如獲取 Pod、Service、Deployment等資源狀態信息 kubectl get創建資源如創建Pod、Service、Deployment等資源 kubectl create刪除資源,如刪除Pod、Service、Deployment等資源 kubectl delete 應用配置文件,如引用D…

【模態分解】EMD-經驗模態分解

算法配置頁面,也可以一鍵導出結果數據 報表自定義繪制 獲取和下載【PHM學習軟件PHM源碼】的方式 獲取方式:Docshttps://jcn362s9p4t8.feishu.cn/wiki/A0NXwPxY3ie1cGkOy08cru6vnvc

TDengine 語言連接器(Go)

簡介 driver-go 是 TDengine 的官方 Go 語言連接器,實現了 Go 語言 database/sql 包的接口。Go 開發人員可以通過它開發存取 TDengine 集群數據的應用軟件。 Go 版本兼容性 支持 Go 1.14 及以上版本。 支持的平臺 原生連接支持的平臺和 TDengine 客戶端驅動支持…

鏈接世界:計算機網絡的核心與前沿

計算機網絡引言 在數字化時代,計算機網絡已經成為我們日常生活和工作中不可或缺的基礎設施。從簡單的局域網(LAN)到全球互聯網,計算機網絡將數以億計的設備連接在一起,推動了信息交換、資源共享以及全球化的進程。 什…

AI agents系列之全面介紹

隨著大型語言模型(LLMs)的出現,人工智能(AI)取得了巨大的飛躍。這些強大的系統徹底改變了自然語言處理,但當它們與代理能力結合時,才真正釋放出潛力——能夠自主地推理、規劃和行動。這就是LLM代理大顯身手的地方,它們代表了我們與AI交互以及利用AI的方式的范式轉變。 …

如何使用AI輔助開發CSS3 - 通義靈碼功能全解析

一、引言 CSS3 作為最新的 CSS 標準,引入了眾多新特性,如彈性布局、網格布局等,極大地豐富了網頁樣式的設計能力。然而,CSS3 的樣式規則繁多,記憶所有規則對于開發者來說幾乎是不可能的任務。在實際開發中&#xff0c…

復刻系列-星穹鐵道 3.2 版本先行展示頁

復刻星穹鐵道 3.2 版本先行展示頁 0. 視頻 手搓~星穹鐵道~展示頁~~~ 1. 基本信息 作者: 啊是特嗷桃系列: 復刻系列官方的網站: 《崩壞:星穹鐵道》3.2版本「走過安眠地的花叢」專題展示頁現已上線復刻的網…

爬蟲:IP代理

什么是代理 代理服務器 代理服務器的作用 就是用來轉發請求和響應 在爬蟲中為何需要使用代理? 有些時候,需要對網站服務器發起高頻的請求,網站的服務器會檢測到這樣的異常現象,則會講請求對應機器的ip地址加入黑名單&#xff…

協程的原生掛起與恢復機制

目錄 🔍 一、從開發者視角看協程掛起與恢復 🧠 二、協程掛起和恢復的機制原理:核心關鍵詞 ? suspend 函數 ≠ 普通函數 ? Continuation(協程的控制器) 🔧 三、編譯器做了什么?&#xff0…

c++11--std::forwaord--完美轉發

std::forword的作用 完美轉發的核心目的是保持參數的原始類型(包括const/volatile限定符和左值/右值性質)不變地傳遞給其他函數。 為什么需要完美轉發 在沒有完美轉發之前,我們面臨以下問題: 模板參數傳遞中的值類別丟失 當參數…

Linux安裝開源版MQTT Broker——EMQX服務器環境從零到一的詳細搭建教程

零、EMQX各個版本的區別 EMQX各個版本的功能對比詳情https://docs.emqx.com/zh/emqx/latest/getting-started/feature-comparison.html

計算機組成原理-存儲器

1. 存儲器的定義與作用 存儲器是計算機系統中用于存儲程序、數據和中間結果的硬件設備,是計算機五大核心部件之一。 核心功能: 提供數據的 臨時或永久存儲 能力。支持CPU按需快速存取指令和數據,是程序運行的物理基礎。 2. 存儲器的分類 …

單片機領域中哈希表

以下是單片機領域中哈希表的實際應用及編程實例: 1.哈希表在單片機中的實際應用場景 ? 命令解析:在單片機通信中,經常需要解析接收到的命令。使用哈希表可以快速地將命令字符串映射到對應的處理函數,提高命令解析的效率。 ? 數…

算法思想之位運算(一)

歡迎拜訪:霧里看山-CSDN博客 本篇主題:算法思想之位運算(一) 發布時間:2025.4.12 隸屬專欄:算法 目錄 滑動窗口算法介紹六大基礎位運算符常用模板總結 例題位1的個數題目鏈接題目描述算法思路代碼實現 比特位計數題目鏈接題目描述…

封裝Tcp Socket

封裝Tcp Socket 0. 前言1. Socket.hpp2. 簡單的使用介紹 0. 前言 本文中用到的Log.hpp在筆者的歷史文章中都有涉及,這里就不再粘貼源碼了,學習地址如下:https://blog.csdn.net/weixin_73870552/article/details/145434855?spm1001.2014.3001…

全星APQP軟件:為用戶提供高效、合規、便捷的研發管理體驗

全星APQP軟件:為用戶提供高效、合規、便捷的研發管理體驗 為什么選擇全星APQP軟件系統? 在汽車及高端制造行業,研發項目管理涉及APQP(先期產品質量策劃)、FMEA(失效模式與影響分析)、CP&#x…

CTF--網站被黑

一、原題: (1)提示:網站被黑了 黑客會不會留下后門 (2)原網頁: 二、步驟: 1.在終端掃描網址: 2.掃描后發現:shell.php 3.輸入網址:http://117.…

入門到精通,C語言十大經典程序

以下是十個經典的C語言程序示例&#xff0c;這些程序涵蓋了從基礎到稍復雜的應用場景&#xff0c;適合初學者和有一定基礎的開發者學習和參考。 1. Hello, World! 這是每個初學者學習編程時的第一個程序&#xff0c;用于驗證開發環境是否正確配置。 #include <stdio.h>…

神經網絡入門—自定義神經網絡續集

修改網絡 神經網絡入門—自定義網絡-CSDN博客 修改數據集&#xff0c;yx^2 # 生成一些示例數據 x_train torch.tensor([[1.0], [2.0], [3.0], [4.0]], dtypetorch.float32) y_train torch.tensor([[1.0], [4.0], [9.0], [16.0]], dtypetorch.float32) 將預測代碼改為&…

【browser-use+deepseek】實現簡單的web-ui自動化

browser-use Web-UI 一、browser-use是什么 Browser Use 是一款開源Python庫&#xff0c;專為大語言模型設計的智能瀏覽器工具&#xff0c;目的是讓 AI 能夠像人類一樣自然地瀏覽和操作網頁。它支持多標簽頁管理、視覺識別、內容提取&#xff0c;并能記錄和重復執行特定動作。…