13-文件包含漏洞
1.概述
程序开发人员通常会把可重复使用的函数写到单个文件中,使用某个函数的时候,直接调用此文件,无需再次编写,这种调用文件的过程通常称为包含
程序开发人员都希望代码更加灵活,所以通常会把被包含的文件设置为变量,来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用任意文件,造成文件包含漏洞 几乎所有的脚本语言都会提供文件包含功能
文件包含漏洞在PHP Web Application 中居多,在JSP/ASP/ASP.net程序中比较少。本文以PHP 为例,说明文件包含漏洞
2.漏洞产生原因
- Web 应用实现了动态包含
- 动态包含的文件路径参数,客户端可控
3.
远程包含漏洞的前提:如果使用的是include和require,我们则需要对php.ini进行如下配置:
allow_url_fopen = on //默认打开
Allow_url_include=on //默认关闭。
4. 漏洞利用
- 制作一个图片木马,通过文件上传漏洞上传
- 通过文件包含漏洞对该图片木马进行"包含"
- 获取执行结果
5. 文件包含防范措施
- 在功能设计上尽量不要将文件包含函数对应的文件放给前端进行选择和操作。
- 过滤各种../../,http://,https://
- 配置php.ini配置文件:
allow_url_fopen = off
allow_url_include=off
magic_quotes_gpc=on
- 通过白名单策略,仅允许包含运行指定的文件,其他的都禁止。