Poacher's Blog - 文件包含漏洞
type: channel
link: https://bugsafe.cn/tag/%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/
items: 谈一谈文件包含漏洞

谈一谈文件包含漏洞
type: item
date: 2018-01-12T19:27:00+08:00
description: [TOC] ### 什么是文件包含 ------------ >文件包含这个漏洞，简单来说既是程序猿在开发中为了方便，会将在多个页面重复使用的代码单独写到一个文件中，在需要用到的地方直接包含进来，包含后的文件既相当于将被包含的整个文件内容复制到了包含处。因为在开发中是经常用到的，因此成为了攻击者的目标，便衍生了多种文件包含的攻击。 ### 本地文件包含 ------------ 先来感受一下，当包含值可被直接控制的情况下是怎么样的如以下代码： ```php ``` 而是远程服务器执行完这段代码的源代码，如下图： ![12.png](http://www.bugsafe.cn/usr/uploads/2018/01/3891035635.png) 所以说远程文件包含只有符合了以上两点才能正常包含。 先来修改下： 1. 修改配置 ![13.png](http://www.bugsafe.cn/usr/uploads/2018/01/3765667797.png) 2. 修改文件后缀 ![14.png](http://www.bugsafe.cn/usr/uploads/2018/01/2234506515.png) 再来包含一下。 ![15.png](http://www.bugsafe.cn/usr/uploads/2018/01/1549644820.png) 可以看到这次包含后返回的信息就是我们目标机的信息。 接下来继续尝试拿shell ![16.png](http://www.bugsafe.cn/usr/uploads/2018/01/58443275.png) ![17.png](http://www.bugsafe.cn/usr/uploads/2018/01/3886119717.png) 远程文件包含的利用前提其实就是符合本地文件包含的前提并且符合远程文件包含本身的前提即可利用。 ### 文件包含之伪协议 ------------ 伪协议在文件包含的利用，本文演示以下伪协议： `data:text/plain` 或 `data:text/plain;base64` `php://input` `php://filter` `file://` `zip://` 其它协议可阅读官方文档：[直通车](http://php.net/manual/zh/wrappers.php.php "直通车") data:text/plain 直接在对应URL参数内输出：data:text/plain,需要执行的php代码 如下图： ![18.png](http://www.bugsafe.cn/usr/uploads/2018/01/3116914365.png) 这个伪协议还有另一种使用方法，那么就是将需要执行的php代码使用base64编码：data:text/plain;base64,需要执行的base64php代码 如下图： ![19.png](http://www.bugsafe.cn/usr/uploads/2018/01/4064850690.png) ------------ php://input `php://input` 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。 ![21.png](http://www.bugsafe.cn/usr/uploads/2018/01/1475499797.png) 可以看到程序内是固定死后缀的，那么在包含 `php://input` 的时候就会自动拼接上 `.php` 所以肯定是不能正常使用 `php://input`的。所以我们也是可以使用 `%00` 截断的 ![20.png](http://www.bugsafe.cn/usr/uploads/2018/01/655724549.png) ![22.png](http://www.bugsafe.cn/usr/uploads/2018/01/1209641233.png) 可以看到终止符是非常强大的。 ------------ php://filter `php://filter` 该伪协议可以读取php文件代码以base64编码输出，比如说我们想读取一个php文件但是不想让它正常php执行代码后的结果，我们想要这个php文件的代码的时候就可以使用这个伪协议。 使用方法：php://filter/read=convert.base64-encode/resource=需要读取的文件代码内容 ![23.png](http://www.bugsafe.cn/usr/uploads/2018/01/22423135.png) 解码后可得到内容 ![24.png](http://www.bugsa…