admin管理员组文章数量:1794759
【web安全】——反序列化漏洞快速入门
作者名:Demo不是emo
主页面链接:主页传送门创作初心:一切为了她座右铭:不要让时代的悲哀成为你的悲哀专研方向:网络安全,数据结构
每日emo:我并不是一直都这样沉默的
目录
一、什么是序列化?
二:初识反序列化漏洞
三: 漏洞产生原理
四: 序列化简析
五:反序列化简析
六:反序列化漏洞攻击
七:攻击案例
七:反序列化漏洞修复
一、什么是序列化?
序列化是将变量或对象转换成字符串的过程。
二:初识反序列化漏洞就是把一个对象变成可以传输的字符串,目的就是为了方便传输。假设,我们写了一个class,这个class里面存有一些变量。当这个class被实例化了之后,在使用过程中里面的一些变量值发生了改变。以后在某些时候还会用到这个变量,如果我们让这个class一直不销毁,等着下一次要用它的时候再一次被调用的话,浪费系统资源。当我们写一个小型的项目可能没有太大的影响,但是随着项目的壮大,一些小问题被放大了之后就会产生很多麻烦。这个时候PHP就和我们说,你可以把这个对象序列化了,存成一个字符串,当你要用的时候再放他出来就好了。在我们讲PHP反序列化的时候,基本都是围绕着serialize(),unserialize()这两个函数。
三: 漏洞产生原理serialize() 和 unserialize() 在 PHP内部实现上是没有漏洞的,之所以会产生反序列化漏洞是因为应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的。
当传给 unserialize() 的参数可控时,那么用户就可以注入精心构造的 payload。当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害
四: 序列化简析来看一段php序列化操作的代码
class S{ public $test="pikachu"; } $s=new S(); //创建一个对象 serialize($s); //把这个对象进行序列化这段代码是将"pikachu"进行序列化操作,序列化后得到的结果是
O:1:"S":1:{s:4:"test";s:7:"pikachu";} O:代表object 1:代表对象名字长度为一个字符 (即“S”) S:对象的名称 1:代表对象里面有一个变量 s:数据类型 (string 字符串) 4:变量名称的长度 test:变量名称 s:数据类型 (pikachu 同样为字符串string) 7:变量值的长度 pikachu:变量值对于对象,序列化后的格式为:
O:strlen(类名):类名:类的变量个数:{类型:长度:值;类型:长度:值…}
其他类型的数据序列化后的格式为:
String类型 :s:size:value Integer类型 :i:value Boolean类型 : b:value (保存1或0) Null型 :N Array :a:size:{key definition;value definition}还有需要注意的点是:分割不同字段以}结尾,这对反序列化很重要
五:反序列化简析与 serialize() 对应的,unserialize()可以从已存储的表示中创建PHP的值,单就本次所关心的环境而言,可以从序列化后的结果中恢复对象(object)。
<?php class chybeta{ var $test = '123'; } $class2 = 'O:7:"chybeta":1:{s:4:"test";s:3:"123";}'; print_r($class2); echo "</br>"; $class2_unser = unserialize($class2); print_r($class2_ser); ?>这里提醒一下,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。
六:反序列化漏洞攻击序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题.
常见的几个魔法函数: //不同场景下被自动调用
__construct()当一个对象创建时被调用 __destruct()当一个对象销毁时被调用 __toString()当一个对象被当作一个字符串使用 __sleep() 在对象在被序列化之前运行 __wakeup将在序列化之后立即被调用 七:攻击案例代码举例
class S{ var $test = "pikachu"; function __destruct(){ echo $this->test; //一旦S这个类被创建,则将会自动使用魔法函数。当对象被销时,则下面的操作会被自动执行} } $s = $_GET['test']; @$unser = unserialize($a);则payload如下
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}反序列化的内容是从用户前端传过来的,若从前端传来的内容中插入了恶意的反序列化的内容,后台检测到会对内容进行反序列化,则通过反序列化的接口造成XSS漏洞。
七:反序列化漏洞修复1、安全配置好php相关参数
通过Php配置文件里面有个disable_functions = 配置,这个禁止某些php函数, 服务器便是用这个来禁止php的执行命令函数。 例如: disable_functions =system,passthru,shell_exec,exec,popen 便禁止了用这些函数来执行系统命令
2、升级中间件
3、严格控制传入变量,严谨使用魔法函数
版权声明:本文标题:【web安全】——反序列化漏洞快速入门 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686648642a90398.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论