【picoCTF】Cookie Monster Secret Recipe - ブラウザCookie改ざんで管理者レシピを盗み見る

問題概要

picoCTFの「Cookie Monster Secret Recipe」という問題の解説記事です。

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

問題文

picoCTF Cookie Monster Secret Recipe

解説

ステップ1: 状況把握・アプリケーションの調査

まずは問題文と提供された情報を確認します。

Description
Cookie Monster has hidden his top-secret cookie recipe somewhere on his website.  
As an aspiring cookie detective, your mission is to uncover this delectable secret.  
Can you outsmart Cookie Monster and find the hidden recipe?
You can access the Cookie Monster here and good luck
問題名と、Descriptionの記述からCookieに関する問題であると推測できます。

提供されたURLにアクセスし、アプリケーションの挙動を確認します。

picoCTF Cookie Monster Secret Recipe App
このサイトではUsernamePasswordを入力することでログインすることができるようです。

適当な値を入力してログインを試みます。 以下のような画面が表示され、ログインに失敗しました。

picoCTF Cookie Monster Secret Recipe Login Failed

「Have you checked your cookies lately?(最近クッキーを確認した?)」とあることから、やはりブラウザのCookieに注目する必要がありそうです。


ステップ2: ブラウザのCookieを確認

ブラウザの開発者ツールを開き、Cookieの内容を確認します

picoCTF Cookie Monster Secret Recipe Dev Tools
secret_recipeという名前のCookieが存在していることがわかります。そして、Valueには長い文字列が設定されています。 

CookieのValueは以下の通りです。

cGljb0NURntjMDBrMWVfbTBuc3Rlcl9sMHZlc19jMDBraWVzXzJDODA0MEVGfQ%3D%3D

ステップ3: Cookieのデコード

CookieのValueはURLエンコードされているため、まずはデコードします。


ステップ3-1: URLデコード

Cookieの値には %3D%3D が含まれています。 これはURLエンコードされた == を意味するため、まずはURLデコードを行います。
ここでは Python の標準ライブラリ(urllib.parse)を使ってURLデコードします。
$ python3 - <<'PY'
import urllib.parse

s = 'cGljb0NURntjMDBrMWVfbTBuc3Rlcl9sMHZlc19jMDBraWVzXzJDODA0MEVGfQ%3D%3D'
print(urllib.parse.unquote(s))
PY

出力例

cGljb0NURntjMDBrMWVfbTBuc3Rlcl9sMHZlc19jMDBraWVzXzJDODA0MEVGfQ==

ステップ3-2: Base64デコード

URLデコード後の文字列は末尾が == になっており、Base64の典型的なパディングに見えます。 そのため、Base64デコードを試します。
ここでは Python の標準ライブラリ(base64)を使ってデコードします。 入力には、ステップ3-1の出力(URLデコード後の文字列)をそのまま使います。
$ python3 - <<'PY'
import base64

s = 'cGljb0NURntjMDBrMWVfbTBuc3Rlcl9sMHZlc19jMDBraWVzXzJDODA0MEVGfQ=='
print(base64.b64decode(s).decode())
PY

出力例

picoCTF{xxxxx}

※フラグはマスクしています。

この結果から、Cookieに格納されていた値をデコードすることでフラグを取得できることが分かります。


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

python3(URLデコード)

python3 - <<'PY'
import urllib.parse

s = '...%3D%3D'
print(urllib.parse.unquote(s))
PY
URLエンコード(パーセントエンコーディング)された文字列をデコードします。 %3D= に戻ります。

python3(Base64デコード)

python3 - <<'PY'
import base64

s = '...=='
print(base64.b64decode(s).decode())
PY

Base64文字列をデコードして、ASCII/UTF-8のテキストに戻します。


まとめ

picoCTFの「Cookie Monster Secret Recipe」問題では、ブラウザのCookieに格納されている値をデコードすることでフラグを取得できました。

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

  • ヒントに cookies が出てきたら、まず開発者ツールでCookieを確認する
  • %3D などが含まれていたらURLエンコードを疑う
  • URLデコード後に == が出てきたらBase64デコードを試す

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

この問題は「Cookieを見る→URLデコード→Base64デコード」という素直な流れでしたが、 実務のWebアプリでは、Cookieやセッションの扱いがセキュリティ設計に直結します。 基礎から整理したい場合は、次の本が参考になります。

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


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

NEXT
次におすすめ

【picoCTF】WebDecode - DevToolsでHTMLに埋め込まれたBase64フラグを復号

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