源码分析
-
<?php include("get_flag.php");isset($_GET['wrappers']) ? include("file://".$_GET['wrappers']) : '';highlight_file(__FILE__); ?> -
第一句
include("get_flag.php");, 使代码包含了 get_flag.php 的内容- 大概是生成
Flag之类的代码
- 大概是生成
-
第二句与上一关差不多, 通过
三目运算的方式, 简写了一个判断语句-
检测是否 GET 传入
wrapper参数, 如果有就传给include()参数执行-
不过这里对
wrapper参数做了点修改, 才交给include() -
"file://".$_GET['wrappers'] -
增加了
file协议标志
-
-
-
最后一句就是显示源码
解题分析
-
首先, 题目开头告诉当前文件路径
/var/www/html- 这个在现实场景中可以根据根据一般情况部署的目录去猜测
-
并且, 题目环境中, 关闭了
allow_url_fopen=Offallow_url_include=Off, 导致了不能使用上一关的远程文件包含 -
再者,
include()被限制使用了file协议, 故这里只能尝试file协议来达到文件包含 -
file:// 协议
-
include("filename") <=> include("file://" . __DIR__ . "/filename"); -
不过这里只能使用绝对路径
-
-
然后探姬在题目说提到了 当前目录下有
phpinfo.txtflag.php(包含存储flag的变量), 在根目录下有flag文件(包含flag)
尝试包含文件
-
包含
phpinfo.txt-
靶机地址/?wrappers=/var/www/html/phpinfo.txt -

-
-
包含
flag.php-
因为这里并没有输出
flag变量的代码, 所以包含了也没有变化 -
其实打开靶机源文件会发现,
flag.php其实空的
-
解题步骤
-
跟上述方法一样, 改为包含 根目录下的
flag就可以了 -
靶机地址/?wrappers=/flag -




















