利用动态PDF实现本地文件包含(宜家)

Track-SSG   ·   发表于 2019-04-09 10:55:04   ·   漏洞文章

背景

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

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

IKEA.com

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

寻找目标

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

33.png

Bathroom planner

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

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

44.png

55.png

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

查看流量

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

66.png

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

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

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

    77.png

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

    88.png

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

    99.png

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

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

    Plan B

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

    100.png

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

    mPDF

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

    110.png

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

    120.png

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

    130.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打开文件,并开始寻找黄色注释标记。

    140.png

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

    150.png

    结论

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

    解决方案

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

    250欧元

    本文转载自白帽汇
               


    打赏我,让我更有动力~

    0 条回复   |  直到 2019-4-9 | 964 次浏览
    登录后才可发表内容
    返回顶部 投诉反馈

    © 2016 - 2024 掌控者 All Rights Reserved.