1
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?

[picoCTF_CyLab]Crack the Gate 1 のWriteUP

1
Posted at

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
データ形式: emailpasswordを含む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で送信するデータを指定します。 フォームに入力する emailpassword の値をサーバーに届けるために使用します。
-X リクエストメソッド(GET, POSTなど)を指定します。今回は送信なので POST を使用しました。

以下の記事は-H-d などの主要なオプションが日本語で分かりやすく解説されており、とても参考になります。

7. まとめ

ブラウザで見えている画面の裏側(コメントやスクリプト)にヒントが隠されている。
curlを使えば、ブラウザの制限を超えた自由なリクエストが送信できる。

1
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
1
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?