源码分析
-
<?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=Off
allow_url_include=Off
, 导致了不能使用上一关的远程文件包含 -
再者,
include()
被限制使用了file协议
, 故这里只能尝试file协议
来达到文件包含 -
file:// 协议
-
include("filename") <=> include("file://" . __DIR__ . "/filename");
-
不过这里只能使用绝对路径
-
-
然后探姬在题目说提到了 当前目录下有
phpinfo.txt
flag.php
(包含存储flag的变量), 在根目录下有flag
文件(包含flag)
尝试包含文件
-
包含
phpinfo.txt
-
靶机地址/?wrappers=/var/www/html/phpinfo.txt
-
-
-
包含
flag.php
-
因为这里并没有输出
flag变量
的代码, 所以包含了也没有变化 -
其实打开靶机源文件会发现,
flag.php
其实空的
-
解题步骤
-
跟上述方法一样, 改为包含 根目录下的
flag
就可以了 -
靶机地址/?wrappers=/flag
-