在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: 包含产品图片和描述的JSON
  • shopping: 产品列表的JSON
  • pdf: 长字符串(实际是base64编码数据)
  • images: base64编码的图片

2.3 数据解码

  1. 对长字符串进行URL解码
  2. 对解码结果进行Base64解码
  3. 发现这是用于生成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 执行攻击

  1. 将构造的模板进行Base64编码
  2. 再进行URL编码
  3. 通过Burp Suite的Repeater发送修改后的请求
  4. 下载生成的PDF文件
  5. 使用PDF阅读器(如Foxit Reader)打开,点击黄色标签即可查看服务器文件内容

4. 漏洞原理分析

宜家网站存在以下问题:

  1. 允许用户操作PDF生成模板
  2. 使用的mPDF库版本过旧,未修复已知漏洞
  3. 未对用户输入进行充分过滤和验证
  4. 服务器端未限制可访问的文件路径

5. 防御措施

5.1 针对此漏洞的修复方案

  1. 升级mPDF库:使用最新版本,已修复相关漏洞
  2. 限制用户输入:禁止用户直接操作PDF模板
  3. 客户端生成PDF:考虑使用jsPDF等客户端库
  4. 输入验证:严格验证所有用户提供的参数

5.2 通用防御策略

  1. 禁用危险函数:如PHP中的includerequire
  2. 使用白名单:只允许访问特定目录下的特定类型文件
  3. 设置open_basedir:限制PHP可访问的目录范围
  4. 日志监控:监控可疑的文件访问行为
  5. 最小权限原则:Web服务器以最低必要权限运行

6. 漏洞披露流程

6.1 负责任的披露原则

  1. 发现漏洞后及时通知厂商
  2. 给予厂商合理时间修复
  3. 修复后公开漏洞细节
  4. 保持与厂商的良好沟通

6.2 披露时间线

  • 报告漏洞后几周内修复
  • 完整披露过程耗时约三个月
  • 通过Zerocopter平台协调披露

7. 学习资源

7.1 工具推荐

  1. 子域名探测:Aquatone
  2. 抓包分析:Burp Suite
  3. 编码解码
    • Base64解码:http://decodebase64.com/
    • URL解码:https://meyerweb.com/eric/tools/dencoder/

7.2 相关阅读

  1. mPDF官方文档及CHANGELOG
  2. OWASP关于文件包含漏洞的指南
  3. 各国漏洞披露政策指南

8. 总结

本案例展示了如何:

  1. 通过系统方法发现潜在漏洞点
  2. 分析应用程序行为和数据流
  3. 研究第三方组件的已知漏洞
  4. 构造有效的攻击载荷
  5. 执行负责任的漏洞披露

对于安全研究人员,掌握这些技能至关重要;对于开发人员,理解这些攻击原理有助于编写更安全的代码。

本地文件包含漏洞(LFI)攻击教学文档 1. 本地文件包含漏洞概述 本地文件包含(Local File Inclusion, LFI)是一种高危漏洞,攻击者可以利用它: 读取服务器上的敏感文件(配置文件、日志文件、源代码等) 在某些情况下可能导致远程命令执行(RCE) 主要成因是动态加载图片或其他文件时未严格验证用户输入 2. 漏洞发现过程 2.1 目标识别 使用Aquatone工具探测子域名 发现目标: Bathroomplanner.IKEA.com (宜家浴室规划工具子站) 功能分析:该站点允许用户保存产品列表为PDF,PDF包含文字和产品图片 2.2 抓包分析 使用Burp Suite拦截请求,发现关键参数: data : 包含产品图片和描述的JSON shopping : 产品列表的JSON pdf : 长字符串(实际是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模板中添加恶意标签: 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. 总结 本案例展示了如何: 通过系统方法发现潜在漏洞点 分析应用程序行为和数据流 研究第三方组件的已知漏洞 构造有效的攻击载荷 执行负责任的漏洞披露 对于安全研究人员,掌握这些技能至关重要;对于开发人员,理解这些攻击原理有助于编写更安全的代码。