DIVER OSINT CTF 2025 Writeup
2025年6月7日〜8日に開催されたOSINT問メインのCTFであるDIVER OSINT CTF 2025にsamと2人で参加していました。(チーム名:k0n1sh10w0)最終順位は91位/668チームでした。(4008pts)
全体的に出題される問題のレベルが非常に高く、AI全盛期のこの時代にCTFとしての競技性を保ちながら、単にChatGPTに投げるだけでは解答に辿り着くことができない問題ばかりで、作問者の作問力に感銘を受けました。
web上に明示的に存在する情報はAI Chatで検索をかければ出てきますが、暗黙的な情報の断片を組み合わせて推論する必要がある場合は、まだまだ人間のOSINT力がAIよりも上であることを改めて実感します。
時間のかかる難しい問題が多かったため、手を付けられていない問題も多いですが、以下Writeupです。
[introduction] bx
この写真で見える "BX" という看板の座標を答えなさい。
隣の教会らしき建物に「カトリック上野教会」の表札が見えるため、Google Mapsで検索し隣のBX(文化シャッター)の緯度経度を特定。
答えは35.7182317748, 139.7809208930
[introduction] document
アメリカ海軍横須賀基地司令部(CFAY)は、米軍の関係者向けに羽田空港・成田空港と基地の間でシャトルバスを運行している。2023年に乗り場案内の書類を作成した人物の名前を答えよ。
該当する乗り場案内の書類をPDFで発見することはできたが、回答できず。
PDFのExif情報を見るという発想がなかった...(横須賀米軍基地のwebサイトを永遠に回遊していた)
[introduction] finding_my_way
34.735639, 138.994950 にある建造物の、OpenStreetMapにおけるWay(ウェイ)番号を答えよ。
OSMで緯度経度の該当箇所に飛んでWay番号を確認する。
OpenStreetMapを使い慣れていなくて少し戸惑った。今後のために使い慣れておきたい。
答えはDiver25{568613762}
[introduction] flight_from
このヘリコプターが出発した飛行場のICAOコード(4レターコード)で答えよ。
画像ではヘリコプターが南東部に位置していたため、北西部が出発地だとわかる。立川駅近くのヘリポートのある飛行場の候補から「立川駐屯地飛行場」と推測。立川駐屯地飛行場に該当するICAOコードをGoogle検索。
答えはDiver25{RJTC}
[introduction] hidden_service
添付ファイルを確認して、Flagを獲得してください!
ドメインが.onion
なのでダークウェブにアクセスする必要があることを理解。PCにTorブラウザを入れていなかったのでダウンロードする。
ChatGPTに画像をOCRしてもらい結果をTorに入力するが存在しないURLと出てくる。どうやら写真の紙がくしゃくしゃになっている関係でOCRが上手くいっていないらしい。(GeminiでOCRしてもダメだった)
人力OCR(目視)でURLの文字列を一字一字入力していくとアクセスに成功。以下の画面が表示される。
答えはDiver25{w3lc0m3_70_d4rkw3b!}
[introduction] night_accident
この動画で、車とバスが衝突しそうになった場所はどこか。
In this video, where did the car and bus almost collide?
2013年に車載カメラで撮影された26秒の動画。
国がシンガポールであることは即座に特定できたが、具体的な場所に繋がる糸口がなかなか分からず、日跨ぎでようやく解けた。(ループ再生した動画をずっと見ながら晩ご飯を食べた)
まずは、同じデザインのバスが複数台走っている「SBS Transit」が、シンガポールを運行するバスであることがわかる。各バスの後ろの系統番号(経路を表す番号)を確認すると、不鮮明ではあるが、ニアミスした手前のバスが58番、一時停車していた奥のバスが52番であるとわかる。
「SBS transit route 58 (52)」と調べ、「moovit」にアクセスすると、58番と52番の運行ルートの重複エリアはBraddell周辺のみであるとわかった。
この付近で、車線の幅・バスの停止マーク・中央分離帯の構造・信号などを頼りにGoogle street viewで探索すると、ヒヤリハットの場所がわかる。(昼と夜で街の雰囲気が違うこともあり特定作業は困難を極めた)
答えは1.3481748415, 103.8486762250
[introduction] ship
これは、ある組織が運用する船舶である。もし将来、この船が外国に売却されたとしても、変わらない番号を答えよ。
船舶上部の識別番号らしきものが判別しかねたが、船体に「東京海洋大学」の表記が確認できる。「東京海洋大学 保有船舶」とYouTubeで検索すると、東京海洋大学が保有している船舶を紹介しているチャンネルを確認。船体の特徴から「神鷹丸」であることがわかる。あとは、求められる番号(IMO番号)を検索。
答えはDiver25{神鷹丸_9767675}
[introduction] louvre
ルーブル美術館の公共Wi-Fiアクセスポイントのうち、以下の条件を満たすもののベンダーを答えよ。
・情報は2025年2月28日に収集されており、オンライン上で確認できる。
・ベンダーはBSSIDに準拠して判定せよ。Flag形式: Diver25{Company Name} (例: Apple Inc.の場合、Diver25{Apple Inc.} となる。)
問題文にWi-Fiアクセスポイントとあるので反射的に「WiGLEだ...」となり、WiGLEにアクセスする。
ルーブル美術館の座標48.86108, 2.33581
にWiggle上の地図を合わせ、期間を2024年~2025年に絞る。名前的にルーブル美術館の公共Wi-Fiと思われるWi-FiアクセスポイントのBSSID先頭6文字BC:9F:E4
を取得する。(BSSIDの先頭6文字がベンダーを表している)
MACアドレス検索サイトにBC:9F:E4
を入力すると、ベンダーはHewlett Packard Enterprise
と出てきた。
答えはDiver25{Hewlett Packard Enterprise Co.}
[introduction] p2t
この写真の左側に掲示されている写真には、ある動物が写っている。その名前を、日本語で書かれている通りに答えよ。
「ハシブトカラスの隣ということはハシ"ボソ"カラスでは」とダメもとで答えをDiver25{ハシボソカラス}
と入力してみるが不正解。
右の見切れている文章に注目すると「立山」の文字が見え、山岳観光ルートで有名な「立山黒部アルペンルート」の立山のことではないかと推測。自然が豊かな場所なのでネイチャーセンター的な場所で撮影されたのではないかと思い調べてみると「立山自然保護センター」という施設が存在するらしい。
「立山自然保護センター」の検索結果の画像を上から眺めていくと、問題と同じ画像が含まれている写真を掲載しているブログが見つかった。左側に掲示されている写真は「トビ」であることがわかる。
答えはDiver25{トビ}
[geo] advertisement
記事 / Article:
https://web.archive.org/web/20250108154113/https://www.noticiasaominuto.com/mundo/2699746/kyiv-diz-que-russia-usou-como-recrutas-ate-180000-presidiarios
この記事の写真が撮影された場所はどこか。
記事と写真の内容から2022年からのロシア・ウクライナ戦争の文脈であることを理解した。
パッと見で、ロシア側の記事なのかウクライナ側の記事なのか判別が付かず、また写真に写っている文字がロシア語かウクライナ語なのか判別できなかったので、どちらの国で撮られたものか分からない。
「バーガーキングの広告があるのでウクライナでは?(ウクライナ侵攻後に多くの外国企業がロシアから撤退したから)」と推測するも、バーガーキングはロシアで営業を継続しているらしく両方の国の線で調べていくことにする。
写真右下に注目すると
- 地名と思われる
Токио-City(Tokyo-City)
の文字 - バーガーキングまで150mの広告
- 路面電車と思われる車体と、その存在を示す標識
が確認できた。
まずはТокио-City(Tokyo-City)
を調べるとロシアのサンクトペテルブルグにいくつか存在する地名であることがわかった。国はロシアで確定。
Geminiに「サンクトペテルブルクにあるバーガーキングを教えて」と聞くと、Google Maps付きで店舗一覧教えてくれた。(この手の質問をGeminiに聞くとGoogle Mapsと連携してくれるので便利)
あとはバーガーキングから150m圏内、路面電車沿い、建物の特徴(Токио-City
の文字がある)といった情報からGoogle street viewを探索する。根気よく調べていくと該当の場所が見つかった。
答えは59.942953, 30.278387
[geo] Afghanistan
動画 / Video:
https://www.youtube.com/watch?v=NWQwx4-MeRg&t=65s
この動画の65~67秒に表示される写真はいつどこで撮影されたものか。
該当の写真をクリップしてGoogle LensでAfganistanのワードと共に検索すると、AI Overviewで、Getty Imagesが引用され、ISAF’ Camp Bostickのものであることがわかる。
しかしリンク先のhttps://www.gettyimages.com/photos/camp-bostickを確認しても、該当の画像は見当たらない。Getty Imagesから消されてしまっている...?
一応Wayback Machineでリンク先の魚拓を残っていないか確認してみるもヒットせず袋小路に。
「なぜ検索結果のサムネイルでは画像が出てくるのに、リンク先では見当たらないのか?」を考えてみるとGoogle検索のキャッシュが古い以外の原因が考えられなかったので、間違いなく画像はかつてリンク先に存在していたものであるはず。
そういえば魚拓サイトってWayback Machine以外にもあったよな...と思い、Yandex Cacheで調べると該当の画像がヒット、やはりリンク先から消されてしまっていた画像らしい。
画像のメタ情報を確認してみると日付と撮影場所の情報が記載されていた。
答えはDiver25{Camp Bostick_2009-04-16}
[geo] night_street
画像の中心に写っている茶色の2階建ての建物に入る施設の正式名称を現地語表記で答えなさい。
回答に至らず
リンガーハット全探索したにも関わらず敗北しました、節穴オブザイヤー2025は私です。
初手Overpass Turboでリンガーハットが近隣にあるクリニックの条件でクエリを叩いてみるが、写真のリンガーハットがOpenStreetMapに登録されていない店舗であるとのことでヒットせず。(作問者曰く、公開データは完全ではないことを気付いてほしくて、その上でどうするか?をプレイヤーに考えてもらうのが狙いだったらしい)
電柱プレートの形状が中部電力らしいですね...
この問題を機にGeoGuessrを本格的に始めることを決意しました。
[geo] what3slashes
この画像が撮影されたとき、正面に家が3軒、右手に家が1軒あった。
それから少し経った、ある月の初旬にこの場所にもう一度訪れてみた。そのときには、正面左側に家が1軒増えていて、正面右側にもう1軒が建設中であった。その時点で、建設中の家に屋根はなかったが、黒っぽい屋根を作る予定だという。
「ある月の初旬」とは何年の何月のことだろうか。
画像に写っている紙に何が書いてあるか知りたいのでGeminiでOCRをかける。
以下のような返答が返ってきた。
この画像にはモンゴル語で次のように書かれています。
上部中央のロゴの下にある大きな文字:
・ МОНГОЛ ШУУДАН (Mongol Shuudan) - モンゴル郵便その下の青い手書きの文字:
・ ブムバ . ゾク . バタムガヴ (おそらく、What3wordsのアドレスを示していると思われます。What3wordsは、地球上のあらゆる場所を3つの単語で表すシステムです。)画像下部の小さな文字:
Дэлхийн гадаргын 3мх3м хэмжээтэй квадрат бүр өөрийн 3 үгт хаягтай.
- (Delkhiin gadargy n 3m x 3m khemjeetei kvadrat bur uuriin 3 ugt khyagtai.)
- 訳: 地球の表面の3m x 3mのすべてのマスには、それぞれ3つの単語のアドレスがあります。
Захиалга өгөхдөө эсвэл шуудан илгээхдээ өөрийнхөө 3 үгт хаягийг нэмээрэй.
- (Zakhialga ugukhduu esvel shuudan ilgeekhduu uuriinkhuu 3 ugt khyagyyg nemeerei.)
- 訳: 注文するか、郵便を送る際には、あなたの3つの単語のアドレスを追加してください。
全体として、これはモンゴル郵便がWhat3wordsのシステムを利用して、住所を3つの単語で指定することを推奨しているカードのようです。
地球上のあらゆる場所を3つの単語で住所として表す「What3words」というものがあるらしい。
更に調べるとモンゴル郵便でWhat3wordsの活用事例の記事が出てくる。その記事中に問題の画像の範囲を拡大した画像が見つかった。この画像からは確認できないが、正面にある家3軒の右側に位置する家が建設中の時期が特定できればいいらしい。
まずはGoogle street viewで周辺を確認したいので、位置座標を知るべく手書きで書かれたモンゴル語のWhat3wordsを取得する。
Geminiの手書き文字OCRの精度に不安があったので、ChatGPT-o4-mini-highで手書き文字をモンゴル語表記で出力してもらう。Бумба . цогц . бататгав
の3文字で間違いなさそう。
該当の位置座標は47.931018, 106.800181
と特定。正面にある家3軒の右側に位置する屋根が黒い家が確認できる。
Google street viewで確認しようとするが、目的の位置座標の目の前をGoogleカーは走っていないため、確認できないことがわかった。
ではどうするべきかと考えた時に、あとは衛星画像ぐらいしか思いつかなかったのでGoogle Earthで衛星画像を確認することにする。(問題文に屋根に関する話があったので衛星画像を確認することを示唆していると考えた)
一番最新の2023年6月30日の画像。この時点では屋根が黒い家は完成していると思われる。
2023年6月30日
2018年11月30日の画像。この時点でも屋根が黒い家がある。
2018年11月30日
2018年10月30日の画像。さっきまでの黒い屋根がなく、家の中が剥き出し?になっているように見える。これだけでは建設中と断定できないのでもう一ヶ月衛星画像を遡ってみることにする。
2018年10月30日
2018年9月30日の画像。家が完全にない。つまり2018年10月30日の画像は建設中であると断定できた。
2018年9月30日
問題文が
(ある月の初旬に訪れた)その時点で、建設中の家に屋根はなかったが、黒っぽい屋根を作る予定だという。
であるので、
答えはDiver25{2018/11}
[geo] hole
この穴があった場所はどこか。
画像をGoogle Lensで検索をかけると以下のYouTube動画がヒットする。
「この動画見覚えある...」と思ったら、数ヶ月前にバズった中国の車メーカーBYDが発表したYANGWANG U9のジャンプ機能の動画だった。
動画を冒頭から見ると、撮影場所は山西省の大同市らしい。
大同市の空港を調べると、「大同雲岡機場」などがヒットしたが衛星画像を確認しても、周辺の風景や滑走路の形が一致しない。
「そもそも現役で使われてる空港でロケ(しかも滑走路に穴をあけたり)しないよな...」と思って、現在使われていない空港の滑走路か、ロケ用のためだけに用意された滑走路の可能性を考える。
そこで「この大きさの滑走路だったらひたすら衛星画像を見続けたらヒットするのでは」と考えて大同市の衛星画像をひたすら見ることにする。
すると周辺の風景と滑走路の形が似ている空港らしき場所が見つかる。位置座標は39.403960, 114.158009
付近。
滑走路までは特定できたが、回答の入力フォームを見るとかなりピンポイントで穴の位置を特定する必要がありそうだった。動画を入念に確認し、以下のシーンから穴の場所をピンポイントで特定した。
答えは39.404806, 114.163546
※動画の最後で言及されていますが、空けた穴はロケ終了後に原状回復が行われたらしいです。
[geo] convenience
青森県内に、公園とコンビニ、スーパーマーケットが互いに約100m圏内に存在する場所がいくつかある。また、これはOpenStreetMapで確認可能である。
この条件を満たす 公園 のうち、最南端 のものについて、OpenStreetMap上での Way Number を答えよ。なお、「公園」の定義は、OpenStreetMap上で "park" (leisure=park) と分類されているものに準拠する。
Overpass TurboでOpenStreetMapのタグ情報を用いてクエリを叩くことにする。
以下のクエリを叩く。クエリはGeminiに作成してもらった。
/*
青森県内で、公園、コンビニ、スーパーが
それぞれ100m圏内に存在する公園を検索します。
*/
[out:json][timeout:120];
// 1. 検索エリアを「青森県」に設定
area[name="青森県"]->.aomori;
// 2. 青森県内のコンビニとスーパーマーケットを取得
(
nwr["shop"="convenience"](area.aomori);
nwr["shop"="supermarket"](area.aomori);
)->.shops;
// 3. 青森県内の公園のうち、
// 100m以内にコンビニがあり、
// かつ、別の100m以内にスーパーマーケットがあるものを探す
// (nwrはnode, way, relationの略で、点・線・面全てのデータを対象とします)
(
nwr["leisure"="park"](area.aomori)(around.shops:100);
)->.parks_with_shops;
// 4. 絞り込んだ公園が、コンビニとスーパーの両方の近くにあることを確認
// まず、公園の近くにあるコンビニを取得
nwr.shops(around.parks_with_shops:100)["shop"="convenience"]->.nearby_convs;
// 次に、公園の近くにあるスーパーを取得
nwr.shops(around.parks_with_shops:100)["shop"="supermarket"]->.nearby_supers;
// 5. 両方の条件を満たす公園を最終結果とする
// (近くにコンビニがある公園 AND 近くにスーパーがある公園)
(
node.parks_with_shops(around.nearby_convs:100)(around.nearby_supers:100);
way.parks_with_shops(around.nearby_convs:100)(around.nearby_supers:100);
relation.parks_with_shops(around.nearby_convs:100)(around.nearby_supers:100);
)->.found_parks;
// 6. 結果を出力
.found_parks out geom;
青森県八戸市にある公園が条件に合致する公園っぽい
「旭ヶ丘一丁目公園」が青森県最南端なので旭ヶ丘一丁目公園のWay番号554174108
を入力するが不正解。なんで?と思い、クエリを確認すると「コンビニとスーパーマーケットの距離が100m以内にある」ことを保証していない条件であることに気付く。
クエリを書き直すことも考えたが「条件を若干緩めただけに過ぎないので真に条件に合致する公園は多分この中にあるはず」の楽観的な読みで、現在の出力結果の中で2番目に南に位置する「上沢巻目公園」のWay番号を入力すると正解。
答えはDiver25{556701681}
[geo] Talentopolis
記事 / Article:
https://www.guineaecuatorialpress.com/noticias/primera_edicion_de_talentopoli
"Primera edición de Talentopolis" という記事内に登場するステージの位置を答えよ。
回答に至らず...
別角度から撮影されたステージの写真が掲載されている記事や、イベントのポスターを発見し、赤道ギニアのLugar: A2 – SAN JUAN (Malabo)(マラボのA2地区?のサン・フアン)であることはわかったが、これ以上は何もわからなかった。
DiscordでのDiscussionを見る感じ、写っている集合住宅の特徴を手がかりに特定していくっぽい?
(よくわかっていないので公式解説を待ちたい)
[recon] 00_engineer
東京駅の近くでソフトウェアエンジニアの名札を拾った。おそらく落とし物だろう。
このエンジニアが勤務している会社のWebサイト(トップページ)のURLを答えよ。
ハンドルネームらしきネームタグであったため、Xで調べるとヒット。ステータスのポートフォリオページを確認すると、CareerにMagneight Softwareと記載されており、これをGoogle検索するとflag。
答えはDiver25{https://magneight.com}
なおこれ以降のrecon分野の問題はネトスト力と時間が不足し回答に至らず。
(一応代表のGitHubアカウントまでは特定できた。)
ネトスト力を上げたい...
[transportation] next_train
この音声が録音された駅はどこか。駅名を答えよ(日本語でも英語でも可)。
(駅名は鉄道会社の公式サイトやWikipediaに記載されている表記とする)
音声を再生して耳を澄ますと、「15番線」「14:16」「久里浜行き」という言葉が聞き取れたので、「15番線 久里浜行き」と調べるとJR横須賀線がヒットする。15番線ということはかなり大きな駅だと推測できることから、JR横須賀線の品川駅が候補に浮上。品川駅の時刻表を確認して該当する列車が存在することがわかったので、これをflagとした。
答えはDiver25{品川駅}
[transportation] platform
この写真が撮影された駅はどこか。駅名を答えよ(日本語でも英語でも可)。
(駅名は鉄道会社の公式サイトやWikipediaに記載されている表記とする)
「らいと」の看板が見えるので簡単に特定できると初めは思ったが、そこそこ手こずった問題。
「らいと」と検索しても、同名の店だったり、「らいと」が部分文字列に含まれる店が検索で何個も引っかかるので、特定には繋がらなかった。
そこで駅のプラットフォームに注目し、「日本の鉄道ラインカラー一覧 - Wikipedia」と車両編成の情報からJR中央線系、中でも駅の規模感から青梅線沿線であると推測。エリアを絞れたので、あとは「らいと」が近くにあるかどうかをたよりに、Google street viewとGoogle Mapsの検索機能から牛浜駅と特定した。
答えはDiver25{牛浜駅}
[transportation] sanction
2024年10月25日、制裁下にあるロシア船籍のRORO船「ANGARA」がある港湾に停泊していることが衛星画像で確認された。
停泊位置を答えよ。
RORO船「ANGARA」を検索すると、停泊情報に関する記事やニュースが結構出てくることから軍事的な文脈で注目度の高い船であることがわかる。
衛星画像で網羅的に確認していく系の解き方なのかと一瞬考えるが、船が特徴的な形状かつ高分解能な画像ではないと「ANGARA」であることを衛星画像から特定できないので、「2024年10月25日にANGARAが停泊していた」の情報がWeb上のどこかに存在する可能性が高いと推測。
しかし、色々検索しても停泊期間の情報が2024年10月25日近辺ものではなかったり、同名のロシア製ロケットがヒットしたり知りたい情報になかなか行き着かない。
「そもそも2024年10月25日の停泊情報なのだから、2024年10月25日以降の情報しか必要ないのでは」ということに途中気付き、検索ワードをANGARA Russia satellite port after:2024-10-25
とするとMOFA(外務省)のPDFがヒットした。
その中に「2024年10月25日にRajin Port
に停泊していた」の情報が画像付きで記載されていた。
答えは42.227424, 130.282587
[history] bridge
この動画で列車が通過した橋梁は、ある災害で損傷した後に架け替えられたものである。架け替えに際して、他の橋梁の構造物が流用されたことがある文献に示されている。その流用元の橋梁名を答えよ(この橋の名前ではない)。
動画の、橋を超えたあたりにあるパチスロ店?の名前を読むところからスタート。ほんのひと手間だが4K版の高画質にすると店名を確認することができ、「Naughties.Dst」であることがわかる。
パチスロ店の近くに伸びる川と路線から、「白川 豊肥本線」と調べると「白川第一橋梁」がトップヒットする。この橋が熊本地震で架け替えをしていたため、「白川第一橋梁 架け替え」などと検索したが、これだと正解に行き着かず沼にハマってしまった。
白川第一橋梁の架け替えに関する文献をひたすら読み進めてわかったのは、そもそも動画に出てくる該当の橋と形状が違うということだった。
パチスロ店から、Google street viewで該当の橋梁まで歩くと次のような文字を発見。
「第二白川橋梁(Google Maps上には記載がなく、検索しても引っかからない橋)」だとわかり、調べていくとこの橋は洪水により建て替えられていたことがわかった。
熊本県下における近代橋梁の発展史に関する研究
の文献に、澱橋より流用してきたという記述が見つかる。
答えはDiver25{澱橋}
Discussion