首页 > 编程语言 >pikachu php反序列化漏洞

pikachu php反序列化漏洞

时间:2022-10-30 16:33:06浏览次数:43  
标签:__ php 对象 pikachu unserialize test 序列化

原理

php中serialize(),unserialize()这两个函数。
序列化serialize()

序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象:

    class S{
        public $test="pikachu";
    }
    $s=new S(); //创建一个对象
    serialize($s); //把这个对象进行序列化
    序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}
        O:代表object
        1:代表对象名字长度为一个字符
        S:对象的名称
        1:代表对象里面有一个变量
        s:数据类型
        4:变量名称的长度
        test:变量名称
        s:数据类型
        7:变量值的长度
        pikachu:变量值
反序列化unserialize()

就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。

    $u=unserialize("O:1:"S":1:{s:4:"test";s:7:"pikachu";}");
    echo $u->test; //得到的结果为pikachu

序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题

        常见的几个魔法函数:
        __construct()当一个对象创建时被调用

        __destruct()当一个对象销毁时被调用

        __toString()当一个对象被当作一个字符串使用

        __sleep() 在对象在被序列化之前运行

        __wakeup将在序列化之后立即被调用

        漏洞举例:定义一个类,写一个function,这个function直接使用了魔法方法
        class S{
            var $test = "pikachu";
            function __destruct(){
                echo $this->test;
            }
        }
        $s = $_GET['test'];
        @$unser = unserialize($a);

        payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
这段在吗在————construct 构造时调用了echo,会讲对象中的内容(payload)回显给前端,造成xss脚本被执行
payload
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题

标签:__,php,对象,pikachu,unserialize,test,序列化
From: https://www.cnblogs.com/gradyblog/p/16841569.html

相关文章

  • pikachu 水平越权,垂直越权
    水平越权查看到其他用户的信息或者通过其他用户去编辑或修改其他用户的信息1.用lucy/123456登录2.点击查看信息3.使用burpsuite拦截请求GET/vul/overpermission/o......
  • 15.几种序列化方式
    什么是序列化关于序列化相信大家都很了解,在Java中我们经常就可以看到很多实体类或者 POJO 都会实现 Serializable 接口,有了解过 Serializable 接口的小伙伴应该都......
  • pikachu xss
    1.反射型XSS(get)输入<script>alert("test")</script>发现有长度限制(maxlength),F12修改对输入框的长度限制,或者直接改url并encode(url为:http://localhost:8080/vul/xss/xs......
  • php 读取 csv 转数组列表
    我们有个文档需要修改,但是文档列太多,以及数量太大,以至于眼睛看起来很吃力,于是我决定做个简单的转化用脚本读取我想要验证的列的内容是否正确.于是就产生了一个这样将csv......
  • FastJson序列化和反序列化问题记录
    序列化与反序列化问题调用外部接口,http://100.111.55.67:9999/cmdb/v0.2.0/departments?page_size=1000,返回数据格式如下:{"code":0,"content":[{......
  • nginx容器与php容器连接
    文档说明:只记录关键地方;试验环境:linuxdebian11目标:nginx容器与php容器连接构建PHP容器curl-fsSL'https://curl.haxx.se/ca/cacert.pem'-o/usr/local/etc/p......
  • 最新php多商户多仓库带扫描云进销存系统ERP管理系统Saas营销版无限商户源码
    1、电脑端+手机端,手机实时共享,手机端一目了然。2、多商户Saas营销版无限开商户,用户前端自行注册,后台管理员审核开通3、管理员开通商户,可以设置商户到期时间、权限等等,无......
  • Windows Server 2008+IIS+php+MySQL环境搭建
    Win2008+IIS+php+MySQL环境搭建一、Windows环境操作系统:WindowsServer2008R2IIS版本:IIS7.5PHP版本:php5.6.9MySQL版本:MySQL5.7.40二、部署IIS1、打......
  • phpstudy出现乱码导致Apache或者Nginx无法启动
    今天在使用Phpstudy的时候,突然无法创建新站点了(好久没用过了)。错误提示如下:(注意截图位置,端口和时间都是乱码)    经过查阅大量资料,原来是软件的编码格式导致......
  • Serialzable和Parcelable的区别?Bunder传递对象为什么需要序列化?
    1Bunder传递对象为什么需要序列化?因为bundle传递数据时只支持基本数据类型,所以在传递对象时需要序列化转换成可存储或可传输的本质状态(字节流)。序列化后的对象可以在网络、......