DOC文件上传造成存储XSS

Posted huasec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DOC文件上传造成存储XSS相关的知识,希望对你有一定的参考价值。

当我在渗透测试遇到文件上传时,我们们采取的思路往往是上传web服务器可用的脚本,然后反向shell。但是,如果无法上传成功,我们可以试试上传一个html页面,让我们的客户端执行javascript代码,造成XSS攻击。

在测试web程序时,我发现经过身份验证的用户可以上传文件进行索赔,并且这个上传操作允许我们上传doc文件

DOC文件上传造成存储XSS

再用户上传一个文件之后,这个文件可以被下载。上传的.docx文件与下载的.docx 文件之间有不同,这意味着服务器对文件进行了操作。

DOC文件上传造成存储XSS

虽然我们上传的文件必须是.docx,但是我们可以修改文件扩展名,改为.html

DOC文件上传造成存储XSS

当从服务器检索到扩展名为.html的文件时,Content-Type标头设置为text / html。这会导致浏览器尝试将该文件呈现为HTML

然后我试图在.docx文件中加入XSS负载,由于文件类型是压缩格式,因此我需要找到.docc文件中的一个区域,该区域在压缩过程中不会被修改,或者通过其他应用进行修改。找到文件结构中在上传过程中未被修改的区域。我修改了.docx文件中的Settings.xml的文件名。

DOC文件上传造成存储XSS

将文件夹结构压缩为.docx后,我使用十六进制编辑器覆盖文件名中的一些字节以插入JavaScript代码。

DOC文件上传造成存储XSS

服务器接受修改的.docx文件的上载。在HTTP POST期间文件扩展名被修改为.html。

DOC文件上传造成存储XSS

请求该文件时,HTML页面将加载这个XSS paylaod。

DOC文件上传造成存储XSS

当请求返回到啊浏览器时,js代码执行,任何人只要点击了这个链接,js代码都会在他的浏览器上执行。

为了模糊这种攻击,攻击者可以将上传的URI包含在一个小的或者不可见的iframe 中,以防止受害者发现正在执行的payload。

防御措施

  1. 在允许上传之前,在服务器端验证文件扩展名是.doc或.docx,不允许上传其他类型。

  2. 不要让用户控制Content-Type。无论内容类型头文件或指定的扩展名中指定了什么,都返回相同的Content-Type。

  3. 控制文件下载时发生的情况。添加响应头:“Content-Disposition:attachment”以防止文件在浏览器中内联显示。

  4. 过滤掉任何包含HTML标签的上传。由于.docx是一个压缩文件,即使在文档体中包含HTML标签,它们也不应该存在于原始数据中。

翻译来源:https://www.coalfire.com/Solutions/Coalfire-Labs/The-Coalfire-LABS-Blog/may-2018/microsoft-word-document-upload-to-stored-xss

小小总结

     这篇文章提供了一个新的思路,如果反向shell 操作不成,就尝试下XSS。这里是笔者以前总结的文件上传技巧。有需自取。

NaNundefinedaaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMUJCOUtpU18tMG5oUnMzWjR4SFBYaFEgNaNundefinedaZmhoeQ==


以上是关于DOC文件上传造成存储XSS的主要内容,如果未能解决你的问题,请参考以下文章

上传Word文件形成存储型XSS路径

文件上传XSS引发的安全问题

极致CMS两处漏洞复现/存储xss/文件上传Getshell

Ueditor最新版XML文件上传导致存储型XSS

DocCms存储型XSS+后台任意文件下载上传+目录删除+sql执行(有条件可getshell)

XSS姿势——文件上传XSS