PHP反序列化漏洞

2021-09-20 08:57:45 字數 2188 閱讀 1376

【序列化簡單利用】 

serialize() 序列化:使用函式serialize()可將例項序列化為字串

unserialize() 反序列化:使用函式unserialize()可將序列化的字串還原

**示例:

<?php 

class

example

}unserialize($_get[

'code

']);

?>

漏洞利用:

構造漏洞利用的**,儲存為test.php,獲取序列化值為  o:7:"example":1:

<?php 

class

example

}$a=new

example();

echo serialize($a);

?>

提交?code=o:7:"example":1:  即可執行phpinfo()

【php session反序列化】

主要原因是: ini_set(『session.serialize_handler』, 『php_serialize』);

ini_set(『session.serialize_handler』, 『php』);

兩者處理session的方式不同

<?php 

ini_set(

'session.serialize_handler

','php_serialize');

//ini_set('session.serialize_handler','php');

session_start();

$_session[

"test

"]=$_get["a"

];?>

//提交?a=1111

輸出結果:

php_serialize: a:1:

php: test|s:4:"1111";

如果在php在反序列化儲存的$_session資料時使用的引擎和序列化使用的引擎不一樣,會導致資料無法正確第反序列化。通過精心構造的資料報,就可以繞過程式的驗證或者是執行一些系統的方法

**示例:

新建test1.php

<?php 

ini_set(

'session.serialize_handler

', '

php'

);session_start();

class

test

function __destruct()

}?>

新建test2.php

<?php 

ini_set(

'session.serialize_handler

', '

php_serialize');

session_start();

$_session[

"test

"]=$_get["a"

];?>

漏洞利用:

構造利用**

<?php 

class

test

function __destruct()

}$a=new

test();

echo serialize($a);

?>

獲取反序列化字串:o:4:"test":1:

步驟一:提交test2.php?a=|o:4:"test":1:,

傳入的資料會按照php_serialize來進行序列化:a:1:";}

步驟二:然後再訪問成功執行phpinfo()

此時訪問test1.php,應用程式會按照php來反序列化session中的資料,此時就會反序列化偽造的資料,php引擎會以|作為作為key和value的分隔符,那麼就會將a:1:";}作為value,然後進行反序列化,最後就會就會例項化test物件,最後就會執行析構函式中的eval()方法。

php反序列漏洞 例項 PHP反序列化漏洞

雖然胳膊廢了,也不能停止我更新的腳步。寫個簡單點的吧 0x00 何為類和物件 說到序列化和反序列化就不得不提到兩個詞 類和物件 那麼什麼是類,什麼是物件 教科書式的答案是類是物件的抽象,物件是類的例項 那啥叫個抽象,啥叫個例項呢 簡單的說,類就是物件的乙個標準模板,而物件就是按照模板做出來的實物 一...

PHP反序列化漏洞

前幾天安恆月賽兩道web題中有一道題是關於php反序列化的,然後剛好前幾天剛好看過這個知識點,於是乎這次比賽才沒有爆零,總算是寫出來了一道題 doge 所有php裡面的值都可以使用函式serialize 來返回乙個包含位元組流的字串來表示。unserialize 函式能夠重新把字串變回php原來的值...

php反序列化漏洞

序列化函式 serialize,反序列化函式 unserialize,例 class test test new test var dump serialize test 輸出如下 string 84 o 4 test 3 其中 o 代表資料型別是物件object,4 代表該物件名有4個字元,tes...