PHP反序列化漏洞
https://www.cnblogs.com/youyoui/p/8610068.html
一、PHP反序列化漏洞原理
PHP反序列化漏洞:CVE-2016-7124,PHP5 < 5.6.25, PHP7 < 7.0.10 的版本存在wakeup的漏洞,执行unserialize()时,先会调用__wakeup()。
当序列化字符串中属性值个数大于属性个数,就会导致反序列化异常,从而跳过__wakeup()函数的执行。
二、反序列化的例子与格式
序列化格式
在PHP中,序列化用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构。
序列化函数原型如下:
1
| string serialize ( mixed $value )
|
先看下面的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class CC { public $data; private $pass;
public function __construct($data, $pass) { $this->data = $data; $this->pass = $pass; } } $number = 34; $str = 'uusama'; $bool = true; $null = NULL; $arr_int = array(1,2); $arr = array('a' => 1, 'b' => 2); $cc = new CC('uu', true);
var_dump(serialize($number)); var_dump(serialize($str)); var_dump(serialize($bool)); var_dump(serialize($null)); var_dump(serialize($arr_int)); var_dump(serialize($arr)); var_dump(serialize($cc));
|
输出结果为:
1 2 3 4 5 6 7
| string(5) "i:34;" string(13) "s:6:"uusama";" string(4) "b:1;" string(2) "N;" string(22) "a:2:{i:0;i:1;i:1;i:2;}" string(30) "a:2:{s:1:"a";i:1;s:1:"b";i:2;}" string(52) "O:2:"CC":2:{s:4:"data";s:2:"uu";s:8:" CC pass";b:1;}"
|
所以序列化对于不同类型得到的字符串格式为:
String
: s:size:value;
Integer
: i:value;
Boolean
: b:value;(保存1或0)
Null
: N;
Array
: a:size:{key definition;value definition;(repeated per element)}
Object
: O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}
上一篇:文件包含漏洞
下一篇:SSRF漏洞