PHP反序列化漏洞

2022-02-20 21:13:12 字數 2188 閱讀 3279

【序列化簡單利用】 

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反序列化漏洞

序列化簡單利用 serialize 序列化 使用函式serialize 可將例項序列化為字串 unserialize 反序列化 使用函式unserialize 可將序列化的字串還原 示例 class example unserialize get code 漏洞利用 構造漏洞利用的 儲存為test....

PHP反序列化漏洞

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