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

問題概要

picoCTFの「WebDecode」という問題の解説記事です。

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

問題文

picoCTF WebDecode

解説

ステップ1: 問題の理解

問題文で、以下のように指示されていることから、ブラウザの開発者ツール(Web Inspector / DevTools)を使って、与えられたWebサイトを調査する必要があることがわかります。

Do you know how to use the web inspector?
Additional details will be available after launching your challenge instance.

ステップ2: Webサイトの調査

問題文のリンクからWebサイトにアクセスし、開発者ツール(DevTools)を使って調査を行います。 Webサイトは「HOME」「ABOUT」「CONTACT」の3つのセクションで構成されているようです。


HOMEセクションの調査

まず、HOMEセクションを調査します。

picoCTF WebDecode HOME

見た目上は特に問題なさそうです。


開発者ツール(Elementsタブ)を開き、HTMLコードを確認します。

picoCTF WebDecode HOME Inspector

特に怪しいコメントや属性は見当たりませんでした。


ABOUTセクションの調査

次に、ABOUTセクションを調査します。

picoCTF WebDecode ABOUT

こちらも見た目上は特に問題なさそうです。


開発者ツール(Elementsタブ)を開き、HTMLコードを確認します。

すると、要素の属性に notify_true のような不自然なキーがあり、値として次の文字列が設定されていました。
picoCTF WebDecode ABOUT Inspector

問題名が「WebDecode」であることから、この値が何らかのエンコード文字列である可能性が高いです。


CONTACTセクションの調査

最後に、CONTACTセクションも確認します。

picoCTF WebDecode CONTACT

このセクション内には追加のヒント(コメント/隠し属性/埋め込みデータなど)は見当たりませんでした。


ステップ3: エンコードの判定とデコード

見つけた文字列がBase64エンコードされている可能性が高いため、デコードを試みます。

ステップ3-1: Base64デコード(CLI)

$ echo -n 'cGljb0NURnt3ZWJfc3VjYzNzc2Z1bGx5X2QzYzBkZWRfMDdiOTFjNzl9' | base64 -d
picoCTF{xxxxx}

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

フラグを取得できました。


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

環境によっては base64 -d が使いづらいこともあるので、Pythonでも同様にデコードできます。
$ python3 - <<'PY'
import base64

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

出力例

picoCTF{xxxxx}

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



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

base64

$ echo -n '<Base64文字列>' | base64 -d
Base64文字列をデコードして元のテキストに戻します。 echo -n は末尾の改行を出さないためのオプションです(改行があっても多くの場合は動きますが、癖として付けておくと安全です)。

python3(Base64デコード)

python3 - <<'PY'
import base64

s = '...'
print(base64.b64decode(s).decode())
PY
Python標準ライブラリの base64 を使ってデコードします。

まとめ

picoCTFの「WebDecode」では、ページ(ABOUTセクション)のHTMLに埋め込まれていたBase64文字列をデコードすることでフラグを取得できました。

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

  • まず開発者ツール(Elements)で、コメント/属性/スクリプト内の怪しい文字列を探す
  • 見つけた文字列が英数字中心ならBase64を疑う(パディング = がなくてもBase64の場合はあります)
  • CLIでもPythonでもよいので、素早くデコードして中身を確認する

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

今回のような「開発者ツールで情報が見える」系は、CTFの定番です。 実務でも、HTML/JSに不用意に情報を埋め込むと漏えいにつながるので、基礎をまとめて整理したい場合は次の本が参考になります。

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


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

NEXT
次におすすめ

【picoCTF】Unminify - minifyされたHTML/JSを整形して埋め込みフラグを発見

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