ctrl+U查看源代码, 如下:
访问提示中的source.php文件
发现显示了源码,且存在另一个PHP文件hint.php(提示.php),先查看文件内是否有信息
用file来传参,并且要绕过whitelist的规则
暂且先访问hint.php文件,发现提示了flag所在位置
这里涉及到了include()函数:
include 语句包含并运行指定文件。
以下文档也适用于 require 。
被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。
如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。
所以在本题中include()函数包含文件时会按路径./../../../../ffffllllaaaagggg来寻找文件
另外关于路径,符号"."代表当前目录,“..”代表上一级的目录,"/"代表根目录,而./../../../../ffffllllaaaagggg则通过不断将路径跳转到上一个目录直到flag所在的PHP文件(该题中目标PHP文件恰好在根目录下,而根目录的上一层目录仍然是根目录)。
最后得出flag:flag{a0449aa1-cd01-42a9-a126-fac6ce83a310}
这道题做的话不是很难,但理解可能有些困难,百度YYDS,一起加油吧!!!!!!1!