这个很重要
为什么会产生这个东西:序列化之后便于我们对象的传输和保存,这个作用就是为了数据的传递和格式的转换,我们称之为序列化。
在这给过程中,会涉及到一种叫做有类和无类的情况,开发里面经常看到的一个东西,我们称之为类,类对象,存在类的话,在类里面有一些内置的魔术方法,如果有类用到反序列化这个操作,就会触发到里面的魔术方法,有时候在不经意之间就会和其他漏洞相互组合。
无类情况,没有在代码写类,就不会触发到魔术方法,这个要看具体代码里面有没有
利用:1.在真实应用,网站下面,2.各种ctf大赛里面经常出现
反序列化的安全问题,会造成漏洞结合使用,他就会产生sql注入,代码执行,目录遍历等等。
相关的开发语言进行序列化就会转换成二进制,xml,json数据,这种数据反序列就会转换成开发语言,代码形式。
数据格式类型的相互转换
序列化就是对象转换为字符串,反序列化就是字符串转换为对象。
#php反序列化
原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,sql注入,目录遍历等不可控的后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。
这就会涉及到两个函数:serialize() //将一个对象转换成一个字符串 ,序列化
unserialize()//将字符串转换为一个对象。反序列化
出发的原因的就是unserialize()使用这个函数时候,存在变量可以控制,触发类里面的魔术方法。
##先搞一把PHP反序列化热身题稳住-无类问题-本地
一个简单的序列化代码
这个输出结果是什么意思,s是字符串型,变量长度9,变量名字就是xiaodi123,
这是无类的一种情况。而把输出的值换到变量key,然后使用unserialize()这个函数,一个简单的反序列化代码看看
只有使用他对应的格式,才能被反序列化,还原出来。