DensanCTF Write-Up
<!-- wp:heading -->
TL; DR
- 一関高専主催のCTF大会「DensanCTF」に参加した.
- 時間内に全問正解し,2位となることができた.
- ぼくとしてはちょうどいい難易度であった.
はじめに
今回,一関高専が主催するCTF大会である「DensanCTF」に,チーム「☆このチーム名は年越し2時間前に考えました☆」として参加しました.
CTFは,Capture the Flagの略称で,様々な情報技術を駆使して答えであるフラグを得るものです.詳細な説明は割愛します.
注意事項
- 基本的な事項の解説を省略しています.
- ぼくはCTF初心者です.変な解法をしていても許してください.
- ほとんど先輩に助けを借りたのでぼくはあんまなにもしていません.
解説
各問題のWrite-Upを以下に示します.ぼくが解いていない問題も含みます.問題は基本的にポイントの昇順です.
Japan: Misc / Welcome to DensanCTF! (10pts)
練習問題です.自明なので省略します.
Mexico: Web / WHITEOUT (100pts)
コメントアウトされている文字列を見ると,"=="で終わっていることから,一般にBase64でエンコードされた文字列ではないかと推察されます.しかしこれは間違いで,Base64でデコードしようとしてもフラグを得ることはできません.
ここでこの問題のタイトル,"WHITEOUT"を考えてみましょう.問題ページを開くと前述の文字列はコメントアウトされているため,真っ白なページが表示されます.これがWHITEOUTの意,というわけではないのです.
視界がなくなるほどの猛吹雪.先ほどの文字列,実は文字の猛吹雪なのです(?).もう一度よく見てみましょう.
という問題でした.これを作問した方は天才だと思います.
China: Misc / このとんかつが美味い2019受賞 (150pts)
まず,問題文から,岩手県の水沢にあるとんかつの店を探します.Googleで"岩手 水沢 とんかつ"などと検索して,画像タブで問題の画像と比較すると,"おいしんぼ"という店の食べログページの画像が見つかります.該当する食べログページへ行くと,メニュー写真が投稿されています.この中から一致するものを探すと,1,390円の"おろしとんかつ定食"であることがわかります.
Australia: Binary / Word File (200pts)
まずはバイナリエディタでファイルの内容を確認します.
これはバイナリのエンディアンが一致していないためです.ddコマンドでスワップします.
すると正常にWordのファイルだと認識されました.
Brazil: Reversing / Hello, Reversing World! (200pts)
バイナリ中に含まれる文字列を探すstringsコマンドを用いて,FLAGを検索します.また,IDAでも確認できます.
United States: Web / WIP Page (250pts)
まずはmessageを開いて,URIを確認します.
/message.php?p=linskslsisfjfie.txt
クエリ文字列のpでテキストファイルを指定しているようです.ここから,pに指定されたファイルを開いて表示する,といったPHPファイルのようです.flagが示された"flag.php"は同じディレクトリにあるので,
/message.php?p=flag.php
にアクセスすればフラグがあります.
India: Reversing / More, more, more (300pts)
先ほどのReversingと同じように,stringsで確認します.
今回は,stringsでフラグを得られません.objdumpなどで得ることはできると思いますが,ぼくはIDAを使いました.
South Africa: Reversing / Health Care (300pts)
これもstringsでは正常な結果を得られませんでしたので,IDAで解きました.mainではなくprint内に記述されていることに注意します.
FLAG{Recovering_from_my_fatigue_by_foot_bath}
和訳すると「足湯(foot bath)で疲れをふっ飛ばす」ですね.作問者のはすみさんらしい問題だと思いました.ぼくは好きです.
Russia: Binary / いらすとやさん (300pts)
2つの画像が示されます.一見全く同じ画像です.実際,画像部分は全く同じです.適当なバイナリエディタで差分を取りましょう.ぼくはFavBinEditを使いました.
明らかに,2枚目にはバイナリ列が追加されていることがわかります.PNGにおけるENDシグニチャの後なので,PNGフォーマット的にほぼ問題なくパースされます.では,この追加されたバイナリ列のみ切り抜いてみます.
このバイナリ列は"PK"で始まっていることがわかります.これをシグニチャに持つファイル形式を調べると,ZIPが当てはまります.
よってこのバイナリ列を保存してZIPとして解凍(余談ですが,最近は展開というらしいですね)します.すると,テキストファイルがあり,フラグを確認できます.
感想
総合的に見ると,ちょうどいい難易度であったと思います.ぼくはCTF初心者ですが,手応えを感じました.かつ,先輩の力もあり無事全完することができ,さらに2位ということでとても嬉しいです.チームメンバーの方には感謝でいっぱいです.常設以外のCTF参加はこれで2回目ですが,まだまだ知識の不足を感じます.CTFをやると,CTF以外でも使えるような知識がたくさんつくのでとても好きです.得意ではないですが.
TLの方々が作問していらっしゃるのを見て,ぼくも作問をしたいと思いました.いつか豊田高専でもCTFをしたいです.そのときはよろしくお願いします.
今週末には,InterKosenCTF(https://www.kosenctf.com)が行われます.ヤバそうなのでできそうなのをやってみたいと思います.
今回主催の一関高専の方々,作問者の方々,各チームの方々,素晴らしいCTFをありがとうございました.