駅から徒歩27分

技術メモとその他なんでも

Aizu CTF #2に参加したら優勝した

こんにちは、10月1日にAizu CTF #2 参加しました。

CTFは常設のものをちょっとかじったりするくらいで全然知識無かったですがとても楽しめたり知見を得たりしたりできてよかったです。(フラグは1個も取れなかったですが)

ルール

よくあるJeopardy形式ではなくAttack&Defense形式で1チームごとに脆弱性のあるサービスが渡されて他のチームのサービスに攻撃したり自分のチームの防御をします
今回は1チーム1人の個人戦でサービスは全員同じもの(だったと思います)
サービスが動いているかチェックするSLA?に応じて防御点が入り、他サービスに攻撃してフラグを盗んで運営サーバーに送信すれば攻撃点が入ります。
ポイントはこの2つを足したものとなり、攻撃されたチームは相手から攻撃点分のポイントが引かれます。(攻撃点はフラグ1つで5点)
ラウンドという5分間の区切り(?)があってこれが終わるときに各チームのサービスのチェックが行われるらしいです。
14:00〜19:00(予定)の5時間が競技時間で最初の30分間はラウンドが進まず他のチームにもアクセスできずフラグも送れないようになってました。(サービスのソース読んでました)

競技前

競技前は講義ということで_193s氏プロの講義を受けることができました。
今回はSQL InjectionやXSSなどの脆弱性の説明でした。XSSはalert出したりCookie表示するくらいしか知識が無かったので勉強になりました。

競技中

競技は予定より10分遅れて14:10に始まりました。
とりあえずサービスにログインしてソース読もうかな〜と思ってたんですが最初どれが何のファイルかわからなかったです。まあ事前にflaskのチュートリアルを読んでおくように言われていたんですが本当に軽く見たくらいだったのでどんな構成かすらわからなかったというワケです(アホ)
しばらくして見つけたんでしたが、Python書いたことなくてほぼ書けず(ifどう書くのか知らなかったくらい)30分くらい調べてました。
あと話をよく聞いてなくて管理者ユーザーを登録しなかったんでサービスのチェックが通らなくて防御点全然入らず下から4番目くらいの点でオア~となっていました。
激弱なので最初はほぼ進捗無かったです。悲しみ。
中盤ですが管理者ユーザーの登録もして防御点(?)がバンバン入ってきて上から4,5番目くらいになってました。ですが、このとき進捗はほぼ0でちょっとSQLi試したりしてたくらいです。
そしてこのあたりからプロの方々がフラグをGETし始めてました。そしたら自分も攻撃されてたんで前日に見たA&Dのwriteupの攻撃されたら1回サービス止める!wみたいな感じでSLAになるまでサービス止めてました。(人為的にサービス止めるの某ゴ○○タみたいな感じでアレでしたが…)
ちょっとして登録ユーザーを眺めてたら"abcdhoge"のような名前で管理者権限のついているユーザーがたくさん登録されていたのでここからフラグが盗まれてるのでは…と思ってユーザー登録時にhogeの入ったユーザーを正規表現で弾きました。
ここから何かユーザー登録画面に脆弱性があるのでは…?と思って競技終了までユーザー登録の部分をず~~っと読んでました。後の解説からわかったんですがここは別に脆弱な部分ではなかったようです。すごく悲しみ。
終盤の方は新しくランダムなアルファベット名のadminユーザーが登録されてたので適当に正規表現で英字ユーザーの登録を弾いてました。このとき攻撃点が全く入らず1位だったのでかなり焦ってました。
終了10分前くらいはもう何もわからずボケ~っとソースを眺めてました。最初から最後までどうやったらフラグを取れるのか全くわからなかったです。

競技後

最後のSLAが終わって競技終了でした。順位は1位でした。優勝です✌
それはそうなのですが競技内容を見るといろいろボロカスだったのでもっと精進したいです。
この後解説を聞いたたんですがなるほど~!といった感じで全くなにもかもわからないというわけでわけではなかったです。
その後はパパッと片付けして郡山のホテルに逃げるように帰りました。コミュニケーションをほぼ取れなかったの反省してます。