ハッキング完全初心者が行く!CTFイベント奮闘記
ハッキング初心者、社内CTFの第1回大会に参加する
出会い
こんにちは。SHIFTにてQAエンジニアをしています、山中です。
入社は2022年8月。入社して驚いたのは、社内イベントの多さでした。
オンライン勉強会だけでも何種類も。環境の変化に戸惑いながらも、色々とお知らせを見たり、時には参加してみたりもして、少しずつ会社の雰囲気に慣れてきた頃。社内のお知らせ一覧に、こんな記事が掲載されました。
……。
…………。
………………。
何事!?
挑戦的なキャッチフレーズ。
そこに添えられた「サイバーっぽい」広告画像。
何より、「賞金あり」という世界一魅力的な文字列。
そこに並ぶ「CTF」という謎の単語。
これが私と“CTF”という言葉との出会いでした。
「CTF」とは?
「CTF」とは何なのか?
お知らせの中には以下のような解説がありました。
……「ハッキング」? ハッキングって、あのハッキングでしょうか?
あの、よくドラマなどで見るハッキング? モニターを五、六台並べて何やら文字解析していたりする、あの?
よく耳にするけれど、決して身近ではないワード。まだシステムエンジニアという言葉すらあまり知らなかった頃に、ほのかに憧れを抱いていたあの文字びっしりのモニター、軽快なタイピングの音。それに関われるということでしょうか?
これは……これは、参加するしかないでしょう!
……と、いったような経緯で参加することになった社内CTFイベント。
「何かハッキングってかっこいいな」程度の感覚だった私が、どのくらい奮闘することが出来たのか。
その結果の前に、私がCTFイベントの問題の中で印象に残ったものをいくつかご紹介します。
問:秘密の部屋(25点)(正答者:72人)
ちなみに私はハリーポッターが大好きです。
ジャンルは「WEB」で、問題の内容は以下。
分かる。疲労困憊の時ってそうなりますよね。
問題に貼付されているテキストファイルを開いたところ、表示されたのが以下。
うわ、読みたくない。
サクラエディタで開きなおします。
多少マシ。少なくともURLが見やすくなりました。
結構力業ですが、ここから明らかに秘密の部屋ではないURLを、サクラエディタの正規表現と置換でゴリゴリ削っていきました。
まずは一行目。ここに記載されているURLに飛んだところ、イベントのトップページが表示されます。つまり、このURLはシロ。容疑者から外します。
サクラエディタでCtrl+Rで置換機能を起動。
「.*”消したいURL”.*\r\n」で、消したいURLの前後の文字と改行を削除して、シロのURLを行ごと削ります。
この作業を5回ほど繰り返したところ。
明らかに主張の激しいURLがいる。
ええ……いや、確かに依頼主、「秘密の部屋」って言っていましたけど。これ、もしかして、問いで当たりをつけて「secret」とかで検索掛けるのが正解だったのでしょうか。
とにかく、「secretroom」を自称するURLが見つかりました。
対象のURLに飛んだところ、表示されたのが以下。
よし、じゃあ、このGoを押下して終了ですね。
……駄目でした。何も起きません。
こういう時は、とりあえずソース表示すればいいのです。
既にソースで判明していますが、一応。
元のページで反転表示させたところ、しっかり表示されました。
問:ポケモンは好き?(10点)(正答者:93人)
問題の中でも特に目を引くタイトルの設問。ジャンルは「暗号」。
私はカメールが好きです。御三家は基本、水タイプを選びます。
私は裂空の訪問者のあの街に憧れを抱いているタイプの人間です。
圧縮ファイルが添えられたこの問題。ZIPの中にはPNGファイルが一つだけ。こちらも名前は「Unknown.png」。
そして、その内容は以下。
Unknownってそういうことか。
全28種の形態があることで有名なあのポケモン。
私がこの解読をしたのは、どの作品の思い出だったか。
なるほど、確かにこれは「暗号」ですね。久しぶりに全種類一覧と見比べながら解読していきました。楽しかったです。
そういえば、確かポケモンで、点字を解読させる作品があった覚えが。
これについては恐らく、ポケモンマスターの方々はご自身で解きたいと思うので、答えは割愛します。
ポケモンに詳しくないけど解きたい方は「ポケモン アンノーン」などで検索。ポケモンを知らない回答者には、問題とファイル名がヒントになっていた、ということでしょうか。ちなみに、回答は本ブログの本文内で使用されているアルファベット5文字です。
問:Excelでパスワード管理Ver.2(25点)(正答者:64人)
[1]
ジャンルは「その他」。これについては自分の備忘の為にもここに残しておきます。
Excelのエクセルシートにパスワードで保護が掛かっている場合に強制的に解除する方法です。
Excelを開くと、「pass」の表示が全て「*」埋めになっています。
セルをユーザー定義で「*」埋めにした上で、保護を掛けた模様。この保護を突破しないと、このユーザー定義を解除できません。保護を解除して、セルの設定をユーザー定義から文字列などに変更していきます。
今回は以下のサイトの方法を参照しました。
https://ascii.jp/elem/000/004/097/4097209/
まずは、Excelのコピーを取った上で、拡張子をファイル名変更で「.zip」に変更。
作成されたZIPファイルを展開して、内部へ。
「\xl\worksheets\sheet1.xml」をエディタで開きます。
エディタで開いたら、その中から「sheetProtection」を検索し、「sheetProtection」の直前の「<」から、「sheetProtection」の後に来る「/>」を探してその部分を削除します。
修正した後は戻しの作業。展開したファイル群を圧縮します。
圧縮して「.zip」のファイルにしたら、今度はその「.zip」を「.xlsx」に変更。作成したファイルを開くと、編集可能になりました。
セルの定義がユーザー定義になっているので、passの列全体を文字列表示にします。
ほとんどが数字のpassですが、その中で二つだけ、不審な記載が。
どうやら、下の文字列は「Base64」形式で加工(エンコード)されている状態のようです。なので、加工前に戻してあげます。今回は以下のサイトを使用。
このサイトで、先の文字列を入力し、デコード(加工されたものを元に戻す)をすると、「FLAG{……」形式の回答が出力されました。
問:HTTPでログインしてみた件(30点) (正答者:65人)
完全初対面の相手を攻略しました。その記念に記載。
ジャンルは「WEB」。圧縮されたファイルを展開すると「http_access_pcaplog.pcap」というファイルが。
……pcap。初めましてのファイル種別。何者。困った時のわわわ。
https://wa3.i-3-i.info/word11178.html
……内容は分かりました。分かりましたが、これを一体どうすれば。そもそもこれはエディタで開くのですか、何で開くのですか?
とりあえず問題に出てくる「http」とファイル種別の「pcap」を並べてGoogle検索してみます。すると、やたら出てくる文言「Wireshark」。あなたも何者? どうやらツールのようで、これを用いて解析をするらしい。
早速、インストール。インストール後、そのツールで例のpcapファイルを開いてみます。
……ええと。何が何やら。
まあ、ファイルは開けたのでいいでしょう。「Protocol」の列に「HTTP」とあるので、問いからしてこの「Protocol」の列に「HTTP」とあるものが答えに近いのかなと当たりをつけてみます。
Excelのようにフィルタを掛けられないかなと思い、「Protocol」をクリックしてみると、フィルタは掛けられませんでしたが、並び替えが出来ました。目的の「HTTP」がまとまったところに表示されます。
Infoの欄を見てみると、GET……から始まるものがたくさん、HTTP……から始まるものがたくさん。そして一つだけ、POST……から始まるものが。へえ。
恐らくこのPOSTが何か握ってそうな感じがしますが、後学の為に「post get 違い」でGoogle検索。以下のページがヒット。
本当はもっと複雑怪奇なワードのようですが、今回はとりあえず、上記の「ユーザーが画面に入力して送信するパラメーターは「POST」」さえ知ることが出来ればOK。
やはり当たりを付けたPOSTの行に、答えが含まれているようです。
しかし、それはそれとして、これはどう見るのでしょうか。Wiresharkで対象の行をクリック。特に変化無し。続いて、ダブルクリック。
新しい画面が表示されました。
画面の上半分を見ると色々折りたたまれているようなので、全て開いてみます。
クドウシンイチさんのパスワードが明かされました。 もろたで工藤。
問いの「HTTPのサイトはよく危険だと言われているけれど、ユーザIDとパスワードがないとアクセスできない会員制のWebサイトなら安全ではないのか」については「安全ではない」ということになります。会員制のWebサイトは確かに特定の情報を入れないと中には入れないですが、その情報は通信内容を通じて拾えてしまいます。外部からの傍受が有り得る為、パスワードなどを取り扱う場合には「HTTPのサイト」は「危険」であるという「真相」でした。(こういった場合はリクエストやレスポンスが暗号化されるHTTPS通信を使用する形になります)
問:波よ聞いてくれ(最終配点50点)(正答者:30人)
白状しますが、私、この問題については回答まで辿り着けませんでした。
ですが、非常に印象的だったので記しておきます。回答が分からない問題の話をされても困る……という方は、次の見出しまでスキップしてください。
ジャンルは「OSINT[2]」、問題の内容としては、以下。
なんと、毎週金曜日にオンライン配信されている社内ラジオとの連動問題。しかも、最大1000ポイントの大盤振る舞いです。
残念ながらリアルタイムの配信は視聴出来なかったので、アーカイブにて視聴。その時点で既に点数は700台とかだった記憶です。皆様、回答が早い……!
ラジオで示されたファイルを確認すると、中身はmp3。音声ファイルのようです。
そのmp3と同じ階層のreadmeテキストファイルには以下のような記述がありました。
……なるほど。
この問題を解く頃にはもう気付いていたのですが、私、『FLAG{XXX}埋め込み形式』ではない問題が少々苦手です。そのままフラグが書いてあるわけではない。何かしらの、捻りがありそう。しかも日本語の場合は英語に変換。英語。英語、駄目なんですよ、英語。
早速、mp3ファイルを開いて聞いてみると、軽快なオールナイトニッポンのテーマ曲が。とりあえず、そのまま聞いてみます。が、当然、聞くだけで分かるはずもなく。
そこで、ラジオのアーカイブを見返したところ、以下のような文言が。
……ああ。
なるほど。
だから、問題タイトル……。
波よ聞いてくれ
音の波!
「音声 波形」「音声 波形 ツール」「音声 波形 オンライン」などでGoogle検索。以下のサイトがヒット。
https://audiomass.co/
早速mp3を読み込ませてみたところ、左右の波形が全く異なりました。
なるほど、これは。
左右で音が異なるようです。なので、L:左の音声をOFFに切り替え、再度、再生。
……ですが、私の力では、残念ながら、ここまで。
上記の方法で、R:右の音声は聞き取ることが出来ました。
私の耳に聞こえてきたのが、以下。
「flag is radio ヴヴェイヴ」
……? え、何て?
「flag is radio ヴヴェイヴ」
再度の申告になりますが。
英語、駄目なんですよ、英語。
恐らく、恐らく「wave」だと思うのです。問題のタイトルも波が云々と書いてありますし。でも、試しに『radiowave』をフラグとして入力しても開かない。
では、「name」? 『radioname』でも開かない。
それでは、「radio wave」という単語が示す何かなのでは? 検索を掛けます、この程度の英単語も分からないくらいには英語が駄目なので。ヒットしたのは「電波」。
ラジオで電波となると、周波数。これが某埼玉のFMラジオであれば「79.5」とかがフラグになるのでしょうが、このラジオは社内のオンライン配信。その電波となると。
……などと悩んだ辺りで、回答回数が14に上ってしまいました。この問題の回答制限は20回まで。追加のヒントもありません。
このままずっと挑戦しても回答回数を使い切ってしまうだけ、日を置いて閃いたら戻って来よう。そう思い、この問題から去って、結局イベント終了を迎えてしまいました。
ですが、各所との連動や、タイトル回収、そういったものが面白く、印象に残っています。音声ファイルはまだ手元にあるので、もう少しこねくり回して探ってみます。
結果発表
答えられない問題をいくつか抱えたまま、しかし思いのほか多くの問題のフラッグを手にして、CTFイベント期間終了を迎えました。
正直、回答数ゼロも覚悟していたので、手元に揃ったフラッグは素直に嬉しかったです。
そして、最終結果は……。
34位、430点!
最終参加者は133人だったので、なかなかの健闘だったのではないでしょうか。
ただ、1位の方の点数は785点なので、300点以上の点差が。これについては恐らく上に記載した「ダイナミックスコアリング形式」の問題を落としたことが大きいのかと思います。
それにしても、785点はすごい。上位の方のスコアを見たら、どうやらノーヒントで全問突破している様子。
実は本イベント、問いによってはヒントがついているのですが、ヒントを開けるにはスコアを5~10点ほど捧げなくてはなりません。
以下は私のスコアの途中経過ですが、ヒントを使うと線が一度下がるので、この遷移でヒントの使用有無が分かります。しかし、トップの方はこの「下がる」部分が無いか、極端に少ない。私も出来るだけヒントは開けないようにしていたのですが、それでも完全ノーヒントだと難しい問題もあり、しかも結局解けずにスコアを消費しただけで終わってしまう、などといったように、かなり苦戦しました。
イベント後、出題問題の問題別正答率が開示されました。以下がその様子です。
赤枠の箇所は、私が解けなかった問題です。Splunk関連は初級編②が突破できなかった為、中級編上級編は出題されず。その為、実際に着手の上で解けなかった問題は5問ということになります。この5問のうちの4問の配点が大きかったことと、ここを解くためにヒントを開けたことがなかなかの痛手でした。
ただ、全体の正答率が25%を切る問題以外は解けていたようです。これはなかなか喜ばしい結果。
冒頭で釣られた「賞金」からは遠い順位ではあったものの、頭を捻りながら謎を解いていくのは非常に楽しかったです。あの、フィクション作品越しにほんのり憧れていた姿に、少しは近づけたのではないでしょうか。
加えて、新しい出会いも色々ありました。普段の業務では触れることのないだろうツール、見ることのないファイル。今はお見掛けする機会はなくても、もしかすると今後、関わることがあるかもしれません。その際に、全くの初対面よりはスッと理解出来るのではないかと。
勉強としてもゲームとしても楽しめるCTF。次回の社内開催は、来年とのこと。今から非常に楽しみです。目指せ全問正解!
[1]
問の中の「以前の管理方法~」については、この問題の一つ前の問で出てきた内容。今回のブログでは割愛。
[2]
「OSINT」とは当イベントページの説明では以下のように記載されています。
『OSINT(オシント)とはOpen Source INTelligenceの略で、一般公開されている情報元からデータを収集したり、公開されているWebサービスを用いて情報分析する手法の一つ。ハッキングをするうえでOSINT力は非常に重要になってくる。』
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/