mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
69 lines
5.5 KiB
Markdown
69 lines
5.5 KiB
Markdown
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
# ECB
|
||
|
||
(ECB) 電子コードブック - 対称暗号化方式で、**平文の各ブロックを** **暗号文のブロックに置き換えます**。これは**最も単純な**暗号化方式です。主なアイデアは、**平文をNビットのブロックに分割**(入力データのブロックサイズ、暗号化アルゴリズムに依存)し、次にその平文の各ブロックを唯一のキーを使用して暗号化(復号化)することです。
|
||
|
||

|
||
|
||
ECBを使用することには複数のセキュリティ上の影響があります:
|
||
|
||
- **暗号化されたメッセージからブロックを削除できる**
|
||
- **暗号化されたメッセージからブロックを移動できる**
|
||
|
||
# 脆弱性の検出
|
||
|
||
アプリケーションに何度もログインすると、**常に同じクッキーを取得する**ことを想像してください。これは、アプリケーションのクッキーが**`<username>|<password>`**であるためです。\
|
||
次に、**同じ長いパスワード**と**ほぼ同じ** **ユーザー名**を持つ新しいユーザーを2人生成します。\
|
||
**両方のユーザーの情報が同じである8Bのブロックが** **等しい**ことがわかります。次に、これは**ECBが使用されている**ためかもしれないと想像します。
|
||
|
||
次の例のように。これらの**2つのデコードされたクッキー**が何度もブロック**`\x23U\xE45K\xCB\x21\xC8`**を持っていることに注目してください。
|
||
```
|
||
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
|
||
|
||
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
|
||
```
|
||
これは、**それらのクッキーのユーザー名とパスワードに「a」という文字が何度も含まれていたため**です(例えば)。**異なる**ブロックは、**少なくとも1つの異なる文字**(区切り文字「|」やユーザー名の必要な違いなど)を含むブロックです。
|
||
|
||
今、攻撃者はフォーマットが`<username><delimiter><password>`または`<password><delimiter><username>`のどちらであるかを発見する必要があります。そのために、**似たような長いユーザー名とパスワードを持ついくつかのユーザー名を生成するだけで、フォーマットと区切り文字の長さを見つけることができます:**
|
||
|
||
| ユーザー名の長さ: | パスワードの長さ: | ユーザー名+パスワードの長さ: | クッキーの長さ(デコード後): |
|
||
| ---------------- | ---------------- | ------------------------- | --------------------------------- |
|
||
| 2 | 2 | 4 | 8 |
|
||
| 3 | 3 | 6 | 8 |
|
||
| 3 | 4 | 7 | 8 |
|
||
| 4 | 4 | 8 | 16 |
|
||
| 7 | 7 | 14 | 16 |
|
||
|
||
# 脆弱性の悪用
|
||
|
||
## 完全なブロックの削除
|
||
|
||
クッキーのフォーマット(`<username>|<password>`)を知っている場合、ユーザー名`admin`を偽装するために、`aaaaaaaaadmin`という新しいユーザーを作成し、クッキーを取得してデコードします:
|
||
```
|
||
\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
|
||
```
|
||
以前に作成したパターン `\x23U\xE45K\xCB\x21\xC8` を見ることができます。このパターンは、`a` のみを含むユーザー名で作成されました。\
|
||
次に、最初の8Bのブロックを削除すると、ユーザー名 `admin` の有効なクッキーが得られます:
|
||
```
|
||
\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
|
||
```
|
||
## ブロックの移動
|
||
|
||
多くのデータベースでは、`WHERE username='admin';`を検索するのと、`WHERE username='admin ';`を検索するのは同じです。 _(余分なスペースに注意)_
|
||
|
||
したがって、ユーザー`admin`を偽装する別の方法は次のとおりです。
|
||
|
||
- ユーザー名を生成します: `len(<username>) + len(<delimiter) % len(block)`。ブロックサイズが`8B`の場合、`username `というユーザー名を生成できます。デリミタ`|`を使用すると、チャンク`<username><delimiter>`は2つの8Bのブロックを生成します。
|
||
- 次に、偽装したいユーザー名とスペースを含む正確な数のブロックを埋めるパスワードを生成します: `admin `
|
||
|
||
このユーザーのクッキーは3つのブロックで構成されます: 最初の2つはユーザー名 + デリミタのブロックで、3つ目は(ユーザー名を偽装している)パスワードです: `username |admin `
|
||
|
||
**次に、最初のブロックを最後のブロックに置き換えるだけで、ユーザー`admin`を偽装します: `admin |username`**
|
||
|
||
## 参考文献
|
||
|
||
- [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](<http://cryptowiki.net/index.php?title=Electronic_Code_Book_(ECB)>)
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|