php原生類,PHP原生類反序列化

2021-10-25 21:22:18 字數 1553 閱讀 9720

在做bjdctf中的題目xss之光的時候遇到了php原生類的反序列化,以前沒有了解過,現在來學習一波。

基礎知識

首先還是來回顧一下序列化中的魔術方法,下面也將以此進行分類來進行研究。

當物件被建立的時候呼叫:__construct

當物件被銷毀的時候呼叫:__destruct

當物件被當作乙個字串使用時候呼叫(不僅僅是echo的時候,比如file_exists()判斷也會觸發):__tostring

序列化物件之前就呼叫此方法(其返回需要是乙個陣列):__sleep

反序列化恢復物件之前就呼叫此方法:__wakeup

當呼叫物件中不存在的方法會自動呼叫此方法:__call

看一下當前php本身內建類有:

$classes = get_declared_classes();

foreach ($classes as $class) {

$methods = get_class_methods($class);

foreach ($methods as $method) {

if (in_array($method, array(

『__destruct『,

『__tostring『,

『__wakeup『,

『__call『,

『__callstatic『,

『__get『,

『__set『,

『__isset『,

『__unset『,

『__invoke『,

『__set_state『

print $class . 『::『 . $method . "\n";

當然有些類不一定能夠進行反序列化,php中使用了zend_class_unserialize_deny來禁止一些類的反序列化,比如序列化directoryiterator的時候。

這裡要利用魔法方法 __tostring來實現xss,而__tostring中error 和 exception類 會造成xss  但是error只適於php7下造成xss,exception php5和php7都適用

用burp抓包發現是php5.6的,因此是exception。

於是先用下面的exp看看有沒有彈窗。

然後本題的exp:

$a = new exception("");

echo urlencode(serialize($a));

flag就在cookie和url上面

#實現惡意跳轉

感謝大佬!!!菜雞受教了

原文:

php原生類使用

類就是用 包著的 物件也可以說是函式,乙個大類包著多個物件 函式 看列子 宣告類的方法,我們用class來宣告我們的類.class 類名 注 這裡的 this是值當前的類 class test function age 引用類 new方法 all new test a all a 宣告a,因a沒有值...

php學習記錄六 原生php建立類

1 新建乙個類檔案ini class.php 2 在檔案裡建立個類,這裡我新建乙個查詢個人使用者資訊的類 類名為personal class personal or id result mysqli query link,query if result echo retjson 402,查詢使用者資...

關於如何利用php的原生類進行XSS

我們可以看到題目 給出了反序列化點,卻沒有給出pop鏈,這個時候就可以考慮到利用php的原生類進行xss 我們首先需要了解一下php序列化及其反序列化的魔術方法 tostring 當物件被當作乙個字串使用時候呼叫 不僅僅是echo的時候,比如file exists 判斷也會觸發 這裡主要講兩個php...