pikachu笔记之反序列化漏洞

一、概述

    在现有很多的应用当中,需要对某些对象进行序列化,让它们离开内存空间,入驻物理硬盘,以便可以长期保存,其中最常见的是Web服务器中的Session对象。对象的序列化一般有两种用途:把对象的字节序列永久地保存到硬盘上,通常存放在一个指定文件中;或者在网络上传送对象的字节序列。

    而把字节序列恢复为对象的过程称为对象的反序列化。当两个进程在进行远程通信时,彼此可以发送各种类型的数据,而且无论是何种类型的数据,都会以二进制序列的形式在网络上传送。

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

序列化的操作主要围绕以下两个函数:

serialize()            //将一个对象转换成一个字符串

unserialize()        //将字符串还原成一个对象

触发:unserialize函数的变量可控,文件中存在可利用的类,类中有魔术方法:

__construct()         //创建对象时触发

__destruct()          //对象被销毁时触发

__call()                 //在对象上下文中调用不可访问的方法时触发

__callStatic()        //在静态上下文中调用不可访问的方法时触发

__get()                 //用于从不可访问的属性读取数据

__set()                  //用于将数据写入不可访问的属性

__isset()                //在不可访问的属性上调用isset()或empty()触发

__unset()              //在不可访问的属性上使用unset()时触发

__invoke()             //当脚本尝试将对象调用为函数时触发

下面是对序列化后数据的详细介绍

二、实施过程

1.打开反序列化漏洞的页面

2.发现是输入一段序列化的代码,这里我们可以自己写一个序列化的脚本,脚本肥肠煎蛋,只是建立了一个类,并实例化对象,然后把对象序列化输出(这里使用了菜鸟工具在线编辑)

<?php

class S{
		var $test = "<script>alert('xss')</script>";
}

echo '<br>';
$a = new S();
echo serialize($a);

?>

3.把代码输入到pikachu里面,进行实验

成功弹出xss

三、防范措施

序列化:对象转换为数组或字符串等格式

反序列化:将数组或字符串等格式转换成对象

        反序列化漏洞是一种配合型的漏洞,它不能产生漏洞,而是触发了别的漏洞,对于输入的值没有做校验,就有可能触发比如‘xss’、SQL注入、目录遍历等不可控的后果。

        然后就是在系统中,会有防入侵检测机制,检测日志当中,可能存在的风险,比如你输入数据的一些操作,监控数据传入传出的过程等等,这样就能找出数据传入后,变量可能存在的一些问题。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值