YDiary

メモ的な

令和CTF 感想とWrite-up

あけまして?おめでとうございます.

令和CTFお疲れさまでした.

CTF初心者なのでバイナリ問題解けません.

f:id:YDKK:20190501021740p:plain

858人中27位でした.

一応Write-upみたいなのを書いておこうと思います.

フラグの例は

submitするだけ.

bREInWack

brainfuckなので適当にそれっぽい記号に置き換えて実行してみる.

f:id:YDKK:20190501022131p:plain

https://ideone.com/AYIxSP

零は?

ncでつなぐと数式を出されるので答えが0になる?を答える.

root@Main-PC:/mnt/c/Users/Admin# nc zerois-o-reiwa.seccon.jp 23615
[1/100]
0=?-85
?=85
[2/100]
0=64*34-?
?=2176
...

タイムアウトまで十分に時間があるのでWolfram Alphaとかに投げれば手動でも解けそう. ただ,どんどん数式が長くなるのでクエリ長が問題になると思う.

自前で数式パーサ実装しようとして無限に時間を溶かしてたけど,普通にライブラリ使えばいいんですね. mXparser というライブラリを使いました.*1

gist.github.com

適当に書いて,例外出たところでコンソールを見るとフラグが出てた.

[99/100]
0=36*95-27+65-26+98*2*95+89-54*92-36+41*55+73-11+50*32-36+38-71*23-35*21+5-91+33*78*55+19-11+43*22-21*48-59+51+7*52-91-85+82*0+44-85*55-91+75*35-15*65+21*29+54-80+68*47-32-69*2+90*72+19-58+20*63-55-92*80+58-93+99*87-11+79*42*1+33-97*45+82-10+71-17*49*41+1-85+75*50-13+45-27*2+?*0-51-35+12-138234
0
[100/100]
0=42+89*64-35*67+59-50*51-39+8*4-34+23*10-45+48-27*69+17-65*16+3-87+58*68-72+56*65*65+70-22+88-96*83-27*98+86-46*43+46-26*79+11-16+11*74+42-62*14*74+30-92+27*54-1+53*93-18-8+28*48-2*15+56-55*81+18+42-37*70-89*48+59+95-86*51-71+40*26+46-99*56*41-16+34+5-96*29-77*95+82+96*71-98*34+95-0*?+30-18+79676
0
Congratulations!
The flag is SECCON{REIWA_is_not_ZERO_IS}.
NaN
nter RETURN key if connection is not disconnected)

元号発表

PDFファイルが落ちてくる. Acrobat持ってるのでマスク外して終わりかと思ったらQRコードが「令和」で白抜きされてる.

f:id:YDKK:20190501023439p:plain

「これ知ってる!strong-qr-decoderとかに投げるやつでしょ!」 とか思いながら頑張ってtxtファイルに起こして投げてみるも全然デコードできない.

モード指示子:   0100 (8ビットバイト)
文字数: 11
デコードされたデータ: ['0x54', '0x68', '0x65', '0x20', '0x66', '0x6c', '0x61', '0x67', '0x20', '0x69', '0x73']
残りのビット列: 0010000000111110011100000101000001000000000000110111110001001000000111000110011101110010011000010110000000000000011010010101100101010000011000010111010001100101011100100110110001100001011100000101111101101111011101100110010101110010011001010111001001000001011111010000111011000001001100000000000000001111000101100101111000000000000111100000000000000000000000000000111010000000010110100000000100001110100000010001
デコード済み文字列: The flag is

モード指示子:   0010 (英数字)
文字数: 7
Traceback (most recent call last):
  File "./sqrd.py", line 1052, in <module>
    data.extend([ord(alphanumeric_table[num])])
IndexError: list index out of range

おっかしいなーと思いながら問題を見直したら結構な人数が解いてるので,もう一度PDFファイルを見直してみる.

f:id:YDKK:20190501023843p:plain

何かあるし

f:id:YDKK:20190501024015p:plain

最前面に持ってきてピッタリ重ねたら普通にQRコードリーダで読める :innocent:

f:id:YDKK:20190501024114p:plain

reiwaVote

パスワード付きzipが落ちてきて,解凍したらめっちゃ.NET製っぽいバイナリが出てくる. f:id:YDKK:20190501024334p:plain 「Web問??」って感じだったけど実行したらブラウザが起動してユーザ登録と投票フォームが出てくる.

どうやら新元号を決めるための投票ページで,令和に決定したらフラグが出てくるっぽい.

普通にユーザを作って令和に投票しても謎の力で安晋の票が伸びて1位になれない.

SQLiteだしDBファイルどっかにあるのかなーとか探したりしたけど特に見当たらず.

ならまぁSQLインジェクションだろうと,基本中の基本の ' or 1=1-- みたいなユーザIDで登録してログインしたら shinzo としてログインできた.
そのまま「令和」に投票して期日を迎えたら無事に令和に決定.

f:id:YDKK:20190501024929p:plain

f:id:YDKK:20190501024943p:plain

予想以上にあっさり解けたけどネタ満載で面白かった.

ただ,これWindowsじゃない人は実行するのに苦労したのでは?
ちなみにdnSpyとかで中覗いてみたけどしっかり難読化してあって全然読めなかった.すごい.

感想

しばらくの間全くCTFに触れてなかったのでリハビリみたいな感じで楽しく解けた.
スコアサーバにアクセスするところから戦いは始まってる感があって,お祭りみたいで楽しかった.

Web問の初期配点が少しだけ高かったら嬉しかったけど,簡単だったし仕方ないね.
というのも,Web問のバイナリを奇跡的に開始直後にダウンロードできて2番目にsubmitできてたので.

バイナリ問題解けるようになりたいけど,何から始めるのが良いんだろう.

*1:ライブラリの使い方が分からずにまたしばらく時間を溶かした