谈谈任意文件包含的理解
1.漏洞描述
- 攻击者可以利用任意文件包含漏洞,读取文件,执行代码,对服务器造成危害。
- 程序开发人员通常会把可重复使用函数或语句写到单个文件中,形成“封装”。在使用某个功能的时候,直接调用此文件,无需再次编写,提高代码重用性,减少代码量。这种调用文件的过程通常称为包含。
- 程序开发人员都希望代码更加灵活,所以会把被包含的文件的路径设置为变量,来进行动态调用(包含),但正是由于这种灵活性,如果被包含文件的路径客户端可控,造成任意文件包含漏洞。
- 几乎所有的脚本都会提供文件包含的功能,文件包含漏洞在PHP 的Web 应用中居多,在JSP/ASP/ASP.NET 程序中比较少。
2.漏洞原理
PHP 文件包含是程序设计的基础功能之一,能够减少代码量,提高开发效率。但是使用文件包含功能时,实现了动态包含,就有产生文件包含漏洞的风险。如果实现动态包含的参数,Web 应用没有进行严格的校验,浏览器客户端用户可以影响控制被包含文件的路径,就会产生任意文件包含漏洞。
- 动态包含
- 被包含文件路径可控
特点:
- 读取文件
- 执行代码
3.漏洞场景
- 类似于metinfo_5.0.4 实现了动态包含,有存在文件包含漏洞的风险。
- 类似于文件读取的URL,可能存在文件包含。
4.漏洞评级
⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ 高危
5.漏洞危害
攻击者利用文件包含漏洞,可以:
- 读取文件
- 执行PHP 代码
- 直接获取网站后门
- 控制网站
- 控制服务器
6.漏洞验证
?filepath=./a.jpg
7.漏洞利用
- 包含图片木马
菜刀直接链接。
- 读取敏感文件
利用文件包含漏洞,也可以读取敏感文件。
前提条件:
目标文件存在(已知目标文件路径);
具有文件可读权限。
- 读取 PHP 源码
利用php://fileter 读取。
- 执行 PHP 命令
利用条件:
- 利用 php://input 执行PHP 命令;
- 远程文件包含开启。
- 包含图片马写 shell
条件:
- 确定文件包含漏洞存在;
- 菜刀不能直接连接。
写Shell:
- 包含日志
Apache 日志:
- 访问日志
- 错误日志
Nginx 日志:
- 访问日志
- 错误日志
SSH 日志
邮件日志
8.防御方案
- 尽量少的使用动态包含。
- 严格过滤被包含文件的路径。
- 将参数 allow_url_include 设置为 Off。
- 使用参数 open_basedir 限定文件访问范围。
- open_basedir = c:\phpstudy_2016\www\
9.典型案例
metinfo_5.0.4_file-include