日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(38)【JAVA反序列化漏洞】简介、原理、工具、环境、靶场、思路

發布時間:2024/3/26 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (38)【JAVA反序列化漏洞】简介、原理、工具、环境、靶场、思路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、簡介:

二、原理:

2.1、Java對象:

2.2、Java 序列化:

2.3、Java 反序列化:

三、函數:

四、工具:

4.1、ysoserial 0.0.4版

4.2、 payload生成器

4.2.1、介紹:?

4.3、提示:

五、準備:

5.1、WebGoat

5.2、 環境變量的配置:

5.2.1、方法一:手工配置

5.2.2、方法二:工具配置

5.2.3、JDK的配置:

5.2.4、JRE的生成:

5.3、錯誤+安裝

六、WebGoat

6.1、分析:

6.2、插件

?6.2.1、Java Deserialization Scanner

6.3、漏洞利用:

6.3.1、大體思路:

6.3.2、具體思路


????????

(大家都在學習)?


一、簡介:

序列化也就是將數據拆成一小塊小塊保存到文件中(每塊設置編號),反序列化就是重現組合起來

(1)序列化就是將數據轉化成一種可逆的字符串(利于存儲或者傳輸),字符串還原原來結構的過程叫做反序列化

(2)序列化后,方便保存和傳輸(保留成員變量,不保留函數方法)

(3)數據(對象)--------序列化---------->字符串-----------反序列化-------->數據(對象)


二、原理:

2.1、Java對象:

①多種方式來創建對象,沒被回收都可復用此對象(存在于JVM中的堆heap內存中),當JVM處于運行狀態,對象就存在;反之,對象就不存在。

②在真實的環境中,通過序列化,實現在JVM中的對象和字節數組流之間轉換,實現將這些對象持久化保存下來,在需要的時候再使用。

2.2、Java 序列化:

完整性+可傳遞性

①將對象轉換為字符串等字節數組流過程(保存屬性狀態,不保存對象中的方法),從而實現對象持久化,以便傳輸(可移植性)或保存在本地文件中,將序列化對象寫入文件之后,可從文件中讀取,并且進行反序列化。

2.3、Java 反序列化:

將一個對象的字節序列(字符串)中保存的對象狀態及描述信息,通過反序列化,恢復成 Java 對象的過程(重建)


三、函數:

序列化:ObjectOutputStream類–> writeObject()(寫入)

反序列化:ObjectInputStream類 -->readObject() (讀取)

Serializable(接口) :(序列化與反序列化的類必須使用)一個標志性接口,標識在 JVM 中進行序列化,為該類自動生成一個序列化版本號。

serialVersionUID(類屬性):序列化版本號(默認提供),給 JVM 區別同名類。

transient(關鍵字):不希望特定屬性參與序列化,使用這個關鍵字標注該屬性。


?

四、工具:

4.1、ysoserial 0.0.4版

(現在最新的是0.0.6)

鏈接:https://pan.baidu.com/s/18q2ruwCFGI1vMvl9j7lT3w?pwd=hj12?
提取碼:hj12

4.2、 payload生成器

angelwhu/ysoserial: A proof-of-concept tool for generating payloads that exploit unsafe Java object deserialization. (github.com)https://github.com/angelwhu/ysoserial

frohoff/ysoserial: A proof-of-concept tool for generating payloads that exploit unsafe Java object deserialization. (github.com)https://github.com/frohoff/ysoserial

4.2.1、介紹:?

ysoserial payload是創建了一個URLStreamHandler的子類:SilentURLStreamHandler

SilentURLStreamHandler重寫了getHostAddress(URL u),屏蔽了返回值,因此在生成payload的時候、也就是序列化的時候,不會觸發dns查詢。

4.3、提示:

?上上述文件需要經過Maven編譯,或者Gradle編譯(Gradle更簡單,以后應該會超過Maven)成.jar文件,后才能使用

【Maven使用】IDEA使用Maven進行文件打包+命令含義+錯誤分析https://blog.csdn.net/qq_53079406/article/details/124322125?spm=1001.2014.3001.5501

【Gradle】問題解析+下載安裝+環境配置+驗證安裝https://blog.csdn.net/qq_53079406/article/details/124312186?spm=1001.2014.3001.5502

IntelliJ IDEA中也包含Maven、Gradle

(里面也可以配置自己的maven、Gradle)

官網:

IntelliJ IDEA:JetBrains 功能強大、符合人體工程學的 Java IDEhttps://www.jetbrains.com/zh-cn/idea/

激活:?

網上有很多激活腳本(容易找到)


五、準備:

5.1、WebGoat

?鏈接:https://github.com/WebGoat/WebGoat/releases

5.2、 環境變量的配置:

5.2.1、方法一:手工配置

3分鐘復制粘貼配置java環境變量,驗證配置是否成功,java文件運行方法https://blog.csdn.net/qq_53079406/article/details/123482726?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165028109016780261979271%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165028109016780261979271&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-4-123482726.nonecase&utm_term=jdk&spm=1018.2226.3001.4450

5.2.2、方法二:工具配置

【jdk快速設置/切換工具】一鍵設置/切換、附帶插件鏈接、使用教程https://blog.csdn.net/qq_53079406/article/details/124252949?spm=1001.2014.3001.5501

5.2.3、JDK的配置:

【jdk快速設置/切換工具】一鍵設置/切換、附帶插件鏈接、使用教程https://blog.csdn.net/qq_53079406/article/details/124252949?spm=1001.2014.3001.5501

5.2.4、JRE的生成:

【高版本JRE生成】JRE版本不夠,生成JRE失敗,高版本JDK生成JRE過程https://blog.csdn.net/qq_53079406/article/details/124262183?spm=1001.2014.3001.5501

5.3、錯誤+安裝

全面的錯誤解決

【WebGoat安裝錯誤合集】WebGoat8.2.2每一步出現的錯誤整理,最后附帶正確的安裝教程https://blog.csdn.net/qq_53079406/article/details/124297362?spm=1001.2014.3001.5501


?

六、WebGoat

6.1、分析:

下面的輸入框存在反序列化的漏洞,我們要生成含有可執行代碼的序列化字符串,在輸入框提交,進行反序列化,從而執行我們構造的代碼,讓頁面延遲5s就完成題目了

以 rO0AB 開頭, JAVA 序列化 base64 加密的。

以 aced 開頭, java 序列化的 16 進制。

解碼看看

無任何有用信息

6.2、插件

?6.2.1、Java Deserialization Scanner

是一個Burp套件插件,用于檢測和利用Java Deserialization(java反序列化)漏洞

【JAVA反序列掃描工具】簡介、下載、安裝、使用https://blog.csdn.net/qq_53079406/article/details/124336323?spm=1001.2014.3001.5501這個工具的掃描,也得依靠我們對他進行配置文件ysoserial.jar

6.3、漏洞利用:

(由于僵持了好多天,我要去補充億多點知識點去了,先把思路放這里)

6.3.1、大體思路:

構造惡意語句----->序列化------>進行編碼------>最終的payload------>提交進去執行

6.3.2、具體思路

(前提:知道源碼)

第一步:

提交,抓包,找到數據包中包含的目錄(可能是發往反序列化函數的地方)

第二步:

在源碼里搜索,找到反序列化的位置

第三步:

分析解碼函數(即它的編碼方法)及其接口

第四步:

查看ysoserial支持的插件,對應查找WebGoat是否安裝了對應的.jar包(名含有core,與ysoserial支持的版本一致),并復制到ysoserial目錄下

第五步:

根據這個.jar包,利用ysoserial生成反序列化漏洞的payload,執行calc.exe,將payload保存在token.bin文件中

第六步:

采用python腳本對payload進行base64編碼(根據所使用的序列化編碼方法)

第七步:

在反序列化框提交構造的序列化字符串(觸發反序列化)

(前提:不知道源碼)

可以就要通過其他方法去分析到編碼方式、含有的.jar包

接口測試、回顯數據分析……

總結

以上是生活随笔為你收集整理的(38)【JAVA反序列化漏洞】简介、原理、工具、环境、靶场、思路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。