IKEA官网本地文件包含(LFI)漏洞分析 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

IKEA官网本地文件包含(LFI)漏洞分析

41yf1sh 漏洞 2018-09-24 17:50:15
259410
收藏

导语:

背景

通过本地文件包含(Local File Inclusion)攻击,攻击者可以对服务器进行欺骗,使其共享不公开的文件,而不公开的文件中可能会包含网站的配置、日志和源代码文件。甚至有时该漏洞会导致远程代码执行。因此,LFI攻击被认为具有较高的威胁性。

大多数LFI攻击都是由动态加载图像(或其他文件)的代码引起的。如果请求的文件名或路径未经正确验证,那么服务器将会向攻击者提供所请求的私有文件。接下来,我们将对IKEA.com上发现的这一漏洞展开深入分析。

IKEA是位于福布斯TOP 50的一个知名品牌,他们不仅拥有优秀的家居产品,同时还运营着设计人性化的网站和应用程序。与此同时,IKEA开展了漏洞赏金活动,允许安全研究者对其网站和应用程序进行测试,并在遵守“负责任的漏洞披露原则”的前提下进行公开。

寻找目标

在针对一个域名进行测试时,我通常都首先遍历目标的所有子域名。为了让这一工作更为简单,我使用Aquatone工具,这一工具会在不同的公共域名数据库中进行搜索,并返回一个质量较高的活动子域名列表,同时还包含这些域名的截图。如果想要了解关于Aquatone的更多信息,建议查看Apple.com报告中的“Unrestricted File Upload”部分。

2.png

锁定目标:浴室规划师

我们找到的一个子域名是Bathroomplanner.IKEA.com,这是一个工具,可以让客户自行查找产品,并将其添加到自己的浴室产品列表中。

客户可以通过电子邮件的方式,将产品列表发到自己的邮箱,或者以PDF格式从本地下载。生成的PDF文件中包含一些文本和产品图片,可能看起来没有什么特别之处。

3.png

4.png

但是,我们有一个疑问,PDF是如何生成的?

拦截网络流量

要拦截网络流量,最好的工具就是Burp Suite了。于是,我们启动Burp Suite,开始拦截浏览器和IKEA网络服务器之间的流量。

我们打开首页,并试图将产品添加到我们的列表之中。

接下来,能够看到一些有趣的字段:

Data:包含产品和图像代码的JSON Blob,没有文件路径;
Shopping:包含产品列表的JSON Blob,没有文件路径;
Pdf:一长串字符,内容不明;
Images:一些Base64编码后的图像。

识别Base64编码字符串

如果我们发现一长串由字母和数字组成的字符,那么首先应该检查它是否为Base64编码的字符串。Base64编码通常用于文件的数据传输。在这里,有一个用于解码Base64字符则在线工具,位于:http://decodebase64.com/

6.png

我们将该字符串粘贴到解码器中,将会报错,原因在于字符串中包含%之类的无效字符。看到%符号,我们应该立刻联想到URL编码,因此我们在进行Base64解码之前,首先尝试进行URL解码。有一个URL解码的工具,位于:https://meyerweb.com/eric/tools/dencoder/

7.png

我们进行URL解码和Base64解码后,得到以下字符串:

8.png

这看上去很有趣。如果我们将产品添加到列表中,还会从IKEA的Web服务器中,提供一些用于生成PDF购物清单的模板。

如果我们能够将本地服务器文件放到PDF中,那么会怎样呢?例如,我们可以使其作为图像中的一部分显示。于是,我们尝试着将<img src=”/etc/passwd”>添加到模板中,再对其进行Base64编码和URL编码,替换掉Burp Suite拦截数据包中的pdf参数,并发送出去。

然而,这样的操作并不起作用,PDF生成器无法将这个文件识别成图像,并且也不会在输出中解析其中的内容。

再次尝试:识别PDF库,查找库中的漏洞

也许我们可以采取另一种方法,使PDF中包含文件。首先,我们需要找到用于生成PDF的工具。借助Google,我们搜索了模板中一些有特点的字符串,得到了如下搜索结果。

9google.png

现在,我们有两个选择:node-html-pdf库或mPDF库。在快速阅读了这两个库的文档后,我们发现它实际上是在这个项目中使用的mPDF库。

定位mPDF中的安全问题

我们立刻制作了一个mPDF的本地副本,以便检查它是否存在安全漏洞。一个比较好的起点是CHANGELOG,开发人员通常都使用该文件来跟踪版本之间的变化。

10.png

我们发现,在2017年10月19日的一次修改中,mPDF改变了他们处理注释标签的方式。因此,我们开始仔细查看文档中的这一标签。

11.png

在这里面,没有提到文件包含。让我们再次Google搜索,看看是否有其他人发现过相关的问题。

12.png


我们阅读了h0ng10提交的漏洞报告, 发现旧版本的mPDF存在严重的安全问题,其中有一个位置,能够以注释标记的方式包含文件。

接着,我们仔细查看了这个项目的Github提交,发现了其中有一段易受攻击的mPDF代码。

因此,我们可以对PDF的模板进行更改,找到上述漏洞详情所提到的标签位置,并尝试对其进行漏洞利用。

攻击过程

我们将以下标记添加到模板中:

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

随后,使用Burp Suite Repeater发送新模板并下载PDF文件。完成后,我们再用Foxit Reader打开文件,并开始寻找注释标记(如图中标黄的位置所示)。
13.png

双击这一标记,就能够打开从服务器上获取到的文件,由此证明,我们的攻击获得了成功。

14.png
总结

IKEA.com网站上提供了一个为用户导出PDF版本购物清单的功能,而该功能中所使用的PDF库受漏洞影响,允许攻击者通过在模板中添加特定标记,将文件嵌入到PDF中。这一功能在最新版本的该PDF库中已被禁用,但IKEA未将使用的PDF库更新到最新版本,因此我们成功利用了这一漏洞。在尝试中,我们证明了能够越权获得IKEA Web服务器上的文件,并成功得到了其生产服务器上/etc/passwd文件。

修复方案

不允许用户操纵PDF模板;

在客户端渲染包含购物清单的PDF,可以使用jsPDF;

更新到最新版本的mPDF库,禁用注释代码。

时间节点

2018年6月16日 发现此漏洞,通过Zerecopter提交漏洞详情

2018年6月17日 发现PDF生成功能已经被禁用(推测是IKEA通过IDS发现我们获取到了敏感文件)

2018年6月18日 Zerocopter无法确认漏洞是否存在(因为PDF生成功能已被禁用),但根据报告中的内容,将这一漏洞情况通知IKEA

2018年6月25日 请求Zerocopter向我们同步当前进展

2018年6月27日 Zerocopter反馈:IKEA在6月19日就开始修复这一问题

2018年8月9日 经过多次沟通,确认IKEA已修复这一漏洞

2018年8月13日 Zerocopter建议我在公开漏洞详情时,隐去IKEA的名称

2018年8月20日 经过与IKEA团队的反复沟通,要求按照“负责任的漏洞披露原则”进行漏洞详情公开

2018年9月11日 获得Zerocopter的250欧元漏洞奖励

2018年9月17日 在多次协商沟通后,IKEA终于对“负责任的漏洞披露原则”进行了正确理解,并正式授权我可以披露漏洞详情

2018年9月18日 发布漏洞详情

  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务