[ACTF2020 新生赛]Include

发布时间 2023-07-16 12:40:36作者: y0Zero

[ACTF2020 新生赛]Include

题目来源:buuctf

题目类型:web

涉及考点:文件包含、任意文件读取

1. 题目给了个跳转链接 tips ,点击进入:

题目提示存在文件包含漏洞,接下来尝试获取flag.php的源码

2. PHP伪协议

这里需要先介绍一下php伪协议,方便我们做题。

PHP 伪协议是 PHP 支持的协议与封装协议,常见的几个伪协议如下:

伪协议 功能
file:// 访问本地文件系统
http:// 访问 HTTP(s) 网址
php:// 访问各个输入/输出流
phar:// PHP 归档
zip:// 压缩流

这次我们主要介绍php://filter ,这是一个php协议,可以作为一个中间件来处理其他流。简单理解就是,它是一个中转站,可以将获取到的流进行过滤,再将其输出。(类比于食品加工,原材料是输入流,最终产品是输出流,整个加工过程就是中转站)

它有以下几个参数:

名称 描述 备注
resource=<要过滤的数据流> 指定了要筛选过滤的数据流 必选
read=<读链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔 可选
write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔 可选
<;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链

下面介绍几个常见的过滤器:

名称 功能
string.rot13 一种字符处理方式,字符右移十三位
string.toupper 将所有字符转换为大写
string.tolower 将所有字符转换为小写
string.strip_tags 用来处理掉读入的所有标签,例如XML的等等
convert.base64-encode & convert.base64-decode base64加密解密

3. 回到题目,现在尝试构造payload

我们现在需要得到 flag.php 的源码,通过php伪协议我们可以构造如下:

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

这一步是对 flag.php 进行base64编码。如果不进行过滤操作,读取的数据会被当做php代码执行,那么获取的结果就跟第一步一样了。

将payload上传,得到源码的base64编码:

我们对其进行解码,得到flag:

flag{eb11b5f2-4e76-46a9-a715-7c80b04e6839}

日期:2023.7.16

作者:y0Zero