介绍
反序列化漏洞,利用了后端服务的设计缺陷
序列化和反序列化
对象 =(序列化)》 字符串
对象 《(反序列化)= 字符串
序列化字符串构建
首先,理解下 对象 序列化后 是个 嘛玩意儿
上代码
<?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 请求 ,是不是就是一个一句话木马啦?
标签:xss,00,php,get,小弟,test,序列化,hello From: https://www.cnblogs.com/hxdyjx/p/18061665