TsukuCTF23 writeup

# TsukuCTF23
チーム名OMULETの4人チームで参加しました。OSINTは初めてでしたが、優秀な仲間と気合によって14位まで順位を上げることができました。やったー。

# writeup
## what_os
コマンドラインのログが与えられるので、そこから何のOSかを求める問題です。
ログの最後の方を見るとコマンドの実行日時が1971年であることと、実行している各種コマンドやルート下のディレクトリ構成からUnixっぽいOSであることがわかります。
そこで、「1971年 Unix」のようにググってみると以下の記事を発見しました。

https://xtech.nikkei.com/it/article/COLUMN/20111020/371148/

Unix自体が1971年頃に開発されたと記載されていたので、TsukuCTF23{Unix}で提出してみると正答しました。

## airport
空港の画像が与えられるので、その空港の空港コードを求める問題です。
プロペラが特徴的な機体と、奥に見えるカラーコーンとトラックにANAらしきロゴが書かれていたため、「ANA プロペラ」で検索してみるとDHC8-Q400という機体であることがわかりました。
さらにDHC8-Q400について調べてみると以下の記事を発見。

https://www.ana.co.jp/travelandlife/article/002048/

"現在就航しているのは伊丹～青森、名古屋～宮崎などの路線"とのことなので、とりあえずこの4つを試そうとしたところ一発目の伊丹空港が正解でした。

## 3636 
案内板らしき写真が与えられるため、その写真の撮影地点を緯度経度で求める問題です。
写真を見ると、"5(?)-3636"という数列と、"o.ed.jp"という文字列があります。
おそらく案内先の電話番号とホームページのリンクだと考えられ、またドメインにedがあることから何かしらの教育機関であると推察できます。
そこで「3636 ed.jp」で検索してみると以下を発見しました。3636の前に5があることと、ed.jpの前にoがあるため、案内先はここの可能性があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92718/281f8686-86d2-5ce2-3e29-aadcae5c14aa.png)

次にGoogle mapを用いてとうみょうこども園付近の道路を探索しているとそれらしい看板を発見したため、座標を取得して提出したところ正答しました。

## eruption
火山が噴火している写真が与えられるため、その写真が撮影された日を回答する問題です。
画像のexifを確認すると撮影日時がそのまま入っているため提出して正解しました。
ちなみに桜島の写真らしいです。

## location_for_what
映画の舞台となった場所の写真が与えられるため、その映画の名前を回答する問題です。
Google 画像検索にかけてみると映画は"言の葉の庭"であることがわかったため、これを回答して正解しました。
画像検索つえー。

## mab
mab.main.jpが利用しているレンタルサーバサービスを特定し、そのwebサイトのドメインを提出する問題です。
レンタルサーバの特定方法を調べてみるとnetcraftというサービスがあるらしいので、これで調べてみました。

https://www.netcraft.com/

色々と情報が出てきますが、Reverse DNSにロリポップの名前があったためロリポップのwebサイトを調べドメインを取得しました。

## green_bridge
写真の撮影位置を答える問題です。写真を確認すると道の駅にありそうな特徴的な建物と、そのすぐ近くに緑色の橋があります。
Google画像検索で奥の建物部分だけをピックアップして調べてみると、もみじ谷大吊橋という場所であることがわかりました。
その後はGoogle map上で撮影場所らしいポイントを探索し、無事正解しました。

## Yuki
どこかの建物の中から撮影された風景写真が与えられるため、その撮影位置を答える問題です。
写真には小山?坂道?のような地形に雪が積もっている様子が映されており、そこには枯れた木が何本も生えています。
また写真上側に大きな橋が写っている点も特徴と言えそうです。
Google画像検索で写真全体を調べたり、山と橋のみをピックアップして調べたりしてみると次のブログを発見しました。

https://4travel.jp/travelogue/11811657

ブログを確認すると、どうやら定山渓温泉 定山渓ビューホテルという建物の中から撮影されたことがわかります。
後はGoogle map上でホテルと付近の橋の位置から撮影された座標を割り出し提出しました。

## perfume
香水の展示らしき写真が与えられるため、撮影された施設の座標を答える問題です。
とりあえずGoogle画像検索に放り込んでみると大分香りの博物館という建物がヒットしました。検索に上がった写真を見ても与えられた写真とほぼ同じであったため、この建物の座標を取得し提出しました。

## travel_with_tsukushi
またも空港で撮影された写真が与えられるため、撮影された空港の空港コードを答える問題です。
写真には3機の飛行機が移されており、それぞれ"Arabia"、"Batik"、"nes"という文字が見えます。また船尾にロゴが描かれているため、機体に書かれた文字を調べたりロゴを画像検索したりしてそれぞれの航空会社を求めました。
またその3つの航空会社が関わっている空港を調べてみるとクアラルンプール国際空港が候補に上がったため、空港コードを調べ提出してみたところ正解しました。
ちなみに各飛行機の航空会社はエア・アラビア、バティック・エア、マレーシア航空です。

## laser
ビル街の中で空に向かって一直線に伸びるレーザーらしき写真が与えられるため、写真の撮影位置を答える問題です。
提出したのは僕ですが、答えの9割方はチームメンバーが見つけてくれました。
「レーザー 空」などで検索すると、大阪万博関係のイベントとして御堂筋イルミネーションが企画し、梅田周辺で実行したものであることがわかります。
さらに調べていると、三角州のような場所から放たれていることもわかりました。

https://blog.osakanight.com/article/eid727.html

また三角州には特徴的な形の建物もいくつか建っているため、Google map上で確認してもわかりそうだと思い調べてみるとそれらしき地形を発見したため、座標を取得して提出しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92718/de112fb5-e6de-e461-9913-b9889e9f9236.png)

ちなみに、僕はチームメンバーに御堂筋イルミネーションのことを教えられるまでTRUMPFというメーカーの100周年記念で発射されたレーザーだと思い延々とその周りを調べていました……

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92718/59f98cf6-f1e0-4c33-aafc-72582bc4fa6c.png)

## tsukushi_no_kuni
以下問題文

```
かつて、筑紫国を統治していた国造の一人が乱を起こした。
その子孫の一人が、ある天皇と同一人物である説が提唱されている。
その子孫の名前を TsukuCTF23{} で囲んで答えよ。
```

とりあえず「筑紫国 乱」で検索すると磐井の乱がヒットしたので、次にその首謀者である筑紫君磐井の周りをさらに調べました。

https://ja.wikipedia.org/wiki/%E7%A3%90%E4%BA%95_(%E5%8F%A4%E4%BB%A3%E8%B1%AA%E6%97%8F)

筑紫君磐井のWikipediaを見ているといくつか子孫の名前が挙がっていたため、「<子孫の名前> 天皇」で何度か検索していると次の知恵袋を発見しました。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1089871230

知恵袋なので信憑性はないですが、とりあえず筑紫薩夜麻で提出してみると正解しました。良かったです(危うく沼るところだった)。

## fiction
FPSゲームのスクリーンショットらしき画像が与えられるため、その座標を緯度経度で求める問題です。
ゲーム自体はValorantぽいなと思ったため、適当に調べてみるとsunsetというマップ内にあるGekkoというキャラクターの家の画像らしいことがわかりました。
ゲーム内の画像から緯度経度を？、と思いながら「valorant location」で調べてみると以下のwebサイトを発見しました。

https://valorant.fandom.com/wiki/Maps

どうやらvalorantのマップはそれぞれ現実世界でモチーフになっている地域があるらしく、今回スクリーンショットが撮影されたsunsetというマップはロサンゼルスに対応するらしいです。
またwebサイト内を見ていると、下の方に地図を発見しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92718/954b84be-00c0-e6a3-71fb-a73d91e8227d.png)

sunsetに対応するピンを右クリックすると座標を取得できたため、提出してみたところ正解しました。

## RegexCrossword
謎のクロスワードらしき画像が与えられるため、そのクロスワードを作成した会社の郵便番号を求める問題です。
とりあえず画像検索をしてみましたがヒットせず。
クロスワードはそれぞれの行・列に正規表現らしき文字列が与えられているため、正規表現を満たすように頑張って解いてみると縦書きの英文らしいことがわかってきました。
また、文末には"please contact us"の文字と@(アットマーク)が見えたため、会社のメールアドレスだと思い文末(左端)を中心に解いていくとドメインがnowhere◯◯.jpであるとわかりました。
そこで「nowhere 会社」で検索してみると次のwebサイトを発見したため、郵便番号を調べて提出しました。

https://nowhere-inc.jp/

## sunset
TsukuCTF23主催者の一人であるshioさんがあるイベントの終了後に撮影した日没時の写真が与えられるため、その撮影時刻を**分単位**まで求める問題です。
一応、1分以内の誤差は許されるとのことなので実質3分間の範囲で回答できますが、この問題だけ提出回数が3回までに限られているためかなり注意して解きました。
まずチームメンバーが写真の撮影場所を調べたところ以下を発見しました。Google 画像検索で画像下半分をピックアップすると同様の結果が求まります。

https://www.jalan.net/kankou/cit_151020000/

詳しい場所はわかりませんが、どうやら新潟県らしいです。だとすると奥に見える島は佐渡ヶ島でしょうか。
とりあえず新潟だとして、shioさんのX(Twitter)からさらなる情報を調べました。
X上で「新潟 from:@shio_sa1t」を検索してみると、9月9日/10日にセキュリティ・ミニキャンプ in 新潟 2023に講師として参加していたことがわかりました。またイベント終了後に撮影したと問題文に書かれていたため、9月10日であると考えてよさそうです。
次に具体的な時刻を調べる方針ですが、天気予報サイト等から当時の日没時刻を調べても提出回数が限られているため難しいと思い、YouTube上に日没ライブのような動画が上がっていないか調べたところ以下の動画を発見しました。

https://www.youtube.com/watch?v=fyGI3fp3L_U&t=17848s

またGoogle Chromeの拡張機能でYouTube上の配信アーカイブに対して再生時間と配信時の時刻を対応させて表示してくれるものがあったため、これを用いて写真に対応しそうな時刻を探しました。
動画の方では水平線に沈んでいく様子が映されていますが、写真では一部が佐渡島で隠れていることに注意しつつ調べたところ、おそらく17:54～17:59の範囲であるとわかったため、この範囲を網羅するようにフラグを提出してみたところ正解しました。
フラグの形式を間違えていないかめちゃくちゃ緊張しました……

## flower_bed
鉢植えで隠されたQRコードの写真が与えられるため、そのQRコードに対応するURL(リダイレクト前)を求める問題です。ヒントとして、QRコードの近くにモニュメントが設置されていたことが記されています。
とりあえずスマホで読み込んでみたり、ドット絵サービスで目視できる範囲を書き込んで読み込んでみたりしましたがうまくいかず。
チームメンバーが旧福岡県公会堂貴賓館という建物に関するQRコードであることを求めたため、「旧福岡県公会堂貴賓館 モニュメント」で調べてみると以下を発見。

https://tenjin-central-park.jp/news/%E6%97%A7%E7%A6%8F%E5%B2%A1%E7%9C%8C%E5%85%AC%E4%BC%9A%E5%A0%82%E8%B2%B4%E8%B3%93%E9%A4%A8%E3%80%8C%E4%B8%96%E7%95%8C%E8%84%B3%E5%8D%92%E4%B8%AD%E3%83%87%E3%83%BC%E3%80%8D%E3%83%A9%E3%82%A4%E3%83%88

県営天神中央公園という場所に設置されているらしいため、さらに「県営天神中央公園 モニュメント」で検索してみるとQRコードを読み取れる画質の写真があったため、そこからURLを調べて提出したところ正解しました。

## title_screen
ゲームのアセンブリソースコードとビットマップ画像が与えられるため、ゲームタイトルを求める問題です。
アセンブリを確認すると6502と書かれており、調べてみるとどうやらファミコンで使われていたCPUらしいです。
以下サイトを参考にしながらアセンブリを読み進めていきました。

http://hp.vector.co.jp/authors/VA042397/nes/6502.html

どうやらメモリの$2006番地に入力した値がVRAMの書き込み先アドレスになり、さらに$2007番地に値を入力するとVRAM上の指定位置に書き込まれ、さらに書き込み先がインクリメントされるようです。
またさらに読み勧めていくと、mapping1とmapping2のラベルが付けられたプログラムがありました。どうやらmapping1で背景としてビットマップ上の$8cに対応する画像を指定範囲に設定、mapping2でdataラベルの各値に対応する画像を横並びに出力していることがわかりました。
出力する画像の情報はdataラベルの範囲にまとめられており、上位ビットを行番号、下位ビットを列番号としてビットマップ上の対応する画像を調べると、Tsukushi_Questという文字が出力されることがわかりました。
よって求まったタイトルを提出したところ正解しました。

# 考えたけど解けなかった問題
## MEMOwow
メモを記録するwebアプリをハックする問題です。
アプリではメモを書き込むと対応するIDが出力され、IDをしてして読み込むと対応するメモが表示されます。
ソースコードが配られるため確認すると、memoディレクトリにflagという名前のファイルを発見しました。どうやら運営側が開いているサーバ上でも同様のファイルがありそうです。
アプリに入力したIDはほぼそのままファイル名になるため、IDとして"flag"を読み込ませればflagファイルを開けることがわかります。
しかしアプリのソースコードを確認すると、入力された文字列から"="をすべて削除した後、文字列中に"flag"が含まれていればエラーを返す作りになっていました。
その後問題がなければ一度base64でデコードされファイルの存在が確認された後、再びbase64でエンコード&文字列にデコードして開くファイル名を作成するようになっています。
どうやら"flag"が含まれているかのチェック時では"f\*\*l\*\*\*a\*\*g"のような文字列にしておき(\*はいい感じの文字)、base64でデコード・エンコードされたタイミングで"\*"が削除されるような"\*"を考えると良さそうなのですが、最後までよくわからず疲れもあり諦めてしまいました。
他の参加者のwriteupを確認したところ正しい方針だったようで、非常に悔しい思いをしています……

# おわり
(初めてチームで参加した && OSINTを解いた) CTFイベントでしたが、とても面白く満足な内容でした。OSINTは初心者でも解きやすいのがいいですね。
ただ、技術力・知識の問題で溶けない問題もあったため、しっかり勉強した方が良いと思わされるイベントでもありました。

あとGoogle画像検索はめちゃくちゃ強力ですね。使っていて怖いほどでした。