電通総研 テックブログ

電通総研が運営する技術ブログ

4-Girls Petit CTF WriteUp(in SECCON 2023 電脳会議)

こんにちは。コーポレート本部サイバーセキュリティ推進部の大西です。
昨年の話になりますが、2023年12月23日に開催されたSECCON 2023 電脳会議CTF for GIRLSが主催するハンズオンとPetit CTFに参加してきましたので、CTFのWriteUpを書きます!

↓電脳会議およびCTF for GIRLSイベントに参加した際にいただいたパンフレット、ステッカー、ヘアゴム、SECCON公式バッジ
いただいたパンフレット、ステッカー、ヘアゴム、SECCON公式バッジ
ステッカーもヘアゴムも素敵・・・。
のちにこのクリスマスステッカーにCTFの重大なキーワードが隠されていることを知るのでした・・・。
CTFとはCapture The Flagの略で、情報セキュリティに関する様々な技術を競うコンテストです。セキュリティの専門知識や技術を使って隠されたFlagを獲得するとポイントをゲットできます。

CTF for GIRLSは世界的に有名なセキュリティ研究家の中島明日香さんが設立された、情報セキュリティ技術に興味がある女性を対象に、気軽に技術的な質問や何気ない悩みを話し合うことができるコミュニティです。今回、私と同じテーブルには、社会人3年目2人と学生4人、部屋全体では70 ~ 80人ほどが参加していました。23日のイベントでは、午前中にReversing、Crypto、Web、Forensicsのワークショップ、午後からPetit CTFが行われました。
今回、Petit CTFで70人中13位、Web問題上級でFirst Blood賞をいただきました!
出題された問題についてWriteUp(CTF参加後に問題の解き方などを書いたもの)を書いていこうと思います。

Reversing

banner4you(初級)

banner4you
拡張子のない謎のバイナリファイルが与えられて、答えとなるキーワードを探すCTFでは定番のタイプの問題です。
ダウンロードしてきた添付ファイルをstringsコマンドの引数に渡してあげればフラグゲットです。

Misc

この模様はなーんだ?(初級)

この模様はなーんだ?
添付ファイルを開いてみると、
この模様はなーんだ?の添付ファイル
このような模様が出てきましたが何の模様か分からず、とりあえずGoogleレンズに読み込ませると、MaxiCodeという規格の2次元コードらしいことが分かりました。
こちらのリーダーに読み込ませることでフラグがゲットできました!

ちなみにMaxiCodeとは、1987年に宅配業者のUPS社(アメリカ)によって、物流の仕分けや追跡のために開発されたマトリクス型の二次元コードだそうです。読み取り速度が非常に速い一方で、他の二次元コードと比べて収納できるデータ量はあまり多くないという特徴があるそうです。
参照:https://aimjal.co.jp/gijutu/2jigen/maxicode/maxicode.html

christmas card(中級)

christmas card
添付されていた画像を開くと、
christmas cardの添付画像
ヒントを見るとStegOnlineを使えとあるので、この画像をStegOnlineにアップロードし「Browse Bit Planes」ボタンを押すと、
christmas cardのフラグ
フラグゲットです。

ちなみに、StegOnlineの「Browse Bit Planes」ボタンで何をしているかChatGPTに聞くと、

画像の視覚的な外観に最小限の影響しか与えない最も重要でないビットプレーンが情報を隠すためによく使用されるため、これらを閲覧することで隠されたメッセージやデータを明らかにできます。

だそうです。8ビットの画像には、最も重要でないビット(LSB)から最も重要なビット(MSB)まで、8つのビットプレーンがあるそうです。「Browse Bit Planes」機能を使用すると、アップロードした画像の各ビットプレーンを検査し、ステガノグラフィーで隠された情報を示す可能性のある異常やパターンを探すことができるらしいです。

3keywords(上級)

3keywords
個人的にこの問題がいちばん苦労しました・・・笑
解き方は分かるのにしっくりくる解答が出てこない!
解き方としてはこうです。イベントが始まる前に渡されたクリスマスステッカーは、実は3種類ありました。違う種類のステッカーを持つ人を探して、ステッカー内にある3つのキーワードを探し、そこからある場所を導き出す・・・。
3つのキーワードはすぐ分かりました。ステッカーの写真を撮っていなかったのでX(Twitter)上の写真を拝借・・・。
3種類のステッカー
「10th anniversary」と書かれた文字の下に、何やらモールス信号みたいなものと、16進数のようなものと、数字の羅列があります。
モールス信号を解読すると「beads」、16進数をASCII変換すると「sect」、数字をアルファベットに置き換える(1 -> a、2 -> b、3 -> c ・・・)と「encourage」になります。
3つのキーワードは分かりましたが、ここからが長かった。
3つのキーワードをアルファベット(辞書)順に並べたとき、導き出される場所があるらしいのですが、検索しても検索してもここだ!という場所が出てこないのです。
「beads」というキーワードがあるので、ビーズを使ったお店などが出てきて、ここじゃないよなぁと思いながらフラグを入力してもやっぱり弾かれ・・・
同じテーブルの方が、「最初にもらったヘアゴムのビーズが関係あるかも!」と言ってくれて、その方面も考えましたがいい感じのフラグは見つけられず。
仕方なくヒントを見ました。
「3つのキーワードで特定の場所を示す方法はないでしょうか」
・・・!!あれやん!と思わず声を出して言ってしまいました笑
そう、3つのキーワードで特定の場所を示す方法といえば、what3wordsですね。
実際に使ったことはなかったのですが、テレビか何かで見て知っていました。
3つのキーワードをwhat3wordsに入力して、無事「ctf4g{santaclausvillage}」(サンタクロース村)というフラグをゲットできました。
時間はかかりましたが、他の方と協力しながら問題を解けてとても楽しかったです!!

Crypto

Do not use the default password!(初級)

Do not use the default password!
「keystore」で検索すると、keytoolコマンドというものがありました。keytoolコマンドを使用して、自己署名証明書を生成し、キーストアに証明書をインストールして管理できるそうです。
keytool -list -v -keystore (keystoreファイルの場所) コマンドで、JavaのKeyToolユーティリティを使用して、キーストアの中のエントリ(秘密鍵や証明書など)をリストできるそうです。試してみると、パスワードを聞かれました。問題文が「Do not use the default password!」なので、keytoolのデフォルトパスワードを検索すると「changeit」とあったのでそれを打ち込みます。所有者と発行者の部分にフラグがありました。
keytoolコマンドを打った後

Forensics

Snow covered(初級)

Snow covered
画像が重なり合ったPDFファイルが与えられました。邪魔な画像を消してあげれば、下にある答えが見られるはずです。
ワークショップで教わったLibreOfficeforemostコマンドなどを使うと、PDF上の画像も扱うことができそうです。
私は、LibreOfficeを使って邪魔になっているフラグの上の画像を動かしてフラグをゲットしました。
フラグの上の画像を動かした後

Web

トナカイ専用(初級)

トナカイ専用
トナカイ専用サイトにアクセスするとこんな画面が出てきます。
トナカイ専用サイトアクセス画面
トナカイ専用ブラウザでしか閲覧できないということなので、UserAgentに「ReindeerBrowser」と入力してリクエストすればフラグゲットです。
UserAgentの値を編集してリクエストするには、PostmanやBurp Suiteなど何でも使えます。
PostmanでUser-Agentの値を編集してリクエスト

SecretKey(上級)

SecretKey
問題文中のURLにアクセスすると、5つのポストが見られました。
SecretKey URLにアクセス
2023/12/23のポストにアクセスすると、
2023/12/23のポスト
「シークレットセール」の話が出ているので、このポストが怪しいです。
問題文にIDとパスワードがあり、どこからかログインできる匂いがするのでそれを探します。
すると、他のポストを見るとURLが連番になっていることに気づきます。
2023/12/21のポスト↓
2023/12/21のポスト
2023/12/22のポスト↓
2023/12/22のポスト

なので、セール情報の載ったポストは10458.htmlにありそうなのでアクセスしてみます。
10458.html
当たり!問題文中のID、パスワードでログインすると、
ID、パスワードでログイン

セールのエントリーは締め切ったというメッセージが出てきました。
「logout」ボタンをクリックする以外にできることはなさそうなので、開発者ツールを開いて中を見てみます。
CookieにJWTのtokenが入っているので、一応こちらのjwtのデコーダーで中身を見てみます。
Cookieに入っているJWTのtoken
jwtをデコード
PAYLOAD内のroleが「user」になっているので、ここを「admin」にすると管理者権限でアクセスできるかもしれません。
roleをadminにする
また、algがHS256(HMAC using SHA-256 hash)なのでsecretが署名に使われていそうです。添付ファイル内の文字列がsecretの候補のようです。ひとつずつ試して、「reindeer」にしてアクセスするとフラグをゲットできました!
そして、この問題でFirstBlood賞をいただきました!
secretをreindeerにする
管理者としてログインできた

参加した感想

業務では脆弱性検査を担当しているのでWeb問題はぜひ全問解きたかったですが、Web問上級でFirstBlood賞をいただけて良かったです!
またCTF for GIRLSのイベントがあれば参加させていただきたいです。
今回のイベントを通じて、セキュリティ業務に関わる他社の方のお話を聞けたのもとても良かったです。
自分の周りでForensicsをゴリゴリやっている人はいなかったのですが、Forensicsをずっとやってきた方が同じ島にいらっしゃって、いろいろお話を聞けました。その方のWriteUpも掲載させていただきます(今回のCTFで1位受賞!✨)。
https://kcfromsmallpotatoes.hatenablog.com/entry/2023/12/29/233545

最後にCTF for GIRLSの中島さんと記念写真をパチリ✨
中島さんとの写真

お読みいただきありがとうございました!

執筆:@onishi.mayu、レビュー:石沢 健人 (@kent)
Shodoで執筆されました