时间:2022-7-14来源:本站原创作者:佚名

反序列化漏洞原理分析:

什么是序列化和反序列化:序列化(serialize):将对象的状态信息保存为字符串,可以传输或存储形式的过程。在序列化期间,对象将其当前状态写入临时或持久性存储区。简单的说:将php中的对象,类,数组,变量,匿名函数等,转换为字符串,方便存储在数据库或传输。以后,就可以从存储区读取序列化后的字符串,再将期反序列化,还原对象状态,重新创建该对象。

如上图所示,将对象$students1序列化后的结果是

O:8:"students":3:{s:4:"name";s:6:"avicii";s:3:"age";s:2:"28";s:3:"sex";s:5:"woman";}反序列化(unserialize):序列化是将对象的信息保存为字符串,那么反序列化就是将对象序列化后的结果将期还原,重新创建对象状态信息。

利用方法:

当使用序列化或者反序列化的函数进行操作时,如果其中出现了可控变量,那么我们可以利用变量尝试调用对象中的魔术方法,对对象中的变量值进行覆盖自定义实现攻击。主要依靠本地序列化构造出有害的序列化值。

主要我们本地构造出序列化的值通过参数传递进去触发对象其中的魔术方法,将我们序列化的值进行反序列化。

危害:对用户输入的数据进行检测,导致攻击者可以控制反序列化的过程,从而导致代码执行,sql注入,文件读取,目录遍历。

常见魔术方法:

__construct对象创建时自动调用__destruct对象销毁时自动调用__wakeup在使用unserializa函数时自动调用,对象被序列化后自动调用__toString方法用于一个类被当作字符串时触发Phpmyadmin2.x-反序列化漏洞漏洞分析:

首先定位unserialize函数,发现在scripts\setup.php下

第28行使用了unserialize函数反序列化函数,对POST传参的字符串进行反序列化操作,在对象从创建到销毁的过程中,会自动触发某些魔术方法。所以我们应该跟进控制点,看看哪些对象的实例化会被调用某些魔术方法。我们发现setup.php使用require_once函数引进./libraries/
转载请注明原文网址:http://www.coolofsoul.com/phpys/phpys/24259.html
------分隔线----------------------------