打开页面发现是源码
![伪协议的引用[ZJCTF 2019]NiZhuanSiWei - 图1](/uploads/projects/u390550@fftlfh/084c48621f2123e1c2eb6cf3e33153e2.png)
这里有个file_get_content函数,于是可以想到php伪协议,php://input
![伪协议的引用[ZJCTF 2019]NiZhuanSiWei - 图2](/uploads/projects/u390550@fftlfh/233f6f2b94238861089ad915c0b5281b.png)
于是我们构造POST请求,绕过限制
![伪协议的引用[ZJCTF 2019]NiZhuanSiWei - 图3](/uploads/projects/u390550@fftlfh/095f9ae67693b1c059476f85a96a7fc0.png)
也可以data传参数
?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=
![伪协议的引用[ZJCTF 2019]NiZhuanSiWei - 图4](/uploads/projects/u390550@fftlfh/8d4f768e279b49849fa9e2a4a5180795.png)
题目中有个提示是存在useless.php,这里也是用php伪协议,php://filter
![伪协议的引用[ZJCTF 2019]NiZhuanSiWei - 图5](/uploads/projects/u390550@fftlfh/2c673cc78fb180c31bfecf3e8e04379c.png)
php://filter/convert.base64-encode/resource=useless.php
可以看出useless.php的源码并且用base64编码打印出来
![伪协议的引用[ZJCTF 2019]NiZhuanSiWei - 图6](/uploads/projects/u390550@fftlfh/52dea663fcaeda69402c7e537c90f697.png)
我们要用base64解码即可得到源码
![伪协议的引用[ZJCTF 2019]NiZhuanSiWei - 图7](/uploads/projects/u390550@fftlfh/4e7df5a14b97cc4781136ee4d883d99b.png)
Flag类和file_get_contents,并且前面存在$password=unserialize($password);
利用反序列化构造payload
O:4:"Flag":1:{s:4:"file";s:52:"php://filter/convert.base64-encode/resource=flag.php";}
![伪协议的引用[ZJCTF 2019]NiZhuanSiWei - 图8](/uploads/projects/u390550@fftlfh/7468fcb5343d795b9b11256f877a837c.png)
可以得到flag.php中的源码
![伪协议的引用[ZJCTF 2019]NiZhuanSiWei - 图9](/uploads/projects/u390550@fftlfh/7d90d4eac14908ba36bc0f6997abb83d.png)
