LoginSignup
0
0

HEXA OSINT CTF V3 - writeup (Team: A Study in Tricolore) [バックアップ]

Last updated at Posted at 2024-05-13
image.png

オリジナルのwriteupが Qiita Team 無料枠終了に伴い、閲覧できなくなる可能性があるため、念の為こちらにバックアップを作成しました。

はじめに

フランスの組織 HEXA が開催する OSINT CTFである、 HEXA OSINT CTF V3 に "A Study in Tricolore"1 という チームで挑みました。
チームメンバーは以下の通りです。

meow_noisy
kuzushiki
_roku_
のみぞう

この記事は我々のチームのwriteupです。

CTF 概要

  • 開催日時(日本時間): 2024年4月13日(土) 午前4:00〜2024年4月15日(月) 午前4:002
    • 合計48時間
  • 定員: 4名
  • オンライン
  • 参加費: 無料
  • 言語: オープンソース含め全て 英語
  • 参加チーム数: 171 チーム、466ユーザ
  • 事前に登録締め切りがあるため、そこまでにスコアサーバにプレイヤー登録し、運営にDiscordサーバでチーム申請しなければいけません。
    • ヒントを消費するためだけのチームがでないようにするための措置と考えられます。

V3からの要素

  • HUMINT要素
    • 調査の過程でいろいろなアカウントが見つかりますが、絵文字 👁️ を見かけた時だけ、プレイヤーはそのアカウントにコンタクトを図ることが可能です。
    • 本当に運営が裏でアクタ役としてやり取りしてくれます。
    • 詳しくは 問題"No. I'm your father"にて。
  • 分析レポートの提出
    • HEXA OSINT CTFが他のOSINT CTFと異なるポイントとして、ストーリーの真相解明を行わせるというものがあります。
    • V2は小論文だったのですが、今回はレポート形式で提出するというものでした。
    • また、レポートは最後の問題を解いたチームのみが解答権が得られます。
    • レポートの再提出はできないため、慎重に作成する必要があります。
  • Chill mode
    • ポイントを払うことで、運営が回答の手伝いをしてくれるモードです。
      • 消費ポイントは200ポイント
      • サブミット回数リセットの上位互換であり、Chill mode中にサブミットを使い切っても、重複で減点されません。
    • 具体的には運営が「どこまでわかったの」と聞いてくるので、そこまでの調査進捗を話します。そうすると運営が、そこからの調査指針を教えてくれます。
      • ストーリーは進められるし、勉強になるし、ということで 運営サイドがとてつもなく大変ということを除けば 神システムです。
  • 運営への問い合わせは特別チャンネルで一元化
    • V2では3人いるDMに個別に連絡を取らなければいけませんでしたが、V3からは、運営へコンタクトを取れるチーム専用の部屋を立ててもらえ、そこでやり取りします。
    • Chill modeの相談も、このチャンネルでおこないます。

この記事の読み方の説明

  • 大見出し: CTFでのカテゴリ
  • 小見出し: 問題名です
    • 問題名の末尾のアイコンは、フラグをゲットしたメンバーであり、執筆を担当した人です。3
    • たとえば、meow_noisy → です
    • アイコンの隣に★があるものは、特に思い入れの強い問題です。
  • write-up内で "Chill 発動"と書かれているものは、我々のチームがChill mode を発動して解いた問題です。

問題の出現順

HEXA OSINT CTFは連続問の形式で出題されます。問題を解くと次の問題が出現します。我々が解き進めた範囲での図とはなりますが、次のように問題が出現しました。

image.png

それでは以下より各問題の解説を行います。

New case

rules [0]

Before you begin, please read the attached rules and then write the agreement to begin the CTF.

"contestant_guide.pdf " が添付されているので最後まで読んで、
image.png

を submit したら OK。

Flag: I accept the rules of HEXA OSINT CTF V3.


Ah shit, here we go again ! [0]

Dear agents,
Following the events about Manipar and Mastermind, Lucilhe Dumarquais was serving a sentence in jail after she had been caught in Malaysia and brought back to France. On April 10, Lucilhe Dumarquais died in prison while serving her time...
Please find attached the context about last investigations related to this one. Read carefully these elements, as they are crucial to understand what is going on here. Feel free to make your own searches if you want more detail about people that may be involved or those who can help you. When you have read these elements, please type "Let's go" in the text field below.
format : Let's go

"context.pdf" が添付されているので、一読したら(これまでの事件の背景や登場人物などが理解できるので)問題文にある通り、"Let's go を submit して次に進みます。Go!Go!

Flag: Let's go


Crime Scene[200]

Dear agents, Here is the preliminary investigation report. As you may know, lab guys thinks we all are chemistry specialist... They provided an image of a molecule in this report. But as is, we cannot know if this is a relevant element or not. As you work on this, we will try to find the names of the interviewees and the name of the person she was talking to during lunch. Could you please find the molecule name so we can move forward in the investigation.
format : moleculename
example : lactose

分子名を答えよ、とのこと。問題文と共に調査報告書(Preliminary_report.pdf)が提供されるので読んでいくと、被害者の血中に未確認の物質が検出されたとして、以下の画像が貼られている。
image.png

高校の理科は物化選択でした。ここにきて役に立つ。
結合の手の数から考えて、灰色は炭素(C)、赤色は酸素(O)、青色は窒素(N)、白色は水素(H)。
念のため、検索して調べてみても色と元素の関係は間違いなさそうなので、あとはどう並べるんだったか。思い出せないので検索してみると「最初にC、次にHであとはアルファベット順」とのこと。そんな気がしなくもない。

素直に分子式を "C8H8N2O2" として検索をすると、リシニン(Ricinine)がヒットするので、リシニンの wiki を見てみて確認。間違いないことが確認できるので(これ)、フラグとして提出。

ちなみに、最初、単純に数を数え間違えて C8H6N2O2 で探してしまって、ドツボにはまっていました。
教訓:睡眠は大事(朝早いと・・・)。

Flag: Ricinine


Business card

Print it [200]

We've recovered a crucial piece of evidence in possession of the victim: a business card among the items. We need to investigate the company's details, including its establishment date and any relevant information about its operations.
format : yyyy-mm-dd
example : 2023-04-12

[機械翻訳]
被害者が所持していた重要な証拠品の中から名刺を回収しました。設立年月日や業務内容など、その会社の詳細を調査する必要がある。
フォーマット:yyyy-mm-dd
例:2023-04-12

名刺を手がかりに会社の設立年月日を答える問題。

found.png

まずはロゴを切り取って画像検索をしたが、有益な情報は得られず...
そこで、会社名「fildargent」を調査する方針とした。

会社名から設立年月日を調べたいので、フランスの企業情報サイトについてChatGPTに聞いてみた。
候補に挙がった「Societe.com」で確認したところ、4つの会社がヒット!

image.png

この中のどれかだろう、と思い住所をGoogle mapのストリートビューで確認するも、名刺にあるロゴが見当たらず振り出しに戻ってしまう。
(「fil d'argent」は機械翻訳すると「銀線」となる。一般的な単語のため、複数の会社に使われていてもおかしくない。問題を解く側としてはあまり好ましくない状況である。)

そもそもOSINTの問題で架空の会社を作るとして、「Societe.com」のようなサイトに登録はできないのでは?と考え直す。
もし自分が作問者だったらどこに企業情報を載せるだろう?と発想を変えて、FacebookやLinkedInで企業アカウントを探すことに。

その後すぐにFacebookにて企業アカウントが見つかった。名刺と同じロゴもあるのでこれで間違いない。

投稿を一つずつチェックしていると、設立2周年を祝うコメントが見つかる。

And for those wondering, yes, it's a good date because today we celebrate the 2nd anniversary of the creation of FilDargent ! 🥳

コメントの投稿日2024-03-15が設立2周年なので、フラグは2022-03-15となる。
序盤なのにかなり遠回りをしてしまった。

Flag: 2022-03-15


Name it [200]

Now that we uncovered information about this company, I task you with the next crucial step: identifying the individual who leads this company.
format : Firstname Name
example : John Doe

[機械翻訳]
この会社に関する情報が明らかになったところで、次の重要なステップとして、この会社を率いる人物を特定することがあなたに課される。
フォーマット 名
例:ジョン・ドウ

企業アカウントのプロフィール欄に書かれていたメールアドレス azlamp19@proton.me に着目。
容疑者は「azlamp19」というユーザ名を他のSNSでも使っているのではないか?と考える。「Instant Username Search」の出番である。

Instagramで同じユーザ名のアカウントを発見!フルネームがしっかりと書かれていた。

Flag: Alíz Lamp

このようなアカウント間を横展開するタイプの問題は、HEXAのようなシナリオ型のOSINT CTFでよく見かける気がする。


Around it [200]

This individual who heads 'fildargent' the company affiliated with the business card found at the crime scene is a suspect. To further investigate her involvement, we need to verify her alibi.
Your task is to determine the city where this person was supposed to be during the period of the incident.
format : Cityname
example : Paris

[機械翻訳]
現場にあった名刺の会社『フィルダージェント』を率いるこの人物が容疑者です。彼女の関与をさらに調べるには、アリバイを確認する必要がある。
あなたの仕事は、この人物が事件のあった時間帯にいたはずの都市を特定することである。
フォーマット 都市名
例:パリ

Instagramのアカウントにカレンダーのスクショが投稿されているのだが、残念ながら事件が発生した4/10は映っていない...

image.png

でも絶対この画像が怪しい。どうにかしてこのカレンダーにアクセスできないだろうか?

画像をよく見ると、URLが一部映っており「<カレンダーID>/dayGridMonth/now」という形式になっていることがわかる。

image.png

また、画像下部のフッターに「Framasoft」という文字が。

image.png

ここまでの情報から、容疑者は「Framasoft」が作ったカレンダーアプリを使っており、このカレンダーはURLを知っていれば誰でもアクセスできるのでは?と推測。

「framasoft calendriers」でググると、「Framagenda」というサイトがヒット。
「site:framagenda.org inurl:dayGridMonth」で再度ググってみると、カレンダーの共有リンクの構造が以下であることが判明。

https://framagenda.org/apps/calendar/p/<カレンダーID>/dayGridMonth/now

画像のカレンダーIDを入れてアクセスしてみると、容疑者のカレンダーが閲覧できた!

image.png

カレンダーによると4/4~4/13は旅行に出かけている。この旅行先がフラグになりそうだ。

予定の詳細に着目すると、「AF0328」という文字が。これは「Air France 328」を指していると思われる。
出発日である4/4の「Air France 328」の記録を調べると、目的地がOttawaであることが判明。

カレンダーアプリの特定に至る流れがパズルを解いているようで気持ちよかった。個人的には良問だと思う。

Flag: Ottawa


Milk it [200]

Our objective is to verify whether the suspect did indeed visit the locations as planned. We need to gather evidence to confirm or refute her presence at the designated places.
Our next step is to gather information about the event she attended on April 6th. Let's delve into any available details regarding this event.
format : EventOrganizer SeatingArea
example : LFP 111A

[機械翻訳]
私たちの目的は、容疑者が計画通りに本当にその場所を訪れたかどうかを確認することです。彼女が指定された場所にいたことを確認するため、あるいは反論するための証拠を集める必要がある。
次のステップは、彼女が4月6日に参加したイベントに関する情報を集めることだ。このイベントに関して入手可能な詳細を掘り下げてみよう。
フラグフォーマット: イベント主催者 座席エリア
例 LFP 111A

Around itで出てきたカレンダーの4月6日を確認すると、場所とメモが書かれている。
image.png

"1000 Palladium Drive, Kanata, ON K2V 1A5" の場所を調査 → "Canadian Tire Centre" という場所であることがわかる。

ここで4月6日に行われたイベントを調べる。いろいろな方法があるが、おそらく想定解は さんが見つけた次の通り。

Canadian Tire Centre の公式サイトには、イベント検索ページがある。
https://www.canadiantirecentre.com/events/
ただし、過去の試合は表示されないし、ページ自体も消えている。
このURLに対し、wayback machineを調べると、2024/4/6だけ不自然に記録が取られている。
image.png

このアーカイブから、4月6日に Ottawa Senators vs. New Jersey Devils というアイスホッケーのイベントが行われた事がわかる。

イベントは分かったので、このイベントの主催者と、座席を求めることとなる。

まず、Eventの主催者
フラグ例が「LFP」であることに着目する。LFPはLigue de Football Professionnelであり、何らかの協会の略称を答えればよいと推測した。
その結果、4月6日に行われた「Ottawa Senators vs. New Jersey Devils」の試合をNHL(National Hockey League)という団体が記事を公開している。
https://www.nhl.com/gamecenter/njd-vs-ott/2024/04/06/2023021224

次に、 座席エリアである。容疑者(Alíz Lamp)が残したメモを使うと推測した。
~~~~~~
Suite next to ledge
west side
~~~~~~

ledgeは棚という訳がでてきて、何かわからないが、西側のスイート席がある模様。ここの座席を求めたい。
まずはCanadian Tire Centre の座席表を取得
さんが見つけた↓がカラフルで見やすい。
https://www.nhl.com/senators/tickets/milk-zone-tickets

milk ZONEというものもあり、問題文に含まれる"milk"という言葉とも合っている。

image.png

また、図の左側 milk ZONE(席314, 315, 316)には THE LEDGE という場所がある。
さんの調査により、THE LEDGE とは この建物の最上階から試合を見れる個室を指すことが分かった。
https://www.koobit.com/senators-v-coyotes-e25769/tickets/the-ledge-124165

THE LEDGEの隣のスイート席を調べればよいのだが、どれがスイートか、上図ではわからなかった。
もう少し具体的な地図はないか探すことに着眼点が移り、「イベント予約販売サイトだったら、映画館みたいに、"どこどこのスイート席 XX ドル" みたいなのがわかるのでは」という仮定のもと、チケット予約サイトを調べる。
Canadian Tire Centre 公式で これからの試合の予約を行えることが分かった。
image.png

ほとんど席は売り切れだったが、予約済みの席の場所にカーソルを重ねると、ポップアップで席の詳細がわかる。

LEDGEの西側の隣のスイート席はこちらの475A
image.png

以上で調査した情報を組み立ててフラグをサブミットし正解。チームメンバーの皆で情報を収集、分析、統合する過程が気持ちいい良問だった。

Flag: NHL 475A


Move it [200]

Our objective is to verify whether the suspect did indeed visit the locations as planned. We need to gather evidence to confirm or refute her presence at the designated places. It seems that on April 8th, there was a change in her whereabouts. Please locate a telephone number for the accommodation where she likely stayed during this time.
format : +331234567890

[機械翻訳]
私たちの目的は、容疑者が計画通りに本当にその場所を訪れたかどうかを確認することです。彼女が指定された場所にいたことを確認するため、あるいは反論するための証拠を集める必要がある。4月8日に居場所に変化があったようです。この間、彼女が滞在していたと思われる宿泊施設の電話番号を教えてください。
フォーマット +331234567890

カレンダーでは4/8の予定はMoving (移動中?) となっている。

image.png

詳細欄にはPlus Codesと共有リンクの記載あり。これらの情報から移動先を突き止めろ、ということだろう。

共有リンクは以下のように整形するとアクセスできた。
https://framagenda.org/s/YdjE5jpFn4kwSn8

そこにはホテルへの行き方が書かれたメモが置いてあった。

hotel.jpg

ChatGPTによる文字起こし+翻訳結果は以下の通り。

大通りの地下鉄から出て、
北に向かって、その後左に曲がります。
通りを進むと、「bud」というところで右に曲がります。
「bud」に沿って歩いて、最初の街灯まで行きます。
そこで道路に沿って左に曲がります。
ホテルはそこから150メートルです。OTZ

次にPlus Codeである「GC6V+39P」の場所を特定する。
Google mapで検索すると、中央林間駅が表示された。

カナダのオタワから日本の中央林間に移動するか?と不思議に思いつつも、HEXA V2では日本が舞台となる問題もあったため、中央林間駅付近のホテルを調べることに。
しかし中央林間にはホテルが全く見当たらず、何かがおかしいと思いはじめる。

チームメイトに相談したところ、Plus Codeでは場所が一意に定まらないという有益な情報を聞けた。
(もし中央林間駅付近にホテルが多数あったらRabbit Holeにハマって抜け出せなかったと思う。ホテルがなくて本当によかった。)

Google mapでオタワに移動してからPlus Codeを入力してみると、先ほどとは全く違う場所が表示された。
しかし、この場所は人の気配がまったくしない僻地であり、ホテルはありそうにない。

他に手がかりはないか?と思い、再びカレンダーに目を戻すと、「lunch」という別の予定が入っている。
場所は「La Banquise」となっており、ググるとオタワではなくモントリオールの店だと判明。

モントリオール付近の「GC6V+39P」を調べたところ、地下鉄の出口のすぐそばがヒット!

あとは指示に沿ってホテルを特定するだけなのだが、方向音痴を発揮してしまい一度回答を間違えてしまう。
指示を正確に辿れる自信がなかったので、画面を共有してチームメイトに確認してもらいながらホテルを特定した。

image.png

Flag: +15148494526


Jump it [200]

We need to locate an individual who can provide an alibi for the suspect on the day of the crime. Please gather any potential leads or witnesses who can attest to her whereabouts during that time.
format : Date of birth (yyyy-mm-dd)
example : 2024-01-01

[機械翻訳]
犯行当日の容疑者のアリバイを証明できる人物を探す必要があります。手がかりになりそうな人物や、その間の居場所を証言してくれる目撃者を集めてください。
フォーマット 生年月日 (yyyy-mm-dd)
例:2024-01-01

Chill 発動

Move it では道案内メモの他、「Sewing Meet - Tafy Couture.png」というチラシの画像が手に入る。

image.png

ここから手芸ミートアップが 2024年4月10日に行われることがわかる。容疑者のAlíz Lampのカレンダーには4月10日にMeetという予定が入っており、このミートアップに参加すると推測できる。

このイベントを調べたい。その時に気になるのはチラシ内の「LE HOUBLON D'OR 」という情報である。
一応検索してみると、カナダにこの名前のバーが存在する。

そして、このFBページの投稿には「4月10日にバーテンダーのKさんに会いに来てね!」みたいなことが書かれており、このKさんが証人なのではないかという予測がたった。
メンバーからは、「手芸会をバーでやるわけないでしょw」というツッコミがはいったものの、
LE HOUBLON D'ORという言葉はle houblon doré(ゴールデンホップ)から来ており、お酒に関係しそうであったことから、Kさんの誕生日を特定してサブミットしたがincorrect。

詰まってしまったので、Chill modeを発動した。

運営曰く、「ファイル名見た?」とのことだったので、"Tafy Couture" をduckduckgo で検索して twitter アカウントを発見。

このアカウントの4月10日の投稿に、「Houblon d'Or でのミートアップ楽しかったー」と グラスで乾杯している写真がある。やっぱりバーで手芸会をやっているではないか...!

bio欄に誕生日が乗っているのでサブミット。

Flag: 1986-08-05

教訓: ファイル名はよく確認しよう。


Drop it [200]

It appears that the suspect has been ordering goods, which opens up a promising avenue for our investigation. Let's focus on tracing these transactions and gathering any relevant information related to the purchases made by the suspect.
format : LastTrackedCity
example : Paris

[機械翻訳]
容疑者は商品を注文しているようで、捜査に有望な道が開けました。これらの取引を追跡し、容疑者の購入品に関連するあらゆる関連情報を収集することに集中しよう。
フォーマット: 最終追跡都市
例:パリ

今までの調査で、容疑者にはThreadsのアカウントがあることがすでに判明していた。
postを眺めていると、取引画面のスクショが見つかる。

image.png

以下の情報から都市を追跡できるのでは?と推測。

Container ID: TCNU 657202

色々調べたところ、TCNUというのはTRITON社が管理しているコンテナのコードであり、以下のサイトで追跡結果を閲覧できることが判明。

検索結果には「Jakarta」と記載されており、これがフラグだった。

Flag: Jakarta

しかし、後日開催された振り返り会にて本当は別の答えがあったことを知る。

別のサイトで追跡結果を確認するとANTWERPと表示された。

取引画面を見る限り行き先はフランスであるため、位置関係的にこちらが想定解だったのだろう。
コンテナIDから都市を追跡できることを知らなかったので、勉強になった。


Shake it [200]

We've discovered a pseudonym. Your next objective is to uncover the real name of the individual linked to this pseudonym.
This information is crucial for us to establish contact and confirm the suspect alibi.
format : Firstname Name
example : John Doe

[機械翻訳]
我々はペンネームを発見した。次の目標は、このペンネームにリンクしている個人の本名を明らかにすることです。
この情報は、連絡を取り、容疑者のアリバイを確認するために非常に重要です。
フォーマット: 名
例: John Doe

Jump itを解く過程で入手したTwitterアカウントから本名を特定する問題。

ツイートを辿っていくと、「赤いスカーフを売りたい」との内容が見つかる。

では容疑者はどこでスカーフを売るつもりなのか?
もう一度Twitterのプロフィールを確認すると、「Kijiji」というサイトを利用していることがわかる。

Passionate about sewing, seller on Kijiji. I recently started and mainly focus on movie costumes.

「Kijiji」でググるとそれっぽいサイトが引っかかるが、403 Access deniedが返ってくる。

おそらく地域で制限しているのだろうと推測し、VPNでカナダからアクセスすると無事ページが表示された。

商品名を「scarf」、検索範囲を「shawinigan」(Twitterアカウントに記載あり) にして検索すると商品がヒット!
アカウント名がフルネームになっており、これがフラグだった。

この問題は推測がハマってとてもスムーズに解くことができた。VPNもちゃんと用意しておいて助かった。

Flag: Gaëlle Tremblay


Technologic [0]

Thank you for your help with the business card analysis. With all the precious information you found, we managed to verify Aliz Lamp's alibi. She could not have been at the prison at the moment of Lucilhe's murder. We'll keep you updated if something new pops up...
flag : Roger that

[機械翻訳]
名刺分析にご協力いただきありがとうございます。あなたが見つけたすべての貴重な情報により、私たちはアリズ・ランプのアリバイを確認することができました。ルシルヘ殺害の瞬間、彼女が刑務所にいたはずがない。何か新しいことがあれば随時更新していきます...

問題文に書いてあるフラグを送信するだけの問題。「Business card」カテゴリを全完したタイミングで出現。
これまでの調査から、容疑者はシロだということがわかった。

実はクロだったと判明する衝撃の展開が待ち受けているのだが...


Lunch time

Duck sauce [200]

The person Lucilhe was talking to before her death is called Barbara Allandes. She was serving a 4-month prison sentence for being involved in a pyramid scam. She is a quiet person described by other inmates as "a weird artist". We discovered a portrait created by B. Allandes in Lucilhe's cell. She was interviewed but she didn't tell us anything interesting.
As she is suspicious, we would like to investigate her. Could you determine the year from which she has been drawing?
format : Year
example : 2024

容疑者であるバーバラさんの肖像画が書かれた年代を回答する問題。肖像画はこちら↓

image.png

普通にGoogleで「Barbara Allandes」で検索。

Flickrのページが出てくる。

肖像画右下のサインとFlickrのアイコン画像が同じなので本人のページと断定。

Aboutのページに

image.png

Drawer since 2020と書いてあったのでこれが答え。
(あまりに単純すぎてこれでいいのかしばらく悩んだ。画家を始めた時期と肖像画を描いた時期が同じとは限らないし…)

Flag: 2020


Pray for me [200]

Our suspect appears to be quite the traveler. We aim to interview individuals in the areas she's visited and gather evidence confirming her presence.
Let's identify the lake shown in the photo labeled "lake".
format : Lake Name
example : Tuz Gölü

Flickrで公開されている湖を特定する問題。

image.png

こういうのは気合いをいれてGoogle画像検索をするとたいてい見つかります。

写真上部の山のとんがってる感じが特徴的だなーと感じて画像検索のフォーカスを陸地部分に絞ると、似た雰囲気の画像が見つかった。

image.png

多分ここだろうとあたりがついたので回答
https://www.auvergnevolcansancy.com/activite/le-lac-de-guery-au-crepuscule/#activites

Flag: Lac de Guéry


Bolt to be alive [200]

Our suspect appears to be quite the traveler. We aim to interview individuals in the areas she's visited and gather evidence confirming her presence.
Now, let's identify the name of the road shown in the photo labeled "bridge".
format : Road Name
example : al. Jana Pawła II

先の調査で見つかった flicker のアカウントで公開されている "bridge" の場所を特定せと、とのこと。
bridge.jpeg

ナンバープレートが映っているので、定石通りナンバープレートについて調べてみる。
少し調べると、

  • このナンバープレートがフランスのものであること
  • フランスでは都市コード二けたがナンバープレートに記載されるとのこと
  • 2009年以前のものはリアプレートが黄色、それ以降は白になっていること
  • 新しいプレート(白)は都市コードが任意で指定できるらしいこと

がわかるので、奥の黄色のプレートのほうの都市コードに当たりをつけるのがよさそうだ、と判断。
二けた目は 3 に見えることと、奥に水平線が見えているので、フランスで海に面して二けた目が 3 の都市コードを探す方針として、検索でひっかかった "フランスナンバー都市コード一覧" から探してみる。
var.png

13 にしては一文字目がつぶれすぎ、33 なら同じようなつぶれ具合になるだろうと考え、数字のつぶれ具合から "83" のバール地方(Var)に当たりを付けて調査を進めてみた。まず頼りにしたのは、橋の下に見える街並み(ビル、入江?、半島?など)。
var2.png

"sightseeing var france" といったキーワードあたりで、画像を検索してピンとくるものがあるかを確認すると、似たような風景の画像がヒットするので、確認をしてみるとどうやら Toulon という都市がかなり特徴が一致していることがわかる。
var3.png

Toulon 公式サイトを開いて、見どころなどを探してみようと思ったら、この風景、、、見覚えしかない!
toulon.png

建物と半島の位置関係から、北の小高いところからの撮影であろうと想定、
toulon2.png

少なくとも bridge の写真からは、道路幅は車幅 3 台程度で、車両が対面で駐車されているので一方通行ではない。また、海のほうへ向かってそれなりの下り坂。北側に位置している通りを確認すると「ジブラ通り(Siblas)」がある。
toulon3.png

ジブラ通りは、ずっと北まで伸びているのでストリートビューで北(山側)に上っていくと、ジブラ通りを抜けてヴァル・フルリ通り(Val Fleuri)に入る。以下の地点まで上っていくと、写真が撮影された場所(道路が交差している場所)にたどり着く。
ValFleuri.png

場所は間違いないということで "Val Fleuri" を提出したら incorrect。これは、、、確かに example を見ると "al. Jana Pawła II" のような記載があるので、通りを表す St. や Av. または、フランス語で通りを示すものを入れないとダメか。残り 2 回なので、しばらく悩む。多少の揺れは受け入れるだろう、なので英語でもきっと大丈夫。ということで、Google Map の表記 Av. をつけて再提出したら OK だった。正直、ドキドキしました(^^

提出したあとで気づいた。

この画像にだけBAによるコメントがある。
image.png

Souvenir of the largest nearby city. とのことなので、おそらく人口が最も多い都市ということだろうと想定して、確認してみたところ Var では県庁所在地の Toulon が、約 18 万人(2019)と最大のようだった。このあたりからも、Var と想定したあとの場所を絞れたのかもしれない。

Flag: Av. Val Fleuri


Eye of the tiger [200]

Our suspect appears to be quite the traveler. We aim to interview individuals in the areas she's visited and gather evidence confirming her presence.
Now, let's identify the place shown in the photo labeled "stone".
format : Place Name
example : Piața Consiliul Europei

先の調査で見つかった flicker のアカウントで公開されている "stone" の場所を特定せと、とのこと。
stone.jpeg

写真から "O/S/B/M/S6956" の文字を読み取ることができるので、この情報から場所を特定するのだろうと推測。この石碑(?)が何なのかは検討もつかなかったので、とりあえず、画像検索をする。検索の結果として、英国の三角点であることがわかり O/S/B/M というのが「OSBM = Ordnance Survey Bench Mark(英国陸地測量部基準点)の略であり、下の S6956 が場所を示していることがわかる。あとは S6956 がどこを示すのかを探す。

"Ordnance Survey Bench Mark" で検索してみると、使えそうなサイトがみつかるが、初見ではどれがベストか判断できなかった。ということで、逆引き的にこれまでの検索で分かっている地名とOSBMの番号の組み合わせで検索してみた(Deacon Hill S2636)。

結果的に、一番上に bench-marks.org.uk がひっかかってきたので、確認すると "Triangulation Pillar OSBM S2636: Deacon Hill" と書いてあり、サイト内を OSBM 番号で検索ができそう。右上の Search で S6956 を検索。結果として Ben Ledi が得られる。確認のために "OSBM" "Ben Ledi" で Google で画像検索。
image.png

stone と同じように、ひびが入った基準点の写真がいくつかある。番号も間違いなさそう。場所は「スコットランドにある Ben Ledi 山」で間違いないと判断。Ben Ledi を submit して correct。

Flag: Ben Ledi


When I see you again [200]

Our suspect appears to be quite the traveler. We aim to interview individuals in the areas she's visited and gather evidence confirming her presence.
Now, let's determine the location from which the photo labeled "snow" was captured.
format : Place Name Country
example : Rosenborg Slot Denmark

先の調査で見つかった flicker のアカウントで公開されている "snow" の場所を特定せと、とのこと。
snow.jpeg

パっと見て、看板の類、樹木、車、街灯、信号らしきものあたりが、ヒントになる車のナンバープレートを見ると、別問題で調べた結果から、少なくともフランスではなないだろう(だから、問題で国を問われていると言われればそれまでだけど)。

素直に考えると、ここはやはり、道路標識。

ダウンロードした画像データを拡大してみてみるものの、175くらいしか読み取れないな、と悩んでいたら、メンバから情報提供。
snow_hints.png

こんなに綺麗に拡大できるのね(感心しかない!チーム戦、最高!)。ケベックといえば、カナダでもフランス語圏なので、なるほど SUD が南なのも納得。ケベックを通る 175 号線について確認してみる。
snow_175.png

南に100kmでケベックということなので(カナダはキロ、メートル表記)、およその位置を Google map で確認。
snow_letape.png

あとは、ストリートビューで条件にマッチする場所を確認(するためのお散歩)。少し南に下ると、L'Étape Rest Stop に入る入口で看板、街灯、信号(?)などの条件を満たす場所が確認できたので、この場所がフラグと判断して "L'Étape canada" を提出。
snow_flag.png

チーム戦ならではの協力を体験できたのは、とても嬉しかった :flag_ca:

Flag: L'Étape canada


Drop it like it's hot [200]

Our suspect appears to be quite the traveler. We aim to interview individuals in the areas she's visited and gather evidence confirming her presence.
Now, let's determine the location from which the photo labeled "sea" was captured.
format : Place Name City
example : Rosenborg Slot Copenhagen

先の調査で見つかった flicker のアカウントで公開されている "sea" の場所を特定せと、とのこと。
snow.jpeg

これ見よがしに映っている植物はダシリリオン種らしい、Google レンズが教えてくれた。もともとはメキシコ北部の自生種らしい。が、メキシコ感はない。建物はヨーロッパ風、これ地中海だよね、きっと。ということで、レンズのフォーカスを下半分程度に絞って確認する。
image.png

すると、エズ村(Eze)が多くヒットする。"france ezu sightseeing" で pivoting してみると、観光した人のブログなどがヒットする。Eze は熱帯植物園が名所のひとつとのこと。画像検索でも "sea" に映っている石像と同じものが確認できるので、Eze 村の名所となっている「熱帯植物園」からの風景で間違いない。

Place Name City を答えよとのことなので、いくかサイトを巡回してフランス語で熱帯植物園は Le Jardin Exotique で間違いなさそうなので"Le Jardin Exotique Eze" を Submit して Correct。

Flag: Le Jardin Exotique Eze


Welcome to the jungle [200]

Our suspect appears to be quite the traveler. We aim to interview individuals in the areas she's visited and gather evidence confirming her presence.
Now, let's determine the location from which the photo labeled "kangaroo" was captured.
format : Place Name City
example : Rosenborg Slot Copenhagen

flicker のアカウントで公開されている "kangaroo" の場所を特定せよという問題。

問題の写真見てカンガルー?カンガルーなのか??という疑問が湧きましたがこれはカンガルーです(問題には関係がなかった)

↓チーム内メモより引用
image.png

多分後ろの緑色の柵で検索するんだろうなーとGoogle画像検索を駆使するもうまく見つからず。

勘でフランスと決め打ちし「フランスのカンガルーと触れ合える動物園(Zoo de France où vous pouvez interagir avec les wallabies.)」で検索。

写真見て雰囲気が近そうな所をあたっていく

image.png

ここっぽいのでは?
https://www.ouest-france.fr/sciences/animaux/video-150-wallabies-en-liberte-pres-d-angers-ce-parc-est-unique-en-france-8f636df9-4f0d-3c94-a3d1-8dd12c5d0592

「カンガルー・ガーデン」は、一般公開されている8ヘクタールの公園で、150頭のベネット・ワラビーが飼育されている。

やっぱりワラビーなんかい!

気を取り直して「Jardin des kangourous」(カンガルーガーデン)で検索。
緑色の柵を確認し確定。

image.png

Flag: Le Jardin Des Kangourous La Possonnière


Santiano [200]

Our suspect appears to be quite the traveler. We aim to interview individuals in the areas she's visited and gather evidence confirming her presence.
Now, let's determine the location described by the poem. It seems that the words have been chosen carefully. If we pay close attention, we may uncover something of interest.
format : Name of the nearest bus stop
example : Gare Saint-Roch - République
Note : 5 tries

Chill 発動

全然わからん…というか、わかっているかわかっていないのかわからん…という難問。 flicker のアカウントで公開されているpoemの場所(最寄りのバス停)が問われている。

ポエムはこちら

image.png

まずこの筆記体みたいなフォントが読めない!のでChatGPTに読み取ってもらう。ついでに翻訳もしてもらう。

Paris Sleeping

Great southern network
I was there to work

My map is in my hand
Headlamp through unknown land

chilling sanctuary
sprawling ossuary

Noon you go
Well you know

South is the way
Irons on the way

Left when it's due
Danger left no clue


パリの眠り

大きな南部の網
働くためにそこにいた

地図は手に持って
未知の土地をヘッドランプで照らす

冷たい聖域
広がる骨の場所

昼間にあなたは行く
まあ、あなたは知っている

南が道だ
途中の鉄

時が来たら左へ
危険は手がかりを残さない

意味がわからない!!と私などは呆然とするばかりでしたが、この時点でさんがパリのカタコンベでは?と気付きカタコンベ入口の最寄りのバス停(←実は正解とかなり近かった~ワンチャンあったのでは?)と、そこからGoogleMapでパリの線路(鉄がどうこう言ってるせいで…)を旅した先のバス停を回答してIncollect。

回答権を残り1つ残した所でこれは無理だと判断し、チルモード発動しました。

チルモード発動後の運営様のヒントによって、パリのカタコンベのことに間違いがないこと、地下の地図が必要だということがわかった。

総出で地図を探していると さんがおっきい地図を見つけてくれて「これや!」となる。

カタコンベって広いのね~、大都市の地下にこれだけ空間が広がっていることに驚き。他の地図も参照しながら、「sprawling ossuary(広がる骨の場所)」を探していく。ちなみにその前行の「chilling sanctuary」には深い意味はないっぽい、ええ…。

判例はこんな感じなのでご興味があれば地図みてみてね

image.png

観光客向けの公開ゾーンに骨マークがあり、それが赤丸の部分。でももう一つ青丸の所にも骨マークとそこから広がるような通路があることがわかる。

hoge.png

しかし、結局絞り込めなかったので「どっちですか?!」って聞いたら青丸の方だと教えてくれた。(わからん)

というわけで北側のホネホネゾーンからポエムに従ってルートを取っていく。

南行って~鉄を見て~左に曲がって~なんか危険な場所~?

image.png

え?あってる?? 不安になったので再度質問

image.png

違うけどあってるらしい。(わからん)

というわけで最終ポイントがわかったので、カタコンベの地図とGoogleMapを組み合わせたりしてそれっぽいバス停が2つ見つかったが、やっぱり絞り込めない!!

image.png

もう絶対失敗したくない…ここまで来たら何も失うものはない…の精神で質問したら

image.png

どうやら左により過ぎてるらしいので右の方を回答して正解でした。(わからん)
行ったこともないパリのカタコンベに詳しくなった!今度行きたい。

Flag: Denfert-Rochereau - Froidevaux


Little party never kill nobody [0]

You found critical information in this investigation. We've sent people at the location you found, and they found a bundle of clues: an abandoned lab in Scotland, a french witness that says Barbara Allandes is a pharmacist, a burnt notebook with poison recipes, a crop of castor bean...
B. Allandes seems to be our ideal suspect, but we do not have a formal proof. We need to investigate further, but for now, we do not have much. We'll keep you updated if anything new comes up...

問題文に書いてあるフラグを送信するだけの問題。「Lunch time」カテゴリを全完したタイミングで出現。結局バーバラさんは何者だったんだ…

Phone

Supply... [200]

The recovery of Lucilhe's encrypted phone marks a pivotal breakthrough in our investigation. Our dedicated technicians are tirelessly working to extract vital data from it. Thus far, we have successfully retrieved screenshots from a conversation. Herein lies the first segment of this crucial exchange. Try to find the SIRET number of the company mentioned in the message.
format : 12345678901234

[機械翻訳]
ルシルの暗号化された携帯電話の回収は、我々の捜査において極めて重要な突破口となる。専任の技術者が精力的にデータを取り出しています。これまでのところ、会話のスクリーンショットを取り出すことに成功している。この重要なやりとりの最初の部分がここにあります。メッセージに記載されている会社のSIRET番号を見つけてください。
フォーマット:12345678901234

Chill 発動

添付されていた画像
image.png

ルシルはwhatsappでK.という人物とやり取りをしていた。 K.はルシルの依頼に従って、ある組織を調べているようだ。
[スクショ訳]

ルシル: 「こんにちは、インテルベンダーです。MMに "Bruised rogue "を送り込んだグループについて調査している。彼らは私をスカウトしようとした。私を殺そうとしたんだ。私が知っているのは、彼らが高給取りだということだけだ。だから、2021年に始めようとしたデューデリジェンスを再開してほしい。」

K.: 「ハイ、何が手に入るか見てみます…」

K.: 「これがその結果だ。彼らはいくつかの技術的発明を取得しようとしている: ロワール・アトランティック "に本社を置く会社によって2013年以前に作られたもので、ハニカムに関する技術的なものである。PDFしか見つからなかった。」

会話の内容はストーリー上意味があるが、この問題とは無関係のため↓のトグルに折りたたんでおく。

WhatsAappの会話についてのシナリオ上の補足

HEXA v2で、ルシルは日本人ツヅネ・ヨコヤマの会社からスカウトを受けていた。
ツヅネは、ルシルを脱走させるというミッション(ミッション名"Bruised rogue")を、悪の組織 MasterMind (WhatsAappにかかれているMM) に依頼した。
ただし、ツヅネは MasterMindに ミッションが失敗した場合はルシルを殺すように命令していた。
主人公の諜報機関は、v2のシナリオの最後に、逃走中のルシルとMasterMindのメンバーを見つけた。すなわち、ルシルの脱走ミッション"Bruised rogue"が失敗したことを意味する。
その瞬間に、MasterMindのメンバーはルシルを殺そうとし、未遂に終わった。

MasterMindを壊滅したが、日本人ツヅネの会社の謎は残っている。

この問題のスクショによると、ルシルは「intelbender」と名乗っており、K. に日本人ツヅネのの調査を依頼し、K.はその組織の調査結果をルシルに報告していたことがわかる。
(K. は後の問題 Kermit でも出てくる。)

要は、会話中の会社を見つければ良い。

「PDFしか見つからなかった」とのことで さんが Dorksの出番だと考え、次のように調査した。
"Loire Atlantique" "honeycomb" France filetype:pdf
で検索すると、
https://www.cea.fr/
という会社が、2010年にpdfで資料を公開しており、かつhoneycombに関する記述やLoire Atlantique に拠点があることがわかる
https://www.cea.fr/english/Documents/clefs-cea/clefs-cea-59-materials.pdf
しかし、この会社のSIRETナンバー"77568501900587"はincorrect。

ヒントの時間

サブシナリオ「Phone」で一番最初に出題される問題の1つであるが、これが解けないと後の問題がアンロックされない割に難しく、回答数が芳しくなかったためか、CTF開始12時間後に無料のヒントが開放される。

ヒント

Our sources indicate that the society is based in Loire Atlantique, that means the company siege is in Loire atlantique, and the company is not a subsidiary company.

[機械翻訳]
会社はロワール=アトランティックに本拠を置いており、それは会社の本社がロワール=アトランティックにあることを意味し、会社は子会社ではありません。

一応、本社がLoire Atlantiqueにある会社から探すことにしたが、詰まってしまった。

調査が行き詰まってしまったため、Chill modeを発動した。

Chillモード後の調査

運営曰く、「あなたのdorkクエリに含まれるLoire atlantiqueはPDFには含まれない可能性が高いね。 このdorkクエリを試してみて→ "honeycomb" filetype:pdf before:2013 」
これはさすがに推測できなかった...

そこで(フランスVPNで4)dork し、ヒットしたPDFの会社を上から順に調査することにした。2件目のSAS SYNGAS 社が一番確信度が高かった。
image.png

  • https://www.societe.com/etablissement/sas-syngas-45366810500019.html
    • SAS SYNGAS 社は現在、SAINT-JEAN-DE-BOISEAU (本社) に主な拠点を置いています。会社の管理と効果的な管理を一元的に行う施設です。
    • Saint-Jean-de-Boiseau
      • サン ジャン ド ボワゾーは、フランス西部のロワール アトランティック県にあるコミューンです

SAS SYNGAS 社の SIRET をサブミットした所、correct。

Flag: 45366810500027

教訓: 足してダメなら引いてみよ


...her [200]

The recovery of Lucilhe's encrypted phone marks a pivotal breakthrough in our investigation. Our dedicated technicians are tirelessly working to extract vital data from it. Thus far, we have successfully retrieved screenshots from a conversation. Herein lies the second segment of this crucial exchange. Your task: unveil the identity of the patent filer, a pivotal piece in this intricate puzzle.
format : COMPLETE NAME
example : JEAN MICHEL DUPONT

特許出願人の身元(COMPLETEAME)を明らかにせよとのこと。添付されている "message2.png" を確認すると、特許番号 "GB1468526" が示されているので、こちらの出願人の情報を探す。
message2.png

特許番号の国際基準に明るくないので、まずはどういったルールで番号が与えられるのかを調べてみたところ、GBは Great Britain(英国)を示していると分かった。解説されている WIPO のサイトで特許の検索も可能なようなので、検索をかけてみると 2件の情報がヒットそのうち一方が 1468526 に関する出願となっているので、開いて確認してみる。Office が United Kingdom となっているので、対象の特許はこれでよさそう。

Applicants と、本文から "B. R. PALUCH" であることはわかるが、COMPLETE NAME がわからない。
image.png

この情報をもとに pivoting するのか、と少し考えていたら、タブがあることに気づいた。Description を確認したところ、"BERNARD RICHARD PALUCH" の記載があったので、この情報を submit して correct。
image.png

Flag: BERNARD RICHARD PALUCH


Paint her [200]

After rigorous effort and intricate analysis, the forensics team successfully decrypted the notes stored within the telephone. Here's one of the notes we discovered:
 Here is what I found about them :
 They think art is a waste, but can be useful to make money.
 Here is their next target, they want to steal it and sell it on black market
Your assistance is crucial in our investigation. We rely on you to uncover the name of that painting, as it holds crucial significance in identifying their targets.
format : Painting Name
example : La Joconde

問題と共に "Capture.PNG" が与えられる。
Capture.PNG

フラグは絵画の名称(Painting Name)なので、まずは素直に Google レンズにかけてみたが、上位のほうにはピンポイントではヒットなし(下のほうまで探してません)。ということで、Google、Bing、Yahoo、Yandex、TinEye の各種画像検索にかけてみた。

TinEye でヒットしたものの、サイトそのものは 404 状態。アーカイブを探すことも考えたが、
tineye.png

とりあえず、ファイル名でかなり対象が限定できぞうな雰囲気なので、"rural andean churches plagued by sacred art thefts" で検索してみる。ビンゴ、絞りこめた!
cuesta.png

見つかったサイト内で絵画名を探してみると、記載があるのでこれをフラグとして submit して correct。
image.png

Flag: Jesus con la Cruz a Cuesta


Connect her [200]

After rigorous effort and intricate analysis, the forensics team successfully decrypted the notes stored within the telephone. Here's one of the notes we discovered:
・Address: 263 Rue de Châteaugiron, 35000 Rennes, France
・Use: Datacenter/communications
・Responsible: Marine Scout
・Affiliation: Indigo
The described facility seems important because of its intended use. We require it to establish a means of surveillance. Find the OSM node of the fiber concentration point linked to this place.
example : 1553917944

[機械翻訳]
厳密な努力と緻密な分析の結果、鑑識チームは電話機に保存されていたメモの解読に成功した。発見されたメモのひとつを紹介しよう:
住所 263 Rue de Châteaugiron, 35000 Rennes, France.
用途 データセンター/通信
責任者 マリンスカウト
所属 インディゴ
説明されている施設は、その使用目的からして重要だと思われる。監視手段を確立するために必要だ。この場所にリンクしているファイバー集中ポイントのOSMノードを探してください。

記載された住所にリンクしているfiber concentration pointを探す問題。

「OSM node」という記載があることから、overpass turboなどでOSMクエリを書いて検索すれば解けそう、というアタリをつけられた。
OSMクエリという概念は知っていたものの、実際に書いたことはなかったので、チュートリアルを眺めたりChatGPTを頼ったりしてクエリを完成させた。

以下は地図で表示した範囲からfiber concentration pointとなるノードを抽出するクエリである。

[out: json] [timeout:25]; 
( 
nwr["telecom"="connection_point"]({{bbox}}); 
nwr["telecom=medium"="fibre"]({{bbox}}); 
);
out geom;

上記のクエリをoverpass turboで実行し、ヒットした中で一番近いノードを提出したら通った。

image.png

Flag: 6376633470

一番近いノードがたまたま正解だったが、本来は以下の情報を駆使してノードを特定する必要があるのだと思う。
他のWriteupを読んで勉強したい。

・Responsible: Marine Scout
・Affiliation: Indigo


Propel her [200]

After rigorous effort and intricate analysis, the forensics team successfully decrypted the notes stored within the telephone. Here's one of the notes we discovered:
 I've recognized a military aircraft equipped with dual propellers, three landing gears,
 with one positioned beneath the nose, wings affixed to the fuselage midpoint,
 a horizontal stabilizer attached to the rear fuselage and a unique vertical stabilizer.
 It's quite sizable, measuring over 30 meters in length.
 todo : identify plane
 It appears that they possess considerable resources.
Please identify the airplane type. We would like to question the owners of such an airplane.
format : Airplane type
example : Airbus A380

[機械翻訳]
厳密な努力と緻密な分析の結果、鑑識チームは電話機に保存されていたメモの解読に成功した。発見されたメモのひとつを紹介しよう:
"二重プロペラ、3つの着陸装置(1つは機首の下に位置する)、胴体の中間部に固定された主翼、後部胴体に取り付けられた水平安定板、ユニークな垂直安定板を備えた軍用機であることがわかった。全長は30メートルを超える。
任務:機体の特定
かなりの資源を保有しているようだ。"
飛行機の種類を特定してください。このような飛行機の所有者を尋問したい。
フォーマット 飛行機の種類
例:エアバスA380

Chill 発動

さんと さんが中心で取り組んでいた。やっていたことは主に2つ。

  1. 航空機の知識を持つメンバーが、おおよその推測をつけて、裏取りを行う。
  2. ChatGPTに生成させて、裏取りを行う。

ただし、 問題文中の「ユニークな垂直安定板」の 「ユニーク」を「奇抜な」という意味で捉えてしまった ため、メンバー内の議論で「惜しい候補はあったけど、そんな風変わりしたデザインじゃないよね〜」「A400M とか風変わりそうだけど他の条件を満たしていないな〜」みたいな話の流れになり見事にチーム全体でラビットホールに嵌まる。

最終的に次の機体

が我々にとって、ユニークな(一風変わった) 垂直安定板といってよいのでは、ということになりサブミットし、incorrect。

回数も残り1回だったので、Chill modeを発動し、全く見当違いの推測方法であったことが発覚した。

運営曰く、「aircraftを特定するツールが見つかるかも」とのことで調べると、Aircraft Recognition Guide というwebサイトが見つかった。

プロペラの数やエンジンの位置などのチェックリストがあり、チェックを入れることで、飛行機をフィルタできるというもの。

そこで、次のような条件で設定した

  • プロペラの数: 4
  • 翼の位置: Mid, through fuselage
  • 着陸装置の位置: Nose wheel landing gear
  • 尾翼の構成: Conventional, horizontal stabiliser attached to rear fuselage and single vertical stabiliser
    • これが本来のユニークの意味ですね...

そこで候補が1つに定まった。

image.png

3つ名前が書いてあるがどれかはわからなかったので、一応新しめということで"Boeing B-50"をサブミットしたがincorrect。

3回提出してしまったので、運営に回数resetを依頼した上で、残りの候補 "Boeing B-29"、"Tupolev Tu-4" をサブミットしたがincorrect。
運営に問い合わせると、「dual propellersだよ」とのこと。うーん...2x2で4ではなかった模様。

プロペラの数を2に修正すると、候補が5つ出てくる

  • Breguet Br1150 Atlantic
  • Douglas A-20 Havoc
  • Grumman F7F Tigercat
  • Lockheed P2V/P-2 Neptune
  • Ted Smith/Piper Aerostar

この中で、全長30mを満たすものは1番めのもののみ。ここまで来るのに6時間くらいはかかってしまった。

Flag: Breguet Br1150 Atlantic

教訓: 英語から逃げない。


Drive her [200]

Our forensic team has achieved a new breakthrough, successfully extracting a video from the phone. To ascertain the identity of the individual speaking in the video, we aim to reach out to potential witnesses who might have encountered him.
Please find the phone number of a location where this person is likely to have passed through.
format : +331234567890

[機械翻訳]
我々の科学捜査チームは、携帯電話からビデオを抽出することに成功し、新たな突破口を開いた。ビデオで話している人物の身元を確認するため、その人物に遭遇した可能性のある目撃者に接触することを目指しています。
この人物が通りそうな場所の電話番号を探してください。
フォーマット +331234567890

以下の動画から場所を特定し、ターゲットが次に向かう場所を推測せよ、という問題。

動画を再生してみると、急に日本語が聞こえて驚く。
ターゲットはお腹が空いており、休憩所に立ち寄ろうとしているようだ。

また、聞き覚えのあるBGMで耳を疑った。
HEXA OSINT CTF V2で出題されていたカトリーナLEMONADEではないか!
(良い曲なので一度聴いてみてほしい↓)

こういう「問題には直接関わってこないけど去年の参加者には伝わるネタ」が大好物だったりする。

しばらく動画を眺めていると、以下の標識に目が留まった。

スクリーンショット 2024-04-14 201929.png

ぼやけてはいるが、心の目で「A20 357」と書かれていることを確認。
この標識がフランスのものだと さんが調べてくれていたので、フランスの高速道路A20をGoogle mapで辿っていく。( 補足: https://geohints.com/RoadNumbering でこのデザインの標識がフランスかチュニジアに絞れる。)

しばらく北上していると、標識の下の数値が1ずつ減少していることに気づく。
このタイプの標識は等間隔に置かれていると想像し、だいたいの地点を推測。
あとは気合でストリートビューから該当箇所を特定した。

この問題はまだ終わりではなく、この後どこに寄るか?を答える必要がある。
特定した地点の先にあるサービスエリアを見てみると、レストランは1件のみ。ここの電話番号が知りたい。

Google mapには書いてなかったので、店名でググって公式サイトを見てみるも、そこでも電話番号は見つけられず...
しばらく悩んでいると、 さんがTripadvisorに載っていることを教えてくれた。

いい感じにチームワークを発揮できた問題だった。

Flag: +33565300222


Sum her [200]

The technicians have successfully retrieved a photo from the phone. It seems to be about a location. please attempt to locate this place.
format : Place Name
example : Central Park West Hostel

Chill 発動

[機械翻訳]
技術者が携帯から写真を取り出しました。ある場所の写真のようです。
フォーマット 場所名
例:セントラルパークウエストホステル

以下の画像から場所を特定する問題。

picture.png

まずはこの場所を特定する必要があるが、そこは さんがササッと見つけてくれた。
スペインの地中海側とのこと。

image.png

次に画像右下にあるメモを読んでいく。

Hotel
Entre el mar a 150m
Y la muerte a 60m
Espere al objetivo en el apartado de
correos a 10 metros de distancia

ホテル
150メートルの海
そして60メートルの死
10メートル先の郵便ポストでターゲットを待つ

具体的な距離が書かれていること、また画像がOpenStreetMapのものであることから、再びOSMクエリを書く問題だと推測。

距離をクエリで表現する方法がわからなかったので、とりあえず以下のクエリでホテル・墓・ポストを列挙した。

[out:json][timeout:25];
(
  node["tourism"="hotel"]({{bbox}});
  node["amenity"="grave_yard"]({{bbox}});
  node["amenity"="post_box"]({{bbox}});
);
out geom;

実行すると、一応それっぽいところは見つかったが、不正解だった。
(死=教会と考えたが、教会との距離が少し遠い)

image.png

残り時間も少なくなってきており、チーム内でも「全完してレポートを書くぞ!」という流れになったため、このタイミングでChill Mode発動。

運営から以下のヒントを貰った。

Try something like this :

[out:json][timeout:25];
(
  node["tourism"="hotel"]({{bbox}})->.hotel;
  //we interpreted "death at 60m" means "grave is near in 60m"
  node["amenity"="grave_yard"](around.hotel:60)({{bbox}})->.death;
  node["amenity"="post_box"]({{bbox}});
);
out geom;

なるほど、aroundを使うことで距離を指定できるのか。
ヒントを参考に試行錯誤し、最終的に以下のクエリを作成した。

以下の点を工夫した。

  • nodeではなくnwrを使うことで、node, way, relationすべてを列挙
  • 墓よりも教会のほうが数が多いため、死=教会だと推測
  • aroundは指定した数値以内のノードを取得するため、距離を倍にしてノードを見つけやすくした
[out:json][timeout:50];
  nwr["building"="church"]({{bbox}})->.death;
  nwr["tourism"="hotel"](around.death:120)->.hotel;
  nwr["amenity"="post_box"](around.hotel:20);
out geom;

ところが実行するも、不正解だった場所のみヒットしてしまう...
再度運営に相談したところ、ほとんど正解に辿り着いていると思われたのか、答えとなるクエリをそのまま教えてもらった。

[out:json][timeout:25];
(nwr["amenity"="post_box"]({{bbox}});)->.a;
(nwr["tourism"="hotel"]({{bbox}});)->.b;
(nwr["landuse"="cemetery"]({{bbox}});)->.c;
(nwr.b(around.a:10);)->.BnearA;
(nwr.BnearA(around.c:60);)->.BnearAnearC;
(.BnearAnearC;);
out body;
>;
out skel qt;

死=教会ではなく、死=墓地とするべきだったのか。(詩的な表現やめて...)

実行すると1つのノードがヒットし、そこがフラグだった。

image.png

Flag: RH Hotel Corona del Mar

around を用いて一定範囲内のノードを取得したり、一度取得したノードを->で変数に格納する方法はとても勉強になった。


Lead her [0]

Our forensics team managed to decrypt everything kept in that telephone. We learned more about the organization that ordered to kill Lucilhe in 2023.
Unfortunately, the evidence we've found hasn't yet enabled us to confirm whether they are implicated or not. We will keep you informed if a new lead comes up...
flag : Roger that

[機械翻訳]
私たちの科学捜査チームは、その電話に保存されていたものをすべて解読することに成功した。2023年に Lucilhe の殺害を命じた組織の詳細がわかった。
"残念ながら まだ確証は得られていない 新たな手がかりがあれば、またお知らせします。

問題文に書いてあるフラグを送信するだけの問題。「Phone」カテゴリを全完したタイミングで出現。
電話に残された情報を解読し、Lucilheの殺害を命じた組織の詳細を得ることができたとのこと。


The entity

Kermit [200]

Thank you for your efforts. Here's what we've uncovered thus far: Alíz Lamp has an alibi, which we confirmed with your assistance. She was not present on the day of the crime. Based on the information found, it doesn't appear worthwhile to proceed with the investigation concerning her. Conversely, based on the evidence we've gathered, Barbara appears to be the prime suspect. However, we lack concrete proof. Additionally, you have found relevant information about the sponsors of the Bruised Rogue mission. Tsuzune Yokoyama appears to be part of a significant organization.
Regrettably, we haven't been able to use this information effectively thus far. One of our contact had information about them, but even if it may be possible, on our end, we haven't managed to reach him.
Fortunately, an unidentified source has just sent us this message:
"My name is Kermit and I might have some information you could use. It seems that we are investigating the same group. I'm highly convinced they're responsible for Lucilhe's murder. I have tracked individuals affiliated with this organization to the coordinates: 50.095239, 6.7509299. A football association seems to have been based here, but that has changed. I believe you will know how to use this information effectively."
Could you identify an organization situated at these coordinates?
format : OrganizationName LegalStatus
example : Carrefour S.A.

[機械翻訳]
ご尽力に感謝いたします。私たちがこれまでに明らかにしたことは次のとおりです:
・アリズ・ランプにはアリバイがあり、私たちはあなたの協力でそれを確認しました。彼女は犯行当日その場にいなかった。見つかった情報によると、彼女に関する調査を進める価値はないようです。
・逆に、私たちが収集した証拠に基づくと、バーバラが最有力容疑者であるようです。しかし、具体的な証拠が不足しています。
・さらに、Bruized Rogue ミッションのスポンサーに関する関連情報も見つかりました。ツヅネ・ヨコヤマは重要な組織の一員であるようだ。
残念ながら、これまでのところこの情報を効果的に活用できていません。私たちの連絡先の 1 人が彼らについての情報を持っていましたが、たとえそれが可能だったとしても、私たちは彼に連絡を取ることができませんでした。
幸いなことに、正体不明の情報源から次のメッセージが届きました。
「私の名前はカーミットです。あなたに役立つ情報があるかもしれません。私たちは同じグループを調査しているようです。私は彼らがルシルヘ殺害の責任があると確信しています。私はこの組織に関係する人物を座標まで追跡しました。
50.095239、6.7509299 サッカー協会がここに拠点を置いていたようですが、この情報を効果的に使用する方法がわかると思います。」
これらの座標に位置する組織を特定できますか?
形式: 組織名 法的地位
例:カルフール SA
試行回数 0/3 回

Chill 発動

問題中の座標 "50.095239、6.7509299" に関係する組織を調査する、という問題。

まずは座標をGoogleマップにかけると、住所を取得できる。
Auf'm Stamp 9, 54531 Meerfeld, ドイツ

特に近隣に組織のようなものはないため、3つのアプローチを考える。

  1. Meerfeldの自治体サイトを探す
  2. GPS付きのSNS投稿を探す。
  3. 住所名でひらすら検索

アプローチ1は、https://meerfeld.net/ を検索するというものである。 さんによると、ブログ は地域のことが詳細に書かれているとのことだった。しかし、座標に関連する情報は得られなかった。

アプローチ2は、たとえば Twitterだと、"geocode:50.095239,6.7509299,0.5km"のように検索オペレータを用いて投稿をフィルタリングする方法である。
Twitterの他、インスタなども見たが、めぼしい情報は得られなかった。

アプローチ3は、ただの総当たりである。しかし、duckduckgoで"Meerfeld 54531 Auf'm Stamp 9 football"で検索すると、問題文のフットボールクラブに関連するサイトを発見した。
https://www.eversports.de/s/fc-meerfeld
FC Meerfeldという組織のようである。ここからさらに、FC Meerfeldについて調べ、 さんが PDFを見つけ、"FC Meerfeld e.V."という表記を発見。

e.V.は法的地位の一つとのこと。
https://kotobank.jp/dejaword/e.V.

満を持して、"FC Meerfeld e.V."でサブミットしたがincorrect。

やることは全てやったので、Chill modeを発動することとした。
運営曰く、「フットボールクラブを調べてほしいんではなく、フットボールクラブの後にできた組織を見つけてほしい」とのことで、始めから調査方針が間違っていることがわかった。
運営からさらにヒントを貰えた。曰く「SSIDとかのデジタルフットプリントが残っているかもね」とのこと。

SSIDときたらまずWiGLEなので調べてみると、組織の情報を発見。

image.png

ただし、"bioregened europe" で検索しても、組織名は出てこない。
ふと、v2の公式write-upで「Nelexat はスイスの会社だから、nexexat.chと推測する」という文章を思い出し、bioregened.euとドメイン推測した所、WordPressのサイトが見つかった。見るからにCTF用のサイトなので合っていそうだ。

フッターに組織名と法的地位が書いてあった。

Flag: Bioregened e.V.

「この問題文だけで、WiGLEを推測するのは文脈が足りなくないか?」と思っていたのだが、ふりかえり会でpinjaのluminさんが、「アタックサーフェスの調査として対象の会社の住所付近の無線LANを調べる」と言っていた。1つ勉強になった。


This is where the fun begins [200]

You've done well. It's time to examine the activities of this association. Could you confirm the accuracy of the information shared on the blog?
For each article, tell us if it contains false information or not.
format : F for Fake or A for Accurate, in chronological order of the articles (first letter for the oldest article)
example : FFFFA
Warning : Only 2 tries

[機械翻訳]
よくやったね。この協会の活動を検討する時期に来ています。ブログで共有されている情報の正確性を確認してもらえますか?
記事ごとに、虚偽の情報が含まれているかどうかをお知らせください。
形式:記事の古い順にF(Fake)またはA(Accurate)(最も古い記事の最初の文字)
例:FFFFA
警告: 試行は 2 回のみです

"Bioregened e. V."にはブログページがあり5つ記事が投稿されている。
https://bioregened.eu/index.php/blog/

image.png

これらの記事のファクトチェックを行うという問題。
OSINT問としては、ありそうで無かった斬新な問題であり、かなり面白い試みである。

惜しむらくは、我々がこの問題に到達したのが日本時間深夜2時であり、すでに18時間以上CTFをやっていて頭が回らなくなってきている状態であったことである。
5つの記事は文量も多く、日本語に翻訳しても、ぱっと見で真偽がわかるような難易度ではなかった。

嘘が1個でも見つかればフェイクなので、嘘を見つける方向で記事を読んだ。特に記事内で出てくる数字は改竄しやすいと当たりをつけ、記事が引用している出典にあたり数字の情報が確かかを調べた。
その上でメンバー2名で多数決を行った。

image.png

幸い2人とも同じ認識だったのでこのまま"AFFFF"をサブミットしたが、incorrect。二人して間違ったようである。

4番めの、海鳥の記事のみ、「なんとなく嘘っぽい」という感じでフェイクと決めていたので、ここを正しいとしてcorrect。

Flag: AFFAF

面白い問題なのだが、頭の限界がきていて、解き方が雑になってしまったのは否めない。
願わくば、もう少し最初の方で出してほしかった。


No. I'm your father [200]

Thanks to your work, we have the feeling that this association is hiding something. Despite conducting further investigation on our side, it has led to no valuable insights. To proceed, we need to gather more information through a complementary technical analysis (stay passive) on their website, and thus, we aim to identify another individual holding responsibilities within this association.
format : Pseudonym
example : Darth Vader
Note : 5 tries

[機械翻訳]
あなたの働きのおかげで、この協会は何かを隠しているような気がします。弊社側でさらなる調査を実施しましたが、貴重な洞察は得られませんでした。続行するには、Web サイトでの補足的なテクニカル分析 (受動的なまま) を通じてさらに多くの情報を収集する必要があるため、この協会内で責任を負う別の個人を特定することを目指しています。
形式:仮名
例:ダース・ベイダー
注: 5 回の試行

Time up

Webサイトの隠し情報を見つけるという問題。
この手のWebサイト調査のテクニックをすべて試す

さんが archive.todayでアーカイブを発見した。
https://archive.is/pIlsr

HUMINTの目印である目玉マークがあった。
image.png

Contact usにメールアドレスが書いてあるので、HUMINTを開始。しかし、この時点でCTF終了30分を切っていたこともあり、運営がカツカツのようで返信が返ってこなかった。 さんが 「担当者の情報を教えて」と聞いてみたが、返信がなくここでCTF終了。

image.png

CTF終了後にわかったこと

実は、この問題はHUMINT問題ではなかった。他の方のwrite-upを見ると、
https://hackertarget.com/wordpress-security-scan/
というツールを使うことで、jsファイル内で呼んでいるAPIのURLを発見するようだ。

そしてこの問題を解いた次の問題の答えが正に見つけたメアドであった。惜しかった。

余談

当初私は、「HUMINTはコスト高いから裏でbot回してるんでしょ」と思って、1文字「a」とだけ打ってメールを送った。
しかし、実際には運営がメールを読んで、運営がマニュアルで回答していたようだ。

私のメールは読み捨てられることは勿論の事、公式Discordサーバのgeneral-frチャンネルで運営に「怠惰」というコメントと共に晒し上げられてしまった🤦

image.png

いやはや、いくら終盤の要素とはいえ 運営もとんでもなく大変であることは想像に難くない。
CTFに対するとんでもない熱量、敬服です。

おわりに

昔は、CTFにおいてOSINTはMiscカテゴリの1つと扱われていたのですが、今ではカテゴリという区分けを越えて、独自の進化を遂げ、"OSINT CTF"という一個のコンテストになったように思います。
その最先端を走るのがHEXA OSINT CTFだと思っています。このCTFを作問するのにどれくらい労力が必要だったかと考えると本当に尊敬します。
この場を借りて、 チーム一同HEXAチームに感謝をします。楽しいCTFをありがとうございました。

おまけ: カトリーナボタン(Katrina Button)

我々はDiscordのボイスチャンネルに集まりワイガヤしながら問題を解いていたのだが、問題が解けたらハンドクラップを鳴らすような雰囲気になっていた。
その際に思いついた余興の1つとして、V2で出題された 「Katrina nanana...」と口ずさむ音声を追加した。サブミットを外す度にこれが鳴っていた。
もちろん、Drive herに到達したらこれが鳴りまくっていた :lemon:

  1. 名前の由来はシャーロック・ホームズシリーズから。

  2. 当初は午前5:00始まりだったのですが、開催一ヶ月前程に時間変更されました。

  3. あくまで執筆担当区分の話であり、CTFの問題は基本的に全員で協力しながら解いています。

  4. 他のメンバーはこのdorkクエリでヒットしなかったらしいので一応。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0