概要
先日CyberRebeatCTFに単騎で参加したので、そのWrite-Up。1480点で82位だった。
※問題が全部表示されなかったので開発者ツールでCSSをいじったら右側が変な感じに
Binary(0/3)
全滅。幸先悪し。
Crypto(1/3)
Rotation
「P4P6S{9RN4RUNPXR45}」と換字式暗号?で暗号化されたflagを解読する問題。「P4P6S」が「CRCTF」であることは(他の問題から)明白なので、あとは力技で解読した。結局どういう対応なのかよく分かってないので、他のWrite-Upを見てみることにする。
|平文 |abcdefghijklmnopqrstuvwxyz| |暗号文| opqrstuvwxyz0123456789 | |確定 | * * * * |
Excercise(1/1)
Excercise
flagを送信するエクササイズ。
Misc(1/2)
Reame
ElectroHarmonixというカタカナっぽいアルファベットフォントで書かれた文章を読む。
Programming(1/3)
Calculation
ncで接続すると、四則演算の計算問題が降ってきて、20問解くとflagが降ってくる。 Pythonでncするライブラリが公開されていたので、これをちょっといじってスクリプトに組み込んだ。便利。
$ diff netcat.py netcat_modified.py 24c24,25 < self.buff += self.socket.recv(1024) --- > #self.buff += self.socket.recv(1024) > self.buff += self.socket.recv(1024).decode('utf-8')
計算にはeval関数を使った。便利。
from netcat import Netcat nc = Netcat('59.106.212.75', 8080) while True: q = nc.read_until('\n') print(q) ans = str(eval(q.strip('\ufeff').strip('\n'))) print(ans) nc.write(str(ans + '\n').encode('utf-8'))
flagが降ってくると例外で止まるのがちょっとダサい。
Recon(2/3)
Tweet
公式がflagをツイートしている。
CRCTF{CyberRebeatCTF_has_started!}
— CyberRebeat (@CyberRebeat) 2018年9月8日
CyberRebeatScripts
ennach/CyberRebeatScriptsというGithubリポジトリがあり、ファイルから削除されたflagをhistoryから見つける。
Stegano(1/3)
Secret.pdf
flag部分が黒く塗りつぶされたPDFを解析する問題。 ちょっとググったら以下のページが出てきたので、サンプルコードそのまま使ってクリアした。
Trivia(2/2)
Monero
ヒントからソフトウェアの名前を導き出す問題(ソフトウェアの名前がそのままflagになる)。「Coinhive」が出てこなくてちょっとググるなどした。
Crossword
クロスワード。ググッてクリア。
Web(2/3)
White page
事前情報としてIDとパスワードが提示されているが、URLを開くと真っ白な画面にログインボタンのみ。ソースを見るとinputタグがstyle属性で消されているので、どうにかしてこれを無効化してIDとパスワードを入力してログインボタンを押せばクリア。他のWrite-Upを見ると開発者ツールでやってる人が多かったけど、私はBurp Proxyでやった。
Let's Tweet!
「#CyberRebeatCTF」が含まれるツイートを促すサイトが舞台。同ハッシュタグを含むツイートのURLを送信すると以下の処理が上から行われ、全てをパスできたらflagがもらえて、その時に使ったURLはDBに格納される(コードは事前に提供されている)。
- ツイートのURLの形式(後述)であることのチェック
- 指定したハッシュタグが含まれているかのチェック
- データベースに同一URLがないかのチェック
素直にツイートすればflagが手に入るわけだけど、「もしツイートしたくない、あるいはツイッターのアカウントを持っていないという場合でも、FLAGの取得は可能です。」の一文がある以上、ツイートするわけにはいかない。
ガチャガチャいじってたらあっけなく通ってしまった。ツイートのURLは「https://twitter.com/{{アカウント名}}/status/{{ツイートID}}」のような作りになっているが、どうやらツイートIDさえ正しければ(実在するものであれば)、アカウント名が誤っていても本来のURLにリダイレクトされるようになっているらしい。例えば、以下のリンクは上が本来のURLだが、下のURLでも同じツイートに辿り着ける。
https://twitter.com/befs_anne/status/1039361451050196992 https://twitter.com/shinobe/status/1039361451050196992
これを利用して、既に存在している「#CyberRebeatCTF」が含まれたツイートのURLのアカウント名を適当に変えたURLを送信してやれば、表層的なURLのチェックしか行われないため、(たとえ実際のツイートがDBに登録済みであっても)別のツイートと判断されてクリアできるという寸法。
感想
ctf4bと比べて易しく感じた。問題数も多いので満足。スキルはまだ乏しいものの、WebやProgrammingなどはctf4bから着実に前進できていると思う。Binaryは引き続き課題。