新手上路 | 上传Word文件形成存储型XSS路径
字数 1229 2025-08-18 11:37:19
利用Word文件上传功能实现存储型XSS攻击的技术分析
1. 攻击背景与原理
存储型XSS攻击通过将恶意脚本永久存储在目标服务器上实现持久化攻击。本文介绍了一种通过上传恶意构造的Word(.docx)文件实现存储型XSS的技术方法。
.docx文件本质上是ZIP压缩包,包含多个XML文档和其他资源文件。攻击者可以:
- 修改.docx文件内部结构插入恶意代码
- 利用服务器对上传文件处理不当的漏洞
- 通过修改文件扩展名欺骗服务器解析方式
2. 攻击实施步骤详解
2.1 前期侦察
- 发现目标网站存在文件上传功能
- 确认允许上传.docx格式文件
- 测试上传流程发现服务器会对文件进行二次处理
2.2 构造恶意.docx文件
-
解压.docx文件:
- 将.docx后缀改为.zip
- 解压得到内部文件结构
-
定位可修改文件:
- 找到在服务器处理过程中不会被修改的文件(如Settings.xml)
- 修改文件名以便后续识别(如添加长串字符)
-
插入XSS Payload:
<script>alert('XSS')</script> -
重新打包文件:
- 将修改后的文件重新打包为.zip
- 改回.docx扩展名
-
十六进制编辑:
- 使用UltraEdit等工具进行十六进制编辑
- 在保持不变的区域覆盖部分字节插入JS代码
2.3 上传技巧
-
修改文件扩展名:
- 在HTTP POST请求中将.docx改为.html
- 欺骗服务器以HTML格式存储文件
-
服务器响应验证:
- 确认服务器将Content-Type设为text/html
- 确保浏览器会解析执行其中的脚本
2.4 攻击增强技术
-
混淆技术:
- 添加包含URI的隐藏iframe框架
- 增加迷惑性,避免被轻易发现
-
持久化技术:
- 利用服务器对文件的永久存储特性
- 每次用户访问该文件都会触发XSS
3. 防御措施
3.1 文件验证
-
格式验证:
- 严格验证上传文件是否为有效的.doc/.docx格式
- 检查文件魔术数字(Magic Number)而非仅扩展名
-
内容过滤:
- 扫描文件中是否包含HTML/JS代码
- 对压缩包内文件进行递归检查
3.2 HTTP头控制
-
Content-Type控制:
- 强制保持上传文件的原始Content-Type
- 禁止对特定扩展名文件的类型转换
-
下载控制:
- 添加
Content-Disposition: attachment头 - 强制文件下载而非浏览器内嵌显示
- 添加
3.3 服务器配置
-
文件处理限制:
- 禁止服务器对上传文件进行自动转换
- 限制可上传的文件类型白名单
-
权限控制:
- 对上传功能实施严格的权限控制
- 记录所有上传操作日志
4. 技术要点总结
- 利用.docx文件的ZIP压缩特性进行内部修改
- 通过扩展名欺骗改变服务器解析行为
- 在文件处理过程中保持不变的区域插入Payload
- 结合混淆技术提高攻击隐蔽性
- 服务器缺乏多层次的防御措施是漏洞存在的根本原因
此攻击方式展示了文件上传功能可能带来的安全隐患,开发人员需要从文件验证、内容检查和服务器配置多个层面进行防护。