(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反序列化漏洞】简介、原理、工具、环境、靶场、思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python车牌识别系统抬杆_小区车牌识
- 下一篇: CC2541 自定义按键