🐄

APT Hunter (2024) Writeup

2024/05/13に公開

はじめに

本記事では、私が先日まで参加していたAPT HunterというOSINT CTFについて、少ないですが私が解答できた問題のwriteupを記述します。
僕が解答できなかった問題については、運営による公式WriteupがDiscord上で公開されておりますので、そちらを参照してください(Discordに参加できない場合は、DM等で連絡していただければ共有できます)。

概要

https://ctf.apt-hunter.fr/

  • Jeopardy方式
  • ストーリーがあるタイプのOSINT CTF
  • CTFdを使用
  • 問題文・Discordでのコミュニケーションは全てフランス語
  • 開催期間は15日間
    • 2024-04-27 14:00 CEST(UTC+2) ~ 2024-05-11 14:00 CEST(UTC+2)
    • 2024-04-27 21:00 JST(UTC+9) ~ 2024-05-11 21:00 JST(UTC+9)
  • 参加登録は事前申込制で、CTFが開始される数日前(おそらく2日前)に締め切られ、以後参加登録は不可能
  • 各チーム4人まで(キャプテン1人、メンバー3人まで)
  • スコアボードによれば、最終的に74チーム参加
  • 基本的に、1問解ければ新たな1問が閲覧・解答可能という一本道スタイル
  • 各問題、5回まで試行可能
    • 5回ミスすると問題がブロックされるが、アドミンに事情説明することで解除
      • 解除される際に、総スコアから5%ずつ段階的に減点
      • ブロック解除の度に、5%→10%→15%とペナルティは増加

結果

全体で52位でした。
公式のWriteupによれば、問題数は全部で37問(34問 + チャレンジボーナス問題が3問)で、私は20問解けたことになります。
点数としては、ヒントを使用せずに全問題を解けば3000ポイントになるようになっており、私はヒントを使用して731ポイントでした。


では、ここから私が解答できた問題についてのWriteupを示します。

Welcome

"ようこそ"

Introduction (0 points)

"イントロダクション"

Bonjour et bienvenue au APT Hunter CTF !
Avant de continuer, sachez que ce CTF a été créé par des étudiants en informatique, en marketing, en communication et en design créatif. C'est la première édition de ce CTF, aussi nous vous demandons de faire preuve d'indulgence. 😉
Nous ne voulons pas vous submerger de règles, mais veuillez garder à l'esprit ces deux principes qui, à mon avis, relèvent simplement du bon sens :
Veuillez vous abstenir de lancer des scans ou tout autre type d'attaque red teaming sur les serveurs. 2. La tricherie et le partage de flags entre équipes sont strictement interdits et entraîneront la disqualification immédiate des équipes concernées.
Notez également que le CTF se base sur un scénario fictif. Toute ressemblance avec des événements ou des personnes réelles, passés ou présents, serait purement fortuite et coïncidentielle.
Les accents sont pris en compte dans les flags et vous êtes limité à cinq tentatives. Veillez à les utiliser avec précaution !
Si vous êtes bloqué, pas de panique, prenez contact avec un membre de l'administration dans votre canal Discord dédié
Pour toutes informations, veuillez contacter les organisateurs directement sur Discord dans le canal #aide-ctf !
Bon CTF à tous ! Et que la meilleure équipe gagne ! 😁
Pour valider : lu et accepté

機械翻訳による和訳

こんにちは、そしてAPT Hunter CTFへようこそ!

まず初めに、このCTFはコンピュータサイエンス、マーケティング、コミュニケーション、クリエイティブデザインを学ぶ学生たちによって作られました。これはCTFの初回開催ですので、ご理解と寛容をお願いします。😉

たくさんのルールで圧倒することはありませんが、私が思うに常識的な以下の二つの原則を頭に入れておいてください:

  1. サーバーに対するスキャンやその他のレッドチーム攻撃の実行はご遠慮ください。2. チーム間でのフラグの共有や不正行為は厳禁で、違反が確認されたチームは即座に失格となります。

また、CTFは架空のシナリオに基づいています。実際の出来事や人物との類似は偶然であり、一致することはありません。

フラグにはアクセントが含まれており、試行は5回までと制限されていますので慎重にご利用ください。

もし行き詰まったら、パニックにならずに専用のDiscordチャンネルで運営メンバーに連絡してください。

詳細については、Discordの#aide-ctfチャンネルで主催者に直接お問い合わせください。

皆さん、良いCTFにしましょう!そして、最高のチームが勝つことを願います!😁

確認したら「読んで理解しました」と入力してください。

ルール説明・確認の問題。
説明文に書かれているように、確認できたら「lu et accepté」と入力するだけ。

Flag: lu et accepté

Synopsis

"あらすじ"

Une communication inquiétante (1 points)

"不安なコミュニケーション"

Cher Agent,
Les services de renseignement ont récemment intercepté des communications inquiétantes.
Un groupe de hackers inconnu semble planifier une opération d'envergure.

Votre mission, si vous l'acceptez, consiste à identifier ce groupe APT, à retrouver des preuves de leur plan et à déterminer la cible de leur attaque.

Utilisez vos compétences en OSINT et déjouez ce complot malveillant.
Le compte à rebours a commencé, et le temps presse..

Êtes-vous prêt à relever ce défi ?

Rassemblez votre équipe et préparez vos outils !

Entrez compris pour démarrer !

機械翻訳による和訳

親愛なるエージェント、

情報機関は最近、懸念すべき通信を傍受しました。未知のハッカーグループが大規模な作戦を計画しているようです。

あなたのミッションは、このAPTグループを特定し、彼らの計画の証拠を見つけ出し、攻撃のターゲットを決定することです。

OSINTのスキルを使用して、この悪意ある陰謀を阻止してください。カウントダウンは始まっており、時間との戦いです。

この挑戦に立ち向かう準備はできていますか?

チームを集め、道具を準備してください!

「理解しました」と入力して開始してください!

今回のOSINT CTFはストーリーがあり、参加者は情報機関のエージェントとして問題に取り組みます。
そのストーリーのあらすじを説明している問題。
説明文に書かれているように、理解できたら「compris」と入力するだけ。

Flag: compris

Le point d'entrée

"エントリーポイント"

La lettre (10 points)

"手紙"
0ポイントでヒントをアンロックできる問題。

Vous voilà plongé au début d’une enquête sans savoir où vous allez aboutir.
Les services de renseignements vous ont fourni une lettre comme première piste et s'efforceront tout au long de l'enquête de vous fournir des informations complémentaires.

Quel est le premier pseudonyme que vous avez trouvé ?

Format de Flag : J4s0n

機械翻訳による和訳

これであなたは何が起こるかわからない捜査の始まりに没頭しました。
情報機関から最初の手掛かりとして手紙が提供され、捜査が進むにつれてさらに追加情報が提供されることになります。

最初に見つけた偽名は何ですか?

フラグの形式:J4s0n

手紙として、テキストファイル(la_lettre.txt)が添付されており、pseudonyme(偽名)を答えよという問題。
la_lettre.txtの中身を以下に示す。

Qm9uam91ciwKCkNlbGEgZmFpdCB1biBtb21lbnQgcXVlIG5vdXMgbmUgbm91cyBzb21tZXMgcGFzIHJlbmNvbnRy6XMuIMAgY2V0dGUg6XBvcXVlLCB2b3VzIG4nYXZpZXogcGFzIGVuY29yZSBpbnTpZ3LpIGxlcyBzZXJ2aWNlcyBkZSByZW5zZWlnbmVtZW50cyBmcmFu52Fpcy4gTGVzIG9pc2VhdXggY2hhbnRhaWVudCwgbGVzIHZvaXR1cmVzIHNpbGxvbm5haWVudCBsZXMgcm91dGVzLCBsZSBjaWVsIOl0YWl0IGJsZXUsIGxhIHZpZSDpdGFpdCBiZWxsZS4uLgoKTWFsaGV1cmV1c2VtZW50LCBjZXMgdGVtcHMgc29udCBy6XZvbHVzLiBKZSB2aWVucyB2ZXJzIHZvdXMgY2FyIGxhIEZyYW5jZSBjb3VydCB1biBncmFuZCBkYW5nZXIuIEonYWkgZXUgdmVudCBkJ3VuZSBpbmZvcm1hdGlvbiBpbnF1ael0YW50ZSwgaW5kaXF1YW50IHF1J3VuIG9yZ2FuaXNtZSBjbGFuZGVzdGluIHRlbnRlIGRlIHNlbWVyIGxhIHRlcnJldXIuCgpKZSBuZSBzYWlzIHBhcyBjZSBxdWkgc2UgY2FjaGUgZGVycmnocmUgdG91dCBjZWxhLCBuaSBxdWFuZCBjZWxhIHZhIGFycml2ZXIuIENlcGVuZGFudCwgaidhaSBy6XVzc2kg4CBpbnRlcmNlcHRlciB1biBwc2V1ZG9ueW1lIDogX1RyMHRzazEuIE1hbGhldXJldXNlbWVudCwgamUgbmUgcGV1eCBwYXMgbWVuZXIgbCdlbnF16nRlLCBjYXIgbW9uIGlkZW50aXTpIGVzdCBjb25udWUuCgpKZSB2b3VzIGNvbmZpZSBkb25jIGxhIGxvdXJkZSByZXNwb25zYWJpbGl06SBkZSBk6WNvdXZyaXIgbGEgdulyaXTpIGV0IGRlIHZlbmlyIOAgYm91dCBkZSBjZXR0ZSBtZW5hY2UuIEplIHNhaXMgcXVlIHZvdXMgYXZleiB0b3V0ZXMgbGVzIHF1YWxpdOlzIHJlcXVpc2VzIHBvdXIgbWVuZXIg4CBiaWVuIGNldHRlIG1pc3Npb24uCgpCb25uZSBjaGFuY2UuCgpCLg==

文字列の末尾が「==」なので、Base64でエンコードされていると予想。
デコードした結果を以下に示す。

Bonjour,

Cela fait un moment que nous ne nous sommes pas rencontrés. À cette époque, vous n'aviez pas encore intégré les services de renseignements français. Les oiseaux chantaient, les voitures sillonnaient les routes, le ciel était bleu, la vie était belle...

Malheureusement, ces temps sont révolus. Je viens vers vous car la France court un grand danger. J'ai eu vent d'une information inquiétante, indiquant qu'un organisme clandestin tente de semer la terreur.

Je ne sais pas ce qui se cache derrière tout cela, ni quand cela va arriver. Cependant, j'ai réussi à intercepter un pseudonyme : _Tr0tsk1. Malheureusement, je ne peux pas mener l'enquête, car mon identité est connue.

Je vous confie donc la lourde responsabilité de découvrir la vérité et de venir à bout de cette menace. Je sais que vous avez toutes les qualités requises pour mener à bien cette mission.

Bonne chance.

B.

機械翻訳による和訳

こんにちは、

久しぶりにお会いできていないことを思い出します。その頃は、まだあなたはフランスの情報機関には参加していませんでした。鳥たちは歌い、車は道を走り、空は青く、生活は美しかったですね…

しかし、残念ながら、そのような時代は過ぎ去りました。フランスが大きな危険に直面しているため、あなたのもとへ来ました。ある組織が秘密裏にテロを企てているという、不穏な情報を耳にしました。

何が背後にあるのか、いつ何が起こるのかはわかりません。しかし、_Tr0tsk1という偽名を傍受することに成功しました。残念ながら、私の身元が知られているため、私自身がこの調査を進めることはできません。

したがって、この脅威を終わらせ、真実を暴く重大な責任をあなたに託します。このミッションを成功させるために必要な資質をすべて備えていることを私は知っています。

幸運を祈ります。

B.

手紙を読んでいくと、「_Tr0tsk1」という偽名が出てくる。

Flag: _Tr0tsk1

デコード時の注意

Base64エンコード文字列のデコードを行う時、Pythonを使用していたが、以下のようなエラーが発生した。

import base64

encoded_message = "Qm9uam91ciwKCkNlbGEgZmFpdCB1biBtb21lbnQgcXVlIG5vdXMgbmUgbm91cyBzb21tZXMgcGFzIHJlbmNvbnRy6XMuIMAgY2V0dGUg6XBvcXVlLCB2b3VzIG4nYXZpZXogcGFzIGVuY29yZSBpbnTpZ3LpIGxlcyBzZXJ2aWNlcyBkZSByZW5zZWlnbmVtZW50cyBmcmFu52Fpcy4gTGVzIG9pc2VhdXggY2hhbnRhaWVudCwgbGVzIHZvaXR1cmVzIHNpbGxvbm5haWVudCBsZXMgcm91dGVzLCBsZSBjaWVsIOl0YWl0IGJsZXUsIGxhIHZpZSDpdGFpdCBiZWxsZS4uLgoKTWFsaGV1cmV1c2VtZW50LCBjZXMgdGVtcHMgc29udCBy6XZvbHVzLiBKZSB2aWVucyB2ZXJzIHZvdXMgY2FyIGxhIEZyYW5jZSBjb3VydCB1biBncmFuZCBkYW5nZXIuIEonYWkgZXUgdmVudCBkJ3VuZSBpbmZvcm1hdGlvbiBpbnF1ael0YW50ZSwgaW5kaXF1YW50IHF1J3VuIG9yZ2FuaXNtZSBjbGFuZGVzdGluIHRlbnRlIGRlIHNlbWVyIGxhIHRlcnJldXIuCgpKZSBuZSBzYWlzIHBhcyBjZSBxdWkgc2UgY2FjaGUgZGVycmnocmUgdG91dCBjZWxhLCBuaSBxdWFuZCBjZWxhIHZhIGFycml2ZXIuIENlcGVuZGFudCwgaidhaSBy6XVzc2kg4CBpbnRlcmNlcHRlciB1biBwc2V1ZG9ueW1lIDogX1RyMHRzazEuIE1hbGhldXJldXNlbWVudCwgamUgbmUgcGV1eCBwYXMgbWVuZXIgbCdlbnF16nRlLCBjYXIgbW9uIGlkZW50aXTpIGVzdCBjb25udWUuCgpKZSB2b3VzIGNvbmZpZSBkb25jIGxhIGxvdXJkZSByZXNwb25zYWJpbGl06SBkZSBk6WNvdXZyaXIgbGEgdulyaXTpIGV0IGRlIHZlbmlyIOAgYm91dCBkZSBjZXR0ZSBtZW5hY2UuIEplIHNhaXMgcXVlIHZvdXMgYXZleiB0b3V0ZXMgbGVzIHF1YWxpdOlzIHJlcXVpc2VzIHBvdXIgbWVuZXIg4CBiaWVuIGNldHRlIG1pc3Npb24uCgpCb25uZSBjaGFuY2UuCgpCLg=="

decoded_message = base64.b64decode(encoded_message).decode('utf-8')
print(decoded_message)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 66: invalid continuation byte

いつもの癖でUTF-8と指定したが、UTF-8ではデコードできない文字列だった。
フランス圏のCTFなので、ISO-8859-1を指定したら、うまくデコードできた。

decoded_message = base64.b64decode(encoded_message).decode('iso-8859-1')
print(decoded_message)

このように、文字コードに注意する必要がある(が、後述するCyberChefというツールを使用すればこの問題を気にする必要はなくなる)。

Une inattention ? (30 points)

"不注意ですか?"
5ポイントを消費して、ヒントをアンロックできる問題。

Vous avez découvert ce qui semble être
un pseudonyme. Chaque information est précieuse et peut mener à la
vérité ; assurez-vous donc de la conserver avec soin ! Il s'agirait à
présent de trouver une piste.

Quelle est sa véritable identité ?

Format de Flag : Louis Dupont

機械翻訳による和訳

あなたは偽名のようなものを発見しました。各情報は貴重で、真実につながる可能性があるので、慎重に保存してください!次に、手がかりを見つける必要があります。

その本当の身元は何ですか?

フラグの形式:Louis Dupont

一先ず、先程の問題で知った「_Tr0tsk1」をWhatsMyNameで検索してみる。

X(旧Twitter)がヒット!
https://twitter.com/_Tr0tsk1
ポストを追っていくと、CV(Curriculum Vitae)の画像をアップロードしているのを発見。
https://x.com/_Tr0tsk1/status/1760948610395435359

CVより、「Andrejew Vladlen」が名前。

Flag: Andrejew Vladlen

La piste de l'emploi (15 points)

"雇用の手がかり"

Un CV ? Intéressant... S'il cherche du travail, il a forcément dû élargir son champ d'action.

Quel est le nom de la dernière entreprise où travaillait Andrew ?

Format de Flag : Ubik

機械翻訳による和訳

履歴書ですか?興味深いですね…もし彼が仕事を探しているなら、確かに活動範囲を広げているはずです。

アンドリューが最後に勤務していた企業の名前は何ですか?

フラグの形式:Ubik

先程のCVのWORK EXPERIENCE欄を見て、「Rubius」が最新の職歴だとわかる。

Flag: Rubius

Coding (20 points)

"コーディング"

Vous vous trouvez face à un développeur plutôt junior ; il est temps d'en savoir plus.

Sur quel site publie-t-il son code ? (Uniquement le nom)

Format de Flag : Google

機械翻訳による和訳

彼はかなり初心者の開発者ですね。もっと詳しく知る時が来ました。

彼がコードを公開しているサイトの名前は何ですか?(サイト名のみ)

フラグの形式:Google

CVに記載されているメールアドレス「trtsk211@gmail.com」をEpieosで検索したが、有用な情報は見つからず。
「Andrejew Vladlen」でGoogle検索したら、Linkedinが引っかかった。
https://www.linkedin.com/in/andrejew-vladlen-b752222a1/
職歴がCVと一致しているので、同一人物なのは確か。
過去の投稿を追ってみる。
https://www.linkedin.com/posts/andrejew-vladlen-b752222a1_русская-рулетка-pastebincom-activity-7166718058298871808-2WeI/?utm_source=share&utm_medium=member_desktop
の投稿を見ると、
https://pastebin.com/GShjtY3S
で、ソースコードを公開している。
したがって、「Pastebin」が答え。

Flag: Pastebin

🐍 (10 points)

Python cela vous parle ?

Quel est le nom du programme de la roulette russe ?

Format de Flag : program.c

機械翻訳による和訳

Pythonという言葉はピンと来ますか?

ロシアンルーレットのプログラムの名前は何ですか?

フラグの形式:program.c

https://pastebin.com/GShjtY3S
で公開されているソースコードの末尾のコメントに、Google DriveのURLがあるため、そこにアクセスしてみる。
https://drive.google.com/drive/folders/1thBhACRzWCMbaPogfAbpaMTB4dZ32GTO

そこの中に、russian_roulette.pyがあり、中身を見ると、Pastebinと同じ内容なので、「russian_roulette.py」が答え。

Flag: russian_roulette.py

Petite baie (80 points)

"小さな湾"
5ポイントと15ポイントを消費して、ヒントがアンロックされる問題。

Vous avez maintenant accès à une information potentiellement utile, mais ce drive semble suspect.

Quel complice pourrez vous identifier grâce à ces informations sur le drive ?

Format de Flag : G315tn1gm4

機械翻訳による和訳

このドライブから得た情報は有用かもしれませんが、どうやら怪しいもののようです。

このドライブの情報から特定できる共犯者の名前は何ですか?

フラグの形式:G315tn1gm4

説明文通り、Google Driveの中身を見ていく。

「важно」はロシア語で「重要」という意味。

важноディレクトリ


важноディレクトリには、очень важноというドキュメントが配置されている。
「очень важно」はロシア語で「非常に重要」という意味。

очень важноドキュメントには、以下の内容が記載されている。

aHR0cHM6Ly9iaXQubHkvM0pEWkdtUw

どこかで使用するのだろうか。

video Kalinka russian dance.mp4

軍人の方がコサックダンスを踊っている動画。
動画を見ている途中に、一瞬何かの文字列が写ったように見えた。
ffmpegでフレームを切り出して確認してみる。
まずは、動画のフレームレートを確認。

ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 video\ Kalinka\ russian\ dance.mp4

結果は60000/1001だったので、59.94fpsの動画であることがわかる。
上記の結果をもとに、動画からフレームごとに画像を切り出す。

ffmpeg -i video\ Kalinka\ russian\ dance.mp4 -vf "fps=59.94" video_frame/%06d.jpg

全フレームを調査した結果、2498フレームで以下の文字列が写っていた。

Mn6nDpQYbb6?usp=sharing

?usp=sharingなので、Google Driveの共有リンクのようだ。
https://qiita.com/the_red/items/f0bbf542ed910f96e30d
https://qiita.com/rot-z/items/299ac40361690c51ce1d
上記2つの記事を見て、URLの共通箇所 + Mn6nDpQYbb6でアクセスできたりしないかなと模索。
Google Driveで共有されている他のURLで検討してみたが、共通箇所が見つからなかった。

ヒント見るかどうかを迷いながら、眠くなったのでここで一旦睡眠。
起きてからヒントを確認することにした。

Unlock Hint for 5points

Comme dans une symphonie, chaque partie doit s'unir pour former un tout. Trouvez les morceaux manquants pour compléter la mélodie.

機械翻訳による和訳

交響曲のように、各パートが一体となって全体を形成しなければなりません。欠けているピースを見つけて、メロディーを完成させてください。

Google Drive全体を使用することが重要であると理解。
それはなんとなく分かってる。
15ポイント消費のヒントもみよう。

Unlock Hint for 15points

Divisé pour mieux régner. Chaque fichier détient une partie du puzzle. Serez-vous capable de le reconstituer ?

機械翻訳による和訳

分割して支配する。各ファイルがパズルの一部を保持しています。それを再構築することができますか?

もしかして、動画と「очень важно」ドキュメント以外にも何かあるのか。

kremlin.png


画像をよく見ると、文字列が入っていた。

folders/1eXT8Wxae6qgH52AkYmUvT

この文字列と「video Kalinka russian dance.mp4」で見つけた「Mn6nDpQYbb6」を組み合わせると、「1eXT8Wxae6qgH52AkYmUvTMn6nDpQYbb6」で丁度33文字になる。
https://qiita.com/the_red/items/f0bbf542ed910f96e30d
これは、上記の記事のチームドライブの法則に当てはまる。
組み合わせたURLである
https://drive.google.com/drive/folders/1eXT8Wxae6qgH52AkYmUvTMn6nDpQYbb6 」にアクセス。

「Мой диск」は私のディスクという意味。

testディレクトリ下に「Удалить」ドキュメントがある。
「Удалить」は「削除する」という意味。
「Удалить」ドキュメントの内容を以下に示す。

今までの犯人は「Tr0tsk1」なので、「K4m3n3v」がもう一人の犯人。共犯者。
「K4m3n3v」が正解。

Flag: K4m3n3v

L'escalade d'un hacker

"ハッカーのエスカレーション"

Here comes a new challenger (80 points)

"新しい挑戦者が現れた"
10ポイントを消費して、ヒントがアンロックされる問題。

Tiens, un nouvel arrivant ! Son pseudonyme vous interpelle. Vous l'avez déjà vu quelque part ou entendu quelqu'un en parler... mais où ?

Quel est le nom et prénom de la victime qui le mentionne ?

Format de Flag : Lefebvre Jean

機械翻訳による和訳

ああ、新しい参加者だ!彼の偽名があなたを引きつけます。それをどこかで見たことがある、または誰かが話しているのを聞いたことがある... でも、どこで?

それを言及している犠牲者の名前と姓は何ですか?

フラグの形式:Lefebvre Jean

victime(犠牲者・被害者)の名前を探すらしい。偽名「K4m3n3v」の正体の特定ではない。
とりあえず、「K4m3n3v」をWhatsMyNameで検索してみる。

X(旧Twitter)でヒット。
https://twitter.com/K4m3n3v

だが、これはフェイクアカウント。

Discordをよく読んでいてよかった。

手がかりがないので、ヒントを確認することにした。

Unlock Hint for 10 points

La plupart des gens aiment bien exprimer leurs émotions publiquement, à la vue de tous.

機械翻訳による和訳

ほとんどの人々は、自分の感情を公然と、皆の見ている前で表現するのが好きです。

SNSの投稿を探すのか?と思ったので、色々なSNSで「K4m3n3v」が投稿に含まれていないかを検索。
Facebookでヒット!

https://www.facebook.com/permalink.php?story_fbid=pfbid0Pk4Rfa4WFAwKs8vh8VNLyzWjnBAQmhtJP6YPr5XvBKMKx47WGpJKPqvPXyXUTK4Ll&id=61557774458244

Pourquoi ca n'arrive qu'à moi ce genre de choses ?????? Je pensais avoir tout vérifié concernant la sécurité de mon site !!!!!!!
J'ai regardé un peu le code et il y fait mention d'un certain K4m3n3v ! ça parle à quelqu'un ??

機械翻訳による和訳

どうしてこんなことが私にだけ起こるの??????私は自分のサイトのセキュリティについてすべてチェックしたと思っていたのに!!!!!!

コードを少し見たんだけど、K4m3n3vという名前が出てきたよ!誰か知ってる??

なので、被害者は「Julien Prevot」。
だが、「Julien Prevot」だとダメで、「Prevot Julien」で正解だった。

Flag: Prevot Julien

You have been h4ck3d ! (15 points)

"あなたはハックされました!"

Connaissez-vous le défacement ? C'est la méthode utilisée par un groupe de cybercriminels pour signaler qu'ils ont piraté un site.

Quel est le nom du groupe de hackers responsable de ce piratage ?

Format de Flag : DarkSide

機械翻訳による和訳

デフェイスメントをご存知ですか?これは、サイバー犯罪者グループがサイトをハッキングしたことを示すために使用する方法です。

このハッキングに責任があるハッカーグループの名前は何ですか?

フラグの形式:DarkSide

défacement = deface = Webサイト改ざんのこと。
https://www.facebook.com/permalink.php?story_fbid=pfbid02a6VirchEzNqzZyNP1dcyZLVzrypmNtE6gxzcJ5FSoRkbHWQYxa3cNSPsfuHzAhu1l&id=61557774458244
Julien Prevotの投稿を見ると、https://sea-cipher.fr/ というWebサイトを運用しており、それがハッキングされたとのこと。
実際に、 https://sea-cipher.fr/ にアクセスしてみる。

本当にハッキングされたようだ。
ソースコードを見てみる。

「KolymaByte」という組織がハッキングを行ったということがわかる。

Flag: KolymaByte

Infiltration Virtuelle (30 points)

"バーチャルインフィルトレーション"
10ポイント消費で、ヒントがアンロックされる問題。

Un défacement de site web est généralement causé par l'exploitation d'une vulnérabilité, permettant ainsi à un hacker de modifier facilement la page d'accueil.

Quel est le nom de l'outil utilisé par le hacker pour réaliser le défacement du site ?

Format de Flag : MyMaliciousProgramV1

機械翻訳による和訳

ウェブサイトのデフェイスメントは一般的に脆弱性を悪用することで引き起こされ、ハッカーがホームページを容易に変更できるようにします。

このサイトのデフェイスメントを実行するためにハッカーが使用したツールの名前は何ですか?

フラグの形式:MyMaliciousProgramV1

色々調査したが、手がかりがなかったので、ヒントを見た。

Unlock Hint for 10 points

Connaissez-vous le moyen utilisé par les sites internet pour référencer leurs pages ?

機械翻訳による和訳

インターネットサイトが自分たちのページを参照するために使用している方法をご存知ですか?

クローラのことかなと思い、「 https://sea-cipher.fr/robots.txt 」にアクセス。

Disallowの一覧が出現。
その中に、あからさまに怪しいURL「 https://sea-cipher.fr/backd00r/ 」があるので、アクセス。

「WebShellUploadV3」が答え。

Flag: WebShellUploadV3

Update your system ! (10 points)

“システムをアップデートせよ!”

Vous savez désormais comment le pirate a réussi à modifier le site. Cependant, pour arriver à ce résultat, une inattention de la part du webmaster a dû se produire.

Quelle est la version de PHP installée sur le serveur ?

Format de Flag : 1.2.3

機械翻訳による和訳

あなたは今、ハッカーがどのようにしてサイトを改ざんしたかを知っています。しかし、この結果に至るには、ウェブマスターの不注意があったはずです。

サーバーにインストールされているPHPのバージョンは何ですか?

フラグの形式:1.2.3

先程の画像より、「4.3.2」が答え。

Flag: 4.3.2

2024-05-13現在のPHPの最新バージョンは、8.3.x。
4.3.xは2002年 ~ 2005年でのリリースなので、非常に古いバージョンのPHPを使用していたことが伺える。

Crypto (20 points)

"暗号"

Par curiosité, vous vous penchez sur le business de ce site internet, il semble être tourné sur l'univers de la cryptomonnaie.

Quel était le cours du SeaCipher fin Mars 2024 ?

Format de Flag : 0.0000000018

機械翻訳による和訳

好奇心から、このウェブサイトのビジネスについて調べています。それは暗号通貨の世界に焦点を当てているようです。

2024年3月末のSeaCipherの価格はいくらでしたか?

フラグの形式:0.0000000018

Wayback Machineを確認すると、2024-03-25でのキャプチャがあるので、それを確認しにいく。
https://web.archive.org/web/20240325165911/https://sea-cipher.fr/

「0.0000000035」が答え。

Flag: 0.0000000035

Signature (50 points)

"署名"
10ポイント消費して、ヒントがアンロックされる問題。

Les hackers aiment laisser leur signature sur leurs « œuvres ».

Sous quel autre pseudonyme le hacker est-il également connu ?

Format de Flag : L4p5u5

機械翻訳による和訳

ハッカーは自分たちの「作品」に署名を残すことが好きです。

そのハッカーがまた別の偽名で知られている名前は何ですか?

フラグの形式:L4p5u5

ソースコードに、authorが記述されており、「_v3n3m4K_」が答え。

Flag: _v3n3m4K_

Un projet ambitieux

"野心的なプロジェクト"

L'entreprise sous attaque (150 points)

"攻撃されている企業"
15ポイント消費と20ポイント消費でヒントをアンロックできる問題。

Vous commencez maintenant à esquisser un profil. Poursuivez vos investigations.

Quelle entreprise le pirate cible-t-il à travers ses actions ? (Son nom complet)

Format de Flag : Lightning Cyber Technologies

機械翻訳による和訳

これで、プロファイルを描き始めています。調査を続けてください。

ハッカーがその行動を通じてターゲットにしている企業は何ですか?(正式な名称)

フラグの形式:Lightning Cyber Technologies

とりあえず、WhatsMyNameで「_v3n3m4K_」を検索。

Mastodonがヒット。
https://mastodon.social/@v3n3m4K
下記の投稿で、KolymaByteについて触れているので、関係者なのは確か。
https://mastodon.social/@v3n3m4K/112161661932423835

Приветствую сообщество, знакомо вам KolymaByte? Они недавно ко мне обратились...

機械翻訳による和訳

KolymaByteをご存知ですか?彼らは最近、私に接触してきた...

アカウントの説明文に、GitHubアカウントが書かれているので、リポジトリをチェックしてみよう。
https://github.com/k4menev?tab=repositories
一つだけforkでないオリジナルリポジトリがあるので、それを確認。
https://github.com/k4menev/first-try
コミットを遡ると、ちゃんと攻撃対象のURLが書かれている。
https://github.com/k4menev/first-try/commit/1892dc70ca6d80a8dd8362a176e029f56eb3fa16

https://stella-launch-solutions.com/ 」にアクセス。
ページ下部に、「Stella Launch Solutions」と書かれており、それが答え。

Flag: Stella Launch Solutions

Mise en orbite (15 points)

"軌道投入"

Le pirate envisage de pirater le site d'une entreprise spécialisée dans la mise en orbite de satellites, mais dans quel but ?

Quel est le nom du responsable de la section R&D ? (Respectivement Prenom et Nom)

Format de Flag : Jeanne Dupont

機械翻訳による和訳

ハッカーは、衛星を軌道に乗せることを専門とする企業のサイトをハッキングしようと考えていますが、その目的は何でしょうか?

研究開発部門の責任者の名前は何ですか?(名と姓の順)

フラグの形式:Jeanne Dupont


「MATILDA BECK」がR&D Division Manager。
「Matilda Beck」もしくは「Beck Matilda」が答えなはず。
「Matilda Beck」が正解。

Flag: Matilda Beck

Énigmes des ondes (20 points)

"波の謎"

Nos services de renseignement ont intercepté une communication. Il semble qu'une personne cherche à établir un contact.

Quel nouveau pseudonyme pouvez-vous en déduire ?

Format de Flag : M4x1m3

機械翻訳による和訳

情報機関がある通信を傍受しました。誰かが連絡を取ろうとしているようです。

どのような新しい偽名を推測できますか?

フラグの形式:M4x1m3

チャットのスクリーンショットが2枚添付されている。


chat1.png

Hello Dux1u is it still good for the project about which i spoke to you the other day?

Hello, yes it's still good for me. You know my hatred is so strong against these a**holes. i worked so hard on this project, and be fired like that ?? i really hate them

Ahah! sounds good ! in that case, i will notify the boss that you are ok for the operation, i will soon send you the steps to follow

Know that we are very happy to have someone like you for our project..

it's kind thank you

機械翻訳による和訳

こんにちは、Dux1u。先日お話したプロジェクトはまだ大丈夫ですか?

こんにちは、はい、私にとってはまだ問題ありません。あのバカたちへの憎しみは本当に強いです。このプロジェクトに一生懸命取り組んで、こんな風に解雇されるなんて?? 本当に彼らが嫌いです。

あはは!それは良いことですね!その場合、私は上司にあなたがオペレーションにOKだと伝えます。すぐに続くステップを送ります。

私たちは、あなたのような人がプロジェクトに参加してくれて非常に嬉しいです。

親切にありがとう。


chat2.png

你好,我联系你是想告诉你 我将参与一个非常大的项目 这个世界不会忘记的.我不能告诉你更多 我怀疑情报机构在监听我。

你好,你希望在某个地方讨论吗

是的,我很快会发送位置给你.

好的,我会保持联系

機械翻訳による和訳

こんにちは、連絡したのは、忘れられないほど大きなプロジェクトに参加することになったと伝えるためです。詳細は言えませんが、情報機関が盗聴していると疑っています。

こんにちは、どこかで話し合いたいですか?

はい、すぐに場所を送ります。

了解です、連絡を保ちます。

chat1.pngより、「Dux1u」が新たな偽名だと思われるので、それでトライ。正解だった。

Flag: Dux1u

Un bon ami (15 points)

"良い友人"

A travers ces communications, vous avez pu en tirer certaines informations.

Quel est le prénom de l'ami de Dux1u ?

Format de Flag : Alexandre

機械翻訳による和訳

これらのコミュニケーションから、いくつかの情報を得ることができました。

Dux1uの友人の名前は何ですか?

フラグの形式:Alexandre

chat2.pngの宛先名の「Zhijang」だと思われるので、それでトライ。正解だった。

Flag: Zhijang

上記の二つの問題より、chat1.pngとchat2.pngの緑色のメッセージは両方とも「Dux1u」によるものだと考えられる。

L'Identité Révélée (100 points)

"明かされた身元"
20ポイントでヒントがアンロックされる問題。

Progressivement, vous commencez à saisir ce qui se trame. Continuez votre enquête.

Quelle est la véritable identité de Dux1u ? (Nom suivi du prénom)

Format de Flag : Dupont Arnaud

機械翻訳による和訳

徐々に何が起こっているのかが見えてきました。調査を続けてください。

Dux1uの本当の身元は何ですか?(姓と名の順)

フラグの形式:Dupont Arnaud

Dux1uの招待を明らかにする必要がある。
chat1.pngの内容から推測する限り、Dux1uは解雇された腹いせに、Stella Launch Solutionsをハッキングしたのではないかと考えられる。
そこで、直近で解雇された人間を探すことにした。
https://stella-launch-solutions.com/ 」でWayback Machineのバージョンを確認すると、2024-03-13にキャプチャされたものがあることを確認。

2024-03-13の情報と現在の情報を比較して、Webページに記載されなくなったスタッフ=解雇されたスタッフ=Dux1uであると仮定。

画像左側のブラウザには2024-03-13の情報、画像右側のブラウザには最新版の情報が乗っている。
最新版には「Wen Ch'ien」がいないので、「Wen Ch'ien」がDux1uであると考えられる。
「Wen Ch'ien」だとダメだった。「Ch'ien Wen」だと正解。

Flag: Ch'ien Wen

この問題は推理ゲームっぽくて個人的にはすごく好きでした。

Entrée secrète (100 points)

"秘密の入り口"
20ポイントと20ポイント消費でヒントがアンロックされる問題。

Vous êtes désormais au courant de la menace qui plane sur la société Stella Launch Solutions. Il est possible qu'une compromission ait eu lieu.

Quel est le nom de la backdoor utilisée ?

Note : Une backdoor, ou porte dérobée, est un programme malveillant conçu pour permettre aux pirates un accès à distance non autorisé.

Format de Flag : MyMaliciousProgramV1.2

機械翻訳による和訳

あなたは今、Stella Launch Solutionsという企業に迫っている脅威を知っています。侵害が起こった可能性があります。

使われたバックドアの名前は何ですか?

注:バックドア(またはポートデロボ)は、ハッカーに許可されていないリモートアクセスを可能にするよう設計されたマルウェアです。

フラグの形式:MyMaliciousProgramV1.2

Infiltration Virtuelle (30 points)と同様に、まず「 https://www.stella-launch-solutions.com/robots.txt 」を確認してみた。

目ぼしい情報はない。
robots.txtがダメなら、sitemap.xmlを確認してみる。
https://www.stella-launch-solutions.com/sitemap.xml

ヒット!

sitemapにリンクされてるページを虱潰しに調べたところ、
https://stella-launch-solutions.com/af0512e16553f/を発見。

「ReverseShellWebV1.1」で正解だった。

Flag: ReverseShellWebV1.1

Command and Control (15 points)

"コマンド&コントロール"

Un serveur C2, ou Command & Control, sert à contrôler des appareils infectés et à dérober des données. Ce système fonctionne grâce à l'utilisation d'un agent et d'un serveur.

Quelle est la version de l'agent installé ?

Format de Flag : 1.2.3

機械翻訳による和訳

C2サーバー(Command & Control)は、感染したデバイスを制御し、データを盗むために使用されます。このシステムは、エージェントとサーバーの利用によって機能します。

インストールされているエージェントのバージョンは何ですか?

フラグの形式:1.2.3

ターミナルエミュレータ上でTabを連打すると、使用可能コマンドの一覧が表示される。
そこで、startc2serverを実行すれば、エージェントのバージョンが表示される。

Agent : v1.1.3より、答えは「1.1.3」。

Flag: 1.1.3

Trafic dissimulé (?? points)

"隠されたトラフィック"
15ポイント消費することで、ヒントをアンロックできる問題。
何ポイント獲得できるか忘れました。申し訳ない。ここの問題が解けず終了しました。

Maintenant que vous disposez d'un outil qui semble avoir été développé par notre pirate, K4m3n3v, il est essentiel de découvrir son fonctionnement !

À quelle URL le serveur de commande et de contrôle (C2) est-il connecté ?

Format de Flag : http://3g2upl4pq6kufc4m.xyz

機械翻訳による和訳

現在、ハッカーのK4m3n3vによって開発されたように見えるツールを持っているので、その機能を解明することが重要です!

コマンド&コントロール(C2)サーバーはどのURLに接続していますか?

フラグの形式:http://3g2upl4pq6kufc4m.xyz

startc2server実行時のHostの値が答えだと思うのだが、どういう方式で文字列が処理されているのかがわからない。
ヒントを見てみる。

Unlock Hint for 15 points

Connaissez-vous CyberChef ? il vous sera d'une grande aide.

機械翻訳による和訳

CyberChefをご存知ですか?それは大いに役立つでしょう。

CyberChefは以下。
https://gchq.github.io/CyberChef/
エンコード・デコードなど様々な処理を簡単に実行できるWebアプリケーション。
便利だけど、どういう方式で文字列が処理されているのかがわからないままだった。

公式のWriteupによる解法

どうやら、startc2server実行時のHostの値が答えというのはあっていた。

Host : Dzt(X*bSyiGHq+43GHv*kG4Rygp^+kjVE^=RrF+f@Rt0C0^=DYk+kA6}JNF#jw^8HgkpTt5Wt)qCB

では、どういう方式で文字列が処理されているかというと、Base92だった。

色々試せばよかった。
Writeupはここまで。


所感

HEXA OSINT CTF V3に続いて、2回目のOSINT CTF参加でした。APT HunterはHEXA OSINT CTF V3よりかは初心者よりのOSINT CTFだったと思います。日本から参加している人がおそらくごく僅かだったと思いますので、結果は悪かったですがWriteupを書きました。言語の問題は機械翻訳が優秀になったこともあり、言語のハードルはほぼなかったと思います。ですので、今後APT Hunterが続くようであれば、日本人の方も是非参加してみてください。

最後に、面白いCTFを実施・運営してくださったAPT Hunter Team(Geistnigma, Wilsmith, その他のスタッフ)にお礼を申し上げたいと思います。
Merci du fond du coeur, APT Hunter Team!

Discussion