4月20-21日に開催されたCPCTFに出ました。せっかく参加したのでwriteupを書いてみます。
自己紹介
24Bのkavosと申します。自分が持っている競プロ・CTFのスキルはこんな感じです。
- 競プロ:初心者。AtCoderで灰色です。茶色までの道のりは長い...
- CTF:初心者。初めて1週間です。一応常設サイトのCpawCTFを一通り解きましたが、まあ初心者です。
結果
全体25位、新入生内5位。最後の方5位争いは大接戦でした。
(特に競プロほとんどやってない中で)かなりいいところまでいったのでとても満足です。
真面目に取り組んだものだけを書きます。ご覧の通り競プロ(PPC)はほとんど解いていません。
NEWBIE
チュートリアル問題。でも結構考えさせる問題が多かったです。
Substitution(crypto)
シーザー暗号かな?と思いましたが、どうやら一般的な換字暗号のようです。英語の文章には'e'が多いとか、連続する文字には'l'の登場が多い(well、 yellowなど)みたいなことを使って、一つ一つ復号していきました。暗号を解いてる!という感じでとても楽しかったです。
Typing Game(web)
ソースコードを見たらflagが書いてありました。
mokomoko(OSINT)
検索するまでもなく、こんなに一面に花が咲いているのはたぶん国営ひたち海浜公園なんだろうなと思って入れてみたら、当たりました。
netcat(shell)
言われたとおりに、ncコマンドを打てばできました。
peeping(binary)
radare2に入れたら出てきました。
EASY
Easyと書いてありますが、結構難しいです。
CPCT...(pwn)
文字列の長さの判定にprintf()を使っているので、%sみたいにフォーマット用の文字列を入れると長さがごまかせます。
Just reversing?(binary)
C言語のプログラムを見ると、16進数2桁の数字に対して、1桁目と2桁目を入れ替えるみたいな処理をしていることが分かります(4e→e4みたいな)。あとはよくわからなかったので1桁目と2桁目を入れ替えたものを手書きで書きだしたら、その文字列自体も逆向きにしていることが分かりました。
Let's buy some array(web)
SQLインジェクション的なことをやるんだろうなと思いつつも、数値入力しか受け付けていないといわれ、わからずにヒントを見ました。DevToolで<input type="number">を<input type="text">に変えないといけなかったんですね。
Number Guesser(binary)
適当にGhidraに入れたら答えが書いてありました。さすがNSA(アメリカ国家安全保障局)
RSA Trial(crypto)
暗号を作るときに使う素数の組(p、q)に対して、pqとp^3 + q^3が分かっていたので、解の公式などを使ってpとqを求め、復号していきました。pythonを使うと大きな数も計算できるらしいですが、私はJava派だったのでJavaのBigIntegerクラスで地道に計算していました。
Register(forensics)
pcapファイルなのでwiresharkに通したらUSBキャプチャでした。さっぱりわからなかったのでヒント1を開けるとどうやらキーボード入力らしい。かといってもそれでキャプチャの内容が分かるわけでもないので、自分のキーボード入力をキャプチャしたものと見比べながら1文字ずつ解析していました。時間かかったけど楽しかったです。
The sky's the limit(pwn)
どうやらgets()関数が何も言わずにバッファオーバーフローを引き起こすまずいやつらしいので、バッファオーバーフローによるリターンアドレスの変更を試みます。gdbを使いながら24文字+目的の関数のアドレスを入力すればいいということまではわかったものの、Null文字を使わないと文字列判定を終えることができないというポイントが分からず、できませんでした。
veeeeeeery long text(shell)
grepコマンドで文字列を検索できるそうです。使ってみたらflagが出てきました。
white has much information(forensics)
Whitespaceという、スペースとタブと改行ですべてをこなすプログラミング言語ですね。Webの実行環境を使ったらうまくいきました。
turnig over(misc)
Blenderで開いて、sculptureモードみたいなものにすると、いきなりFlagが出てきましたが、それを入力しても正解にならなかったので、他にすべきことがあるのでしょう。ヒント3を見てもわかりませんでした。もしかしたら1(いち)とl(エル)とI(アイ)で間違えたのかもしれません。
leaving(OSINT)
JR東海の車両・新幹線があること・看板に浜松と書いてあることから、写真の駅が浜松駅と分かりました。あとは時刻表を見れば答えが出てきます。
にしても東海道線って中核路線だと思うのに3両なんですね...新幹線のすごさが分かります。
Doctor yellow(OSINT)
画像検索すると似たような写真が出てきました。あとはgoogle mapで位置を調整して提出。
Dokoda?(OSINT)
WifiのSSIDとMACアドレスから場所を特定する問題。
わからなくてヒントを見たら、WifiのMACアドレスを入れたらどこにあるものか教えてくれるサイトがあるらしいと教えてくれたので、サイトを見てクリアしました。
最近の情報社会って怖いですね。
MEDIUM
Medium以降はOSINTしか解いていません。だってそれ以外がすごく難しいですもの
Great View(OSINT)
画像検索するとラブライブ聖地巡礼の記事がヒットしました。
ラブライブのtwitterを見ると、リリース当日にメンテナンスが遅れてサーバー開放が23:30になったと書いてありました。
時間まで指定したのはこういうことだったんですね。
Patlite(OSINT)
奥に見えるバスをよく見ると都06系統と分かります。都06が新橋-渋谷の路線らしいので、ゆりかもめがあることを踏まえて、バス路線を新橋駅からストリートビューでたどっていくと、新橋駅前にそれっぽい地点を発見しました。
Forbidden Code(OSINT)
SNSアカウント調査です。
GHuntというツールを使ってgmailアカウントを調べると、google calenderが出てきました。中身を見るとtwitterアカウントが載っていたのでtwitterを見てみます。
そのあとはsherlockというツールを使ってtwitterのIDでほかのアカウントを調べるとredditがヒットしました。それぞれのアカウントに書いてある断片をつなげたらできました。
HARD
Passing(OSINT)
まず、やってくる電車が天竜峡行きなので飯田線ということが分かります。が、それがわかったところでどうしようもないので素直に画像検索すると駅がヒットしました。
時刻表を調べたら天竜峡行きかつ待ち合わせをする電車が一つだけだったので時刻も特定。
日付が分からずヒントを見たらinstagramが怪しいといわれたのでアカウントを作ろうとしたら、登録早々「あなたのアカウントは停止されています」と言われできませんでした。かなしい。
おわりに
とても楽しかったです。最後のほうはOSINT問題ばかりやっていました。鉄道問題が多いのは鉄道好きにはたまらないところです。ちなみに、私は月曜に提出しなければならない課題が多くあったので、CPCTFは早めに切り上げようと思っていたのですが、結局2日間ずっとやっていました。そして案の定課題が終わらず月曜日は遅刻しました。
Easy問題は私にとって難しいものが多かったので、これをEasyと思えるくらい力をつけていきたいですね。
運営の皆さま、本当にありがとうございました!