![af71ee0d240b5f89b33610d4f671ffe5.png](https://i-blog.csdnimg.cn/blog_migrate/ad59e83d20557ca1ed472f4c0ac709e4.jpeg)
背景
本地文件包含(LFI)可以说是一个相当厉害的漏洞,攻击者可借此获得服务器上的众多隐私文件,例如网站的配置文件,日志文件和源代码文件。有时甚至可以发展为远程执行代码。因此,LFI一般是我漏洞挖掘时的重中之重。
大多数LFI都是由于动态加载图像或其他文件的代码出现缺陷引发的。如果服务器没有验证攻击者请求的文件名或路径是否安全,它就会主动向攻击者提供大量敏感信息。
http://IKEA.com
宜家是世界范围内的著名的品牌;它在福布斯榜排名前50名。基本上每个人都可以在上面找到自己喜欢的家具,而对于我来说,我最喜欢的家具就是它们的“Bug Bounty”,就让我们开始吧。
寻找目标
测试开始时,我习惯枚举目标的所有(子)域。而我使用的工具是Aquatone。此工具会在不同的公共域数据库中查找子域名,并返回一个看起来很不错的活动子域列表,甚至还有屏幕截图。我以前写过一篇在苹果网站发现文件包含的文章,使用的正是Aquatone。
![0176ef3073d319c37ffdaed32af0b25e.png](https://i-blog.csdnimg.cn/blog_migrate/f9d7ced2a3160079afcb5b36d0ed19a9.jpeg)
Bathroom planner
而我最终在这些子域名中盯上Bathroomplanner.IKEA.com,这是一个展示浴室用品的网站,你查找自己所需的产品,并将其添加到自己的浴室产品列表中。
你还可以以PDF格式在往本地下载浴室产品列表,得到一个包含文本和产品图像的PDF文件,乍一看,似乎是个很普通的功能。
![9201eddf29bb4c75b2b50a65d7bb2e85.png](https://i-blog.csdnimg.cn/blog_migrate/bfc94ea237f25821af98e90e970d53ea.jpeg)
![9c2273409c71244e393e0de1df229cb7.png](https://i-blog.csdnimg.cn/blog_migrate/6d4f00cb40168db5b5080742d3756839.jpeg)
但是,这个动态生成的PDF似乎有点意思。
查看流量
接下来,我用了BurpSuite去查看当我把浴室产品添加到我的浴室产品列表时所发出的流量。
![188e6527195988ab8a5bec01d3549485.png](https://i-blog.csdnimg.cn/blog_migrate/5d6cd59f27d38ae9e39541c1763d4bc8.jpeg)
我们可以看到在HTTP请求中有很多有意思的字段:
- data; 包含产品和图像代码的JSON blob,没有文件路径
- shopping; 包含我们的产品列表的JSON blob,没有文件路径
- pdf:一长串字符,内容暂不清楚
- images:一些base64编码得图像
识别base64字符串
此时,我的重点自然是pdf
那一长串字符,它们看起来就像被base64编码过,base64编码通常用来处理一些特殊字符,在HTTP请求中很常见,也很容易解码,我使用了http://decodebase64.com/网站对它进行了解码。
![f8725e8ba15f362ed107249b28c0756c.png](https://i-blog.csdnimg.cn/blog_migrate/07208ce83879fccabbb74af1d6925f3b.jpeg)
但是,由于它包含了%
这类无效字符,导致解码失败。所以我要先用https://meyerweb.com/eric/tools/dencoder/对其进行URL解码,然后再进行base64解码。
![8a8c7135557ff42bb22685cf30977ff3.png](https://i-blog.csdnimg.cn/blog_migrate/ab233319c02e7f46fcc4efca732df59e.jpeg)
很快,我得到了如下字符串。
![a15195248676f106795f6e576e3fec71.png](https://i-blog.csdnimg.cn/blog_migrate/26e184416a7d279831c15465f5abfa7b.jpeg)
Ok,这看起来很有趣。貌似这是一个固定格式,我好像可以通过提交HTML代码去生成PDF文件。如果我将本地服务器文件包含到此PDF文件中,会发生什么?于是我将<img src=”/etc/passwd”>
添加到pdf的内容里面,再进行base64和URL编码,最后替换BurpSuite中的pdf参数并按Forward。
好吧,肯定没那么简单。PDF生成器既不会将此文件识别为图像,也不会在输出中解析它...。
Plan B
看样子我们需要更加规范的方式来往PDF中塞入我们的代码。首先,我们需要确定宜家的pdf动态生成机制是用什么技术实现的。我在Google中搜索了几个独特字符串,很快找到了结果。
![842602c4afcebdd9e4fda2ecaed35440.png](https://i-blog.csdnimg.cn/blog_migrate/9dbf4e02e7d5317ca06fcffb85c8e89a.jpeg)
现在我们有两个选项,node-html-pdf库或mPDF库。在快速阅读了两者的文档之后,我发现宜家使用的是mPDF库。
mPDF
我立刻开始研究mPDF,好挖掘它的安全漏洞。最好的起点就是它的CHANGELOG,这一般是用来跟踪版本之间变化。
![477223639aa016b41977c4aa97a81d7c.png](https://i-blog.csdnimg.cn/blog_migrate/9c329b4851d8f4d919e84403e1ef650f.jpeg)
很快,我注意到了有关处理注释标签的安全类改进记录。这个记录时间为2017年10月19日。让我们仔细看看说明文档中关于此标签的说明。
![52724cea611ba6b6b437d2eb46026a27.png](https://i-blog.csdnimg.cn/blog_migrate/d033a3305b52514458a6e89b76af6301.jpeg)
嗯..好像没有涉及到本地文件包含。让我们再次谷歌一下吧。
![461101f9041c34d1edfd7ddd5edde065.png](https://i-blog.csdnimg.cn/blog_migrate/f3983d2c99a9b6c03e1ced405f81d3ee.jpeg)
看来,旧版本的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](https://i-blog.csdnimg.cn/blog_migrate/3708ac4c8284a68fa10c1564b8f6989c.jpeg)
Bingo!我们成功看到了/etc/passwd
文件。是时候提交漏洞报告并等待宜家的回复了!
![03078685d9c2c78c4bbece814db40653.png](https://i-blog.csdnimg.cn/blog_migrate/4000e7130ae594fc870655312091895c.jpeg)
结论
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-安全讯息平台。
为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务。