1 漏洞描述
程序开发人员通常会把可重复使用函数或语句写到单个文件中,形成“封装”。在使用某个功能的时候,直接调用此文件,无需再次编写,提高代码重用性,减少代码量。这种调用文件的过程通常称为包含。
2 漏洞原理
任意文件包含漏洞:file inclusion
指当服务器开启:
allow_url_fopen = On/Off # 通过远程方式打开文件
allow_url_include = On/Off # 通过远程方式包含文件
就可以通过 php 的某些特性函数:
include()
include_once()
require()
require_once()
去包含任意文件。此时如果对文件来源不严格过滤审查,就容易包含恶意文件。而攻击者可以通过构造这个恶意文件来达到目的。
- 文件包含即程序通过包含函数调用本地或远程文件,以此来实现拓展功能
- 被包含的文件可以是各种文件格式,而当文件里面包含恶意代码,则会形成远程命令执行或文件上传漏洞
- 文件包含漏洞主要发生在有包含语句的环境中
3 漏洞场景
LFI:local fileinclude 本地文件包含漏洞,被包含的文件在服务器本地
?filepath=../phpinfo.php
RFI:remote file include 远程文件包含漏洞,被包含的文件在第三方服务器(如站库分离)
?filepath=http://10.9.64.180/phpinfo.jpg
4 漏洞评级
高危
5 漏洞危害
- 配合文件上传漏洞 getshell
- 可执行任意脚本代码
- 可导致网站源码文件及配置文件泄露
- 远程包含 getshell
- 控制整个网站甚至服务器
6 漏洞验证
7 漏洞利用
- 读取敏感文件
- 读取 PHP 文件源码
- 执行 PHP 命令
- 包含日志
8 防御方案
- 尽量减少使用动态包含
- 严格过滤被包含文件的路径
- 将参数 allow_url_include 设置为 Off
- 使用参数 open_basedir 限定文件访问范围
9 典型案例
2006年,PHPMyAdmin的文件包含漏洞被曝光,攻击者可以通过构造恶意的URL参数,让PHPMyAdmin包含远程服务器上的文件,从而实现远程执行任意代码的攻击。
2012年,Wordpress的文件包含漏洞被曝光,攻击者可以通过构造恶意的URL参数,让Wordpress包含远程服务器上的文件,从而实现远程执行任意代码的攻击。