TsukuCTF 2025 Writeup

本記事は、2025-05-03～2025-05-04に行われたTsukuCTF 2025のWriteupです。

https://tsukuctf.org/

# OSINT

## Casca

> 海が綺麗なこの日本の街は、かつてポルトガルのリゾート地との交流がありました。
この写真のすぐ右側にはその記念碑が置かれています。記念碑に書かれている「式典の開催日」を答えてください。
![casca.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2200302/56abb203-bee9-42d6-9269-13768062b658.jpeg)

Google画像検索すると、この画像は「お宮緑地・ジャカランダ遊歩道」のものであることがわかります。
検索欄に「お宮緑地・ジャカランダ遊歩道」を追記して検索すると、この遊歩道が完成したときの記事が出てきました。

https://hashikazu.org/archives/12598

その記事内に記念碑の写真から、開催日が「2014年6月6日」であるとわかります。

## curve
>これは日本の有名な場所の一部です。あなたはこの写真の違和感に気づけますか？
フラグはこの場所のWebサイトのドメインです。
![curve.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2200302/ff4092ec-8dfb-4966-9e00-779453aef082.jpeg)

画像検索すると、「スパイラルエスカレーター」というワードが出てきます。
確かに、エスカレーターの出口の部分が曲がっているように見えます。

> この写真の違和感に気づけますか？

違和感は「エスカレーターが曲がっていること」でよさそうです。
検索結果から、「横浜ランドマークタワー」であると予想しました。
「横浜ランドマークタワー」で検索すると、ドメインが「yokohama-landmark.jp」であることがわかります。

## schnee
> 素敵な雪山に辿り着いた！スノーボードをレンタルをして、いざ滑走！
フラグフォーマットは写真の場所の座標の小数点第4位を四捨五入して、小数第3位までをTsukuCTF25{緯度_経度}の形式で記載してください。
例: TsukuCTF25{12.345_123.456}
![schnee.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2200302/ee2ee0cb-26a4-4fcf-bd51-4ecba640cae0.jpeg)

Google画像検索すると、スイス、グリンデルヴァルトのフィルスト山が引っかかります。

https://note.com/backpackerdocto/n/nfd5a81f44a23

画像内の国旗や言語からもスイスであることは間違いなさそうです。

見づらいですが、画像内の旗に記載されている店舗名が「Buri Sport」なので、フィルスト山の麓付近の「Buri Sport」を調べます。
すると、画像とよく似た場所が見つかりました。

https://maps.app.goo.gl/tAGLNEQ7M34Cvh4o6

Google Mapsは右クリックで座標を取得できるので、これでフラグをゲットできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2200302/a63cc38b-d105-4576-a69b-b40639d5a19f.png)

## buildings
> あの建物が建ったら、また空が狭くなるんだろうな。
フラグフォーマットはこの人が立っている場所のTsukuCTF25{緯度_経度}です。ただし、緯度および経度は小数点以下五桁目を切り捨てたものとします。
![buildings.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2200302/d62149e3-a03f-4a24-98c7-557534830284.jpeg)

単純にGoogle画像検索すると、似てるけど違う画像が大量に引っかかってしまいます。

道路の真ん中に工事の看板が立っているのは特徴的な気がしたので、検索結果の中から似た特徴を持つものをがんばって探します。
すると、この場所が高輪ゲートウェイ付近であることがわかります。

https://view.tokyo/?p=67714

あとは、Google Mapsのストリートビューで似た場所を気合で探します。
画像内の水色の建物が特徴的だと思ったので、それが見つかれば場所を特定できそうです。

https://maps.app.goo.gl/Wes4EnsRbBQr5tXx8

気合探索の結果、場所を特定できました。

## rider
> フラグフォーマットはこの人が立っている場所のTsukuCTF25{緯度_経度}です。ただし、緯度および経度は小数点以下五桁目を切り捨てたものとします。
![rider.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2200302/20c422bb-c04b-481f-9518-f269520df84f.png)

単純にGoogle画像検索しても、特定に至るような情報は見つかりませんでした。

そこで、看板の画像のみで画像検索することにしてみます。
画像の右側にある、眼鏡の人が書いている黄色の看板だけで画像検索すると、「OTI Fried Chicken」というお店であることがわかります。
Google Mapsで「OTI Fried Chicken」で検索すると、インドネシアに数店舗あることがわかります。

他に画像から良いヒントを得られなかったので、「OTI Fried Chicken」の全店舗をGoogle Mapsのストリートビューで調べます。
北から順番に調べていくと、一番南の店舗の場所が画像とよく似ていることに気づきました。
（手前の電灯や点字ブロックなど）

https://maps.app.goo.gl/qUR93beFksHfThWK8

これでフラグをゲットできました。

## power
> フラグフォーマットはこの人が立っている場所のTsukuCTF25{緯度_経度}です。ただし、緯度および経度は小数点以下五桁目を切り捨てたものとします。
![power.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2200302/d046da60-7a58-4448-b996-2e4bb79c1967.jpeg)

ひたすら点字を解読します。
濁点に惑わされましたが、下部の文章の1行目の「⠵⠱⠡⠐⠞」の部分が「まさかど」であるので、将門塚であることが予想できます。
Google Mapsで将門塚を調べてみると、この看板らしきものが見つかりました。

これでフラグをゲットできました。

## destroyed （正解できず）
> このTelegramの投稿の写真に写っている学校を特定してください。
フラグフォーマットはその場所の座標の小数点第4位を四捨五入して、小数第3位までをTsukuCTF25{緯度_経度}の形式で記載してください。
例: TsukuCTF25{12.345_123.456}
注意: この問題を解く過程で、戦争に関わる直接的な画像が表示される場合があります。
23:14 GMT+9 追記: フラグを追加しました

投稿されている文章を翻訳すると、「гімназію Степненської громади」の部分がこの場所を示しているようです。
Google画像検索で「гімназію Степненської громади」で調べてみると、次の記事が見つかりました。

https://vidbudova.zp.ua/zhyttya-pryfrontovoyi-stepnenskoyi-gromady-zaporizkoyi-oblasti-pid-chas-vijny-problemy-ta-vyklyky-fotoreportazh/

この記事の中を読み進め、問題の場所はザポリージャの「Лежине」だろうと考えました。

https://maps.app.goo.gl/tCVREommUiJ2Ckbt9

しかし、それ以上のことはわからず、それっぽい座標を提出しても正解できませんでした。

**反省点**
提出回数制限がないので、もっといくつか座標を提出してみればよかったですね。

# Web
## len_len
> "length".length is 6 ?

```len_len\server.js```を見てみると、フラグを表示する条件は以下のように要約できます。

```sanitized.length >= 10```かつ```JSON.parse(sanitized).length < 0```

配列を入力する限りは条件を満たすことはできなさそうです。
```x.length < 0```となる```x```を考えてみると、```{"length": -1}```が考えられます。
よって、次のコマンドを入力することでフラグをゲットできます。
```console
curl -X POST -d 'array={"length":-1}' http://challs.tsukuctf.org:28888
```

# さいごに

OSINTは初挑戦でしたが、あまり難しすぎない難易度で楽しめました。
TsukuCTFの運営の方々、ありがとうございました。
次回も参加したいと思います。