Juniors CTF 2016 Writeup

この大会は2016/11/26 0:00(JST)~2016/11/28 0:00(JST)に開催されました。
今回もチームで参戦。結果は1400点で666チーム中124位でした。
自分で解けた問題をWriteupとして書いておきます。

Black Suprematic Square (trivial web)

ソースを見ると、表示されない画像を読み込んでいる。

<img src = "http://i.imgur.com/YyHPw50.jpg" width=0>

f:id:satou-y:20161203211029j:plain
この文字列がフラグ。

aima0AiwahsidupaiToehoong1PhieruqueivahphieKah7uceetair9aiGae1eSsaedoo4becooShohhu8eifahXi7EJoh2gaephechei5chiP9

Find The Gobblewonker (trivial network admin web)

OpenVPNで接続する。問題のURLにアクセスすると、フラグが表示されていた。
f:id:satou-y:20161203211423p:plain

q8mvbp8sFNPpFj2dZkEkweNEFdBIuhVYkEr2brnj2qstJ3QbAtklx0imht8pdb2PafDIXs3Sxojl3m5q

Here goes! (trivial crypto recon)

図形の換字式暗号と考え、調べる。
http://yanazlatinneko.tumblr.com/post/119699418139/cadenthegrey-bills-symbol-substitution-cipher で対応表を見つけた。
f:id:satou-y:20161203211615p:plain

FIXPROBLEMQUICKLYWITHGALVANIZEDJETS

Southern Cross (crypto)

ヴィジュネル暗号。http://www.geocachingtoolbox.com/index.php?lang=en&page=vigenereCipherSolveで復号してみる。全文は長すぎて復号できないので、途中まで切って復号する。鍵はBOLIVARであることがわかった。コードを書いて全文を復号してみる。

import string

al_l = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
key = 'BOLIVAR'
k_size = len(key)

with open('crypt.txt', 'r') as f:
    data = f.read()

count = 0
plain = ''
for i in range(len(data)):
    enc_c = data[i:i+1]
    if enc_c in string.uppercase:
        key_c = key[count%k_size:count%k_size+1]
        index = al_l.index(enc_c) - al_l.index(key_c)
        if index < 0:
            index += 26
        plain += al_l[index:index+1]
        count += 1
    else:
        plain += enc_c

print plain

復号した結果、ストーリーのタイトルはSelected Storyであるとわかったが、これはフラグではない。問題に最後の部分にフラグがありそうなことが書いてある。・・・ということで最後の文がフラグ。

BOLIVAR CANNOT CARRY DOUBLE