通过上传Word文档造成存储型XSS:案例研究

Posted F11Team

tags:

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

0x00 前言
在进行网站安全测试的时候,我们往往会看到一些上传框。
在正常情况下,可以使用Web服务器上的可用的脚本语言上传反向shell。
例如,如果应用程序运行在php或ASP中,上传反向shell就会相对比较容易。但是 如果无法上传后门,也可以尝试上传一个html页面,把攻击者自己的客户端上的javascript代码上传到服务器以进行典型的XSS攻击。


0x01 测试之道
在测试时,我发现经过身份验证的用户可以上传文件以进行危害性攻击。上传按钮旨在允许上传 Word .docx文件。

如果用户上传文件的文件通过网站的安全检测,那么这个文件同样可以被其他用户下载到客户端。上传的.docx文件与下载的 .docx文件之间还是有所不同的,在服务器端下载文件之前会对文件执行一些处理。这也是往服务器传后门的一个手段.

0x02 进阶


虽然上传的文件必须是有效的.docx,但我们可以修改文件扩展名,例如我可以把文件后缀名改为.html



当从服务器检索出带有.html扩展名的文件时,系统会把Content-Type标头设置为text/html。这将导致浏览器将该文件以HTML文件的形式呈现出来。

然后,我试图在一个有效的.docx文件中插入一个XSS payload。因为文件类型是压缩的,所以我需要识别文件主体中的一个区域,在压缩过程中或在系统的后处理过程中不会被修改。可以发现文件结构中的某些文件路径在上传过程中没有被修改,我们可以修改设置的文件名,在.docx文件中使用xml填充字符。

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

服务器接受修改的.docx文件的上传指令,在POST期间将文件扩展名修改为.html

请求该文件时,它作为XSS payload的完整的HTML文件对请求者进行响应

当在浏览器中呈现时,JavaScript代码被执行。任何单击该文件链接的人都将在其所在的文件中受到xss攻击,并在浏览器中执行JavaScript。

为了混淆攻击,攻击者可以将上传的URI包含在一个小的或不可见的iframe中,以防止受害者注意到正在执行的payload。对于本例,将显示一个可见的有效负载。

0x03 思考

那么,开发人员该怎么做呢?为了防止这种情况发生,开发人员有几个不同的选择:

  • 在允许上传之前,它们可以在服务器端验证文件扩展名是.doc或.docx,这是在HTML中强制执行客户端传入的需求。

  • 不要让用户控制Content-Type。返回相同的Content-Type,不管Content-Type的头部或指定的扩展名中指定了什么内容。

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

  • 过滤掉包含HTML标签的任何上传,因为.docx是一个压缩文件,即使文档中包含HTML标记,它们也不应该出现在原始数据中。在body中存在的HTML标记是文件被篡改的日志。


以上是关于通过上传Word文档造成存储型XSS:案例研究的主要内容,如果未能解决你的问题,请参考以下文章

Pikachu漏洞练习平台实验——XSS

就是这么简单,价值2W刀的Google存储型XSS和SSRF

xss(跨站脚本攻击)

xss(跨站脚本攻击)

XSS

Pikachu-XSS模块与3个案例演示