今回の問題
picoCTFより"Cookies"を解いていきます。
実際に解いていく
1. 問題文にあるWebサイトに移動する
今回はクッキーの名前を入力する問題のようです。
ソースコードを読みましたが、特に怪しいところはありませんでした。
2. 適当な答えを入力してみる
不正解を入力すると、画面上に赤色のメッセージが表示されました。
「snickerdoodle」を入力すると、画面上に緑色のメッセージが表示されました。
つまり、何かが状態を持っているということですね。その何かが、今回のWebページの変化を操作していると考えられます。
3. Cookieの値を見てみる
入力した答えの正解・不正解によってCookieのValueの値が変化していることがわかります。
不正解の場合は、Valueが「-1」。
snickerdoodleの場合は、Valueが「0」。
今回のWebページの変化を操作している何かとは、Cookieのことでした。
それでは、BurpSuiteを使用して、さまざまなCookieのValueを試していきたいと思います。
4. BurpSuiteを使用してCookieの値を色々変えてみる
BurpSuiteを使用して、CookieのValueを1~20まで試してみました。
すると、Valueが18の時だけLengthが極端に小さくなっているのを発見!
そこで、CookieのValueが18のときのレスポンスを見ると...
FLAGを発見しました!これにてFLAG獲得です!お疲れ様でした。
もう少し考えてみる
今回はCookieの値を変えることでFLAGを獲得することができました。しかし、「そうだっ!Cookieの値を変えてみたらどうだろう?」という発想はどこから浮かぶのか。ChatGPTと個人面談しながら考えてみました。
その結果、以下の要素が挙げられます。
・問題名によるヒント
→今回の問題名は "Cookies" です。明らかですね。
・Cookieがレスポンスで設定されている
→レスポンスにCookieが含まれているかは、Webインスペクタでもすぐに確認することができます。
・Cookieの名前が人間が読めるものになっている
→例:name=0, admin=false など。
・入力に対して反応がないorフォームがない(少ない)
→フォームが少ない、何をしても結果があまり変わらない→となると、何を基準に判断しているのか?→Cookieでは?
・HTMLやJavaScriptにヒントがない
→ソースコードを見てもヒントがない。JavaScriptも特に仕事をしていない→サーバー側に何かあるのではないか?→リクエスト周辺を見てみる→Cookieも対象に含まれる
・ページ遷移やボタンでCookieが変化する
→何かをクリックしたらCookieの値が変化した→値が切り替わるということは、その値に何か意味があるはず
以上です。
思考の過程を言語化することで、少しだけ頭の中にあった「なんで?」というモヤモヤが解消された気がします。
まとめ
今回の問題は、Cookieの値を改ざんすることでFLAGを獲得することができました。
補足
・サーバー側のロジックは見えるのか?
→見ることはできません。なぜなら、サーバー側のコードは「サーバーの中だけに存在」し、ユーザーには送られないからです。
逆に、ユーザーの見ることができるものは、HTML、CSS、JavaScriptやCookie、通信内容(例:リクエスト、レスポンス)などがあります。