什么是文件包含漏洞?
定义:一个代码的文件去包含其他代码的文件而导致的一种漏洞。
分为两种:内容的包含,函数的包含。
内容的包含:网站页面的导航条,底部链接,友情链接等,需要修改时通过单独存放在一个文件,由其它的文件去引用或者包含的文件
函数的包含:在网页面里需要引用的公共函数,如utils.php
文件包含漏洞发生的原因是什么?定义是什么?
发生的原因:为解决代码重复和维护困难的问题,使用include函数
定义:包含一些敏感文件和一些恶意的代码,造成的文件包含漏洞
URL关键字
URL参数名字出现了page、file、filename、include等关键字。
URL参数值出现了文件名,比如xxx.php xxx.html 等。
如何确定是否存在文件包含漏洞?怎么发现这种漏洞?
可以通过URL关键字的格式去判断,是否使用文件读取文件包含相关的函数。如include(),require(),fopen()等函数
发现:通过URL,代码审计去发现后访问敏感文件,能访问肯定存在,如果访问不到即使它有一些特殊的特征,说明有它有防御的措施
文件包含漏洞会造成什么危害?
会导致任意文件的访问,如果它可以包含恶意的代码的话,它就会直接获得web shell
如何防御和修复文件包含漏洞?
1.PHP配置
php.ini
allow_url_fopen=OFF
allow_url_include=OFF
2.禁用动态包含
一个网页代码的变量需要由前端代码传到后端代码进行处理,从而引发的文件漏洞
3.过滤协议,过滤目录字符
如:大小写绕过,双写绕过
4.设置文件白名单
只允许包含什么样的文件就包含什么样的文件,不要包含其他的文件。