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 )
 | 
先看下面的例子:
| 12
 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));
 
 | 
输出结果为:
| 12
 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漏洞