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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
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
参考文献
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。