1. はじめに
- picoCTFのWeb Exploitation問題「Crack the Gate 1」の解法メモ
- 「開発者ツールでの分析」「暗号の解読」「curlによるリクエスト送信」の3ステップ
2. 開発者ツールでヒントを探す
インスタンスを起動し、ログイン画面にアクセスします。
F12キーで開発者ツールを起動し、ElementsタブでHTMLコードを確認します。
<body>タグ内に怪しいコメントアウトを発見。
<!-- (英語と記号の文字列) -->
3. CyberChefでヒントを解読する
コメント内のランダムな文字列をCyberChefに入力します。
ROT13で変換(Bake)すると、メッセージが出現しました。
<!-- NOTE: Jack - temporary bypass: use header "X-Dev-Access: yes" -->
- 「X-Dev-Access: yes」というヘッダーを使えばバイパスできるというヒント
しかしブラウザ拡張機能(Header Editorなど)で X-Dev-Access: yes を設定し、画面をリロードしましたが、ログイン画面のままでフラグは現れませんでした。
そこでもう少しHTMLを読み込んでみます。
4. JavaScriptから送信先を特定する
HTML内の<script>部分を解析します。
以下のコードから、通信の仕様がわかります。
送信先: /login(エンドポイント)
メソッド: POST
データ形式: emailとpasswordを含むJSONデータ
// スクリプトの抜粋
const formData = {
email: document.getElementById('email').value,
password: document.getElementById('password').value
};
fetch('/login', {
method: 'POST',
...
body: JSON.stringify(formData)
})
5. 推測と実行
推測: X-Dev-Access: yes ヘッダーを付け、/login に対して正しいEmail(問題文にある ctf-player@picoctf.org)と適当なパスワードを POST で送ればログインできるはず。
実行コマンド (WSL):
curl -H "X-Dev-Access: yes" http://[URL]:[PORT]/login -X POST -d email="ctf-player@picoctf.org" password=(適当な文字列)
実行結果に、flag文字列が含まれていました。
6. curlコマンドの引数について補足
| オプション | 解説 |
|---|---|
-H (Header) |
HTTPヘッダーを指定します。 今回は「開発者用バイパス」を有効にするため X-Dev-Access: yes を追加しました。 |
-d (Data) |
HTTP POSTで送信するデータを指定します。 フォームに入力する email や password の値をサーバーに届けるために使用します。 |
-X |
リクエストメソッド(GET, POSTなど)を指定します。今回は送信なので POST を使用しました。 |
以下の記事は-H や -d などの主要なオプションが日本語で分かりやすく解説されており、とても参考になります。
7. まとめ
ブラウザで見えている画面の裏側(コメントやスクリプト)にヒントが隠されている。
curlを使えば、ブラウザの制限を超えた自由なリクエストが送信できる。