打开网页,可以看到后端源代码:
根据源代码可知,我们需要用 GET 请求传递一个参数file
,我们让它的值不包含flag
子串,这样strpos()
会返回FALSE
,程序控制流会进入分支,执行include $_GET["file"];
语句。
题目给了 phpinfo 文件,我们进去一看,发现服务器打开了 URL 包含的功能:
有了这样的前提,我们可以使用php://input
协议完成题目,也可以用远程文件包含。由于使用远程文件包含需要你有一个公网 IP 的 HTTP 服务器,我们选择hastebin.com
来辅助我们完成题目。
我们在 hastebin 写入命令执行语句,然后显示 raw 文本内容:
这样网页会跳转到一个只有文本内容的 URL:
我们把它复制下来,用 Burpsuite 的 Repeater 重放到题目的 URL:
然后我们使用命令find / -iname flag
找到 Flag 文件的位置:
最后用cat /flag
命令把它打印出来即可: