unserialize反序列化漏洞
什么是类?
具有相同特性_(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类
的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对
象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和
实现该操作的方法来描述。
什么是对象?
对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态
对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体
中。对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或
事件。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,
对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体
中
什么叫序列化 将对象数据/文本 变成二进制数据流 存在内存里
什么叫反序列化 将二进制数据流转化为数据/文本 对象 方便理解
对象在程序运行时,是内存中的一项数据,当我们的程序运行结束之后,对象就会被回收,回收完毕,对象也就没有了
通过序列化将对象的存储状态,进而变成一个具体的数据,落盘存储。
序列化
反序列化
反序列化漏洞的成因
serialize unserialize
程序没问题 根本问题在于反序列化内容可控 如果配置不当 可能会造成恶意payload植入
A : abcd -》序列化后
B:反序列的操作 值 来达到影响反序列后的内容
$miss = $_REQUEST[8];
$shell =unserialize($miss),
$shell----> getshell
通过反序列化进行RCE
PHP没有内存马!!! 只有不死马 通过循环写入
JAVA内存马
反序列化漏洞本质上serialize()和unserialize()在PHP内部实现上是没有漏洞的,漏洞的主要产生是由于应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的。
当传给 unserialize()的参数可控时,那么用户就可以注入精心构造的payload。当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害。
php中有一类特殊的方法叫“Magic function’(魔术方法),
类的声明函数,默认被调用,当定义函数中出现高危操作时,就可以在反序列时完成攻击操作
_tostring() 方法,用以一个类被当作字符串时调用
_construct() 当对象进行创建时被调用
_destruct() 当对象销毁时被调用
_wakeup(): 当进行反序列化时被调用