SECCON 令和CTF Writeup
SECCON 令和CTF について
平成最後のCTFとして、http://score-reiwa.seccon.jp/が開催されました。
平成31年4月30日(火)23:00(JST)~令和元年5月1日(水)01:00 (JST) (2時間)
※ 開始直後にサーバトラブルがあり、結局2時まで開催されていました。
私もいろいろ準備して参加しましたが、 結局チュートリアルも含めて、4問しか解くことができませんでした。 結果は、310点で78/858位でした。
SECCON 令和CTF Writeup(4問)
Misc フラグの例は?
平成最後の最後、令和最初のSECCON CTFにようこそ。 フラグはSECCON{reiwa}です。
Misc bREInWAck
問題
元号が変わる。記号も変わる。
参考: https://ja.wikipedia.org/wiki/Brainfuck
添付ファイル(flag.bw)
令和和和和和和和和和和和和和和和和「令和 和和和和令和和和和令和和和和和和和令和和 和和和和令和和平平平平平成」令和和和。令 和和和和和。成成。。平成成成成。成。令令 和和和和和和和和和和和。令和和。平平平和 和和和。令和和。和和和和。令令和和和和和 和和和和和和和。平平平和和和和和和和和和 和和和和。成成成成成成成成。令成成成成成 成成成。令令。成成成成成。成成成成成成。 令和。平平和和。令令令和和和和和和和和和 和。
解答例
令和平成「」。
の文字をBrainfuckの記号( >+<-[].
)に置き換えて、
Brainfuckのインタプリタで実行するとフラグが取得できます。
cat flag.bw | sed -e 's/令/>/g' | sed -e 's/和/+/g' | sed -e 's/平/</g' | sed -e 's/成/-/g' | sed -e 's/「/[/g' | sed -e 's/」/]/g' | sed -e 's/。/./g'
変換すると、下記のようになります。
$ sh reiwa_ctf_misc2.sh >++++++++++++++++[>+ ++++>++++>+++++++>++ ++++>++<<<<<-]>+++.> +++++.--..<----.-.>> +++++++++++.>++.<<<+ +++.>++.++++.>>+++++ +++++++.<<<+++++++++ ++++.--------.>----- ---.>>.-----.------. >+.<<++.>>>+++++++++ +.
今回は、下記のBrainfuckのインタプリタを使用しました。
Misc 零は?
問題
nc zerois-o-reiwa.seccon.jp 23615
解答例
netcatで接続すると、計算問題が表示されます。
右辺の計算結果が0になるような?を見つけていく問題のようです。
$ nc zerois-o-reiwa.seccon.jp 23615 [1/100] 0=71-? ?=71 [2/100] 0=91*71-? ?=
後半になると問題も長くなり、タイムアウト時間もあるので手動では解けそうにありません。 今回は、Pythonを使って100問解くようにプログラムを書きました。
- pwntoolsで接続して、問題を取得する。
- ?を総当たりで割り当てて、evalで計算する。
- 計算結果が0になったら、回答する。
- 上記を繰り返す。
from pwn import * p = remote('zerois-o-reiwa.seccon.jp', 23615) for count in range(100): print '--- ' + str(count) + ' ---' # get question p.readuntil('0=') question = p.readuntil('?=').split('\n')[0] print question # brute force answer = 0 while True: tmp = question result = eval(tmp.replace('?', str(answer))) if result == 0: break answer += 1 # send answer p.sendline(str(answer)); print '?=' + str(answer) p.interactive()
実行すると、下記のようになります。
$ python reiwa_ctf_misc3.py [+] Opening connection to zerois-o-reiwa.seccon.jp on port 23615: Done --- 0 --- ?-43 ?=43 --- 1 --- 60+23-? ?=83 (省略) --- 98 --- 71-92+76*30*15+56-84*68+47-65-10+79*10*61+27-94*40+34-1+36*96-29-71*73+25*89+91-52*62-52+33-6*43+9*8+62-22-45+36*13-18+52*60+16-59*57-63+83*65*64-85+48+6*56-32+57*29-74-88*90+58-42+7*86*52+58-25-57*18+22+98*90-97+89-69*29*8+51-97-63*67+20+19-54*95*18+19-52+89*55-13*33+80-54-77+?*0+39-92-340391 ?=0 --- 99 --- 55+56*0-68+32-47*78*59+59-85+45-71*73+91*90-21*25+93-15+98-27*82*99+49-48+77*73-78*80+44-13*89-67+24-60+14*31-97*75+87+30*88-33-23*28+19*35-93+29*30-22+71+75*65-33+56*54-20+59-68*81-54+9*32+16-50*5*80-34+75*15-40+51+31-90*43*18-57+46+99-59*19-80+93*89*24-33+97-39*89+40-99*72+72-14+67*88+0*?-10+330814 ?=0 [*] Switching to interactive mode Congratulations! The flag is SECCON{REIWA_is_not_ZERO_IS}. (Enter RETURN key if connection is not disconnected) [*] Got EOF while reading in interactive $
Forensic 新元号発表
問題
newera.pdfを開くと下記の画像が表示されます。
解答例
PDFをよく見ると、QRコードが隠れているように見えます。
下記のサービスを使用してPDFから画像を抽出してみました。
smallpdf.com
抽出すると、2つの画像を取得することができました。
後は適当に重ねてQRコードを読み込むとフラグが取得できます。 私は、PowerPointの機能で白を透過させて2つの画像を重ねました。
実際にQRコードを重ねてみると、以下のようになります。