BUUCTF 之 [ACTF2020 新生赛]Include

BUUCTF 之 [ACTF2020 新生赛]Include

  • 相关
  • 题解
      • 案发现场
      • 分析
      • 攻克

相关

项目 内容
难度 简单
类型 WEB
靶场 BUUCTF
坐标 [ACTF2020 新生赛]Include

BUUCTF 之 [ACTF2020 新生赛]Include_第1张图片

题解

案发现场

打开题目链接,首页中只有一个超链接。
超链接
点击 tips 后,出现了如下提示(你能找到其他的 flag 吗):

提示
仔细观察,可以发现:
点击超链接后,发送了一个 GET 请求

?file=flag.php

file 的值为 flag.php ,应该是一个 PHP 文件。
改造一下链接(访问 flag.php 页面):

http://f2c5e5cb-7a5b-4a4b-b41b-5d9c19f9ed68.node4.buuoj.cn:81/flag.php

访问 flag.php
可以发现,题目首页中的 tips 超链接指向的就是 flag.php 页面。

分析

  1. PHP 中若通过 require()、once_require() 或 include() 、once_include() 函数去包含另一个文件,该文件在网页中均是不可见的(即使你查看网页源代码)。
    BUUCTF 之 [ACTF2020 新生赛]Include_第2张图片
  2. 页面提示,Can you find out the flag?

综上,可以发现 flag.php 页面通过 get 方式中的参数 file 来包含网站当前目录下的其他文件(如 flag.php),再加上提示 “你能找到其他 flag 吗?” ,我们可以推断,要解答该题目需要获取 flag.php 的源代码。

攻克

我们可以通过将包含的文件进行转码,让浏览器无法识别这是 PHP 代码,其也就无法执行该 PHP 文件,于是将文件中的内容直接显示出来,我们将通过 PHP 伪协议来完成这一动作。
使用 PHP 伪协议将网页源代码转换为 base64 编码的格式:

php://filter/read=convert.base64-encode/resource=flag.php

其中的 read 可以省略,但 resource 不能。
将此部分作为 GET 参数的值即可获得 flag,因此,构造的链接为:

http://f2c5e5cb-7a5b-4a4b-b41b-5d9c19f9ed68.node4.buuoj.cn:81/?file=php://filter/read=convert.base64-encode/resource=flag.php

我们由此获得了一段使用 base64 编码的 PHP 代码:

Base64 编码的 PHP 代码
在线解码 后,我们可以得到一段 PHP 代码,其中就包含了 flag。

BUUCTF 之 [ACTF2020 新生赛]Include_第3张图片

你可能感兴趣的:(安全,php,开发语言)