P7 PikaChu_PHP反序列化

大家好!
我是小黄,很高兴又跟大家见面啦 !
拒绝水文,从我做起 !!!!
今天更新的是:


创建时间:2021年3月23日
软件: MindMaster Pro 、Burp Suite Pro 、火狐浏览器


前言

  • 首先我们要理解什么叫做序列化和反序列化
  1. 序列化(serialize):是将变量或对象转换成字符串的过程。从而达到传输和存储的目的。
  2. 反序列化(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:变量值
    
  • 举个例子:
<?php
class man{
 public $name;
 public $age;
 public $height;
 
 function __construct($name,$age,$height){        //_construct:创建对象时初始化
  $this->name = $name;
  $this->age = $age;
  $this->height = $height;
 }
 
}

$man=new man("Bob",5,20);
var_dump(serialize($man));

?>

在这里插入图片描述

反序列化unserialize( ) 函数

<?php
class man{
 public $name;
 public $age;
 public $height;
 
 function __construct($name,$age,$height){
  $this->name = $name;
  $this->age = $age;
  $this->height = $height;
 }
 
}

$man= 'O:3:"man":3:{s:4:"name";s:3:"Bob";s:3:"age";i:5;s:6:"height";i:20;}';
var_dump(unserialize($man));

?>

在这里插入图片描述

  • 序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题。
  • 魔幻函数:
_construct():创建对象时初始化,不会自动调用
_destruction():结束时销毁对象
_toString():对象被当作字符串时使用
_sleep():序列化对象之前调用
_wakeup():执行unserialize()时,先会调用这个函数,然后再进行反序列化
_call():调用对象不存在时使用
_get():调用私有属性时使用

漏洞分析

在这里插入图片描述

  • 尝试用概述中提供的payload尝试一下:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

-

  • 我们可以尝试着利用XSS,使其返回cookie 重新构建payload
  • 返回cookie的XSS :<script>alert(document.cookie)</script>
  • 反序列化之后的payload:O:1:"S":1:{s:4:"test";s:39:"<script>alert(document.cookie)</script>";}
  • 返回的cookiePHPSESSID=uvq34mi9eqnctpg6chmjb6crl6

在这里插入图片描述

  • 用代码构造payload、创建以下内容的文件,放在www目录下(当然如果直接把xss payload写到类定义里面也可以)
<?php
class S{
            var $test = "pikachu";
        }
        $s = new S();
        $payload="<script>alert(document.cookie)</script>";
        $s->text=$payload;
        echo serialize($s);
?>

在这里插入图片描述
-

文章参考


各位路过的朋友,如果觉得可以学到些什么的话,点个赞 再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。

每个小伙伴的关注都是本人更新博客的动力!!!
请微信搜索【 在下小黄 】文章更新将在第一时间阅读 !
在这里插入图片描述

把握现在 ,展望未来 ,加油 !


由于水平有限 ,写的难免会有些不足之处 ,恳请各位大佬不吝赐教 !

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下小黄

ღ给个赞 是对小黄最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值