pikachu PHP反序列化

2022-08-29 06:18:13 字數 1586 閱讀 3876

概述

在理解這個漏洞前,你需要先搞清楚php中serialize(),unserialize()這兩個函式。

序列化serialize()

序列化說通俗點就是把乙個物件變成可以傳輸的字串,比如下面是乙個物件:

class s

$s=new s(); //建立乙個物件

serialize($s); //把這個物件進行序列化

序列化後得到的結果是這個樣子的:o:1:"s":1:

o:代表object

1:代表物件名字長度為乙個字元

s:物件的名稱

1:代表物件裡面有乙個變數

s:資料型別

4:變數名稱的長度

test:變數名稱

s:資料型別

7:變數值的長度

pikachu:變數值

反序列化unserialize()

就是把被序列化的字串還原為物件,然後在接下來的**中繼續使用。

$u=unserialize("o:1:"s":1:");

echo $u->test; //得到的結果為pikachu

序列化和反序列化本身沒有問題,但是如果反序列化的內容是使用者可以控制的,且後台不正當的使用了php中的魔法函式,就會導致安全問題

常見的幾個魔法函式:

__construct()當乙個物件建立時被呼叫

__destruct()當乙個物件銷毀時被呼叫

__tostring()當乙個物件被當作乙個字串使用

__sleep() 在物件在被序列化之前執行

__wakeup將在序列化之後立即被呼叫

漏洞舉例:

class s

}$s = $_get['test'];

@$unser = unserialize($a);

payload:o:1:"s":1:

接下來我們可以進行簡單的測試

首先我們可以看一下pikachu有個介面可以接受乙個反序列化的物件

下面是它的後端**

我們可以利用相似的**生成乙個反序列化的字串

比如說`<?php

class s

echo '

';$a = new s();

echo serialize($a);

?>反序列化 !( 我們可以將payload通過pikachu平台的對應視窗提交一下o:1:"s":1:`

這樣我們可以正常的彈窗

如果攻擊者把自己的攻擊**放入期中,那樣很容易攻擊成功。

pikachu PHP反序列化

序列化serialize 序列化說通俗點就是把乙個物件變成可以傳輸的字串,比如下面是乙個物件 class s s new s 建立乙個物件 serialize s 把這個物件進行序列化 序列化後得到的結果是這個樣子的 o 1 s 1 o 代表object 1 代表物件名字長度為乙個字元 s 物件的名...

序列化反序列化

只要用到網路開發啊,就一定會用到序列化反序列化。1,自定義結構體 struct test int len int type char data 10 test data test buffer.缺點 明文,只支援基本型別,不支援變長結構 2,在1的基礎上,自定義乙個緩衝類,存放乙個訊息。把訊息寫入緩...

序列化反序列化

using system using system.collections.generic using system.io using system.linq using system.text using system.threading.tasks namespace 序列化反序列化 syste...