[BUUCTF]HCTF 2018WarmUp1 write up

Posted on 2022-04-08 21:01  *Faery  阅读(38)  评论(0编辑  收藏  举报

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!

Copyright © 2025 *Faery
Powered by .NET 9.0 on Kubernetes