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でデコードしようとしてもフラグを得ることはできません.

11回ほどデコードをかけると文字列が出てくるものの,フラグではない

ここでこの問題のタイトル,"WHITEOUT"を考えてみましょう.問題ページを開くと前述の文字列はコメントアウトされているため,真っ白なページが表示されます.これがWHITEOUTの意,というわけではないのです.

https://ejje.weblio.jp/content/whiteout

視界がなくなるほどの猛吹雪.先ほどの文字列,実は文字の猛吹雪なのです(?).もう一度よく見てみましょう.

おや?

おやおや?
えぇ…

という問題でした.これを作問した方は天才だと思います.

China: Misc / このとんかつが美味い2019受賞 (150pts)

まず,問題文から,岩手県の水沢にあるとんかつの店を探します.Googleで"岩手 水沢 とんかつ"などと検索して,画像タブで問題の画像と比較すると,"おいしんぼ"という店の食べログページの画像が見つかります.該当する食べログページへ行くと,メニュー写真が投稿されています.この中から一致するものを探すと,1,390円の"おろしとんかつ定食"であることがわかります.

Australia: Binary / Word File (200pts)

まずはバイナリエディタでファイルの内容を確認します.

Content_Type,xmlなどの文字列が見えますが,順番がおかしいですね

これはバイナリのエンディアンが一致していないためです.ddコマンドでスワップします.

エンディアン変換の方法を見つけるのに時間がかかりました

すると正常にWordのファイルだと認識されました.

Brazil: Reversing / Hello, Reversing World! (200pts)

stringsするだけ

バイナリ中に含まれる文字列を探す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が当てはまります.

https://en.wikipedia.org/wiki/List_of_file_signatures

よってこのバイナリ列を保存してZIPとして解凍(余談ですが,最近は展開というらしいですね)します.すると,テキストファイルがあり,フラグを確認できます.

感想

総合的に見ると,ちょうどいい難易度であったと思います.ぼくはCTF初心者ですが,手応えを感じました.かつ,先輩の力もあり無事全完することができ,さらに2位ということでとても嬉しいです.チームメンバーの方には感謝でいっぱいです.常設以外のCTF参加はこれで2回目ですが,まだまだ知識の不足を感じます.CTFをやると,CTF以外でも使えるような知識がたくさんつくのでとても好きです.得意ではないですが.

TLの方々が作問していらっしゃるのを見て,ぼくも作問をしたいと思いました.いつか豊田高専でもCTFをしたいです.そのときはよろしくお願いします.

今週末には,InterKosenCTF(https://www.kosenctf.com)が行われます.ヤバそうなのでできそうなのをやってみたいと思います.

今回主催の一関高専の方々,作問者の方々,各チームの方々,素晴らしいCTFをありがとうございました.