utsuroi auth labs Lab 03 / 5 — Practitioner
03

ブルートフォース — レート制限なしのログイン

Brute-force attack against an account with no rate limiting

Lab 01〜02 のユーザ列挙で store_admin@example.com が会員と判明した。
うつろい EC のログインエンドポイント /login にはレート制限が未実装。よくあるパスワード(漏洩リストや辞書)を片端から試せば、パスワードを破れる。

パスワード辞書(よくあるパスワード上位30件)で store_admin@example.com のパスワードを破ってください。

待機中
(攻撃を開始すると試行ログが表示されます)
脆弱なサーバ実装(レート制限なし)
// PHP — ログイン処理
$user = User::findByEmail($_POST['email']);
if ($user && password_verify($_POST['password'], $user->password_hash)) {
    $_SESSION['user_id'] = $user->id;
    return ['status' => 'success'];
}
return ['status' => 'error', 'message' => 'メールアドレスまたはパスワードが正しくありません'];
// ↑ 失敗試行のカウントなし、IP/アカウント制限なし
パスワード辞書(攻撃者が使う一般的な候補)
password / 123456 / qwerty / password1 / admin
welcome / monkey / login / abc123 / starwars
... (実際の漏洩データには数百万件の候補)
正解(ネタバレ)

store_admin のパスワードは utsuroi2024(辞書の中盤に登録)。「辞書攻撃を開始」を押すと、辞書を順番に試行して数秒で発見されます。

うつろい EC の管理者は「会社名 + 年」というよくあるパターンのパスワードを使っており、業界辞書(各社の社名を含む) で簡単に破られる。実務では「自社名・サービス名・年・誕生日」をパスワードに含めることはレート制限あっても危険。