漏洞描述
PHP反序列化是发生在PHP程序中的一种安全漏洞,可以让攻击者执行恶意代码、窃取敏感信息或造成其他破坏。 在 PHP 中,序列化是一种将对象或数组转换为字符串的过程,以便进行传输和存储。然而,如果攻击者可以控制序列化的过程,他们就可以插入恶意数据到反序列化的过程中,进而破坏程序的正常行为。 例如,如果一个程序中存在一个反序列化的函数,攻击者可以发送一个恶意序列化字符串给这个函数,从而绕过正常的访问控制机制,执行一些不应该执行的代码。这种漏洞通常是由于开发者没有充分验证反序列化的输入造成的。
漏洞原理
序列化:将数据(如对象或数组)转化为字符串
攻击者可以通过控制序列化的输入,然后将恶意数据插入反序列化的字符串中,从而绕过程序的限制。
反序列化:将字符串转换回原来的对象或数组
攻击者可以通过反序列化的参数,将恶意数据插入反序列化的过程中,从而执行一些不应该执行的代码。
漏洞场景
代码开源
查看网站使用的框架以及插件有没有历史上的反序列化漏洞。
漏洞评级
高危漏洞
漏洞危害
执行恶意代码:攻击者可以通过反序列化过程执行恶意代码,例如上传文件、添加新的管理员账号、更改数据库记录等。
窃取敏感信息:攻击者可以利用反序列化过程窃取敏感信息,例如用户名、密码等。
劫持系统资源:如果攻击者可以获得访问系统资源的权限,那么他就能执行各种其他恶意操作。
漏洞验证
查看网站使用的框架以及插件有没有历史上的反序列化漏洞。
漏洞利用
通过反序列化参数利用 PHP 反序列化漏洞。
利用已知漏洞。
尝试绕过防护措施。
防御方案
对反序列化的输入进行严格的验证,
并使用安全措施来确保只有安全的数据被用于反序列化过程
禁用掉一些危险的魔术方法来增强安全性。
使用安全的序列化选项:例如禁止序列化循环引用和递归引用。
典型案例
2018年12月14日,WordPress 的某个插件中出现了 PHP 反序列化漏洞,导致攻击者可以通过构造恶意的 URL 来劫持网站的管理权限。
2019年6月18日,Magento 的某個漏洞被披露,攻击者可以利用反序列化漏洞执行任意代码。