IKEA.com本地文件包含漏洞之PDF解析的巧妙利用
字数 1149 2025-08-18 11:37:41
PDF解析中的本地文件包含漏洞分析与利用
漏洞背景
本地文件包含(LFI)漏洞是一种高危漏洞类型,攻击者可能利用其:
- 读取服务器文件源码或敏感信息
- 包含恶意文件
- 执行任意代码
- 最终可能导致服务器被完全控制
大多数LFI攻击源于动态加载图像或其他文件的代码,当请求的文件名或路径未经过正确验证时就会发生。
漏洞发现过程
目标识别
- 使用Aquatone工具枚举子域,发现
Bathroomplanner.IKEA.com子域 - 该子域提供在线浴室规划工具,允许用户:
- 查找产品并添加到列表
- 通过电子邮件发送产品列表
- 以PDF格式下载产品列表
流量分析
使用Burp Suite拦截流量,发现PDF生成请求包含几个关键字段:
data: 包含产品和图片代码的JSON blobshopping: 包含产品列表的JSON blobpdf: 一长串不明字符images: base64编码的图片
参数解码分析
pdf参数经过URL编码和Base64编码双重处理- 解码后得到的是PDF模板字符串,用于生成最终的PDF购物清单
漏洞利用尝试
初始尝试
在模板中插入``尝试包含系统文件,但PDF生成器无法识别为有效图片。
深入分析
- 通过模板中的独特字符串识别使用的PDF库为mPDF
- 研究mPDF的CHANGELOG,发现2017年10月19日的更新改变了注释标签的处理方式
- 进一步研究发现旧版本mPDF存在严重安全问题,可通过注释标记包含文件
成功利用
在模板中添加恶意注释标记:
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />
通过Burp Suite Repeater发送修改后的模板,下载PDF后用Foxit Reader打开,可查看嵌入的服务器文件内容。
技术原理
mPDF库的注释功能(<annotation>标签)存在设计缺陷:
- 允许直接引用服务器文件路径
- 未对文件路径进行充分验证
- 旧版本未禁用此危险功能
修复建议
- 禁止用户操纵PDF模板:不应允许客户端控制PDF生成模板
- 客户端渲染方案:使用jsPDF等客户端库生成PDF
- 及时更新库:升级到最新版mPDF,确保禁用危险功能
- 输入验证:对所有用户提供的参数进行严格验证
漏洞披露时间线
- 2018.6.16:发现并提交漏洞
- 2018.6.17:IKEA临时禁用PDF生成功能
- 2018.6.18-2018.9.11:漏洞确认、修复和奖励过程
- 2018.9.18:正式公开漏洞详情
总结
此案例展示了:
- 第三方库安全更新的重要性
- 用户输入控制的危险性
- 多层编码可能隐藏的安全问题
- 负责任的漏洞披露流程
通过分析PDF生成过程中的参数处理,结合对使用库的深入研究,成功发现并利用了本地文件包含漏洞。这提醒开发人员需要全面审查第三方库的安全特性,并及时应用安全更新。