IKEA.com本地文件包含漏洞之PDF解析的巧妙利用
背景
本地文件包含(LFI)漏洞是一种危害性较大的漏洞类型。一旦出现攻击者将可能利用其,读取文件源码或敏感信息,包含恶意文件,执行任意代码,甚至控制服务器等。大多数LFI攻击都是由动态加载图像或其他文件的代码引起的。如果请求的文件名或路径未做正确验证,就会造成该漏洞的发生。
IKEA.com
宜家是世界上最强大的品牌之一;在福布斯排行榜中为前50名。毫不夸张的说,每个人家里都至少有一件产品来自宜家;我爱IKEA!你呢?可以在评论中告诉我你最喜欢的宜家产品。
除了宜家的产品外,另一个值得我称赞的地方就是,他们拥有大量且设计合理的网站和应用程序。为了更好的用户体验,他们还为此开设了一个bug赏金计划,允许我们安全的渗透测试他们的平台并发布,只要我们遵守漏洞披露规则。下面,就让我们试一试吧!
寻找目标
大多数时候我都是从枚举子域开始的,Aquatone是我最常用的一款枚举工具。该工具会在不同的公共域数据库中查找域,并返回活动子域列表,包括屏幕截图等。了解有关Aquatone的更多信息,请查看Apple.com报告中的Unrestricted File Upload(无限制文件上传漏洞)。
Bathroom planner
经过一番查找,其中一个Bathroomplanner.IKEA.com的子域引起了我的注意。这是宜家提供的一个在线规划工具,主要是为客户体提供灵感和现成的浴室解决方案。通过它客户可以查找产品,并将其添加到自己的浴室产品列表中。除此之外,还可以通过电子邮件发送产品列表,或以PDF格式下载至本地保存。生成的PDF文件包含一些文本和产品图片信息。如下:
到这里我有个疑问,这个PDF是如何生成的呢?
让我们打开burp通过拦截浏览器和宜家服务器之间的流量来一探究竟。我们打开首页,并尝试将产品添加到我们的列表中。
可以看到这里有几个非常有意思的字段:
data:包含产品和图片代码的JSON blob,没有文件路径
shopping:包含我们产品列表的JSON blob,没有文件路径
pdf:一长串字符,内容不明
images:一些base64编码后的图片
base64解码
当你看到一长串字符时,请务必检查其是否为Base64编码的字符串。Base64编码常用于文件的数据传输。这里推荐大家一个在线的base64字符串编码解码网站:http://decodebase64.com/
如果我们将该字符串直接粘贴到解码器中,你会发现解码出错;这是因为该字符串中包含有%之类的无效字符。这也说明该字符串可能也经过了URL编码,所以在Base64解码之前,我们先进行URL解码。同样,推荐大家一个在线的URL解码和编码网站:https://meyerweb.com/eric/tools/dencoder/
进行URL解码后,再Base64解码我们将得到以下字符串:
这看起来有点意思。当我们将产品添加到列表中,它会为宜家Web服务器提供一些用于生成PDF购物清单的模板。
如果我们能够将本地服务器文件包含到此PDF中,会发生什么? 例如图片?试试看,我将添加到了该模板,并进行了Base64和URL编码,替换Burp Suite中的pdf参数并Forward。
长话短说,这并不起作用。PDF生成器无法将该文件识别为图片,并且不会在输出中解析它…
B计划:识别PDF库,搜索库中的缺陷
也许我们可以找到另一种在PDF中包含文件的方法?首先,我们要弄清楚的是生成PDF的工具是什么?我们可以通过Google搜索模板中的一些独特字符串来得到答案。
搜索结果为我们提供了两个选择,node-html-pdf库或mPDF库。在快速浏览了它们的文档后,最终我确定在该项目中使用的为mPDF库。
识别mPDF中的安全问题
我们立刻制作了一个mPDF的本地副本,以便检查它是否存在安全漏洞。最好的起点是CHANGELOG,开发人员通常使用该文件来跟踪版本之间的变化。
可以看到在2017年10月19日,mPDF改变了他们处理注释标签的方式。因此,让我们仔细查看文档中的该标签。
背景
本地文件包含(LFI)漏洞是一种危害性较大的漏洞类型。一旦出现攻击者将可能利用其,读取文件源码或敏感信息,包含恶意文件,执行任意代码,甚至控制服务器等。大多数LFI攻击都是由动态加载图像或其他文件的代码引起的。如果请求的文件名或路径未做正确验证,就会造成该漏洞的发生。
IKEA.com
宜家是世界上最强大的品牌之一;在福布斯排行榜中为前50名。毫不夸张的说,每个人家里都至少有一件产品来自宜家;我爱IKEA!你呢?可以在评论中告诉我你最喜欢的宜家产品。
除了宜家的产品外,另一个值得我称赞的地方就是,他们拥有大量且设计合理的网站和应用程序。为了更好的用户体验,他们还为此开设了一个bug赏金计划,允许我们安全的渗透测试他们的平台并发布,只要我们遵守漏洞披露规则。下面,就让我们试一试吧!
寻找目标
大多数时候我都是从枚举子域开始的,Aquatone是我最常用的一款枚举工具。该工具会在不同的公共域数据库中查找域,并返回活动子域列表,包括屏幕截图等。了解有关Aquatone的更多信息,请查看Apple.com报告中的Unrestricted File Upload(无限制文件上传漏洞)。
Bathroom planner
经过一番查找,其中一个Bathroomplanner.IKEA.com的子域引起了我的注意。这是宜家提供的一个在线规划工具,主要是为客户体提供灵感和现成的浴室解决方案。通过它客户可以查找产品,并将其添加到自己的浴室产品列表中。除此之外,还可以通过电子邮件发送产品列表,或以PDF格式下载至本地保存。生成的PDF文件包含一些文本和产品图片信息。如下:
到这里我有个疑问,这个PDF是如何生成的呢?
让我们打开burp通过拦截浏览器和宜家服务器之间的流量来一探究竟。我们打开首页,并尝试将产品添加到我们的列表中。
copyright 无奈人生
可以看到这里有几个非常有意思的字段:
data:包含产品和图片代码的JSON blob,没有文件路径
shopping:包含我们产品列表的JSON blob,没有文件路径
pdf:一长串字符,内容不明
images:一些base64编码后的图片
base64解码
当你看到一长串字符时,请务必检查其是否为Base64编码的字符串。Base64编码常用于文件的数据传输。这里推荐大家一个在线的base64字符串编码解码网站:http://decodebase64.com/
如果我们将该字符串直接粘贴到解码器中,你会发现解码出错;这是因为该字符串中包含有%之类的无效字符。这也说明该字符串可能也经过了URL编码,所以在Base64解码之前,我们先进行URL解码。同样,推荐大家一个在线的URL解码和编码网站:https://meyerweb.com/eric/tools/dencoder/
无奈人生安全网
进行URL解码后,再Base64解码我们将得到以下字符串:
这看起来有点意思。当我们将产品添加到列表中,它会为宜家Web服务器提供一些用于生成PDF购物清单的模板。
如果我们能够将本地服务器文件包含到此PDF中,会发生什么? 例如图片?试试看,我将添加到了该模板,并进行了Base64和URL编码,替换Burp Suite中的pdf参数并Forward。
长话短说,这并不起作用。PDF生成器无法将该文件识别为图片,并且不会在输出中解析它…
B计划:识别PDF库,搜索库中的缺陷
也许我们可以找到另一种在PDF中包含文件的方法?首先,我们要弄清楚的是生成PDF的工具是什么?我们可以通过Google搜索模板中的一些独特字符串来得到答案。
copyright 无奈人生
搜索结果为我们提供了两个选择,node-html-pdf库或mPDF库。在快速浏览了它们的文档后,最终我确定在该项目中使用的为mPDF库。
识别mPDF中的安全问题
我们立刻制作了一个mPDF的本地副本,以便检查它是否存在安全漏洞。最好的起点是CHANGELOG,开发人员通常使用该文件来跟踪版本之间的变化。
可以看到在2017年10月19日,mPDF改变了他们处理注释标签的方式。因此,让我们仔细查看文档中的该标签。
www.wnhack.com