プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

nazotokiCTF write-up

nazotokiCTF~入社試験からの脱出~に参加しました。そのwrite-up記事です。今回はゆるく書きます。

コンテスト概要

2022/7/17(日) 13:00 +09:00 - 2022/7/18(月・祝) 13:00 +09:00 の開催期間でした。他ルールはルールページから引用します:

CTFってなあに?
    CTF(シーティーエフ)とは Capture The Flag(キャプチャーザフラッグ) の略で、ここでは情報セキュリティの知識や技能を競うセキュリティコンテストの意味です。「モンダイ」ページのお題の中でフラグと呼ばれる文字列(要するに答え)を探すことが目的です。
    フラグをみつけたら各解答フォームに入力してsubmitボタンをクリックします。正解の場合は表示されている数字と同じ数のポイントを獲得できます。特定の問題を正解しないと表示されない問題があるかもしれません。

解答期間
    2022/7/17 (日) 13:00 JST - 2022/7/18 (祝) 13:00 JST

当CTFの特殊ルール
    一般的なCTFとは異なり、フラグはすべて「全角カタカナ4文字」の意味のある単語で統一されています(セキュリティに関係のない言葉かもしれません)
    一部の問題で導き出される解答は、フラグとなる文字列をわかりやすくするためにnazotokiCTF{〇〇〇〇}というようなプレフィクスとカッコ付きの表記がされていることがありますが、submit時に利用するのは中身のカタカナのみであることにご注意ください。獲得したフラグはメモしておくことをおすすめします。

賞品について
    スペシャルスポンサーのシステムガーディアン様のご厚意により、このCTF大会には賞品が出ます。
    (中略)

禁止事項
    解答期限終了前にネタバレ・WriteUpの共有を不特定多数に対して行うこと(ネタバレにならない程度の感想や終了後のWriteUpは歓迎します)
    問題サーバやそれに準ずるサーバへの攻撃及び意図的な破壊行為
    総当りによる解答の送信(目に余る場合はアクセス制限などの対応を行う可能性があります)

よくある質問
    このイベントはシステムガーディアンの採用イベントですか?
        いいえ。システムガーディアン様には完全なご厚意で賞品のみご提供いただいています
        収集した個人情報の利用目的に関してはプライバシーポリシーをご確認ください
        ちなみに主催(のみぞう)も完全に個人的な趣味でこのイベントをやってます。所属組織はまったく関係ありませんし全部一人でやってますんでまぁお手柔らかにヨロシャス
    友達と参加したいのですがチームを組むことはできますか?
        申し訳ありません、今回のCTFに関してはいわゆるチーム機能を提供する予定はありません
        ただし、お友達同士であれば個人的に連絡をとっていただいて、フラグや解法を共有いただくことは問題ありません(不特定多数から見えないところでお願いしますね)どうぞご自由にお楽しみください
        共有アカウントを作って一緒にログインするか、お友達と別々のアカウントを作って情報共有のみを行うかはお任せします(おすすめは後者です)
    イベント開催期間中に予定があって参加できないのですが、あとからでも問題を解くことはできますか?
        できます(予定)。終わったあとも1週間くらいはサーバを落とさずにおいておくつもりなので、もしよかったら登録だけしてご都合のよいときにチャレンジしてみてください
        解答期間が過ぎると脱出成功賞の対象ではなくなってしまいますのでそこだけご了承ください
    スマホから参加できますか?
        参加はできます。でもごめんなさい、多分一部の問題を解くにあたってのハードルが相当上がると思います。頑張ればできなくはないかもしれませんが不具合起こったらごめん…一応これCTFなので…

困ったときには
    解答に必要な情報を見過ごしている可能性があります。「プロローグ」や「ルール」や今まで獲得したフラグや解いた問題などを見直してみてください。特に複数人で解いている場合は情報共有が重要です
    自分がその時点までに獲得したポイントをいくらか消費することでヒントを閲覧することができます。使うもよし、使わないでがんばるもよし
    不具合などございましたら主催(のみぞう)の TwitterのDM までご連絡ください

大切なルール
    燃えるゴミは捨ててください
    ペットボトル

大切なルール箇所がとても気になりつつ、プロローグを眺めたりしながら、本番を迎えました。

結果

1問解けていませんが脱出成功(最終問題正解)できました!途中で詰まった場合は積極的にヒントを見ました。

最終の順位と得点
スコア遷移
青緑色: 解けた問題

環境

WindowsのWSL2(Ubuntu 22.04)を主に使って取り組みました。

Windows

c:\>ver

Microsoft Windows [Version 10.0.19044.1826]

c:\>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu          Stopped         2
  kali-linux      Stopped         2
  Ubuntu-22.04    Stopped         2

c:\>

他ソフト

  • Google Chrome Version 103.0.5060.114 (Official Build) (64-bit)
  • Wireshark Version 3.6.6 (v3.6.6-0-g7d96674e2a30)

WSL2(Ubuntu 22.04)

$ cat /proc/version
Linux version 5.10.102.1-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP Wed Mar 2 00:30:59 UTC 2022
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
$ curl --version
curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.12
Release-Date: 2022-01-05
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets zstd
$ exiftool -ver
12.40
$

解けた問題

ヒントを見た問題は、ヒントも記載しています。

[Tutorial] Welcome (1 point)

初心者の方向けに練習の場をご用意しました(ガチ勢の方もしばしお付き合いください)

このCTFでは問題を解く中で例のような文字列が手に入ることがあります。これを「フラグ」と呼びます。

例:nazotokiCTF{ナゾトキ}

例の場合は「ナゾトキ」の4文字だけを以下のフォームに入力して「submit」をクリックしてください。正解すればポイントが獲得できます。

フラグは必ず 意味のあるカタカナ4文字の単語 ですが、脈絡があるとは限りません。なぜわざわざフラグが4文字縛りなのか?なぜこの単語なのか?本当の意味はあとで気付くことになるかもしれません。

まずは試してみましょう!ついでに↓のヒントも見てみてね。

開始直後はこの問題だけが表示されている状態でした。ヒントを見てみました:

問題が難しくて詰まった場合は、このようにヒントを閲覧することができるようになっています。

ヒントを見る際には、自分が今まで獲得したポイントの一部をコストとして消費することがあります(今回は練習なのでポイントを消費しません)

ヒントを得ることで新しい問題に正答できれば当然ポイントは加算されますが、消費したポイントが返ってくることはありません。 見るもよし、見ないで粘るもよし、戦略的にご活用ください。

とりあえずこの問題は問題文中にフラグがあるので提出しました: ナゾトキ

この問題に正解すると、他のいくつかの問題も表示されました。

[Misc - Water elements] かに座 (14 points)

仲間はずれを探せ

配布ファイルとしてZipファイルがありました。展開してとりあえずファイル形式を確認しました:

$ file *
0961db32a59b8a83c1996498f9d1d80e: pcapng capture file - version 1.0
397cbf6db9d7ae6906ae420aedc5346c: pcapng capture file - version 1.0
44ca0844398b2d010d8cd4a31ddb023d: pcapng capture file - version 1.0
4de447a391e32baeb5a52c55aa14467b: pcapng capture file - version 1.0
550eadb88a230018bf043d1b6ad15863: pcapng capture file - version 1.0
635cbc8a5dc1a528c3b5cb9eecdc1086: pcapng capture file - version 1.0
7463543d784aa59ca86359a50ef58c8e: pcapng capture file - version 1.0
766cc4dd4d5005652e8514e3513683f8: pcapng capture file - version 1.0
7c70e2cb2b4a13c4590f6b15c30385fd: pcapng capture file - version 1.0
a0678bcea04dbd6852c219062ab2bb3c: pcapng capture file - version 1.0
b9c94e8a87e3647c5a0fa4ff358ecc65: pcapng capture file - version 1.0
f0525aafa095ed2665d03681537a70ea: Unicode text, UTF-8 text
f8a5c386478fa64f118056b82acc31d2: pcapng capture file - version 1.0
$

仲間はずれはf0525aafa095ed2665d03681537a70eaファイルでした:

$ cat f0525aafa095ed2665d03681537a70ea
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
Open in Notepad.Open in Notepad.Open in Notepad.Open in Notepad.
nazotokiCTF{イイワケ}
$

フラグが手に入りました: イイワケ

他のpcapファイルをWiresharkで開くと、それぞれFTP通信が5フレーム記録されたものでした。とりあえず次の問題へ進みました。

[Misc - Water elements] さそり座 (24 points)

世界一かわいいうちの犬を紹介します
(ここに犬の画像)

配布ファイルとしてJPEG画像がありましたが、それは問題文中にある画像と同じものでした:

とりあえずexiftoolを使ってみましたがフラグはでませんでした。JPEG画像なのでステガノグラフィーの線も薄そうです。stringsコマンドにかけてももちろんフラグはでませんでした。仕方がないので画像を眺めていました:

犬の瞳にフラグが書かれていました!提出すると正解でした: カクダイ

[Web - Air elemtnts] ふたご座 (13 points)

Webサイトにアクセスしフラグを探せ

https://gemini.ctf.nazotoki.tech

Webサイトにアクセスしてみると、以下の画像の表示と入力フォームがありました:

dioskouroiと入力しましたが、パスワードが違いますとの表示でした。Google Chromeの開発者ツールのNetworkタブを使って、どのような通信が行われているか確認しました:

入力内容はdummyPassword値に反映されており、それとは別にrealPassword値が存在することがわかりました。クエリーを書き換えたhttps://gemini.ctf.nazotoki.tech/check.php?realPassword=dioskouroiをアドレスバーに入力しました:

フラグが手に入りました: ナイーブ

[Web - Air elemtnts] てんびん座 (23 points)

Webサイトにアクセスしフラグを探せ

https://libra.ctf.nazotoki.tech

Webサイトにアクセスしてみると、以下の内容が表示されました:

Libra
リクエストヘッダー情報
フラグはstardustChromeという特殊なブラウザでしか閲覧できません。

X-Forwarded-For:198.51.100.1
X-Forwarded-Proto:https
X-Forwarded-Port:443
Host:libra.ctf.nazotoki.tech
X-Amzn-Trace-Id:Root=1-62d38cf8-2492e53f7f9745c45e491c8b
sec-ch-ua:".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"
sec-ch-ua-mobile:?0
sec-ch-ua-platform:"Windows"
upgrade-insecure-requests:1
user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
sec-fetch-site:same-site
sec-fetch-mode:navigate
sec-fetch-user:?1
sec-fetch-dest:document
referer:https://ctf.nazotoki.tech/
accept-encoding:gzip, deflate, br
accept-language:ja

curlコマンドでUser-Agentを指定しつつアクセスしました:

$ curl https://libra.ctf.nazotoki.tech/ -A 'stardustChrome'
<!DOCTYPE html>
<html lang="Ja">
  <head>
    <!-- Document Meta-->
    <meta charset="utf-8"/>
    <!-- Stylesheets-->
    <link href="assets/css/vendor.min.css" rel="stylesheet"/>
    <link href="assets/css/style.css" rel="stylesheet"/>
    <!--
    Document Title
    =============================================
    -->
    <title>Libra</title>
  </head>
  <body class="bg-gray">
  <section id="libra">
        <div class="container">
          <div class="row clearfix">
            <div class="col-12 col-md-12 offset-md-1 col-lg-8 offset-lg-1">
            <h2 class="heading--title">Libra</h2>
            <h6>リクエストヘッダー情報</h6>
            <p>
                フラグは<code>stardustChrome</code>という特殊なブラウザでしか閲覧できません。
            </p>
            <p>
                X-Forwarded-For:198.51.100.1<br>X-Forwarded-Proto:https<br>X-Forwarded-Port:443<br>Host:libra.ctf.nazotoki.tech<br>X-Amzn-Trace-Id:Root=1-62d38d22-27a657d21d10b2bc3ed5f417<br><br />確かにstardustChromeを使ってるね。フラグをどうぞ! <br />nazotokiCTF{<code>クローン</code>} <br />
            </p>
            <a href="/" onclick="window.location.reload();">再読み込み</a>
            </div>
          </div>
        </div>
      </section>
  </body>
</html>
$

フラグが手に入りました: クローン

[Web - Air elemtnts] みずがめ座 (33 points からヒントを見た分の -1 point)

Webサイトにアクセスしフラグを探せ

https://aquarius.ctf.nazotoki.tech

Webサイトにアクセスすると、社員ナンバーとパスワードを指定する検索フォームが表示されました:

社員ナンバー欄は数値入力のみ可能のようです。とりあえずSQL Injectionを疑って、パスワード欄に' OR 1=1 #を入れたりしましたが、該当の社員番号が存在しないかパスワードが間違っています応答が得られるだけでした。

困ったのでヒントを1つ開きました(この問題は全部で3つのヒントがありました):

passwordを入力することで指定した社員情報を閲覧できます

と書かれています。 スターダストセキュリティの社員の中で、一人だけ社員ナンバーを知っている人がいませんか? その人の社員ナンバーを使って、「password」と入力すれば検索ができそうです。

「プロローグで見た!!」と思い出して、以下の画像を見に行きました:

アイちゃんの社員ナンバーは99です!社員ナンバーに99、パスワードにpasswordを入力すると、アイちゃんの情報が表示されました。その中に、メモとしてフラグのヒントはナンバー9999に載せておいたよ!入社前情報だから普通のパスワードでは見れないかもね。と記述されていました。

今度こそSQL Injectionだろうと想像して、社員ナンバーに9999、パスワードに' OR 1=1 -- aを入力しました:

あまりも格好いい主人公の登場に感激しつつ、プロローグを見て名前を確認して提出すると正解でした: タカハシ

[Knowledge - Earth elemtnts] おうし座 (12 points)

2021年に行われた、コンピューターウイルス「emotet」のテイクダウン作戦の名前を日本語で言うと?「○○○○ムシ作戦」

なるほど知識問題です。英語名称は忘れましたが、日本語名称は確か「テントウムシ」だったかなと提出してみると正解でした: テントウ

[Knowledge - Earth elemtnts] おとめ座 (22 points)

Webアプリケーションのセキュリティ分野の研究・ガイドラインの作成・脆弱性診断ツールの開発・イベント開催などの活動をしているオープンソースソフトウェアコミュニティの名称の読み方をカタカナ4文字で答えよ。

初めて聞く名称に思いました。とりあえずWebアプリケーションのセキュリティ分野の研究・ガイドラインの作成・脆弱性診断ツールの開発・イベント開催などの活動をしているオープンソースソフトウェアコミュニティでGoogle検索してみると、OWASP 脆弱性検査環境の構築と実施(1)- 準備 - EmotionTechテックブログがヒットしました。OWASPをローマ字読みしたものを提出してみると正解でした: オワスプ

[Knowledge - Earth elemtnts] やぎ座 (32 points)

ある数 x を数 b のべき乗bᵖとして表した場合のpのこと。logとも呼ばれるこの数を日本語で何というか?カタカナ4文字で答えよ。

「対数では?」と思いながら提出してみると正解でした: タイスウ

[Riddle - Fire elements] おひつじ座 (11 points からヒントを見た分の -3 points)

あなたが目指しているものの間を読め

問題文を見てとても戸惑った問題です。とりあえずプロローグを読み直して以下のものを提出してみましたが全部外れでした:

  • サイヨウ
  • キュリテ(セキュリティの間)
  • タカハシ
  • ピヨヒコ
  • ハシピヨ
  • ターダス(スターダストの間)
  • パーハッ(スーパーハッカーの間)
  • モンダイ
  • カタカナ
  • ムガーデ(システムガーディアンの間)

全くわからなかったのでヒントを開きました:

プロローグをよく読んでね

読んでも分からなかったのでもう1つ開きました:

あなたが目指してるものは「セキュリティ業界の星」 つまり…「★」

どこかにマークがなかったでしょうか?テキストとは限りませんよ?

改めてプロローグを読み直すと、アイちゃん画像に「★」記号が上下にあり、その間に存在する文字を拾うと「ハンドル」になりました!なるほど!!!提出すると無事正解でした: ハンドル

[Riddle - Fire elements] しし座 (21 points からヒントを見た分の -3 points)

ルールを守れ
(ここに画像)

配布ファイルとしてPNG画像がありましたが、それは問題文中にある画像と同じものでした:

「今回こそ「大切なルール」の出番のはず!」と直感しました:

  • 燃える「ゴミ」は捨てる
  • ペットボトル……あれ、ペットボトルを何するんでしょう、とりあえずマークを付けておきましょう

そうして出来上がった画像がこちらです:

はい、どうすればいいのか全然分からなかったのでヒントを開きました:

ルールを最後までよく読んでね
大切なルールに書かれていることを実行してみよう

「モエルゴミ」は捨ててください
「ペットボ」とる

「そういうことか!!!」と完璧に理解しました:

残った文字を拾って提出してみると正解でした: チーター

[Riddle - Fire elements] いて座 (31 points からヒントを見た分の -3 points)

(ここに画像)

配布ファイルとしてPNG画像がありましたが、それは問題文中にある画像と同じものでした:

全くわからなかったので即ヒントを開きました:

身の回りで4つ種類があるものと言えば?

東西南北や春夏秋冬が思いつきましたが、これらのマス目に合わなそうに思いました。次のヒントを開きました:

地図とかで見かけます

「やっぱり東西南北?」としばらく考えていると、英語発音カタカナ表記が「イースト」「ウエスト」「サウス」「ノース」で左側に当てはまることに気づきました!右側はそのまま音読みでした!そういうわけで左上を提出してみると正解でした: イースト

[2nd Challenge] へびつかい座 (100 points)

最終問題に進むためのフラグを導く魔法の解答用紙をご用意しました(謎解きによくあるやつ)

※使い方のヒント
  PDF版とPNG版を用意してますが内容は一緒です
  印刷できる環境がある方は印刷するといいかも
  PDF版は文字入力ができるようになってます
    お使いのIMEによるかもしれませんがカタカナ入力よりひらがな入力のほうがやりやすいかも(どっちでも大丈夫です)
    tabキーで次の入力欄に移動できるようになってます
  あとで提出が必要になったりするとかではないので最悪使わなくても大丈夫です
    ただし、用紙の様式はよくみておいたほうが良さそうです

チュートリアル問題を正解した後に、一番上に表示された問題です。配布ファイルは以下の見た目のものでした:

これまでにわかった問題のフラグ(うお座は解けていません!)を、プロローグにあった星座画像の順番に並べてみました:

1 牡羊座 ハンドル
2 牡牛座 テントウ
3 双子座 ナイーブ
4 蟹座  イイワケ
5 獅子座 チーター
6 乙女座 オワスプ
7 天秤座 クローン
8 蠍座  カクダイ
9 射手座 イースト
10山羊座 タイスウ
11水瓶座 タカハシ
12魚座  ????

解答用紙で各行の1文字目がハイライトされているのでそこを縦読みすると、「はてな1億回叩(く?け?)」と読めます。「はてなってなんだ?」と思っていると、サイト左上に「?」アイコンが存在することに気づきました。クリックするとトップページへ飛ぶボタンですが、通信内容を見てみるとクッキーで数値を送っていました:

Google Chromeの開発者ツールのApplicationタブから、nazotokiの値を99999999に変更し、改めて「?」ボタンをクリックしました:

フラグが手に入りました: ポラリス

この問題に正解すると、最終問題が表示されました。

[Last Challenge] 最終問題 (200 points からヒントを見た分の -30 points)

パスワードを解け

http://polaris.ctf.nazotoki.tech

Webサイトにアクセスすると、以下の内容が表示されました:

各行の読解にしばらく悩みました。10分ほど考えて、太陽と月に背いて心の示す方を読めとは、解答用紙の各行1文字目ではなく、3文字目を読めと言っているらしいと察しました。しかし「へびつかい座」問題で使った並びでは全く意味をなさないので、何かしらの並び替えが必要のようです。パスワードのヒントは愛の星座の中はアイちゃんのことだと思いましたが、プロローグのアイちゃん紹介を見ても星座の言及はなさそうです。

ところで、Webサイトで適当なパスワードを入力するとng.htmlへ飛ばされるので、正解時のファイル名をguessしようと少し頑張っていました。しかし試したもの全部404になったので諦めました。その他、背景画像をダウンロードしてexiftoolにかけたりしていました(もちろん何も情報なし)。

しばらく悩んだ末、ヒントを開くことにしました:

ここまで来れたなら、フラグを導くために必要な情報の全ては既にあなたの前に提示されているはずです。

愛とはもちろん採用担当アイちゃんのことです。アイの星座はなんでしょうか? 彼女の誕生日がわかれば星座もわかりそうですね。どこかで彼女の誕生日を見ませんでしたか?

「Web問題で誕生日を見た!」と思い出しました。見直すと、みずがめ座問題でアイちゃんの誕生日は「7月18日」とありました!その日は何座になるのか調べるとかに座と分かりました。かに座問題といえば、FTPで何かをしていたpcapファイルがあった問題です!

しかし、「結局これらのpcapファイルをどうすればいいのか?」と悩んだので、もう1つヒントを開きました:

アイちゃんの誕生日は7月18日、つまりかに座です(ちなみに彼女が持ってるノートパソコンのマークもかに座です、気がつきました?)

さて、かに座の問題の仲間外れ以外のデータは何のデータだったでしょうか?その中に順番を示す物はなかったでしょうか?

「順番???」と頭がこんがらがりました。「もしかして各種pcapファイルのファイル名が星座を表すハッシュ値だったりする?」と予想してしばらく色々試していると、各星座のラテン語表記のMD5がファイル名に該当することがわかりました(12星座早見表(星座と誕生日)を参照しました):

$ echo -n "Aries" | md5sum
397cbf6db9d7ae6906ae420aedc5346c  -
$

これで、各pcapファイルがどの星座に対応するかは判明しました。あとは並び替える基準です。とりあえずファイルの更新日時で並び替えてみましたが違いました(配布ファイルはZIPで提供されたので更新日時は残っていました)。次にシーケンス番号かと思いましたが「作問する側がその辺を扱うのは大変だろう」と考えて、他に目立つ「FTPでデータを送受信するためのポート番号」を拾って並び替えてみました:

パスワードハスターダストとなりそうです!そういうわけで意気揚々とWebサイトでスターダストと入力しましたがパスワードが違います表示でした。混乱しながら他の表記を試していると、stardust/oort-cloudへ転送され、祝福メッセージなどなどが無事に表示されました!フラグはオールトでした(GIFアニメが感動的なのですが省略します)。また、本問題正解後にもう1つ問題が表示されました。

ところでこれは本筋には関係ない話なのですが、FTPで送信しているデータをWiresharkで保存したい場合、Follow → TCP Streamで表示されるダイアログでSave as…すればいいと思っていたのですが、Show data as箇所も気にする必要があるらしいとコンテスト終了後に気づきました。Show data asASCIIの状態でSave asすると、0x80以上のバイトや大体の制御文字が全部0x2Eの.として保存されてしまうようです。

ASCII表示時に保存すると表示内容そのものが保存されるので0x2Eの嵐になる

ASCII表示で保存すると壊れたPNGになるので、コンテスト中はダミーデータを送っているのかなと誤解していました。Show data as箇所をRawにした状態でSave asすると、正しくFTP送信内容のPNGデータを正しく保存できました。

Raw表示時に保存すると適切に保存できる

[Congratulations!!] Thank you (201 points)

おめでとうございます!あなたは無事、入社試験からの脱出を果たしスターダストセキュリティに内定しました(この会社で働きたいかは別ですが…)

最後に簡単なアンケートにお答えいただくとボーナスフラグがもらえます。あと抽選でAmazonギフト券が当たるチャンスもありますのでぜひご協力お願いします。

最後まで解いてくださってありがとうございました☆

あとの方に楽しみを残すために、解答期間終了まではネタバレはご遠慮ください。ネタバレしない程度の感想は歓迎します。

★脱出成功者向けアンケートのリンク★

Google Formsでアンケートに答えて、フラグを入手できました: アリガト

解けなかった問題

[Misc - Water elements] うお座 (34 points からヒントを見た分の -28 points)

みずがめ座からてんびん座に向かうとき、ひみつの鍵が手に入るだろう。水の中に浮かぶ真実を見定めよ。

配布ファイルを確認すると、パスワード付きZIPと、暗号化結果らしいpassword.encがありました。

何一つわからなかったのでヒントを開けました:

みずがめ座からてんびん座に向かうとき…ヘッダー情報に記録されるものはなんでしょうか?

全然思っていなかった方向のヒントでした!しばらくZIPのヘッダーの話と疑っていて、相変わらず何も思いつかなかったのでもう1つヒントを開けました:

どうやらリファラーの情報にaquariusが含まれた状態でてんびん座のサイトにアクセスすると鍵が手に入りそうです。書き換えられないでしょうか?

やり方がわからない人は「リファラー 書き換え」とかでぐぐると良いかもしれません。

「そっちか!!!」となりました!早速試しました:

$ curl https://libra.ctf.nazotoki.tech/ -H 'referer: https://aquarius.ctf.nazotoki.tech/'
(略)
            <p>
                X-Forwarded-For:198.51.100.1<br>X-Forwarded-Proto:https<br>X-Forwarded-Port:443<br>Host:libra.ctf.nazotoki.tech<br>X-Amzn-Trace-Id:Root=1-62d3a3a4-6b7d84b76fffa0f044187786<br>user-agent:curl/7.81.0<br>accept:*/*<br><br />遠いところをよくおいでくださいました。ひみつの鍵を差し上げます。
<pre>-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAunVG5a8SbXgsayNWhd4f9FYsWb8z57P2Ql8Yq+fQgq0Y2xcH
/HgHO0vZrgSbjFLxnpx4D9arOtvGdn06GLZcL3eU32jPvqVh8QhqmaQ8bdUDlEp8
yt45DMoleYflw8c9q2dDsRjLUoE2qhtMm2xR8B9U+mRq+vVgEJdvNMgmn+XtsmRx
A41n3nHTfTcOznZaNRxyAqZjooDOuUoVBStJVUqbd4a3EzMCBbdAzyQ2VdQEigT0
PVstPiMI0draaO9oKlZkfuGkJJ3Ftn8+A4cjIG8ycihsGqfEMSVUpLmUI+Etb0+C
3iD+B7P25v0CDNdD2odWIRipjdE8TmuTA+AsuQIDAQABAoIBAQCBCSw5Q4EzNNk4
g8oa9m+SvhgPO90F2mrv37PJM7H+3R+4byXduIr4pDNO1G15HOWNaKdF/r+dCf88
fMk51OnTB6SFP5mVTAqNrc9n6FrRf3rsoufd1RASI8rvYfbGGBo7hkk4Q/phbH6S
FjZb0QibbnN2nQvUBP+oO8R/+IuSV3NgxvtQ3CggRnqTiwx99kHO3gEXJVHozq09
mceaWIQeT6jAf5nMsNKl2YlBxomMkeXZ8jEcCJQcAPuHJjZ2SJmLpbADIffg/c95
oaLejnoEWUflnN/QPw7shHE2F50uKyEYAh5uNCjVHRQE15jUOQZBr5aLMtpyCkfJ
3bPrzFcBAoGBAOyEMyBBwAh2Kuk+QS9OCsFcxjTQPV/jkHnk2nU8I7xrO0MqONOL
/ily+GcbTrY4bx8zkIKuYwEAp/5Mybd+C/kRsjeSGZVrNxNDNG32JYTn49Z1miKv
jNMGUJsfOoKI6G1gKnI3j5WlP2E+xXtQkJUMwqj5vdafCTVJhWrucFyxAoGBAMnR
ave7rOChNxVEoS7YmwMUSEk/PlM4MLkv7WkOPdNATxZ2u5fj8RrHfI4pGt//QXUX
pI0dE6Y8ndM24YhynvqGYr8cyygBj+BpMZFXSFmf2ozRTawFbo2IgqqsZ6AszQVb
EUuq5k5mx5Mg+ilMMzTmxjL4AD5GRy/2ofYK5DKJAoGACdhW6HjULYX9s0fMHtP4
zqO1/GzOoTcvxGMqVMb0FdvA08LmKqghJEiM3n3cgOlIdtwGn+nyZRBJ7eP0YZb1
mKCL8pQ6TGXyHPMnM4yTczzT1xF+IQN9sSsKH+rk3JomUqc2HRsC9w+x27JpNgDc
g9fMIoyCwnRMRdORoinas4ECgYAausnYFdtHxRJulrBia/3b4ovQZ7fxfbe2T0q6
Z1B48kOHTiJ6c44zZchxa7BLips4zvDUX82CbvTYTKSCVewIclQRy9Z8bfiIWGZg
QZcrh6iCjhYjenSx+iqUQFFZPZXJ583an7/xElvMeMmpPpZpo0cM6RvfI5+6EohQ
9hBTQQKBgQCBiu+qiElJXJUTrwr3XESHUEsCPz27VWViYlj/n6GsY80QSf4Y1F0d
ynDDCJ4zE0FL1WfFFGMqaE86wvQZwvv9NCqSkpxhfbYhf/lKUmyNIyqoQYkV7kAK
NjQ0gdNlw4NLioSXny6/0k5G4OIzwh8QNf38sZGKhm7FMVQ4G8r1Yw==
-----END RSA PRIVATE KEY-----</pre>
                                    </p>
(略)

RSA秘密鍵が手に入りました。これを使ってopensslで暗号化データを復号できそうです。encryption - OpenSSL, decrypting with a private key - Stack Overflowを見ながら試しました:

$ cat rsa_private_key.txt
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAunVG5a8SbXgsayNWhd4f9FYsWb8z57P2Ql8Yq+fQgq0Y2xcH
/HgHO0vZrgSbjFLxnpx4D9arOtvGdn06GLZcL3eU32jPvqVh8QhqmaQ8bdUDlEp8
yt45DMoleYflw8c9q2dDsRjLUoE2qhtMm2xR8B9U+mRq+vVgEJdvNMgmn+XtsmRx
A41n3nHTfTcOznZaNRxyAqZjooDOuUoVBStJVUqbd4a3EzMCBbdAzyQ2VdQEigT0
PVstPiMI0draaO9oKlZkfuGkJJ3Ftn8+A4cjIG8ycihsGqfEMSVUpLmUI+Etb0+C
3iD+B7P25v0CDNdD2odWIRipjdE8TmuTA+AsuQIDAQABAoIBAQCBCSw5Q4EzNNk4
g8oa9m+SvhgPO90F2mrv37PJM7H+3R+4byXduIr4pDNO1G15HOWNaKdF/r+dCf88
fMk51OnTB6SFP5mVTAqNrc9n6FrRf3rsoufd1RASI8rvYfbGGBo7hkk4Q/phbH6S
FjZb0QibbnN2nQvUBP+oO8R/+IuSV3NgxvtQ3CggRnqTiwx99kHO3gEXJVHozq09
mceaWIQeT6jAf5nMsNKl2YlBxomMkeXZ8jEcCJQcAPuHJjZ2SJmLpbADIffg/c95
oaLejnoEWUflnN/QPw7shHE2F50uKyEYAh5uNCjVHRQE15jUOQZBr5aLMtpyCkfJ
3bPrzFcBAoGBAOyEMyBBwAh2Kuk+QS9OCsFcxjTQPV/jkHnk2nU8I7xrO0MqONOL
/ily+GcbTrY4bx8zkIKuYwEAp/5Mybd+C/kRsjeSGZVrNxNDNG32JYTn49Z1miKv
jNMGUJsfOoKI6G1gKnI3j5WlP2E+xXtQkJUMwqj5vdafCTVJhWrucFyxAoGBAMnR
ave7rOChNxVEoS7YmwMUSEk/PlM4MLkv7WkOPdNATxZ2u5fj8RrHfI4pGt//QXUX
pI0dE6Y8ndM24YhynvqGYr8cyygBj+BpMZFXSFmf2ozRTawFbo2IgqqsZ6AszQVb
EUuq5k5mx5Mg+ilMMzTmxjL4AD5GRy/2ofYK5DKJAoGACdhW6HjULYX9s0fMHtP4
zqO1/GzOoTcvxGMqVMb0FdvA08LmKqghJEiM3n3cgOlIdtwGn+nyZRBJ7eP0YZb1
mKCL8pQ6TGXyHPMnM4yTczzT1xF+IQN9sSsKH+rk3JomUqc2HRsC9w+x27JpNgDc
g9fMIoyCwnRMRdORoinas4ECgYAausnYFdtHxRJulrBia/3b4ovQZ7fxfbe2T0q6
Z1B48kOHTiJ6c44zZchxa7BLips4zvDUX82CbvTYTKSCVewIclQRy9Z8bfiIWGZg
QZcrh6iCjhYjenSx+iqUQFFZPZXJ583an7/xElvMeMmpPpZpo0cM6RvfI5+6EohQ
9hBTQQKBgQCBiu+qiElJXJUTrwr3XESHUEsCPz27VWViYlj/n6GsY80QSf4Y1F0d
ynDDCJ4zE0FL1WfFFGMqaE86wvQZwvv9NCqSkpxhfbYhf/lKUmyNIyqoQYkV7kAK
NjQ0gdNlw4NLioSXny6/0k5G4OIzwh8QNf38sZGKhm7FMVQ4G8r1Yw==
-----END RSA PRIVATE KEY-----
$ openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
$ openssl rsautl -decrypt -in password.enc -out password.txt -inkey rsa_private_key.txt
The command rsautl was deprecated in version 3.0. Use 'pkeyutl' instead.
$ openssl pkeyutl -decrypt -in password.enc -out password.txt -inkey rsa_private_key.txt
$ cat password.txt
The password for the zip is "fomalhaut".
$

パスワードが手に入ったのでZIPを展開すると、以下の画像がありました:

私知っています、これ立体視ってやつです!やり方を聞いてもできなかったやつです!

ステガノグラフィーという可能性にかけて、うさみみハリケーン同梱ツール「青空白猫」で調べたりしましたが、残念ながら違うようでした。画像編集ソフトで半透明の2枚を重ねたりしましたが、全然うまく行きませんでした

ヒントを開けたら立体視のヒントでたりしないかなあと思って開けまくりました:

ひみつの鍵は手に入りましたか?その鍵を使ってpassword.encを復号してみましょう。うまくいけばzipのパスワードが手に入るはずです。

やり方がわからなければ「openssl 復号 秘密鍵」とかでぐぐってね。
そろそろ目が疲れてきたころかと思って涼し気な画像をご用意しました。ちょっと休憩してぼんやり眺めてみてはいかがでしょうか。

もしあなたが若者なら、年上の人に見せてみるとピンとくる人がいるかもしれません。

ぼんやり眺めたりしましたが、残念ながら浮かび上がってはくれませんでした……。

最終問題が解けた後、この問題のフラグは「1文字目はクかケ、3文字目はパ」と分かったのでそのあたりから絞り込めないか考えていましたが、3文字目に「パ」を含む語句を全然ひらめけませんでした、無念。

感想

  • 謎解き分野は入門もしていない超初心者ですがとても楽しめました!
  • うお座、へびつかい座、最終問題のように、他の問題をうまく使う問題が面白かったです!
  • 1問解けなかったのは少し心残りですが、最終問題という大謎は解けたので満足です!