文件包含漏洞
1.1文件包含的概述
开发人员将需要重复调用的函数写入一个文件,对该文件进行包含时产生的操作。这样编写代码能减少代码冗余,降低代码后期维护难度。保证网站整体风格统一:导航栏
底部 footer栏等。
1.2产生原因
文件包含函数加载的参数没有经过过滤或严格定义,可以被用户控制,包含其他恶意文件,导致了执行非预期代码。
1.3 PHP文件包含
PHP中提供了四个文件包含的函数,分别是include()、include_once()、require()和require_once()。
include()
:函数出现错误时,会抛出一个警告,程序继续运行
require()
:函数出现错误时,会直接报错并退出程序执行。
include_once()
:1函数出现错误时,会抛出警告,且仅包含一次。
require_once()
:出错时直接退出;且仅包含一次。在脚本执行期间同一个文件可能被多次引用,确保只包含一次以避免函数重定义、变量重新赋值等问题。
文件包含漏洞类型以及利用方式
2.1本地文件包含
被包含的文件存放于网站服务器上。
##2.1.1 Windows敏感文件
C:\boot.ini 查看系统版本
C:\windows\system32\inetsrv\MetaBase.xml //iis配置文件
C:\window\repair\same //存储windows系统初次安装密码
C:\ProgramFiles\mysqImy.ini //mysql配置信息
C:\ProgramFiles\mysqI\data\mysql\user.MYD //mysql root密码
C:lwindowslphp.ini //php配置信息
2.2远程文件包含
当被包含的文件在第三方服务器(攻击者的服务器)时,就形成远程文件包含
3.1泄露敏感信息
通过文件包含漏洞去读取敏感文件内容。
文件包含漏洞进阶
01文件包含漏洞利用方式
通过在url端或brupsuite反射 添加php脚本
再从网页端进入日志文件会自动解析php脚本
从而达到目的
1.2、php伪协议利用
1.2.1 file协议
本地文件传输协议,用于访问本地计算机中的文件。好比通过Windows的资源管理器中打开文件或者通过右键单击‘打开′一样。
格式: file://filepath
1.2.2 php://filter协议
用于读取源码且在双off的情况下也可以正常使用
php://filter/read=convert.base64-encode/resource=include.php
1.2.3 zip://协议
zip://、bzip2://、zlib://协议在双 off的情况下也可以正常使用,都属于压缩流,可以访问压缩文件中的子文件。
格式:zip://[压缩文件绝对路径]#[压缩文件内的子文件名]
1.2.4 phar://协议
类似于zip协议,但是可以使用相对路径。双off的情况下也可以使用。
格式: phar://[压缩文件绝对/相对路径]/[压缩文件内的子文件名]
02文件包含漏洞修复
2.1文件包含漏洞修复
尽量不使用动态包含,无需情况下设置allow_url_include和allow_url_fopen为关闭;
对可以包含的文件进行限制:使用白名单的方式,或者设置包含的目录,open_basedir;严格检查用户输入,参数中不允许出现…/之类的目录跳转符;
不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。