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

admin 2025年1月11日12:23:57评论4 views字数 952阅读3分10秒阅读模式

WEB255

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

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

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

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

WEB256

该题多了个对username和password值的对比
[ctfshow]PHP反序列化(未完)

所以,我们只需要增加个通过反序列化修改他们值的操作便好
[ctfshow]PHP反序列化(未完)

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

WEB257

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

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

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

WEB258

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

/[oc]:\d+:/i

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

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

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

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

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

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

WEB260

额。这题不知道有什么意义
[ctfshow]PHP反序列化(未完)

WEB261

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

在php7.4.0开始,如果类中同时定义了 __unserialize() 和 __wakeup() 两个魔术方法,则只有
__unserialize() 方法会生效,__wakeup() 方法会被忽略
__invoke()则要在将对象当做方法来使用才能触发,__sleep()则是被serialize调用,所以也可以忽略不计。
所以现在只需要梳理下图即可
[ctfshow]PHP反序列化(未完)

$this->code==0x36d

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

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

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

©著作权归作者所有 - source: 535yx.cn

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月11日12:23:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [ctfshow]PHP反序列化(未完)https://cn-sec.com/archives/3619007.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息