在做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...