PHP反序列化漏洞
概念:
PHP序列化(函数为serialize
)是一种将复杂数据结构(如对象和数组)转换成字符串的过程,以便于存储或传递数据,但仅保留对象里的成员变量,不保留函数方法。
举例:
1 | $person = array( |
使用 serialize()
函数序列化这个数组后长这样。
1 | a:3:{s:4:"name";s:6:"张三";s:3:"age";i:30;s:10:"is_employee";b:1;} |
PHP反序列化标识符含义:
1 | a - array |
反序列化(函数为unserilize
)可以将序列化生成的字符串重新还原为对象中的成员属性。
原理:
反序列化漏洞的成因在于代码中的 unserialize() 接收的参数是可控的,函数的参数可以是一个序列化的对象,而序列化的对象只含有对象的属性,那我们就要利用对对象属性的篡改来使得一些魔术方法被调用进而实现最终的攻击。
以下是漏洞中可能遇到的魔法方法:
1 | __construct():具有构造函数的类会在每次创建新对象时先调用此方法。 |
例题
1 |
|
构造payload:
1 | class w44m |
绕过: