浅析php反序列化漏洞

Posted CTFer的魔法棒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析php反序列化漏洞相关的知识,希望对你有一定的参考价值。


反序列化在很多语言中都比较常见,下面简单介绍php的反序列化漏洞(对象注入)。


            0x00.是什么

——what

php反序列化漏洞,又叫对象注入。

涉及到的是php中的两个函数:unsearialize()与serialize()。后者为将一个对象或者数组转换为字符串以便保存,前者则将尝试将字符串恢复为对象或者数组。

关于这个漏洞大家平时可能很少见,它的触发点主要是在代码审计中cms的session序列化与反序列化和ctf中相关反序列化字符串的构建。

执行方式是通过自动执行的魔术方法构造pop链,然后执行危险函数造成漏洞的产生。

            0x01.为什么

——why

总结了一下整个流程:

unserialize()函数的参数可控 =>  实例化类  => 魔术方法自动调用 => 危险函数执行


1.魔术方法

魔术方法,magic method。魔术方法有各自的属性,类、对象进行各种操作时会自动调用。

常见的魔术方法如下:

魔术方法 属性
__construct() 构造函数,实例化对类时自动调用
__destruct() 析构函数,销毁对象时自动调用
__sleep() 序列化对象时自动调用
__wakeup() 反序列化对象时自动调用
__toString() echo输出对象时自动调用


2.构造payload

定义一个测试类如下:


浅析php反序列化漏洞


构造payload方法1:


浅析php反序列化漏洞


构造payload方法2(推荐):


浅析php反序列化漏洞


3.口算payload

示例:


浅析php反序列化漏洞


            0x02.怎么做

——how

1.一些值得看一看的例子

cms漏洞:


浅析php反序列化漏洞


ctf题目:


浅析php反序列化漏洞


2.CVE-2016-7124

序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

例子:


浅析php反序列化漏洞


3.Session反序列化

session.serialize_handler(php反序列化处理器):


浅析php反序列化漏洞


使用方法:


浅析php反序列化漏洞


关于这部分,有如下参考:




整个流程为:

反序列化与序列化处理器不同 => 
使用php_serialize处理器序列化,值中含有| => 
使用php处理器反序列化,格式为”键名|serialize()处理后的值” => 
|前解析为键名,|后进行反序列化

          0x03.其他



本文转载自grt1st的博客
点击“阅读全文”,查看详情



以上是关于浅析php反序列化漏洞的主要内容,如果未能解决你的问题,请参考以下文章

对于[php反序列化长度变化尾部字符串逃逸]浅显看法

对于[php反序列化长度变化尾部字符串逃逸]浅显看法

浅析phar反序列化漏洞攻击及实战

浅析phar反序列化漏洞攻击及实战

php代码审计9审计反序列化漏洞

Web漏洞知识浅析