DOC文件上传造成存储XSS
Posted huasec
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DOC文件上传造成存储XSS相关的知识,希望对你有一定的参考价值。
当我在渗透测试遇到文件上传时,我们们采取的思路往往是上传web服务器可用的脚本,然后反向shell。但是,如果无法上传成功,我们可以试试上传一个html页面,让我们的客户端执行javascript代码,造成XSS攻击。
在测试web程序时,我发现经过身份验证的用户可以上传文件进行索赔,并且这个上传操作允许我们上传doc文件
再用户上传一个文件之后,这个文件可以被下载。上传的.docx文件与下载的.docx 文件之间有不同,这意味着服务器对文件进行了操作。
虽然我们上传的文件必须是.docx,但是我们可以修改文件扩展名,改为.html
当从服务器检索到扩展名为.html的文件时,Content-Type标头设置为text / html。这会导致浏览器尝试将该文件呈现为HTML。
然后我试图在.docx文件中加入XSS负载,由于文件类型是压缩格式,因此我需要找到.docc文件中的一个区域,该区域在压缩过程中不会被修改,或者通过其他应用进行修改。找到文件结构中在上传过程中未被修改的区域。我修改了.docx文件中的Settings.xml的文件名。
将文件夹结构压缩为.docx后,我使用十六进制编辑器覆盖文件名中的一些字节以插入JavaScript代码。
服务器接受修改的.docx文件的上载。在HTTP POST期间文件扩展名被修改为.html。
请求该文件时,HTML页面将加载这个XSS paylaod。
当请求返回到啊浏览器时,js代码执行,任何人只要点击了这个链接,js代码都会在他的浏览器上执行。
为了模糊这种攻击,攻击者可以将上传的URI包含在一个小的或者不可见的iframe 中,以防止受害者发现正在执行的payload。
防御措施
在允许上传之前,在服务器端验证文件扩展名是.doc或.docx,不允许上传其他类型。
不要让用户控制Content-Type。无论内容类型头文件或指定的扩展名中指定了什么,都返回相同的Content-Type。
控制文件下载时发生的情况。添加响应头:“Content-Disposition:attachment”以防止文件在浏览器中内联显示。
过滤掉任何包含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的主要内容,如果未能解决你的问题,请参考以下文章
极致CMS两处漏洞复现/存储xss/文件上传Getshell