class testClass{
public $var= 10;
public $var2 = 20;
};
$pwn = new testClass();
> O:9:"testClass":2:{s:3:"var";i:10;s:4:"var2";i:20;}
26.
class testClass{
public $var= 10;
public $var2 = 20;
};
$pwn = new testClass();
> O:9:"testClass":2:{s:3:"var";i:10;s:4:"var2";i:20;}
クラス名
オブジェクトの要素数
(ここでは変数の数)
変数名 値
27.
class testClass{
public $var= 10;
public $var2 = 20;
public function foo() {} //メンバ関数を追加してシリアライズ
};
$pwn = new testClass();
28.
class testClass{
public $var= 10;
public $var2 = 20;
public function foo() {} //メンバ関数を追加してシリアライズ
};
$pwn = new testClass();
> O:9:"testClass":2:{s:3:"var";i:10;s:4:"var2";i:20;}
29.
class testClass{
public $var= 10;
public $var2 = 20;
public function foo() {} //メンバ関数を追加してシリアライズ
};
$pwn = new testClass();
> O:9:"testClass":2:{s:3:"var";i:10;s:4:"var2";i:20;}
クラス名 その中のすべての変数の値
30.
class testClass{
public $var= 10;
private $var2 = 20; //アクセス修飾子privateを追加してシリアライズ
protected $var3 = 30; //アクセス修飾子protectedを追加してシリアライズ
};
$pwn = new testClass();
31.
class testClass{
public $var= 10;
private $var2 = 20; //アクセス修飾子privateを追加してシリアライズ
protected $var3 = 30; //アクセス修飾子protectedを追加してシリアライズ
};
$pwn = new testClass();
> O:9:"testClass":3:{s:3:"var";i:10;s:15:"0testClass0var2";i:20;s:7:"0*0var3";i:30;}
おぉ・・・長い長い・・・
32.
class testClass{
public $var= 10;
private $var2 = 20; //アクセス修飾子privateを追加してシリアライズ
protected $var3 = 30; //アクセス修飾子protectedを追加してシリアライズ
};
$pwn = new testClass();
> O:9:"testClass":3:{s:3:"var";i:10;s:15:"0testClass0var2";i:20;s:7:"0*0var3";i:30;}
private は
[NULL]クラス名[NULL]変数名
33.
class testClass{
public $var= 10;
private $var2 = 20; //アクセス修飾子privateを追加してシリアライズ
protected $var3 = 30; //アクセス修飾子protectedを追加してシリアライズ
};
$pwn = new testClass();
> O:9:"testClass":3:{s:3:"var";i:10;s:15:"0testClass0var2";i:20;s:7:"0*0var3";i:30;}
protected は
[NULL]アスタリスク[NULL]変数名
POP Chainを利用した他のテクニックをさらっと紹介!
注入したオブジェクトのメンバー変数にさらにオブジェクトを注入する。
class Alpha{
private $beta;
function __construct() {
$this->beta = new Beta();
}
function __destruct() {
$this->beta->flag();
}
}
class Beta {
function flag() {
echo "invoked Beta flag";
}
}
class Gamma {
function flag() {
echo "invoked Gamma flag";
}
}
79.
O:5:"Alpha":1:{s:11:"0Alpha0beta";O:4:"Beta":0:{}}
> invoked Betaflag
POP Chainを利用した他のテクニックをさらっと紹介!
注入したオブジェクトのメンバー変数にさらにオブジェクトを注入する。
class Alpha {
private $beta;
function __construct() {
$this->beta = new Beta();
}
function __destruct() {
$this->beta->flag();
}
}
class Beta {
function flag() {
echo "invoked Beta flag";
}
}
class Gamma {
function flag() {
echo "invoked Gamma flag";
}
}
80.
O:5:"Alpha":1:{s:11:"0Alpha0beta";O:5:“Gamma":0:{}}
> invoked Gammaflag
ALphaクラスでは本来使用されていないGammaクラスを呼び出
せた。
POP Chainを利用した他のテクニックをさらっと紹介!
注入したオブジェクトのメンバー変数にさらにオブジェクトを注入する。
class Alpha {
private $beta;
function __construct() {
$this->beta = new Beta();
}
function __destruct() {
$this->beta->flag();
}
}
class Beta {
function flag() {
echo "invoked Beta flag";
}
}
class Gamma {
function flag() {
echo "invoked Gamma flag";
}
}