介紹
反序列化漏洞,利用了後端服務的設計缺陷
序列化和反序列化
物件 =(序列化)》 字串
物件 《(反序列化)= 字串
序列化字串構建
首先,理解下 物件 序列化後 是個 嘛玩意兒
上程式碼
<?php
class test{
public $a = 'hello';
private $b = 'hello';
protected $c = 'hello';
public function displayVar() {
echo $this->a;
}
}
$hxdyjx = new test();
echo serialize($hxdyjx);
echo PHP_EOL;
echo urlencode(serialize($hxdyjx));
//O:4:"test":3:{s:1:"a";s:5:"hello";s:7:"%00test%00b";s:5:"hello";s:4:"%00*%00c";s:5:"hello";}
對照理解
名稱 | 意義 |
---|---|
O:4:"test":3:{} | 類 長度4 名稱test 有3個小弟 |
s:1:"a";s:5:"hello" | 一般的小弟 名字長度1 小弟叫a 小弟5cm長 銘文hello |
s:7:"%00test%00b";s:5:"hello"; | 大佬禁臠級小弟 名字長度7 小弟叫b(%00test%00 佔了6個位元組)小弟5cm長 銘文hello |
s:4:"%00*%00c";s:5:"hello"; | 受幫派保護的小弟 名字長度4 小弟叫c(%00*%00 佔了3個位元組)小弟5cm長 銘文hello |
反序列化漏洞示例
<?php
class test{
public $a = 'calc';
public function displayVar() {
eval($this->a);
}
}
//$get = new test();
//$get = serialize($get);
//echo $get;
$get = 'O:4:"test":1:{s:1:"a";s:13:"exec("calc");";}';
$b = unserialize($get);
$b->displayVar() ;
?>
這裡的'O:4:"test":1:{s:1:"a";s:13:"exec("calc");";}' 就是我構造的payload,如果是http 請求 ,是不是就是一個一句話木馬啦?