来写一点简单题。。。(qwq
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
一道简单的php伪协议绕过,涉及函数有strstr以及str_replace
题目代码分析
通过$page为变量名以get形式传参,对page进行检测,最后用include包含。函数的作用是将php://的数据替换。
绕过
因为strstr以及str_replace两个函数都区分大小写,在这里就非常容易绕过。使用PHP://就能直接绕过。
具体步骤

传参,并附带来读取文件


其他解法
运用其他伪协议
php://input,是一个只读流,用于访问 HTTP 请求的原始主体数据(body)。简单来说就是将请求体部分的内容当作文件进行读取。
php://filter/convert.base64-encode/resource=flag.php: 将flag.php的内容编码为base64,防止php代码引擎执行。
php://filter/convert.iconv.
data://text/plain, echo “nihao data”, 这个协议可以将后面的内容当作文件传递(即echo “nihao data”)。
data://text/plain, echo "nihao data", 这个协议可以将后面的内容当作文件传递(即echo "nihao data")。