【序列化簡單利用】
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反序列化漏洞
序列化簡單利用 serialize 序列化 使用函式serialize 可將例項序列化為字串 unserialize 反序列化 使用函式unserialize 可將序列化的字串還原 示例 class example unserialize get code 漏洞利用 構造漏洞利用的 儲存為test....
PHP反序列化漏洞
前幾天安恆月賽兩道web題中有一道題是關於php反序列化的,然後剛好前幾天剛好看過這個知識點,於是乎這次比賽才沒有爆零,總算是寫出來了一道題 doge 所有php裡面的值都可以使用函式serialize 來返回乙個包含位元組流的字串來表示。unserialize 函式能夠重新把字串變回php原來的值...