在IKEA.com中的本地文件包含
字数 1548 2025-08-27 12:33:42
本地文件包含漏洞(LFI)攻击教学文档
1. 本地文件包含漏洞概述
本地文件包含(Local File Inclusion, LFI)是一种高危漏洞,攻击者可以利用它:
- 读取服务器上的敏感文件(配置文件、日志文件、源代码等)
- 在某些情况下可能导致远程命令执行(RCE)
- 主要成因是动态加载图片或其他文件时未严格验证用户输入
2. 漏洞发现过程
2.1 目标识别
- 使用Aquatone工具探测子域名
- 发现目标:
Bathroomplanner.IKEA.com(宜家浴室规划工具子站) - 功能分析:该站点允许用户保存产品列表为PDF,PDF包含文字和产品图片
2.2 抓包分析
使用Burp Suite拦截请求,发现关键参数:
data: 包含产品图片和描述的JSONshopping: 产品列表的JSONpdf: 长字符串(实际是base64编码数据)images: base64编码的图片
2.3 数据解码
- 对长字符串进行URL解码
- 对解码结果进行Base64解码
- 发现这是用于生成PDF的HTML模板
3. 漏洞利用技术
3.1 初步尝试
尝试在模板中添加``,但PDF解析器无法识别
3.2 识别PDF库
通过模板中的特征字符串搜索,确定使用的是mPDF库
3.3 研究mPDF漏洞
在mPDF的CHANGELOG中发现:
- 旧版本存在严重安全漏洞
- 特别是
annotation标签可导致本地文件包含
3.4 构造攻击载荷
在PDF模板中添加恶意标签:
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph"
title="Attached File: /etc/passwd" pos-x="195" />
3.5 执行攻击
- 将构造的模板进行Base64编码
- 再进行URL编码
- 通过Burp Suite的Repeater发送修改后的请求
- 下载生成的PDF文件
- 使用PDF阅读器(如Foxit Reader)打开,点击黄色标签即可查看服务器文件内容
4. 漏洞原理分析
宜家网站存在以下问题:
- 允许用户操作PDF生成模板
- 使用的mPDF库版本过旧,未修复已知漏洞
- 未对用户输入进行充分过滤和验证
- 服务器端未限制可访问的文件路径
5. 防御措施
5.1 针对此漏洞的修复方案
- 升级mPDF库:使用最新版本,已修复相关漏洞
- 限制用户输入:禁止用户直接操作PDF模板
- 客户端生成PDF:考虑使用jsPDF等客户端库
- 输入验证:严格验证所有用户提供的参数
5.2 通用防御策略
- 禁用危险函数:如PHP中的
include、require等 - 使用白名单:只允许访问特定目录下的特定类型文件
- 设置open_basedir:限制PHP可访问的目录范围
- 日志监控:监控可疑的文件访问行为
- 最小权限原则:Web服务器以最低必要权限运行
6. 漏洞披露流程
6.1 负责任的披露原则
- 发现漏洞后及时通知厂商
- 给予厂商合理时间修复
- 修复后公开漏洞细节
- 保持与厂商的良好沟通
6.2 披露时间线
- 报告漏洞后几周内修复
- 完整披露过程耗时约三个月
- 通过Zerocopter平台协调披露
7. 学习资源
7.1 工具推荐
- 子域名探测:Aquatone
- 抓包分析:Burp Suite
- 编码解码:
- Base64解码:http://decodebase64.com/
- URL解码:https://meyerweb.com/eric/tools/dencoder/
7.2 相关阅读
- mPDF官方文档及CHANGELOG
- OWASP关于文件包含漏洞的指南
- 各国漏洞披露政策指南
8. 总结
本案例展示了如何:
- 通过系统方法发现潜在漏洞点
- 分析应用程序行为和数据流
- 研究第三方组件的已知漏洞
- 构造有效的攻击载荷
- 执行负责任的漏洞披露
对于安全研究人员,掌握这些技能至关重要;对于开发人员,理解这些攻击原理有助于编写更安全的代码。