hacktricks/cryptography/electronic-code-book-ecb.md
2023-07-07 23:42:27 +00:00

8.7 KiB
Raw Blame History

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

ECB

(ECB) Electronic Code Book - 対称暗号化方式で、クリアテキストの各ブロック暗号文のブロックで置き換えます。これは最も単純な暗号化方式です。主なアイデアは、クリアテキストをNビットのブロック(入力データのブロックサイズ、暗号化アルゴリズムに依存)に分割し、その後、唯一の鍵を使用して各クリアテキストのブロックを暗号化(復号化)することです。

ECBの使用には、複数のセキュリティ上の問題があります

  • 暗号化されたメッセージからブロックを削除することができます。
  • 暗号化されたメッセージからブロックを移動することができます。

脆弱性の検出

アプリケーションに複数回ログインし、常に同じクッキーを取得すると想像してください。これは、アプリケーションのクッキーが**<username>|<password>であるためです。
次に、同じ長いパスワード
ほぼ同じ** ユーザー名を持つ新しいユーザーを2人生成します。
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というパターンが見られます。
次に、最初の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**

参考文献

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥