0x01 首先放源码
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
0x02 分析
strstr
过滤了一些php
伪协议(大小写绕过)- 第三行,
echo $_GET['hello'];
也可以加以利用
0x03 解题过程
1、利用php://input
伪协议(大小写绕过strstrt)
exp:
2、利用php://filter伪协议(大小写绕过strstr)
exp:
read=convert.base64-encode
将代码转换成
b64
编码,从而不会执行,可以显示在页面
拓展:还有许多转换的方法,在许多的地方都有妙用。
1、read=convert.base64-decode
2、read=string.strip_tags
3、write=string.strip_tags
4、write=string.rot13
[参考链接:https://www.leavesongs.com/PENETRATION/php-filter-magic.html](https://www.leavesongs.com/PENETRATION/php-filter-magic.html)
3、利用data://协议
data://text/plain,<?php 代码?>
or
data://text/plain;base64, 代码(代码经过base64转码)
4、利用file://协议(前提是知道文件的绝对路径,不适用于查看文件的内容)
当然不觉得无聊的话也可以这样
5、利用echo $_GET['hello']
来显示内容
最后再贴一张伪协议使用的条件
phar:// 可以查找指定压缩包内的文件,相对路径和绝对路径均可
zip:// 用法与phar类似,不过有两点要注意
- 只能传入绝对路径。
- 要用#分隔压缩包和压缩包里的内容,并且#要用url编码%23