【序列化簡單利用】
serialize() 序列化:使用函式serialize()可將例項序列化為字串
unserialize() 反序列化:使用函式unserialize()可將序列化的字串還原
**示例:
<?php漏洞利用:class
example
}unserialize($_get[
'code
']);
?>
構造漏洞利用的**,儲存為test.php,獲取序列化值為 o:7:"example":1:
<?php提交?code=o:7:"example":1: 即可執行phpinfo()class
example
}$a=new
example();
echo serialize($a);
?>
【php session反序列化】
主要原因是: ini_set(『session.serialize_handler』, 『php_serialize』);
ini_set(『session.serialize_handler』, 『php』);
兩者處理session的方式不同
<?phpini_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
<?phpini_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獲取反序列化字串:o:4:"test":1:class
test
function __destruct()
}$a=new
test();
echo serialize($a);
?>
步驟一:提交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...