Web渗透-反序列化
概要
为了有效地存储或传递数据,同时不丟失其类型和结构,经常需要利用序列化和反序列化函数对数据进行处理。 序列化就是把一个对象变成可以传输的字符串,可以以特定的格式在进程之间跨平台、安全的通信。 反序列化函数对单一的已序列化的变量进行操作,将其转换回原来的值。 在程序执行结束时,内存数据便会立即销毁,变量所储存的数据便是内存数据,而文件、数据库是“持久数据”,因此PHP序列化就是将内存的变量数据“保存”到文件中的持久数据的过程。
PHP序列化和反序列化主要函数
PHP反序列化的主要四个函数
serialize() //将一个对象转换成一个字符串
unserialize() //将字符串还原成一个对象
json_encode() //对变量进行 JSON 编码
json_decode() //对 JSON 格式的字符串进行解码
反序列化漏洞的产生
反序列化漏洞出现得满足两个前提:
一、unserialize函数的参数可控。二、 代码里有定义一个含有魔术方法的类,并且该方法里出现一些使用类成员变量作为参数的存在安全问题的函数
对象注入
当用户的请求在传给反序列化函数unserialize()之前没有被正确的过滤时就会产生漏洞。因为PHP允许对象序列化,攻击者就可以提交特定的序列化的字符串给一个具有该漏洞的unserialize函数,最终导致一个在该应用范围内的任意PHP对象注入。
转:https://wiki.freebuf.com/detail?tribal_id=31&camp_id=17&entry_id=17003
浙公网安备 33010602011771号