攻防世界-unserialize3


攻防世界-unserialize3

序列化和反序列化

序列化通俗來講就是將對象轉化為可以傳輸的字符串;

反序列化就是把那串可以傳輸的字符串再變回對象。

例子:

<?php
class chybeta{
        var $test = '123';
}
$class1 = new chybeta;    //這里就是創建啦一個新的對象
$class1_ser = serialize($class1);   //將這個對象進行字符串封裝,就是對其進行序列化
print_r($class1_ser);
?>

img

來解釋一下:O:7:"chybeta":1:{s:4:"test";s:3:"123";}

這里的O呢就是object對象的意思,數字7代表着對象的函數名有7個占位,然后就是對象名了

這個數字1表示對象里有一個變量,大括號里的s代表的是string類型還有一個i是int型

再使用反序列化函數,結果print為chybeta Object([test] => 123)

原文鏈接:https://blog.csdn.net/LTtiandd/article/details/99591998

魔法函數

在這里插入圖片描述

題目分析

訪問看到image-20210802102055048

明顯需要看出需要繞過__wakeup函數才行,?code表名使用GET方法傳參數__

code可能是XCTF類序列化再反序列化的結果

_wakeup()函數漏洞原理:當序列化字符串表示對象屬性個數的值大於真實個數的屬性時就會跳過__wakeup的執行。

所以將對象數改成1以上的值就可以,也就是XCTF后的2,表示的是類中的變量的個數。

payload: ?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

參考:(3條消息) 攻防世界-unserialize3_魔術函數,以及wakeup()函數的繞過_Kvein Fisher的博客-CSDN博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM