未能加载项目文件。给定编码中的字符无效_利用动态PDF实现本地文件包含(宜家)

af71ee0d240b5f89b33610d4f671ffe5.png

背景

本地文件包含(LFI)可以说是一个相当厉害的漏洞,攻击者可借此获得服务器上的众多隐私文件,例如网站的配置文件,日志文件和源代码文件。有时甚至可以发展为远程执行代码。因此,LFI一般是我漏洞挖掘时的重中之重。

大多数LFI都是由于动态加载图像或其他文件的代码出现缺陷引发的。如果服务器没有验证攻击者请求的文件名或路径是否安全,它就会主动向攻击者提供大量敏感信息。

http://IKEA.com

宜家是世界范围内的著名的品牌;它在福布斯榜排名前50名。基本上每个人都可以在上面找到自己喜欢的家具,而对于我来说,我最喜欢的家具就是它们的“Bug Bounty”,就让我们开始吧。

寻找目标

测试开始时,我习惯枚举目标的所有(子)域。而我使用的工具是Aquatone。此工具会在不同的公共域数据库中查找子域名,并返回一个看起来很不错的活动子域列表,甚至还有屏幕截图。我以前写过一篇在苹果网站发现文件包含的文章,使用的正是Aquatone。

0176ef3073d319c37ffdaed32af0b25e.png

Bathroom planner

而我最终在这些子域名中盯上Bathroomplanner.IKEA.com,这是一个展示浴室用品的网站,你查找自己所需的产品,并将其添加到自己的浴室产品列表中。

你还可以以PDF格式在往本地下载浴室产品列表,得到一个包含文本和产品图像的PDF文件,乍一看,似乎是个很普通的功能。

9201eddf29bb4c75b2b50a65d7bb2e85.png

9c2273409c71244e393e0de1df229cb7.png

但是,这个动态生成的PDF似乎有点意思。

查看流量

接下来,我用了BurpSuite去查看当我把浴室产品添加到我的浴室产品列表时所发出的流量。

188e6527195988ab8a5bec01d3549485.png

我们可以看到在HTTP请求中有很多有意思的字段:

  • data; 包含产品和图像代码的JSON blob,没有文件路径
  • shopping; 包含我们的产品列表的JSON blob,没有文件路径
  • pdf:一长串字符,内容暂不清楚
  • images:一些base64编码得图像

识别base64字符串

此时,我的重点自然是pdf那一长串字符,它们看起来就像被base64编码过,base64编码通常用来处理一些特殊字符,在HTTP请求中很常见,也很容易解码,我使用了http://decodebase64.com/网站对它进行了解码。

f8725e8ba15f362ed107249b28c0756c.png

但是,由于它包含了%这类无效字符,导致解码失败。所以我要先用https://meyerweb.com/eric/tools/dencoder/对其进行URL解码,然后再进行base64解码。

8a8c7135557ff42bb22685cf30977ff3.png

很快,我得到了如下字符串。

a15195248676f106795f6e576e3fec71.png

Ok,这看起来很有趣。貌似这是一个固定格式,我好像可以通过提交HTML代码去生成PDF文件。如果我将本地服务器文件包含到此PDF文件中,会发生什么?于是我将<img src=”/etc/passwd”>添加到pdf的内容里面,再进行base64和URL编码,最后替换BurpSuite中的pdf参数并按Forward。

好吧,肯定没那么简单。PDF生成器既不会将此文件识别为图像,也不会在输出中解析它...。

Plan B

看样子我们需要更加规范的方式来往PDF中塞入我们的代码。首先,我们需要确定宜家的pdf动态生成机制是用什么技术实现的。我在Google中搜索了几个独特字符串,很快找到了结果。

842602c4afcebdd9e4fda2ecaed35440.png


现在我们有两个选项,node-html-pdf库或mPDF库。在快速阅读了两者的文档之后,我发现宜家使用的是mPDF库。

mPDF

我立刻开始研究mPDF,好挖掘它的安全漏洞。最好的起点就是它的CHANGELOG,这一般是用来跟踪版本之间变化。

477223639aa016b41977c4aa97a81d7c.png

很快,我注意到了有关处理注释标签的安全类改进记录。这个记录时间为2017年10月19日。让我们仔细看看说明文档中关于此标签的说明。

52724cea611ba6b6b437d2eb46026a27.png

嗯..好像没有涉及到本地文件包含。让我们再次谷歌一下吧。

461101f9041c34d1edfd7ddd5edde065.png

看来,旧版本的mPDF存在严重的安全问题,从h0ng10报告的问题可以看到,该注释标签可以用来包含文件。

如果我们仔细看看这个项目的Github的commit,我们就会发现存在漏洞的mPDF代码。

现在,让我们可以更改一下参数PDF的内容,使用这个注释标签来包含文件,如果宜家网站的mPDF没有及时更新,攻击应该就会生效。

攻击

我们将以下代码添加到模板中:

<annotation file=”/etc/passwd” content=”/etc/passwd” icon=”Graph” title=”Attached File: /etc/passwd” pos-x=”195” />

使用BurpSuite的Repeater模块发送请求,接着下载PDF文件。然后我们用Foxit Reader打开文件,并开始寻找黄色注释标记。

06a54d0c945ad783eb76778edd7f131b.png

Bingo!我们成功看到了/etc/passwd文件。是时候提交漏洞报告并等待宜家的回复了!

03078685d9c2c78c4bbece814db40653.png

结论

http://IKEA.com旗下的浴室产品网站能动态生成pdf文件,内容由用户控制。由于未及时进行安全更新,该功能存在严重的安全漏洞,攻击者可以借此读取服务器本地文件,例如我在上面所读取的/etc/passwd文件。

解决方案

  • 禁止用户操作PDF模板
  • 使用其他动态生成PDF的模块
  • 更新到最新版本的mPDF库,禁用注释标签

奖励

250欧元

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场

来源:利用动态PDF实现本地文件包含(宜家)|NOSEC安全讯息平台 - NOSEC.ORG

原文:https://medium.com/@jonathanbouman/local-file-inclusion-at-ikea-com-e695ed64d82f

白帽汇从事信息安全,专注于安全大数据、企业威胁情报。

公司产品:FOFA-网络空间安全搜索引擎、FOEYE-网络空间检索系统、NOSEC-安全讯息平台。

为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值