【CTF入門連載|第5話/全20話】HTMLを書き換えてみよう|Elementsタブ実践

🚩 CTF入門連載|第5話/全20話

HTMLを書き換えてみよう|Elementsタブ実践

開発者ツールのElementsタブを使ってページのHTMLをリアルタイムに書き換え、「隠し要素」を発見するCTFの基本技術を体験します。

🔧 Web基礎 🖥 Elementsタブ 🧩 DOM操作 🕵 隠し要素 ⭐ 難易度:★☆☆
01

🖥 Elementsタブとは?ライブHTMLエディター入門

F12で開く「生きているHTMLエディター」の正体

🔧

Elementsタブ = ブラウザの「ライブDOMエディター」

開発者ツール(F12)を開いたとき、最初に表示されるのが「Elements」タブです。このタブは、Webページの現在の構造(DOM: Document Object Model)をリアルタイムで確認・編集できる強力なツールです。ソースコードを「読む」だけでなく、その場で「書き換える」ことができます。

CTFのWeb問題においてElementsタブは欠かせないツールです。display:noneでCSSレベルで隠されている要素の中にフラグが入っていたり、ボタンにdisabled属性がついていてそれを外すと先へ進めたりと、「Elementsタブで書き換えるだけ」で解けてしまう問題が実際に多く出題されています。

⚠️

Elementsタブでの変更はあなたのブラウザ上だけ

Elementsタブで加えた変更は、ブラウザ内のメモリ上の変更にすぎません。F5で再読み込みすると元に戻ります。安心して試行錯誤できる「サンドボックス」と思ってください。

02

🆚 Ctrl+Uのソース表示との「決定的な違い」

同じHTMLを見ているのに何が違うのか

Ctrl+U(または右クリック→「ページのソースを表示」)でHTMLを確認する方法を覚えます。しかし、Elementsタブとは根本的に異なるものを表示しています。この違いを理解することがWeb CTFの第一歩です。

Ctrl+U <div id=”secret” style=”display:none”> CTF{FLAG} </div> 「生のHTML」を読むだけ 属性の変更は不可 VS Elementsタブ <div id=”secret” style=”display:block” > CTF{FLAG} DOM+リアルタイム編集可 ✔ display:none→blockに変更可能

Ctrl+Uは「生のHTML」を読むだけで属性の変更はできません。ElementsタブはJS実行後の現在のDom状態を表示し、属性やスタイルをその場で書き換えられるためCTFで真価を発揮します。

03

⚙️ Elementsタブの基本操作を覚えよう

開き方・検索・編集の3ステップ

STEP 1: 開く F12 を押す 「Elements」タブを クリック STEP 2: 探す Ctrl+F で検索 id / class / 属性名 右クリック→検証 STEP 3: 書き換える 属性・値をダブルクリック → 新しい値を入力 → Enter 変更がページにリアルタイム反映
💡

「右クリック → 検証」が最速の入口

調べたいページ上の要素を右クリックして「検証(Inspect)」を選ぶと、Elementsタブがその要素にジャンプした状態で開きます。F12で開いてからツリーを上下にスクロールして探す手間が省けます。

属性値を変更するには、対象の属性(例:style="display:none")をダブルクリックします。編集モードになり、キーボードで新しい値を入力してEnterを押すだけで変更が確定します。

04

🛠 CTFで使う「書き換え」テクニック5選

これを知っているだけで解ける問題が増える

テクニック操作内容よくある状況
① display:none を block にstyle="display:none"display:block に変更「会員限定」等の隠し要素を表示する
② disabled 属性を削除disabled 属性を右クリック→削除無効化されたボタン・フォームを押せるようにする
③ type=”password” を text にinput要素の type 属性を text に変更パスワード入力欄の「•••」マスクを外して内容を見る
④ max/min 値の書き換えmax="100"max="99999" 等に変更数値入力の上限を外してフォームに大きな値を送れるようにする
⑤ hidden 要素の id を手がかりに隠し要素の idclass 属性値を読むAPI呼び出しのエンドポイントや内部パラメーターを特定する
🎯

フロントエンドだけのアクセス制御は意味がない

上記のテクニックが効いてしまうのは、すべて「見た目だけの制限」だからです。本当のアクセス制御は必ずサーバー側で行わなければなりません。CTFはこうしたフロントエンドのみのセキュリティ対策がいかに脆弱かを体験的に学べる教材でもあります。

05

🧩 5分CTFチャレンジ:隠し要素を表示させろ!

Elementsタブで「VIP専用エリア」を解鍵せよ

このページには「VIPメンバー専用」と書かれた非表示エリアが存在します。CSSで隠されているだけで、HTMLの中にはすでに存在しています。Elementsタブを使ってその要素を表示させ、中に書かれたフラグを見つけてください。

🕵

チャレンジの手順

F12 で開発者ツールを開く → ② Elementsタブをクリック → ③ Ctrl+Fvip-secret と検索 → ④ id="vip-secret" の要素の style 属性の display:none をダブルクリック → ⑤ noneblock に書き換えてEnter → ⑥ flagをコピーして下のフォームに入力!

🧩 5分CTFチャレンジ:VIP専用エリアのflagsを入力せよ

Elementsタブで id="vip-secret" の要素を見つけ、display:nonedisplay:block に変更してflagを表示させてください。

06

📝 まとめ+FAQ+次回予告

今回のポイントを振り返ろう

第5話では、Elementsタブを使ってHTMLをリアルタイムで書き換える方法を学びました。Ctrl+Uのソース表示との違い、基本的な操作手順、そdCTFで顛出のテクニック5選を通じて、フロントエンドだけのアクセス制御がいかに脆弱かを体感できたはずです。

✅ 今回のまとめチェック

・Elementsタブ = JS実行後のDomをリアルタイムで見て書き換えられるツール
・Ctrl+Uのソース表示とは異なり「属性の編集」が可能
・display:none / disabled / type=”password” 等の書き換えが顛出テクニック
・Elementsタブでの変更はブラウザ内のみ・再読み込みで元に戻る
・フロントエンドだけのアクセス制御はElementsタブで簡単に突破できる

Q. Elementsタブの変更でサーバーのデータが書き換わることはありますか?

HTMLを書き換えるだけではサーバーのデータは変わりません。ただし、書き換えたフォームの値でリクエストを「送信」すると、その変更後の値がサーバーへ届きます。あくまでCTFや許可された環境でのみ試してください。

Q. Elementsタブの変更はページを閉じると消えますか?

はい。F5で再読み込みするか、タブを閉じて再度開くとすべての変更はリセットされます。

Q. Chromeのほかに使えるブラウザはありますか?

Firefox、Edge、Safariにも同等の開発者ツールがあります。Firefoxは「インスペクター」タブ、EdgeはChromeと同じ「Elements」タブです。CTFではChrome/Firefoxのどちらかを使う人が多いです。

Q. 「display:none」以外の隠し方もありますか?

はい。visibility:hiddenopacity:0font-size:0color:white(白背景に白文字)などがあります。「見えないけどHTML上に存在する」という発想を常に持っておきましょう。

次回・第6話

Networkタブ入門|通信を盗み見る

Networkタブを使い、ブラウザとサーバーの間でやり取りされているリクエストとレスポンスを確認するCTFテクニックを体験します。

📚 参考情報

  • Chrome DevTools — Elements パネル公式ドキュメント(Google)
  • MDN Web Docs「Document Object Model (DOM)」(Mozilla)
  • OWASP — Client-Side Vulnerabilities ガイドライン

コメント