【picoCTF】Crack the Gate 1 - ブラウザDevToolsでログイン処理を解析してフラグを取得

問題概要

picoCTFの「Crack the Gate 1」という問題の解説記事です。

  • カテゴリ: Web Exploitation
  • 難易度: Easy

問題文

picoCTF Crack the Gate 1

問題への取り掛かり方

右側のLaunch Instanceボタンをクリックするとページが以下のように切り替わります。
切り替わった画面内のhereリンクをクリックすると、問題用のページに遷移します。
picoCTF Crack the Gate 1 - Launch

解説

この問題では、与えられたウェブページを解析して、隠されたフラグを見つけることが求められます。


ステップ1: 問題文中のemailを使ってログインを試す

まずは、問題文中に記載されているemail ctf-player@picoctf.org を使ってログインを試みます。
パスワードは不明なので、適当な文字列passwordと入力してみます。
picoCTF Crack the Gate 1 - Login

案の定、ログインは失敗してしまいました。

picoCTF Crack the Gate 1 - Login Failed

ステップ2: ページソース・開発者ツールで手がかりを探す

やみくもにパスワードを試すのは効率が悪いので、ページソースや開発者ツールを使って手がかりを探します。
※筆者はGoogle Chromeを使用しています。

picoCTF Crack the Gate 1 - Dev Tools  

htmlの要素を確認しているとbodyタグ内に、怪しげなコメント(ABGR: Wnpx - grzcbenel olcnff: hfr urnqre "K-Qri-Npprff: lrf")を発見しました。  
このコメントは以下の理由から、ROT13でエンコードされている可能性が高いと考えられます。
  • = や / + が含まれておらず、Base64の特徴に当てはまらない
  • スペースや : - " が含まれている
  • Hex(16進数)ではない
  • 英文の形をしている
  • % が含まれていない
  • 記号がそのまま残っている
  • ランダムに見えない
  • 単語の区切りや文章構造が保たれている


ステップ3: コメントのデコード

ROT13デコードを試みます。

$ echo 'ABGR: Wnpx - grzcbenel olcnff: hfr urnqre "K-Qri-Npprff: lrf"' | tr 'A-Z' 'N-ZA-M'
NOTE: Jack - temporary bypass: use header X-Dev-Access: yes
デコードの結果NOTE: Jack - temporary bypass: use header X-Dev-Access: yesというメッセージを得ることができました。


ステップ4: ヘッダーの追加とログイン

デコード後のコメントから、X-Dev-Access: yesというヘッダーを追加することで、ログインが可能になることがわかります。
そこで、curlコマンドを使用して、ヘッダーを追加したPOSTリクエストを送信し、再度ログインを試みます。
※passwordは何でも良いです。
$ curl -X POST http://{仮想サイトのURL}/login \
  -H "Content-Type: application/json" \
  -H "X-Dev-Access: yes" \
  -d '{"email":"ctf-player@picoctf.org","password":"anything"}'
{"success":true,"email":"ctf-player@picoctf.org","firstName":"pico","lastName":"player","flag":"picoCTF{xxxxxx}"}
ログインが成功し、フラグを取得することができました。
※フラグはマスクしています。

使用したコマンドの軽い解説

tr

$ echo <文字列> | tr <変換元文字列> <変換先文字列>
指定した文字列の各文字を、対応する変換先文字列の文字に置き換えます。
例えば、tr 'A-Z' 'N-ZA-M'は、AからZまでのアルファベットをNからZおよびAからMに変換します。
ROT13のデコードに使用されました。

curl

$ curl -X <HTTPメソッド> <URL> -H "<ヘッダー名>: <ヘッダー値>" -d '<データ>'
指定したURLに対してHTTPリクエストを送信します。
-XオプションでHTTPメソッドを指定し、-Hオプションでヘッダーを追加し、-dオプションでリクエストボディを指定します。
今回は、X-Dev-Access: yesというヘッダーを追加してPOSTリクエストを送信するために使用されました。

まとめ

この問題では、ページソース内のコメントからROT13でエンコードされた手がかりを見つけ出し、指定されたヘッダーを追加してログインを成功させることで、フラグを取得しました。

▼ポイントは以下の通りです。

  • ページソースや開発者ツールを活用して手がかりを探す
  • ROT13デコードの理解と実践
  • curlコマンドを使用してカスタムヘッダー付きのHTTPリクエストを送信する方法

体系的に学びたい人へ(おすすめ書籍)

今回のように「開発者向けのヘッダーが残っていた」系は、 設計や実装・運用のちょっとした油断から生まれます。 Webアプリの作り方と脆弱性対策をまとめて整理したい場合は、この本が役に立ちます。

▼体系的に学ぶWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践


閲覧ありがとうございました!

NEXT
次におすすめ

【picoCTF】SSTI1 - Jinja系SSTIでPythonオブジェクトにアクセスしてフラグ奪取

カテゴリ: Web Exploitation難易度: Easy#picoCTF
次の記事へ →
同じカテゴリ/難易度/picoCTFでの表示順が近い記事を優先しておすすめしています。