
分析一下
__construct:當使用 new 運算子創建一個類的實體時,構造方法將會自動呼叫
__destuct:在銷毀一個類之前執行執行 __wakeup,unserialize()` 會檢查是否存在一個`__wakeup()` 方法,如果存在,則會先呼叫 `__wakeup` 方法,預先準備物件需要的資源,

檢查變數var是否存在然后在base64解密 正則過濾了首字母為o或c,冒號,一個或多個數字,冒號,忽略大小寫 成功提示stop hacking,失敗反序列化var變數 程式結束會銷毀新建的Demo物件,觸發__destruct(),
這只要對Demo這個類進行序列化,base64加密之后,賦值給var變數進行get傳參就行了,
但是
1.反序列化時呼叫,__wakeup會把$file重置成index.php,
2.序列化開頭又字母O,這里被正則過濾了,
想想辦法
繞過__wakeup():
繞過__wakeup()是利用CVE-2016-7124漏洞,例如O:4:"Demo":2:{s:10:"\0Demo\0file";s:8:"fl4g.php";}(正常是O:4:"Demo":1:...),反序列化化時不會觸發__wakeup(), (就是只需要令序列化字串中標識變數數量的值大于實 際變數即可繞過__wakeup()函式),
繞過正則:
使用+可以繞過preg_match() 正則匹配這里匹配的是 O:4,我們用 O:+4 即可繞過,

構造payload

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/41038.html
標籤:其他
上一篇:網路協議筆記
