51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

[ctfshow]PHP反序列化(未完)

WEB255 {#WEB2557494}

65386-dvh47j21rk.png

这题可以看出,是从cookie处触发了反序列化。只需要$isVip是True的状态,vipOneKeyGetFlag()即可返回flag
注意,由于此处是从cookie处触发,所以payload需要url加密

<?php
class ctfShowUser{
    public $isVip=true;
}
    $a=new ctfShowUser();
    echo urlencode(serialize($a));
?>

98453-1m4rnp5qnk7h.png

WEB256 {#WEB2569024}

该题多了个对username和password值的对比
16225-nstvkp43xk.png

所以,我们只需要增加个通过反序列化修改他们值的操作便好
91196-g0sy2d8verk.png

14322-kq7xcercqzg.png

WEB257 {#WEB2575074}

55399-6hdbrjx7j5l.png

首先,我们知道__construct()函数会被new调用,所以这里我们可以修改其调用的函数,修改至backDoor().并修改$code的值来进行反序列化攻击。
所以,这里我们仅需要保证username和password不为空就够执行该后门了(后面我又发现当cat flag.php时不被执行,所以利用tac进行绕过)
62314-jhfnpvx6joi.png

43599-moasv7uad68.png

WEB258 {#WEB2581798}

12804-6sdfechoi9c.png

/[oc]:\d+:/i

这个正则的意思就是。匹配第一个是0或c,第二个字符是:,第三个字符跟随着数字的这种形式

\d:  匹配一个数字字符。等价于 [0-9]。
 +:  匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
/i:  表示匹配的时候不区分大小写

所以说如果要绕过这个正则,我们可以把0:数字这种形式改成0:+数字

放一个加号可以直接退出序列处理,从而绕过正则匹配。
详情可以参考https://www.phpbug.cn/archives/32.html

86584-xq1dqdor4a9.png

84014-4x98hte0aam.png

WEB260 {#WEB2603960}

额。这题不知道有什么意义
73263-npjd8o1klti.png

WEB261 {#WEB2618008}

26041-bl158l751f.png

在php7.4.0开始,如果类中同时定义了 __unserialize() 和 __wakeup() 两个魔术方法,则只有
__unserialize() 方法会生效,__wakeup() 方法会被忽略

__invoke()则要在将对象当做方法来使用才能触发,__sleep()则是被serialize调用,所以也可以忽略不计。
所以现在只需要梳理下图即可
50992-0t5go026v01g.png

$this->code==0x36d

由于这是双==,即php弱类型,所以只要传递的是877跟上字母即可

97151-e1yftg9awv.png

56667-5c2rkg0mnfp.png

赞(2)
未经允许不得转载:工具盒子 » [ctfshow]PHP反序列化(未完)