BUUCTF [网鼎杯 2020 青龙组] AreUSerialz1

1、阅读题目:php绕过类型。

2、分析题目:

(1)get传参 "str",string转化为字符串,用 is_valid() 函数来进行过滤,要求传入的字符串的每一位字符的ASCII码都在32~125之间。

(2)对于FileHandler类,由于在反序列化中,先调用__destruct()析构方法,所以需要设计op的值绕过与 "2" 的强相等。又因为在__destruct()析构方法中又要调用process()方法,所以又要让op与 "2" 满足弱相等。

(3)所以当op = 2时,一方面利用弱相等,可以调用read()方法和output()方法,另一方面也可以绕过强相等,避免执行在__destruct()时 op 赋值为 1。

(4)在read()函数中,因为用file_get_contents($this->filename)读取filename中的值,所以要通过php://filter伪协议读取文件,最后用output()函数输出结果。

3、编写php代码:

(1)由于在原代码中,op等的属性为protected,因此只有当前类的成员与继承该类的类才能访问,所以在进行反序列化时无法正常显示。

(2)改正方法:

将protected属性改为public属性(公共的 任何成员都可以访问),即可解决该问题。

4、得到base64,解密得到flag。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值