PHP内核层解析反序列化漏洞如何演变成长尾词?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4404个文字,预计阅读时间需要18分钟。
前言:在学习PHP的过程中,我发现有些PHP特性理解起来不太容易,例如PHP中的00截断、MD5漏洞、反序列化绕过、__wakeup等。我不想仅仅停留在表面现象的理解,而是想探究PHP内核底层是如何实现的。
前言
在学习PHP的过程中发现有些PHP特性的东西不好理解,如PHP中的00截断,MD5缺陷,反序列化绕过__wakeup等等。本人不想拘泥于表面现象的理解,想探究PHP内核到底是怎样做到的。
下面是将用CTF中常用的一个反序列化漏洞CVE-2016-7124(绕过魔法函数__wakeup)为例,将此次调试PHP内核的过程分享出来。包括从内核源码调试环境的搭建,序列化与反序列化内核源码分析到最后的漏洞分析整个部分。(推荐:PHP教程)
一、一个例子引发的思考
我们可以首先看本人写的小例子。
根据上图我们先介绍下PHP中的魔法函数:
我们先看下官方文档对几个常用魔法函数的介绍:
这里稍作总结,当一个类被初始化为实例时会调用__construct,当被销毁时会调用__destruct。
当一个类调用serialize进行序列化时会自动调用__sleep函数,当字符串要利用unserialize反序列化成一个类时会调用__wakeup函数。上述魔法函数如果存在都将会自动进行调用。不用自己手动进行显示调用。
本文共计4404个文字,预计阅读时间需要18分钟。
前言:在学习PHP的过程中,我发现有些PHP特性理解起来不太容易,例如PHP中的00截断、MD5漏洞、反序列化绕过、__wakeup等。我不想仅仅停留在表面现象的理解,而是想探究PHP内核底层是如何实现的。
前言
在学习PHP的过程中发现有些PHP特性的东西不好理解,如PHP中的00截断,MD5缺陷,反序列化绕过__wakeup等等。本人不想拘泥于表面现象的理解,想探究PHP内核到底是怎样做到的。
下面是将用CTF中常用的一个反序列化漏洞CVE-2016-7124(绕过魔法函数__wakeup)为例,将此次调试PHP内核的过程分享出来。包括从内核源码调试环境的搭建,序列化与反序列化内核源码分析到最后的漏洞分析整个部分。(推荐:PHP教程)
一、一个例子引发的思考
我们可以首先看本人写的小例子。
根据上图我们先介绍下PHP中的魔法函数:
我们先看下官方文档对几个常用魔法函数的介绍:
这里稍作总结,当一个类被初始化为实例时会调用__construct,当被销毁时会调用__destruct。
当一个类调用serialize进行序列化时会自动调用__sleep函数,当字符串要利用unserialize反序列化成一个类时会调用__wakeup函数。上述魔法函数如果存在都将会自动进行调用。不用自己手动进行显示调用。

