CyberRebeatCTF2018 Write-Up
<!-- wp:heading -->
はじめに
今回は初めてのCTFコンテスト参加でした。事前に CpawCTF の問題を解いておきましたが、なかなか手ごわいものでした。
結果
チームで36位でした。いいのか悪いのかわかりません。
解けた問題
今回は (*´ω`*) というチームに参加させていただきました。CTF初心者なのでチームに貢献できるかどうか不安でしたが、チーム最多の7問を解くことができて嬉しかったです。(チーム対抗のはずなのになぜかチーム内で競争が起きていました)
僕が解けた問題のWrite-Upを以下に示します。
Misc / Readme
難易度: 100, 獲得時得点: 442
少し前に話題になった Electroharmonix フォントで書かれた文字でした。日本人(日本語)は一文字ずつ読む傾向にあるため、読みにくいというものです。遠目で見ることで日本人の僕でも読むことはできましたが、フォント一覧を見ながらやるとスムーズにいけそうです。
また、CpawCTFでは基本的にすべて小文字で解答していたので、同じだと思っていたらすべて大文字でした。問題の説明とかに書いておいてほしかったです。
CRCTF{YOUCANPLAYCYBERREBEATINBOTHLANGUAGES}
Stegano / Secret.pdf
難易度: 10, 獲得時得点: 419
適当なPDFリーダで開いて、黒で塗りつぶされているところを選択してからコピーすれば出てきます。ちなみに、ここで僕はなぜかChromeのPDFリーダではこれができないと勘違いしていて、Adobe Readerをわざわざ開いていました。
CRCTF{I don't know of a time without the internet}
Misc / Opening Movie
難易度: 100, 獲得時得点: 500
なんと、初めての正解者となった問題です。とても嬉しかったです。
この問題で用意されたサイトは Blazor で作成されており、なんと.NET用のdllファイルが降ってきます。(Dev ToolsのNetworkタブなどで確認)僕はJetBrains信者なので、ILSpyではなく dotPeek でデコンパイルしました。すると、答えは以下のパスにあることがわかりました。
/{md5("FLAG_IS_HERE")}.txt
あとはMD5を適当に計算して、ここにアクセスするだけです。
僕は、問題用サイトのドメインを見た瞬間に「やったぜ。」となりました。つい先日、知人からBlazorを紹介されていたのです。ありがとう とりさん 。
ちなみに当チームメンバーの一人は「300回垂れ流すわ」と言っていました。
CRCTF{to the twilight of the internet}
Recon / CyberRebeatScripts
難易度: 100, 獲得時得点: 425
某 設計図共有サイト の問題でした。「CyberRebeatScripts」を検索するとリポジトリ「ennach/CyberRebeatScripts」が見つかります。コミット履歴を見ると、「delete FLAG」というのが見つかるので、差分を見ればOK。
CRCTF{I cut down her gag in a single strike}
Web / White page
難易度: 10, 獲得時得点: 454
難易度の割に解けねえ~~~~ってなってたら、問題に間違いがあったみたいです。時間返せ~~~~~~
問題用サイトを開くとあるのはLOGINボタンのみ。まあDev ToolsのElementsタブとかを使うとわかりますがstyleでvisibillityがhiddenになっています。そりゃ見えない。のでElementsから書き換え。Dev Tools便利。したらば、問題に記載されているidとpasswordを入力してLOGIN。
あっれ~~~~いけないんだけど~~~~~~
どうやら問題のidにスペルミスがあったみたいです。いや、もしかしたらぼくがスペルミスして打ってたかもしれません。真相は謎です。
CRCTF{All I typed were four letters.}
Web / Let's Tweet!
難易度: 100, 獲得時得点: 467
これも問題、というかサーバ側の環境変数設定に問題があったみたいです。は~~~~~~
PHPスクリプトが添付されていますが読まなくて大丈夫です。言いなりになってツイートボタンを押してツイートしましょう。URLを入力してボタン押せばフラグがもらえます。ツイートしなくてもいけるよ~って書いてあるのはたぶん他の人のツイートでもOKってことです。「#CyberRebeatCTF」が含まれているかの判定しかしてないっぽいので。
当チームメンバー「もうちょっとしたら公式からフラグのリプ来るんじゃね?」
CRCTF{Thank_you_for_your_tweet!}
Crypto / FLAG.encrypted
難易度: 200, 獲得時得点: 319
この問題は2日目に解きました。大部分をチームメンバーがやってくれて、うまくいかないのを修正しただけなのでほぼ僕の手柄ではないです。ごめんなさい。
RSAで暗号化されたファイルと公開鍵がダウンロードできるわけですが、RSAは公開鍵で暗号化して秘密鍵で復号化するものなんですよね。無理じゃんって思ったわけですがチームメンバーが Wiener's Attack というものでできるのではないかということを発見していました。
OpenSSLで確認すると、今回は上のブログ記事のStage 4に当たることがわかります。記事内のコードを元に書いたようですが、秘密鍵を用いた復号化部分でうまくいかなかったようです。しかし秘密鍵など必要な情報はこのコードで出力できたので、 PyCrypto を用いて秘密鍵をPEMファイルにエクスポートさせました。そしてOpenSSLでいつも通り復号化。
参考: PythonでPEM形式のRSA鍵を生成する方法のメモ
CRCTF{On that day, there was definitely something behind Warlock's disappearance.}
がんばったけど解けなかった問題
Binary / SimpleBinary
SimpleBinary(シンプルとはいってない)という感じでした。ELF 64bitだったのでアセンブラを読みましたが読めませんでした。
Crypto / Signature
MD5のLength Extension Attackでできるというとこまではわかりました。URLエンコード云々でできませんでした。悔しい
Recon / ChangeHistory
Gitのamend? cherry-pick? rebase?によって上書きもしくは消去されたコミットを復元するってことはわかりましたがわかりませんでした。
Web / Uploader
SQLインジェクションでsecret.zipが出てきてユーザが違うということはわかりましたが、ZIPのパスワードがわからないうえそれをアップロードしたユーザにもログインできなくて詰みました。
頭がおかしくなってZIPパスワードの全探索を始めましたが無駄でした。
感想
初めてにしてはできたのか、初めてでもひどいのかっていうのは自分でもわかりません。誰か教えてください。
普段AtCoderのABCを苦手ながらちょっとだけかじっていますが、苦手です。ということで今回CTFに手を出しましたが、これも苦手な気がします。(ちなみにコンテスト中に ABC109 に参加していたのは内緒です)
次も参加したいかって聞かれたら迷います。が、実用性にはとても富んでいると思いますので、参加するべきかなとは思っています。
競プロと同じくですがやるたびに自分の技術力のなさを感じてしまうので、しっかりと勉強をしていかなければならないなと改めて感じました。これからも日々、様々な技術を身に着けていきたいと思います。