一、Java中API實現(xiàn)
二、序列化理解
- 序列化(Serialization):將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程。在序列化期間,對象將其當(dāng)前狀態(tài)寫入到臨時或持久性存儲區(qū)。
- 反序列化:從存儲區(qū)中讀取該數(shù)據(jù),并將其還原為對象的過程,成為反序列化。
三、案例演示
3.1、本地
1、主函數(shù):
- 調(diào)用序列化方法
- 將反序列化的的結(jié)果返回給person變量
- 輸出person變量
2、序列化方法:
- 創(chuàng)建一個person的對象
- 創(chuàng)建一個文件輸出流(指向person.txt的文件),命名為oos
- 將person對象的寫入到文件輸出流中
3、反序列化方法:
- 創(chuàng)建一個文件輸入流(指向person.txt的文件),命名為ois
- 從到文件輸入流中讀取person對象的信息
- 返回person對象(直接顯示會亂碼,一般用base64加密輸出)
4、運行結(jié)果:
3.2、Java 反序列化及命令執(zhí)行代碼測試
1、源代碼分析:
- 使用exec方法執(zhí)行字符串命令并返回一個process對象
- 獲取命令(process)的輸入流給reader對象
- 讀取輸入流的內(nèi)容,打印輸出(反序列化)
2、運行結(jié)果:
3.3、WebGoat_Javaweb 靶場反序列化測試
1、啟動靶場:
2、進入靶場:
3、理論分析:
- 輸入框內(nèi)接受序列化的對象,并且將它反序列化(更改序列化的對象,將頁面延遲5秒)
4、源代碼分析:
- 使用IDEA打開jar文件(https://www.cnblogs.com/liaowenhui/p/17353156.html)
- 可以使用解壓軟件打開,再找到對應(yīng)的jar文件解壓出來后再使用IDEA打開。
-
接受參數(shù),base64解密,反序列化讀取,返回讀取的對象
-
獲取輸出流,賦值給一個對象,然后寫入輸出流(序列化),返回base64編碼
-
這里存在命令執(zhí)行(在調(diào)用讀取輸入流的時候,也就是讀取反序列化的數(shù)據(jù),并且把它當(dāng)做命令執(zhí)行)
5、漏洞分析:這里會將反序列化的數(shù)據(jù)進行讀取,再進行命令執(zhí)行。
-
rO0ABXQAVklmIHlvdSBkZXNlcmlhbGl6ZSBtZSBkb3duLCBJIHNoYWxsIGJlY29tZSBtb3JlIHBvd2VyZnVsIHRoYW4geW91IGNhbiBwb3NzaWJseSBpbWFnaW5l
是序列化后加密形成 - 序列化標(biāo)志參考(可以確定是base64加密),因此要攻擊,要如何構(gòu)造payload?考慮對方的回顯?==》反彈shell(解決回顯)
- 思路:要執(zhí)行ipconfig =》序列化 =》base64加密 =》rO0AB格式字符串 =》payload
#補充知識點
下方的特征可以作為序列化的標(biāo)志參考:
一段數(shù)據(jù)以rO0AB開頭,你基本可以確定這串就是JAVA序列化base64加密的數(shù)據(jù)。
或者如果以aced開頭,那么他就是這一段java序列化的16進制。|
6、 使用工具將命令構(gòu)造成序列化語句
- 命令分析
- 生成組件,打開本地的計算器,保存到payload.bin文件中
- 為什么要保存?還要進行base64加密
java -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;
ysoserial-master-30099844c6-1.jar
ysoserial.GeneratePayload Hibernate1 calc.exe > payload.bin
- 如何判斷組件
- 看工具的組建在源代碼內(nèi)是否出現(xiàn)過
- 這里源代碼出現(xiàn)了組件
java -jar ysoserial-all.jar
- 生成payload:
java -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;ysoserial-master-8eb5cbfbf6-1.jar ysoserial.GeneratePayload Hibernate1 calc.exe > payload.bin
-
生成了payload,利用Python程序base64加密
-
將加密后文本的代碼復(fù)制到反序列化窗口,發(fā)現(xiàn)本地的計算器被打開。文章來源:http://www.zghlxwxcb.cn/news/detail-822645.html
3.4、2020-網(wǎng)鼎杯-朱雀組-Web-think_java 真題復(fù)現(xiàn)
https://blog.csdn.net/qq_36585338/article/details/128121566文章來源地址http://www.zghlxwxcb.cn/news/detail-822645.html
四、涉及資源
- https://github.com/frohoff/ysoserial/releases
- https://github.com/WebGoat/WebGoat/releases
- https://github.com/NickstaDB/SerializationDumper/releases/tag/1.12
到了這里,關(guān)于38-WEB漏洞-反序列化之PHP&JAVA全解(下)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!