今年も何とかCPCTFを開催することができました。
参加していただいた皆様ありがとうございます。
今回は当日運営のほかOSINTとForensicsを中心におまけとしてmiscを出していました。
どちらかというとツールや知識を知っているかどうかという問題になってしまったので、初心者の人にはむずかしめになってしまったかもしれず申し訳ないです。(CTFの典型問題の難易度のつけ方に結構悩んでいます。知っていれば瞬殺なので。)
OSINT
[newbie]Omu napo
熱々の鉄板の上のオムナポ、美味しかった〜。
店舗名の英語表記をスペースを抜いた状態ものをCPCTF{}で包んだものがflagです。
例: 店舗名が「Tokodai Cafe」の場合、flagはCPCTF{TokodaiCafe}になります。
ベタなExif問です。オンライン上のExifチェックツールやexiftoolで確認するとこれが渋谷フクラスの中と分かり、「フクラス 洋食」などと調べると店舗を特定できます。
開始時、画像を運営間で共有した際にSNSのExif削除機能にやられて問題不備の状態にしてしまいました。
[easy] Dokoda?
どこで撮ったスクリーンショットだったか忘れてしまいました。
最寄駅のローマ字表記(全て小文字)をCPCTF{}で包んだものがflagになります。
例: 答えが稚内駅の場合flagはCPCTF{wakkanai}となります。
自分のスマホのWiFi画面でSSIDが確認できるということに気づいたところからの作問でした。WiGLEで検索できるということさえ知っていれば、fukushinのSSIDを検索すると場所を特定することができます。
[medium] Patlite
どこで撮影されたものか北緯と東経を小数4位を四捨五入して、以下の形式で変換して提出してください。
北緯30.4445度、東経138.8882の場合、CPCTF{30-4445_138-888}となります。
個人的にはGoogleレンズで解けないが、ちゃんとヒントが画像にあるというのがお気に入りの問題です。
ゆりかもめと奥に見える「都06」のバスの路線図を重ねると新橋駅とわかります。
Forensics
[easy] Register
flagのpacketをcaptureしたよ!
(USBキーボードでflagを入力しているパケットのpcapngファイル)
キャプチャのHID Dataの部分をインターネット上で検索したUSB HID Keyboard scan codesの対応を見て復元することでflagを解読できます。今回自分はナンバーパッドのついたキーボードで入力したのですが、そこで詰まった人もいたようで少し申し訳なかったです。
[easy] white has much information
これがflagにつながるらしいです。
(txtファイル)
whitespaceと呼ばれる言語で書かれたflagを出力するコードでした。ただ、文字コードをそのまま記述していたので、繰り返しパターンの解析から解いた人もいたようでした。
[medium] Which is true flag
メールでflagを受け取れるサービスに登録したんだけど、どれが本物かわからないや。助けて~。
(大量のemlファイル)
想定はSPFレコードの検証でした。trap.jpのドメインのSPFレコードと呼ばれるものを確認すると、AレコードとMXレコードのどちらかと一致するものが本物のようで、検索すると、49.212.243.60に対応したものが正解と分かります。
ただ、総当たり対策で水増しした際に、ダミーを作り直したため、実行日時を使っていた受信時刻でわかってしまうという非想定を生んでしまいました。(ちなみにちゃんと総当たりの提出もありました)
misc
[easy] Turning over
この板ポリゴンがflagらしいけど、どこに書いてあるんだろう?
(Blendファイル)
面の向きが異なるとその向きだけの面を表示することができるということを使用した問題でした。結構miscっぽい問題では?と思っています。
ただ、最初にダミーフラグを仕込んでいるときには、lとか1とかIとかの扱いを気にしようと思っていたのですが、実際に作業し始めたらすっかり忘れて混ぜてflagを作ってしまいました。その点について序盤で指摘があったので判別法をアナウンスしました。
[hard] Image encryption
artなんとかというサイトでいい画像を見つけたので、traPらしい画像暗号化システムを作りました。
postで画像を送信すると、flagと一緒に一枚だけ任意の画像を暗号化できます。
画像暗号化をテーマにした問題でした。
想定としては、もとになっている画像を画像検索で取得して、xorとることで置換後に戻すことができます。
左上からピクセルにインデックスを取り、それらをrgbに2^6桁上がりで変換します。
これをもとに置換を戻せば無事平文画像を取得できます!
ただ、実際はすべて0を送れば元の画像を取得できたり、置換のバリエーションが400しかないので総当たりできたり、と詰めの甘さが露呈した問題でもありました。ただ、見かけが難しかったこともあり、期間中180件ほど画像暗号化のリクエストがありましたが、実際の正答者は1名でした。もう少し、配布コードの読みやすさを上げた方が良かったように思っています。
最後に
全体的に非想定がのこった状態での出題になってしまい申し訳ないとともに悔いの残る部分があります。原因は作問がギリギリになってしまったことにあると思っているので来年はもっと早めに作問を終わらせようと思っています。
去年今年と二年間運営(取りまとめ役と当日運営)をしましたが、本当に大変で世の中のCTFを開催する方々への感謝を新たにしております。今年は初めて土日30h開催という長時間の開催でしたが、いかがだったでしょうか?ぜひ、アンケート(newbieにあります!)でご意見をお聞かせください。終了直前のドタバタなどもありましたが、無事終わることができたことは本当にほかの運営メンバーや作問陣、PPCの環境に協力いただいたyukicoder様、そして何より参加してくださった皆様のおかげです。改めて本当にありがとうございました!
また、今年は開発者が足りなかったため、ビジュアライザーがありませんでしたが、これを読んでいるtraP部員の皆様はぜひ、今年の終わりくらいの募集時に手を挙げてもらえればと思っています。