web漏洞-反序列化之PHP&JAVA全解(上)(37)

web漏洞-反序列化之PHP&JAVA全解(上)(37)_第1张图片

 这个很重要

为什么会产生这个东西:序列化之后便于我们对象的传输和保存,这个作用就是为了数据的传递和格式的转换,我们称之为序列化。

在这给过程中,会涉及到一种叫做有类和无类的情况,开发里面经常看到的一个东西,我们称之为类,类对象,存在类的话,在类里面有一些内置的魔术方法,如果有类用到反序列化这个操作,就会触发到里面的魔术方法,有时候在不经意之间就会和其他漏洞相互组合。

无类情况,没有在代码写类,就不会触发到魔术方法,这个要看具体代码里面有没有

利用:1.在真实应用,网站下面,2.各种ctf大赛里面经常出现

反序列化的安全问题,会造成漏洞结合使用,他就会产生sql注入,代码执行,目录遍历等等。

相关的开发语言进行序列化就会转换成二进制,xml,json数据,这种数据反序列就会转换成开发语言,代码形式。

数据格式类型的相互转换

序列化就是对象转换为字符串,反序列化就是字符串转换为对象。

#php反序列化

原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,sql注入,目录遍历等不可控的后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。

这就会涉及到两个函数:serialize()  //将一个对象转换成一个字符串 ,序列化

unserialize()//将字符串转换为一个对象。反序列化

出发的原因的就是unserialize()使用这个函数时候,存在变量可以控制,触发类里面的魔术方法。

##先搞一把PHP反序列化热身题稳住-无类问题-本地

一个简单的序列化代码

web漏洞-反序列化之PHP&JAVA全解(上)(37)_第2张图片

 这个输出结果是什么意思,s是字符串型,变量长度9,变量名字就是xiaodi123,web漏洞-反序列化之PHP&JAVA全解(上)(37)_第3张图片

 这是无类的一种情况。而把输出的值换到变量key,然后使用unserialize()这个函数,一个简单的反序列化代码看看

web漏洞-反序列化之PHP&JAVA全解(上)(37)_第4张图片

 只有使用他对应的格式,才能被反序列化,还原出来。web漏洞-反序列化之PHP&JAVA全解(上)(37)_第5张图片

 web漏洞-反序列化之PHP&JAVA全解(上)(37)_第6张图片

 

你可能感兴趣的:(java,开发语言)