BITSCTF 2017 writeup
Harekazeで参加し、チームは520ptで18位でした。 私は5問解いて140pt入れました。
[Crypto 20] Banana Princess
PDFっぽいファイルを渡されるが、そのままだと開けない。バイナリエディタなどで開くと、ヘッダなどがおかしいことがわかる。本来であれば %PDF-1.5
であるべき部分が %CQS-1.5
になっているので、rot13だとわかった。
import string with open('./MinionQuest.pdf', 'rb') as f: pdf = list(f.read()) for i, c in enumerate(pdf): if c in string.ascii_letters: pdf[i] = c.encode('rot13') with open('./flag.pdf', 'wb') as out: out.write(b''.join(pdf))
出力されたPDFを開くと、Flagの部分が黒塗りされていて見えない。どこかで見たことある問題だなあと思いつつ、LibreOfficeで開いて黒塗り部分を削除すると、Flagが読めた。
BITSCTF{save_the_kid}
[Crypto 60] Sherlock
渡された final.txt
を読むと、不自然に大文字になっている箇所があるので、スクリプトを書いて取り出すと ZERO
と ONE
という文字列の羅列になっていることがわかった。それぞれ数字の0と1に置換して、8bitずつ文字と解釈するとFlagが出てきた。
import string with open('./final.txt', 'r') as f: txt = f.read() flag = [] for c in txt: if c in string.ascii_uppercase: flag.append(c) bin = ''.join(flag).replace('ZERO', '0').replace('ONE', '1') print(''.join([chr(int(bin[i:i+8],2)) for i in range(0, len(bin), 8)]))
BITSCTF{h1d3_1n_pl41n_5173}
[Forensics 10] Woodstock-1
pcapファイルを渡されるので、Wiresharkで開いてみるとTCPのパケットが沢山ある。とりあえずTCPストリームを見てみたらFlagがあった。
BITSCTF{such_s3cure_much_w0w}
[Forensics 30] flagception
わけがわからず放置していたら、megumishさんがトップページのロゴの画像にある旗の色がおかしいことを発見。拡大して見てみると、
というようなパターンが見つかる。ちょうど1行に8パターンあるので、濃い方を1、薄い方を0として文字にすると、最初がBとわかったので、そのまま人力で解いた。解いたあと目が痛かったので、素直にソルバ書けばよかったと後悔した。
BITSCTF{f1agc3pt10n}
[Rev 20] Mission improbable
ファイル名にある TEENSY31
でぐぐると、マイコンが出てくる。そのマイコンで動作するバイナリなんだろうなあと思いつつ、ディスアセンブル方法をぐぐると、
avr-objdump -j .sec1 -d -m avr5 MissionImprobable.TEENSY31.hex
で一応ディスアセンブルはできることがわかった。
全然読む気が起きないので、もうちょっとぐぐると、
avr-objcopy –I ihex –O binary MissionImprobable.TEENSY31.hex MissionImprobable.TEENSY31.bin
で、ふつうのバイナリに変換できることがわかった。変換後にstringsをかけるとFlagが見えた。
BITCTF{B4d_bad_U5B}
感想
pwnの練習しなさすぎて、自明っぽいpwnすら解けなかったので練習しなければな、と思いました。