ぺんぎんさんのおうち

日本語勉強中のドイツ産ペンギンがいろんなことを書く

D-CTF Quals 2017 [Write-up]

Harekazeとして参加し, 846pで25位(/939)でした.
僕は3問解いて6pいれました.


[Junior] Too easy! (1p)
バイナリファイルが与えられます. 拡張子は.exeですが64bit-elfファイルでした.
実行するとパスワードを聞かれ, 入力したものが間違っていると Wrong password と言われ終了します.
gdbで処理を追いかけていると, strongpassword_as_a_pro があったので, 入力すると数字が表示され, hex-decodeするよう言われるのであとはやるだけでした.

別解(?)
stringsgrep だけでフラグを得ることができます(grepは必要ないかもしれません).
strings looksgood すると

44435446H
7b366436H
65313736H
30633161H
33616539H
65346564H
65323435H
37643864H
32346230H
62636632H
30376561H
33376538H
33646362H
34643039H
65326437H
34656639H
35386232H

が得られるので, Hを除いてhex-decode, 最後に } を加えるとフラグが得られます.
また, stringsで パスワードっぽい文字列が出てくるので, それを入力するだけでも答えにたどり着きます.

[Junior] A thousand words (2p)
images.zipが与えられて, 解凍すると0001~1154のpngファイルが得られました. 問題から察するに, この中のどれかにフラグが隠されていると思ったので, 総当たりしてみました

import os

files = os.listdir('./')
for _file in files:
    with open(_file) as f:
        dt = f.read()
        if dt.find("DCTF{") != -1:
            print(_file, dt.find("DCTF{"))

すると 1024.png のみでヒットしたので, strings 1024.png | grep DCTF{ でフラグが得られました.

[Junior] Suvey (3p)
いわゆるFeedback問? Googleのフォーム入力するだけでした