はじめに
本記事では、TryHackMe の学習ルーム「Enumeration & Brute Force」を題材に、
認証列挙(Enumeration)とブルートフォース攻撃の実践方法をまとめます。
「攻め方」を理解することは、防御の観点からも非常に重要です。
本記事は学習目的に限定し、実際の環境での不正利用は禁止されています。
事前準備
- HTTP/HTTPS の基礎知識(ステータスコード、リクエスト/レスポンス構造)
- Burp Suite の操作経験
- Linux コマンドラインの基本
演習環境は TryHackMe 上で自動起動し、 /etc/hosts に以下のように追記して利用します。
MACHINE_IP enum.thm
1. 認証列挙(Authentication Enumeration)
1.1 列挙とは?
アプリの挙動やエラーメッセージを観察して、
- 有効ユーザー名
- パスワードポリシー
- ロックアウト有無
といった情報を抜き出す作業です。
1.2 よくある情報源
- 登録フォーム:「すでに使用されています」=ユーザー存在確認
- パスワードリセット:「メール送信しました」 vs 「ユーザーが存在しません」
- 冗長エラー: “ユーザー名が存在しません” と “パスワードが違います” の違い
- 漏えいデータ再利用:既知のID/PWを使った横展開
2. 冗長エラーを使ったユーザー列挙
2.1 観察
http://enum.thm/labs/verbose_login/ で:
- 無効メール → Email does not exist
- 既存メール → Invalid password
2.2 自動化スクリプト
Pythonでメールリストを走査し、有効なアドレスを抽出できます。
python3 script.py usernames_gmail.com.txt
script.py
https://github.com/sayhellotogithub/pythontest/blob/main/project/email/script.py
usernames_gmail.com.txt
https://github.com/nyxgeek/username-lists/blob/master/usernames-top100/usernames_gmail.com.txt
出力例:
[VALID] canderson@gmail.com
[INVALID] XX@gmail.com
3. 脆弱なパスワードリセットロジック
3.1 よくある問題
- トークンが予測可能(例:3桁の数字)
- 有効期限が長い/即時失効しない
- 秘密の質問が単純
- HTTPS 未使用
3.2 TryHackMe演習:Predictable Tokens
-
admin@admin.comでリセット要求 -
URL:
reset_password.php?token=123 -
Burp Intruder に送り、
tokenを総当たり -
Crunchで辞書生成
crunch 3 3 -o otp.txt -t %%% -s 100 -e 200 -
異なるレスポンス長を検出 → 成功
-
新パスワードでログイン → Flag入手 🎉
4. HTTP Basic 認証のブルートフォース
4.1 背景
Authorization: Basic base64("user:pass")- Base64は暗号ではない → HTTPS 必須
- 今もルータや機器の管理画面で利用例あり
4.2 TryHackMe演習
-
http://enum.thm/labs/basic_auth/にアクセス - 適当な認証情報送信 → リクエストを Burp で捕捉
- Base64部をデコードし、Intruderでパスワード部分を差し替え
- SecLists の
500-worst-passwords.txtを利用 - 成功レスポンス(200)が出れば突破 → Flag入手
5. OSINT活用(下調べの強化)
5.1 Wayback Machine
-
https://archive.org/web/で過去のスナップショットを調査 -
waybackurlsでURLをまとめて列挙
5.2 Google Dorks
- 管理画面探索:
site:example.com inurl:admin - ログ漏洩確認:
filetype:log "password" site:example.com - バックアップ露出:
intitle:"index of" "backup" site:example.com
まとめ(学びのポイント)
- 列挙が8割:情報を得てから攻める
- 効率化:適切な辞書、レート制限回避、応答差分の検出
-
防御側の対策:
- エラーメッセージを統一
- トークンは長くランダムに、かつ短命
- 2FA / HTTPS 強制 / レート制限
おわりに
本記事では「認証列挙とブルートフォース」の基本から、TryHackMe上での実演までを整理しました。
攻撃者視点で知識を身につけることは、システムを守る上で大切です。