反序列化型別CTF題目總結

2021-10-10 20:39:51 字數 2652 閱讀 1177

主頁是一段php**,審計:

有file_get_content(),可以利用偽協議寫入『welcome to the zjctf '過判斷;

同時看到提示有useless.php ,可以利用include()讀一下檔案

構造payload:

?text=data:text/plain,welcome%20to%20the%20zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php

得到base64原始碼:

解碼審計:

<?php 

class

flag}}

?>

構造序列化:

$a

=new

flag()

;$a->

file

='flag.php'

;echo

serialize($a

);

得到最終payload:

?text=data:text/plain,welcome%20to%20the%20zjctf&file=useless.php&password=o:4:「flag」:1:

結果在原始碼裡

題目上來給原始碼,審:

<?php 

include

("flag.php");

highlight_file

(__file__);

class

filehandler

public

function

process()

elseif(

$this

->

op==

"2")

else

}private

function

write()

$res

=file_put_contents

($this

->

filename

,$this

->

content);

if($res

)$this

->

output

("successful!");

else

$this

->

output

("failed!");

}else

}private

function

read()

return

$res;}

private

function

output($s

)function

__destruct()

}function

is_valid($s

)if(isset

($_get))

}

讀原始碼後可以發現,題目獲取乙個引數str,如果符合規則函式is_valid,則進行反序列化操作,所以題目考點就是兩個,乙個是繞過is_valid驗證方法,乙個是利用反序列化執行命令或讀取檔案獲得flag。

再看反序列化方法:

function

__destruct()

首先對比了op字元,如果為2,則op改為為1,再執行process方法。

public

function

process()

elseif(

$this

->

op==

"2")

else

}

process方法在op等於2時,讀取filename檔案的內容並輸出。這裡還考察了=== 和 ==的區別,乙個是強型別比較,乙個是弱型別比較。

明白邏輯後,構造payload:

<?php 

class

filehandler

$file

=new

filehandler()

;$file

-> op =2;

$file

-> filename =

"flag.php"

;$file

-> content ="";

echo

serialize

($file);

?>

flag在原始碼裡:

CTF中的序列化與反序列化

記一些ctf出現的序列化與反序列化的知識點和題目。序列化和反序列化的概念 序列化就是將物件轉換成字串。字串包括 屬性名 屬性值 屬性型別和該物件對應的類名。反序列化則相反將字串重新恢復成物件。物件的序列化利於物件的儲存和傳輸,也可以讓多個檔案共享物件。序列化中常見的魔法函式 construct 建立...

CTF中的序列化與反序列化

學習於 序列化就是將物件轉換成字串。字串包括 屬性名 屬性值 屬性型別和該物件對應的類名。反序列化則相反將字串重新恢復成物件。物件的序列化利於物件的儲存和傳輸,也可以讓多個檔案共享物件。construct 建立物件時呼叫 destruct 銷毀物件時呼叫 tostring 當乙個物件被當作乙個字串使...

C 匿名型別序列化 反序列化

現在提倡前後端分離,分離後服務全部採用介面的方式給前端提供服務,當我們處理自定義查詢時必定會多表查詢,而處理多表查詢時我們又懶的去建view model,建的過多專案也凌亂的很,所以在dao層處理自定義查詢時採用匿名型別返回json。listodata new list odata.add new ...