tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

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>のどちらであるかを発見する必要があります。そのために、似たような長いユーザー名とパスワードを持ついくつかのユーザー名を生成するだけで、フォーマットと区切り文字の長さを見つけることができます:

ユーザー名の長さ:パスワードの長さ:ユーザー名+パスワードの長さ:クッキーの長さ(デコード後):
2248
3368
3478
44816
771416

脆弱性の悪用

完全なブロックの削除

クッキーのフォーマット(<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

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする