文件包含漏洞利用与防御

412 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

什么是文件包含漏洞

指的是一个代码文件需要去包含其他的代码文件而导致的一种漏洞。

场景

1.内容的包含

一些网页的导航条出现在了多个地方,那我们是在一个文件里面写多段重复的代码吗?

明显不是这样的,我们会把导航条写到一个文件里面,然后让多个文件去包含引用就可以了。

2.函数的包含

多个页面需要用到同样的函数,那我们也会像上面的操作一样,先把函数提取出来,然后让多个页面去包含引用。

从位置来分类

本地文件包含

英文缩写: LFI
也可以叫: 目录遍历漏洞/任意文件访问漏洞

包含方法

1.固定文件名

2.通过接口动态包含

潜在危险

可能包含恶意代码,或者图片木马来获得shell 包含敏感文件

远程问价包含

英文缩写: RFI
类似于: XXE,SSRF
漏洞描述原因后果
XXEXML外部实体注入使用XML传输数据,并且允许解析外部实体导致访问敏感文件、探测端口、执行系统命令等等
SSRF服务端请求伪造因为使用了curl_exec()之类的函数导致端口扫描、攻击内网主机、绕过防火墙、获取敏感信息、访问大文件造成内存溢出、操作Redis等等问题
RFI远程文件包含使用include导致任意文件访问、包含shell代码

PHP相关函数和伪协议

函数

1.include()

包含并运行指定文件

2.include_once()

只包含一次,不重复包含

3.require()

包含并运行指定文件,出错时会停止

4.require_once()

只包含一次,不重复包含,出错时会停止

5.fopen()

打开文件或者URL

6.readfile

读取文件并写入到输出缓冲区

7.highlight_file

语法高亮一个文件

8.show_source

语法高亮一个文件

9.file_get_contents

将整个文件读入一个字符串

10.file

把整个文件读入一个数组

伪协议

1.file://

访问本地文件系统

2.http://

访问HTTP(s)网址

3.ftp://

访问FTP(s)URLs

4.php://

访问各个输入输出流

5.zlib://

压缩流

6.data://

数据

7.glob://

查找匹配的文件路径模式

8.phar://

PHP归档

9.ssh2://

Secure Shell 2

10.rar://

RAR

11.ogg://

音频流

12.expect://

处理交互式流

文件包含漏洞的挖掘和利用

URL参数名字出现了page/file/filename/include等等关键字

URL参数值出现XXX.php XXX.html

上传shell/读取敏感文件

文件包含漏洞修复方案

1.PHP配置

2.禁用动态包含

3.过滤协议、目录字符

4.设置文件白名单