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

Java反序列化和PHP反序列化的區(qū)別

這篇具有很好參考價(jià)值的文章主要介紹了Java反序列化和PHP反序列化的區(qū)別。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


反序列化存在的意義是為了數(shù)據(jù)傳輸,類是無法直接進(jìn)行傳輸?shù)?。通過序列化后轉(zhuǎn)換為字符串格式或者JSON格式進(jìn)行傳輸。

序列化與反序列化

  • seriallization 序列化 : 將對象轉(zhuǎn)化為便于傳輸?shù)母袷剑?常見的序列化格式:二進(jìn)制格式,字節(jié)數(shù)組,json字符串,xml字符串。

  • deseriallization 反序列化:將序列化的數(shù)據(jù)恢復(fù)為對象的過程。

PHP反序列化漏洞

PHP反序列化

  • serialize()將對象序列化成字符串。

  • unserialize()將字符串反序列化回對象。

序列化

  • 對象轉(zhuǎn)換成字符串

  • 方便傳輸

反序列化

  • 字符串轉(zhuǎn)換成對象

  • O:object

<?php
    //創(chuàng)建類
    class Stu{
        public $name;
        public $age;
        public $sex;
    }
	
	//創(chuàng)建對象
    $stu1 = new Stu();
    $stu1->name = "wuhu";
    $stu1->age = 18;
    $stu1->sex = true;
    var_dump($stu1);
    echo "<hr />";
    echo serialize($stu1);

?>

Java反序列化和PHP反序列化的區(qū)別,Web漏洞原理,網(wǎng)絡(luò)安全,系統(tǒng)安全,安全,開發(fā)語言,java,php,反序列化

類中的魔術(shù)方法,在特定情況下會(huì)自動(dòng)調(diào)用。即使魔術(shù)方法在類中沒有被定義,也是真實(shí)存在的。

兩個(gè)下劃線:

  • __construct():在創(chuàng)建對象時(shí)自動(dòng)調(diào)用。
  • __destruct()::在銷毀對象時(shí)自動(dòng)調(diào)用。
  • __wakeup()unserialize()時(shí)會(huì)自動(dòng)調(diào)用這個(gè)函數(shù)。
  • __sleep()serialize()時(shí)會(huì)自動(dòng)調(diào)用這個(gè)函數(shù)。

以_開頭的函數(shù),是PHP中的魔術(shù)方法,是為了更快的響應(yīng)。__wakeup()和__sleep()方法在互聯(lián)網(wǎng)上會(huì)被頻繁調(diào)用。

反序列化漏洞不能通過黑盒測試來查找漏洞。只能通過白盒測試,也就是代碼審計(jì)。

反序列化漏洞攻擊者是不可控的,因?yàn)楣δ艽a全是開發(fā)者自己寫的。

<?php

    class animal{
        public $name;
        public $age;

        public function __sleep(){
            if(@$_GET['cmd']=="abc"){
                a();
            }
        }

    }

    $an1=new animal;

    $an1->name="dog";
    $an1->age=3;

    //var_dump($an1);

    @serialize($an1);

?>

Java反序列化和PHP反序列化的區(qū)別,Web漏洞原理,網(wǎng)絡(luò)安全,系統(tǒng)安全,安全,開發(fā)語言,java,php,反序列化

什么是反序列化漏洞?

序列化和反序列化本身是為了實(shí)現(xiàn)數(shù)據(jù)在網(wǎng)絡(luò)上完整高效的傳輸,但是由于反序列化過程中,對象的魔術(shù)方法會(huì)自動(dòng)調(diào)用,魔術(shù)方法本身調(diào)用了別的方法,最終呈現(xiàn)一種鏈?zhǔn)秸{(diào)用,直到執(zhí)行任意的代碼或者命令。并且危險(xiǎn)函數(shù)的參數(shù)可控

修改序列化后的數(shù)據(jù),目的是什么?

為了滿足一定的條件以后實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。

Java反序列化漏洞

序列化

ObjectOutputStream --> writeObject()

反序列化:

ObjectInputStream --> readObject() 

實(shí)驗(yàn)

Person類

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;

public class Person implements Serializable {
    public int age;
    public String name;

    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
        Runtime.getRuntime().exec("calc");
        // 默認(rèn)的反序列化操作
        in.defaultReadObject();
    }
}

注意:想讓某個(gè)類執(zhí)行序列化或者反序列化必須實(shí)現(xiàn)Serializable接口。

Test類

import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Person p=new Person();
        p.age=18;
        p.name="wuhu";
		
        //將Person這個(gè)類的對象序列化后存放到wuhu.bin文件中
        //沒有指定路徑就表示存放到當(dāng)前路徑中
        serialize(p,"wuhu.bin");


        System.out.println("反序列化結(jié)果:" + deserialize("xiu.bin"));
    }
	
    //序列化
    public static void serialize(Object obj, String filePath) throws IOException {
        try (FileOutputStream fileOut = new FileOutputStream(filePath);
             ObjectOutputStream objectOut = new ObjectOutputStream(fileOut)) {
            objectOut.writeObject(obj);
        }
    }
	
    //反序列化
    public static Object deserialize(String filePath) throws IOException, ClassNotFoundException {
        try (FileInputStream fileIn = new FileInputStream(filePath);
             ObjectInputStream objectIn = new ObjectInputStream(fileIn)) {
            return objectIn.readObject();
        }
    }
}

序列化后的字符串

Java反序列化和PHP反序列化的區(qū)別,Web漏洞原理,網(wǎng)絡(luò)安全,系統(tǒng)安全,安全,開發(fā)語言,java,php,反序列化

說明:不同的編程語言的序列化和反序列化后的數(shù)據(jù)格式不一樣。

那么漏洞點(diǎn)在哪里?

將Person類中的readObject方法注釋了執(zhí)行的時(shí)候,輸出結(jié)果就是輸出了反序列化后的結(jié)果。

Java反序列化和PHP反序列化的區(qū)別,Web漏洞原理,網(wǎng)絡(luò)安全,系統(tǒng)安全,安全,開發(fā)語言,java,php,反序列化

那么如果重寫readObject方法后,在方法中添加一個(gè)Runtime.getRuntime().exec("calc"); 這行代碼使用 Java 的 Runtime 類執(zhí)行操作系統(tǒng)命令,即在 Windows 系統(tǒng)上運(yùn)行計(jì)算器應(yīng)用程序(calc)。執(zhí)行結(jié)果如下:

Java反序列化和PHP反序列化的區(qū)別,Web漏洞原理,網(wǎng)絡(luò)安全,系統(tǒng)安全,安全,開發(fā)語言,java,php,反序列化

在實(shí)際的開發(fā)環(huán)境中,需要重寫readObject()方法,例如:從前端傳遞的值是base64編碼的,而系統(tǒng)的方法不識(shí)別base64,所以需要在重寫的readObject()方法中先解碼,將解碼完的對象再去調(diào)用系統(tǒng)的方法。

漏洞成因

Java反序列漏洞的成因是函數(shù)的鏈?zhǔn)秸{(diào)用,滿足鏈?zhǔn)秸{(diào)用的全部條件,并且參數(shù)可控制。以及重寫了readObject()方法,才能造成Java反序列漏洞。(條件苛刻)。當(dāng)然如果沒有重寫readObject()方法,執(zhí)行的就是系統(tǒng)的反序列化方法,也就沒有了反序列化漏洞了。

什么是反序列化漏洞?

PHP的反序列化和java的反序列化是兩種不同的類型,序列化和反序列化本身沒有漏洞點(diǎn),只是為了實(shí)現(xiàn)數(shù)據(jù)的完整高效的傳輸。

PHP反序列漏洞是由于類里面的魔術(shù)方法調(diào)用了某個(gè)函數(shù),該危險(xiǎn)函數(shù)又調(diào)用了別的函數(shù),最終執(zhí)行到了危險(xiǎn)函數(shù)的位置。

JAVA反序列化漏洞是由于開發(fā)者重寫了readObject方法,該readObject方法方法調(diào)用了別的方法,最終執(zhí)行到了例如Transfrom方法的危險(xiǎn)方法(鏈?zhǔn)秸{(diào)用)。

shiro :爆破密鑰,找尋CC利用鏈文章來源地址http://www.zghlxwxcb.cn/news/detail-732146.html

到了這里,關(guān)于Java反序列化和PHP反序列化的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 不安全的反序列化(php&java)及漏洞復(fù)現(xiàn)

    不安全的反序列化(php&java)及漏洞復(fù)現(xiàn)

    A8:2017-不安全的反序列化 A08:2021-Software and Data Integrity Failures 為什么要序列化? 序列化, 將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程 ,這種形式大多為字節(jié)流、字符串、json 串。在序列化期間內(nèi),將對象當(dāng)前狀態(tài)寫入到臨時(shí)或永久性的存儲(chǔ)區(qū)。以后,就可以通過從

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

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

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

    2024年02月09日
    瀏覽(30)
  • Day60:WEB攻防-PHP反序列化&POP鏈構(gòu)造&魔術(shù)方法流程&漏洞觸發(fā)條件&屬性修改

    Day60:WEB攻防-PHP反序列化&POP鏈構(gòu)造&魔術(shù)方法流程&漏洞觸發(fā)條件&屬性修改

    目錄 PHP-DEMO1-序列化和反序列化 序列化操作?- 即類型轉(zhuǎn)換 序列化案例 PHP-DEMO2-魔術(shù)方法觸發(fā)規(guī)則 __construct(): //當(dāng)對象new的時(shí)候會(huì)自動(dòng)調(diào)用 __destruct()://當(dāng)對象被銷毀時(shí)會(huì)被自動(dòng)調(diào)用 __sleep(): //serialize()執(zhí)行時(shí)被自動(dòng)調(diào)用 __wakeup(): //unserialize()時(shí)會(huì)被自動(dòng)調(diào)用 __invoke(): //把對象當(dāng)

    2024年04月27日
    瀏覽(41)
  • 反序列化漏洞(PHP)

    反序列化漏洞(PHP)

    0x01. 序列化和反序列化是什么 序列化:變量轉(zhuǎn)換為可保存或傳輸?shù)淖址倪^程; 反序列化:把序列化的字符串再轉(zhuǎn)化成原來的變量使用 作用:可輕松地存儲(chǔ)和傳輸數(shù)據(jù),使程序更具維護(hù)性 0x02. 為什么會(huì)有序列化 序列化用于存儲(chǔ)或傳遞 PHP 的值的過程中,同時(shí)不丟失其類型

    2024年02月06日
    瀏覽(19)
  • php反序列化漏洞基礎(chǔ)

    php反序列化漏洞基礎(chǔ)

    ????????序列化是將對象或類轉(zhuǎn)換為字符串的過程 ,以便在程序運(yùn)行過程中對其進(jìn)行持久化存儲(chǔ)或傳輸?shù)牟僮鳌T赑HP中,序列化主要用于將類對象或數(shù)組轉(zhuǎn)換成字節(jié)流的形式,以便于存儲(chǔ)在磁盤或傳輸?shù)狡渌到y(tǒng)。 ????????通過 序列化,可以將對象或類轉(zhuǎn)換成一串字

    2024年01月20日
    瀏覽(37)
  • 小迪安全47WEB 攻防-通用漏洞&Java 反序列化&EXP 生成&數(shù)據(jù)提取&組件安全

    小迪安全47WEB 攻防-通用漏洞&Java 反序列化&EXP 生成&數(shù)據(jù)提取&組件安全

    # 知識(shí)點(diǎn): 1 、 Java 反序列化演示 - 原生 API 接口 2 、 Java 反序列化漏洞利用 -Ysoserial 使用 3 、 Java 反序列化漏洞發(fā)現(xiàn)利用點(diǎn) - 函數(shù) 數(shù)據(jù) 4 、 Java 反序列化考點(diǎn) - 真實(shí) CTF 賽題 - 審計(jì)分析 # 內(nèi)容點(diǎn): 1 、明白 -Java 反序列化原理 2 、判斷 -Java 反序列化漏洞 3 、學(xué)會(huì) -Ysoserial 工具

    2024年04月10日
    瀏覽(59)
  • 反序列化漏洞及PHP魔法函數(shù)

    反序列化漏洞及PHP魔法函數(shù)

    目錄 1、漏洞原理 2、序列化(以PHP語言為例) 3、反序列化 4、PHP魔法函數(shù) (1)__wakeup() (2)__destruct() (3)__construct() (4)__toString() (5)__get() (6)__call() PHP反序列化漏洞也叫PHP對象注入,形成的原因是程序未對用戶輸入的序列化字符串進(jìn)行檢測,導(dǎo)致攻擊者可以控制反

    2024年02月04日
    瀏覽(35)
  • PHP反序列化漏洞之魔術(shù)方法

    PHP反序列化漏洞之魔術(shù)方法

    PHP魔術(shù)方法 (Magic Methods) 是一組特殊的方法,它們在特定的情況下會(huì)被自動(dòng)調(diào)用,用于實(shí)現(xiàn)對象的特殊行為或提供額外功能。這些方法的名稱都以雙下劃線開頭和結(jié)尾,例如: __construct() 、 __toString() 等。 魔術(shù)方法可以幫助我們實(shí)現(xiàn)一些特殊的行為,例如對象的初始化、屬性

    2024年02月16日
    瀏覽(29)
  • PHP反序列化漏洞-魔術(shù)方法繞過

    一、__wakeup()魔法函數(shù)繞過: 在PHP中,__wakeup()是一個(gè)魔術(shù)方法,用于在反序列化對象時(shí)自動(dòng)調(diào)用。 當(dāng)反序列化字符串中的對象屬性個(gè)數(shù)大于實(shí)際屬性個(gè)數(shù)時(shí) ,可以利用這個(gè)漏洞進(jìn)行繞過。 觸發(fā)條件: PHP版本為5.6.25或早期版本,或者PHP7版本小于7.0.10。 反序列化字符串中的對

    2024年01月18日
    瀏覽(47)
  • PHP反序列化漏洞-字符串逃逸

    字符串逃逸(閉合) 字符串逃逸(閉合)是一種在反序列化函數(shù)可控的情況下,通過修改序列化字符串中的敏感字符來達(dá)到字符串逃逸的方法。 具體而言,可以通過修改變量名等個(gè)數(shù),使得序列化字符串中的字符個(gè)數(shù)與實(shí)際變量值個(gè)數(shù)不一致 。由于反序列化機(jī)制要求字符串

    2024年01月20日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包