ちゃんゆーのブログ

思ったことや、技術系のメモなどを書き残していきます。

CyberRebeatCTFに参加したのでwrite-up

先日、SECCON Beginner Hiroshima に参加しまして、初めてCTFやってみたのですが、これが面白くってオンラインの大会に出てみたよ。という話です。 後輩のguriと出場しましたが、大半は彼が解いてくれました。すごい!

tl;dr

壊滅的でした。

Binary

SimpleBinary

SimpleBinaryファイルが配られる。 実行権限与えるも、

$ ./SimpleBinary

応答なし。 stringsかけてもヒントはなさそうだったので逆アセンブルかける。 それっぽい関数を見つけるも、そもそもアセンブリが読めず断念。

Binaryクリアするにはちゃんとアセンブリ読んで編集してってできないとダメだね。

crackme

未着手。

f31337

未着手。

Crypto

Rotation

P4P6S{9RN4RUNPXR45} を解読する。 ローテーションというからrot13だったり、いろんな文字数ズラすも解読できずパス。

FLAG.encrypted

未着手。

Signature

未着手。

Exercise

Exercise

CRCTF{CyberRebeatCTF}

Misc

Readme

f:id:chanyou0311:20180912101541j:plain が配布される。

どっかで見たことあると思ったらこれか。 www.ebook5.net

一旦パスしてあとで解こうと思ったらチームメンバーに解かれてました。

Opening Movie

url先の動画を300回再生しろという問題。 f:id:chanyou0311:20180912102012p:plain

startを押すと爆音でオープニングムービーが流れる。驚く。

動画再生中にstart押すと「Now Playing...」とalertかかって言うことを聞かない。

BeautifulSoupでスクレイピングしようかと思うも、これAjaxかなにかで動的に動画ファイル取得して埋め込んでいるから、BeautifulSoup使えないことが判明。 Selenium使ったことないけど1時間位格闘して諦めた。こりゃ悔しい。頑張って5回位手動でstart押したけど、悔しいこりゃ。

Programming

Calculation

ncコマンドで指定されたip叩くと計算式が返されるので答えていく。

$ nc 59.106.212.75 8080
69 - 98 + 34 - 65 - 88
0
Wrong!

これを30問くらい出題される。 Python演算子をパースして計算するスクリプト書いたものの、ncコマンドからパイプで値渡せるわけじゃないのね。 しょうがなくコピペでPythonに投げる。 コマンドに直接流し込めば計算もしてくれるが、 pyperclip モジュールを使えば、実行結果を自動的にクリップボードに保存するなんてこともできるので、ちょっとは楽になる。

github.com

後日談的な話ですが、Pythonでncコマンド叩けるスクリプトが公開されていました。

Python Netcat · GitHub

これ使えばよかった…

Prime Factor

Calculationと同様、ncコマンドで最大素因数を答える問題。 強引にPythonに投げましたが、単純なアルゴリズムだと桁数増えると計算に時間かかりすぎてしまうので、sympyを使う。

import sympy

def max_prime(n):
    return max(sympy.factorint(n).keys())

max_prime(542778378564)

ちなみに実行するときはローカルでもよかったけど、Colaboratoryを使った。

https://colab.research.google.com/

最初っから数学系のパッケージがインストールされているのでimportするだけでいいし、手軽にGPU使えるのでスクラッチするのに良いと思ってる。

Visual Novels

余裕があれば解こうと思ったが結局パスした。

Recon

Tweet

未着手。

CyberRebeatScripts

未着手。

ChangeHistory

これに一番時間をかけたかもしれない。そして解けなかった問題。 GitHubリポジトリ内にFLAGが隠されているらしい。

github.com

closedのissueを見ると、間違ってコミットしたとの記述があった。

f:id:chanyou0311:20180912141154p:plain

コミット番号が書いてあるものの、git logで見れるわけでもない。 メルカリのエンジニアブログの記事を参考に、commit番号生成のロジックを学ぶ。

tech.mercari.com

FLAGがどこに隠れているか、自分はコミットメッセージに含まれていると睨んだ(のが間違いだったか)。 ブルートフォースでコミット情報を復元できそうと思い、hashcat導入するも時間切れ。 hashcatも文字数が把握できてると効率よく当てれるらしいけど、今回は文字数不明だったのでうまくいかず、断念。

Stegano

Secret.pdf

f:id:chanyou0311:20180912142103p:plain

コピペ

Alpha

未着手

Last 5 boxes

未着手

Trivia

Monero

未着手

Crossword

未着手。

Web

White page

http://hidden-field.cyberrebeat.adctf.online/index.php
id:Hiro
password:LittleGarden

とのことだた入力フォームは表示されず。styleでhiddenがかかってるので、インスペクターから直接styleを修正してあげて入力する。

<form action="index.php" method="post">
   <input type="text" name="id" style="visibility:hidden">
   <input type="text" name="password" style="visibility:hidden">
   <button>LOGIN</button>
</form>

これ最初どうやっても解けんなと思ったら、問題文のidがHeroになってました。いつの間にか訂正されたみたいです。ヒーロー。

Let's Tweet!

ハッシュタグ付きでツイートしたURLを送るフォームがあり、送信するもdbの権限周りで弾かれ断念。

Uploader

未着手

あとがき

Beginnerあがりたてにはちょっと難しかった。ただ時間はあるので、じっくり調査できて勉強になりました。

WindowsマシンとLinuxマシンもちゃんと用意するべきでしたね…

あと、write-up書くときのために、逐一キャプチャしておけばよかったですね。 次回からはそうしよう。

お疲れ様でした。