【Writeup】DIVER OSINT CTF 2025
はじめに
2025年6月7日から8日にかけて開催されたDIVER OSINT CTF 2025に参加しました。
OSINTとは、公開情報を合法的に*収集し、調査・分析することを指します。
今回のCTFでは、公開情報をもとに指定されたフラグを探し出すことを競いました。
私たちのチーム「packet piranha」は、初めてのOSINT CTFへの参加でしたが、668チーム中36位という結果を残すことができました。
OSINT CTFは初めての参加でしたが、非常に良い成績を収めることができたと思います。
私が担当した問題をwrite upとして残していきます。
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
この記事の写真が撮影された場所はどこか。
ChatGPT o3で看板をOCRしたところ、建物1階の看板「ГОРОДСКИЕ РЕСТОРАНЫ ТОКИО-СИТИ」は、ネフスキー大通り 90-92 番地にあるレストランチェーン「Tokyo-City」の店舗と一致していた。
Tokyo-Cityの店舗を1つずつGoogle Mapで確認し、以下のリンクと一致していることを確認しました。
画像をもとに位置を調整して正解しました。何回かピンを打っても微妙にずれてしまい正解できないことが何回かあり、チームメンバーと慎重に確認しながら解きました。メンバーの方、本当にありがとう。
Afghanistan
動画 / Video:
https://www.youtube.com/watch?v=NWQwx4-MeRg&t=65s
この動画の65~67秒に表示される写真はいつどこで撮影されたものか。
Flag形式: Diver25{撮影場所名_YYYY-MM-DD}(撮影場所名は英語)
例えば、2025年6月5日に、Camp Darbyで撮られた場合は、Diver25{Camp Darby_2025-06-05}となる。
画像検索で以下のページを発見しました。
キャプションからCamp Bostickが答えだと思いましたが失敗してしまいました。Bostickについて詳しく調べると正式名称はFOB Bostickとのこと。
Flag
Diver25{FOB Bostick_2009_04_16}
Recon
03 CEO
"00_engineer" の問題で見つかった会社の、CEOのメールアドレス(Gmail)を答えよ。
Flag 形式 / Flag Format: Diver25{example@gmail.com}
Kodai SのXからCEOがgitハンズオンをやったことを確認できました。GitHubのフォーク履歴からCEOのGitHubアカウントを発見しました。
コミット履歴からメールアドレスを取得しました。
curl -sL \
https://github.com/mizuki1206edelweiss/practice/commit/472619156f1b4484b71eb113348ed8786b43b1af.patch \
| head -n 3
From 472619156f1b4484b71eb113348ed8786b43b1af Mon Sep 17 00:00:00 2001
From: mizuki1206edelweiss <mizuki1206anemone@gmail.com>
Date: Mon, 21 Apr 2025 17:51:26 +0000
Flag
Diver25{mizuki1206anemone@gmail.com}
02 Recruit
"00_engineer" の問題で見つかった会社で、採用を担当していると思われる人物の氏名を答えよ。
Flag 形式: Diver25{Shigeru Ishiba} (ローマ字表記)
Kodai.Sのツイート と CEOのGoogleカレンダーから4/10にリリースがあったことを確認できたので、archive.netで過去ページのキャッシュを確認しました。
そうすると、ContactページでGoogle Docへのリンクを発見しました!
Google DocのOSINTツールがあったので試してみることにしました。
xeuledoc 'https://docs.google.com/document/d/1aKBTbwtt01StVTf76JRCZyL0mp4hn5FZkFwPJ56xZRc/edit?tab=t.0'
Twitter : @MalfratsInd
Github : https://github.com/Malfrats/xeuledoc
Document ID : 1aKBTbwtt01StVTf76JRCZyL0mp4hn5FZkFwPJ56xZRc
[+] Creation date : 2025/03/01 15:04:36 (UTC)
[+] Last edit date : 2025/03/01 15:06:15 (UTC)
Public permissions :
- reader
[+] Owner found !
Name : makoto.u.sunflower
Email : makoto.u.sunflower@gmail.com
Google ID : 14204889817436516997
メールアドレスを発見しました!
Gmailをghuntで調べると、、、
ghunt email makoto.u.sunflower@gmail.com
.d8888b. 888 888 888
d88P Y88b 888 888 888
888 888 888 888 888
888 8888888888 888 888 88888b. 888888
888 88888 888 888 888 888 888 "88b 888
888 888 888 888 888 888 888 888 888
Y88b d88P 888 888 Y88b 888 888 888 Y88b.
"Y8888P88 888 888 "Y88888 888 888 "Y888 v2
By: mxrch (🐦 @mxrchreborn)
Support my work on GitHub Sponsors ! 💖
> GHunt 2.3.3 (🔍 Spider Edition) <
🎉 You are up to date !
[+] Stored session loaded !
[+] Authenticated !
🙋 Google Account data
[+] Custom profile picture !
=> https://lh3.googleusercontent.com/a-/ALV-UjUibBMYPL25YKhqaKt7d_wDvHHIpTAhOkNIQ2AESWJtnNlc2A
[-] Default cover picture
Last profile edit : 2025/05/18 17:23:21 (UTC)
Email : makoto.u.sunflower@gmail.com
Gaia ID : 100984246270086465803
User types :
- GOOGLE_USER (The user is a Google user.)
📞 Google Chat Extended Data
Entity Type : PERSON
Customer ID : Not found.
🌐 Google Plus Extended Data
Entreprise User : False
🎮 Play Games data
[+] New token for playgames has been generated
[-] No player profile found.
🗺️ Maps data
Profile page : https://www.google.com/maps/contrib/100984246270086465803/reviews
[Statistics]
Reviews : 3
Photos : 4
Answers : 19
[-] Reviews are private.
🗓️ Calendar data
[-] No public Google Calendar.
レビューしている形跡を発見しました。
Flag
Diver25{Makoto Uchigashima}
04 Internal
"00_engineer" の問題で見つかった会社では、Webブラウザからアクセス可能な社内用のDevOpsプラットフォームが運用されている。そのシステムのバージョン名を、表記されている通りに答えよ。
Flag 形式: Diver25{135.0.1-f2+nightly}
http://magneight.com:3000/
で開いたらGiteaに繋がりました。footerを見たら1.24.0+dev-303-gd88b012525
と判明しました。
Flag
Diver25{1.24.0+dev-303-gd88b012525}
Transportation
Next Train
この音声が録音された駅はどこか。駅名を答えよ(日本語でも英語でも可)。
(駅名は鉄道会社の公式サイトやWikipediaに記載されている表記とする)
音声の中盤ごろに「14:18 15番線 久里浜行き」が聞こえたので、その情報からホームが15番線以上あるかつ15番線に久里浜行きがある駅をo3で探しました。
すると、品川駅の横須賀線ホームは地下に独立しており、下り(横浜・鎌倉・久里浜方面)が 15 番線、上り(東京方面)が 14 番線であることが判明し、品川駅で確定しました。
Flag
Diver25{品川駅}
Platform
この写真が撮影された駅はどこか。駅名を答えよ(日本語でも英語でも可)。
(駅名は鉄道会社の公式サイトやWikipediaに記載されている表記とする)
Flag形式: Diver25{京都駅}
10, 12, 6両編成がある路線を探したところ、立川駅で新しい車両位置に変更した記事を発見しました。青梅線だと特定しました。
青梅線を中心にらいとの居酒屋を探すと牛浜駅で発見しました。
Flag
Diver25{牛浜駅}
36 Years Ago
このニュース動画に映っている航空機に、1989年8月時点で割り当てられていたトランスポンダのMode Sコードを16進数表記で答えてください。
https://www.youtube.com/watch?v=OvR2O_Vpwc0
Flag形式: Diver25{1234AB}
content warning: この映像は軽微な航空事故の様子を含みます。
機体の番号からこのセスナと特定しました。
JA4098でMode Sコードを調べても結果が分からず、JA4098をさらに深掘りして調べました。
調べた結果、以下の記事から航空フォトからもともとN9768Lだったことがわかりました。
N9768Lをもとに調べてみると1989-09-22にAD9D6A
で登録されたと判明しました。
36年前ってそういうことか...。
Flag
Diver25{AD9D6A}
Sanction
2024年10月25日、制裁下にあるロシア船籍のRORO船「ANGARA」がある港湾に停泊していることが衛星画像で確認された。停泊位置を答えよ。
雑にo3に投げてみるとと以下のPDFを発見しました。
以下の画像から、北朝鮮の羅津港に停泊していたと特定しました。
画像をもとにいい感じにピンを立てました。
Listen
音声 / Audio:
https://drive.google.com/file/d/1s_HC_S_9szbkupw9jQo4Zsvkoj73Qd_6/view?usp=sharing
この航空管制のやり取りが録音された空港のICAOコード(4レターコード)を答えよ。
Flag形式: Diver25{RJTT}
音声を聞いてみると航空機と管制塔のやり取りをしているのがわかるのですが、聞き取りづらい...。
そこでgeminiで音声データ文字起こししてもらいました。
通信内容の文字起こし
[
{"start": "00:35", "end": "00:41", "label": "ATC", "text": "Porter 2, Victoria Tower, continue to taxi in via Alpha Alpha Delta. Your frequency discretion is 278, follow the tunnel."},
{"start": "00:42", "end": "00:48", "label": "Pilot", "text": "Alpha 2, Alpha Alpha Delta and uh we want a go-around. 46, uh, connection."},
{"start": "00:57", "end": "01:05", "label": "ATC", "text": "let's do room Sierra, Porter 2, it's just uh ... 22 room Sierra, turn right on runway 22 shortly."},
{"start": "01:06", "end": "01:08", "label": "Pilot", "text": "copy that. Okay, okay."},
{"start": "01:40", "end": "01:48", "label": "ATC", "text": "WestJet 295, just touching down on 02. Contact Departure on 133.65 or on 113.40 at 21. Clear for takeoff runway 30."},
{"start": "01:49", "end": "01:53", "label": "Pilot", "text": "133.65 airport, clear for takeoff 30. WestJet."},
{"start": "02:10", "end": "02:13", "label": "Pilot", "text": "Yeah, by about ten minutes."},
{"start": "02:17", "end": "02:19", "label": "ATC", "text": "It's probably closer to the gate, I think."},
{"start": "02:20", "end": "02:24", "label": "Pilot", "text": "We've been by about two, we've been sitting for about one."},
{"start": "02:28", "end": "02:32", "label": "ATC", "text": "289, down for 1, when you exit, contact me on ground 121.7."},
{"start": "02:32", "end": "02:37", "label": "Pilot", "text": "Continue with everyone and contact with ground 21.7 for Porter 289."},
{"start": "02:55", "end": "02:59", "label": "Pilot", "text": "Papa Alpha and 1183 holding short west of 177."},
{"start": "03:03", "end": "03:06", "label": "ATC", "text": "Air Canada 248, hold the other side of runway 2."},
{"start": "03:07", "end": "03:14", "label": "ATC", "text": "WestJet 290, proceed to runway 3057, you're number one and I'll be trying to get you to the gate, sir."},
{"start": "03:21", "end": "03:24", "label": "Pilot", "text": "requesting a position of from 852 to pass by 1."},
{"start": "03:41", "end": "03:46", "label": "ATC", "text": "WestJet 250, runway 3057, turn to follow Alpha, contact Tower on 118.2."},
{"start": "03:50", "end": "03:55", "label": "Pilot", "text": "Ground, Porter 289, proceeding via Bravo 1."},
{"start": "04:03", "end": "04:05", "label": "ATC", "text": "What's your destination for 289?"},
{"start": "04:08", "end": "04:12", "label": "Pilot", "text": "Victoria Tower, 177 Alpha, holding short 02, ready."},
{"start": "04:13", "end": "04:19", "label": "ATC", "text": "177 Alpha, contact Departure 133.65 or on 113.50. 17 gusting 23, clear for takeoff runway 02."},
{"start": "04:20", "end": "04:25", "label": "Pilot", "text": "133.65 airborne, clear for takeoff runway 02, 177 Alpha."},
{"start": "04:26", "end": "04:32", "label": "ATC", "text": "Porter 289, by Bravo to the gate and clear for Porter 289."},
{"start": "05:28", "end": "05:29", "label": "ATC", "text": "Jet 3, clear to land runway 02."},
{"start": "05:30", "end": "05:32", "label": "Pilot", "text": "Clear to land 02, WestJet 3."}
]
通信内容から
- WestJet 290
- Air Canada 248
- Porter 289
- WestJet 295,
- WestJet 3
の5つの機体に対してそれぞれやりとりをしていることがわかります。この5つの機体が同時に存在する空港をo3で探してもらったところエドモントン国際空港がヒットしました。
ICAOはCYEG
でした。
Flag
Diver25{CYEG}
History
Bridge
動画 / Video:
https://www.youtube.com/watch?v=fRMi8TXQRuo
(無音です / No audio)
この動画で列車が通過した橋梁は、ある災害で損傷した後に架け替えられたものである。架け替えに際して、他の橋梁の構造物が流用されたことがある文献に示されている。その流用元の橋梁名を答えよ(この橋の名前ではない)。
Flag形式: Diver25{橋梁名}(例: Diver25{日本橋川橋梁})
動画の最初に園芸資材 千𠮷農園
が出てくるので検索しました。
すると熊本に千歳農園を発見しました。
ただ場所が全然違うところにあり、倉庫か何かだと考えました。
他の手掛かりとして00:30~付近にコスモホームと書かれた看板を発見しました。先ほどの情報と合わせて熊本にコスモホームがないかを検索すると工務店コスモホームを発見しました。色は変わっているけど同じロゴのようです。
園芸資材 千𠮷農園
付近の鉄道橋梁をo3に探してもらうと第二白川橋梁
が候補に上がりました。
Google Mapで付近を確認するとコスモホームの看板を発見したので第二白川橋梁で確定しました。
第二白川橋梁の資料を探していくと以下のページを発見しました。
FUJII027206,1954-6-8,第二白川橋,しらかわ,L≒72,単線,下路プラットトラス l=1x62.4 鈑桁 l=1x10.2,架替え復旧 トラスは城東線澱川橋を改造移設(高田機工) 1953 年流失 旧橋はL=156,3 鈑桁 l=2x22,3+2x12.9 国鉄豊肥本線水前寺~龍田口間 熊本市 白川,246390*446
ここから澱川橋梁と特定しました。
Flag
Diver25{澱川橋梁}
Military
Object
69.216246, 33.378242 には大きな構造物が存在する。この構造物のプロジェクト番号および、構造物の名称(固有名詞)を 現地語 で答えよ。
Flag形式: Diver25{プロジェクト番号_名称}(例: Diver25{955А_Борей-А})
座標をGoogle Mapで見てみると何かあることがわかります。恥ずかしながらGoogle Mapの航空写真の切り替え方が分からず、チームメイトに探してもらいました。
この施設を画像検索すると何個か記事が出てきました。
Google Mapの画像と記事リンクを数個入れてo3に検索したところ以下の記事を見つけてくれました。
座標は大きい建造物を指していたのでПД-72が正解です。
Flag
Diver25{13560_ПД-72}
Hardware
Phone
2016年7月23日~24日、この携帯電話の発売に先立ってEMI試験が行われた。試験は三重県の会社が実施したようだ。その試験に供された端末のシリアル番号を答えよ。
シリアル番号に / や - といった記号を含む場合、その記号も含めて記載すること。
Flag形式(例): Diver25{123-45/6789-0}
o3に雑に問題文と画像を投げて実行すると上記のPDFを探してくれました。
Flag
Diver25{004401/11/583099/0}
感想
OSINT系のctfは初参加でしたが、様々な問題を解くことができて楽しかったです。
DIVER OSINT CTF 2025 の運営の方々、チームを組んでくれたみなさんに感謝します。
今回はLLMをかなり活用しました。
- 情報検索
- 音声の文字起こし
- 外国語のOCR
あたりがかなり有効だったと感じています。
ただ、OSINTに関しての調査の勘所がないと厳しいと実感したので、他問題で傾向を掴んでいこうと思います。
ぜひ次回も参加したいです。
Discussion