izumo’s diary

主に競プロの精進記録

SECCON Beginners CTF 2020 Writeup

SECCON Beginners CTF 2020に参加しました。

157点で1009チーム中465位でした。3問しか解けてなくてwriteupなんて書くのはおこがましい気もするのですが、去年は1問しか解けなかったので記念に書いておきます。

f:id:izumo27:20200524143737p:plain

Welcome

Discordの#announcementにフラグが書いてある。

恐らく一番簡単な問題。去年はこの探すだけ問題の1問のみ解けた。

f:id:izumo27:20200524143800p:plain

R\&B

problem.pyを見ると、rot13とbase64で何度もエンコードしている。先頭の文字を見ればどちらでエンコードしたか分かる。

デコードで使ったコード(Python

import codecs
import base64


path = "encoded_flag"

with open(path) as f:
  t = f.read()
  while True:
    if t[0] == 'B':
      t = base64.b64decode(t[1:]).decode()
    elif t[0] == 'R':
      t = codecs.decode(t[1:], "rot13")
    else:
      break
  print(t)

f:id:izumo27:20200524143740p:plain

Spy

問題文に書いてあるURLを見に行くと何かのログインページになっている。そして与えられたapp.pyはサーバ側に相当しそう。

パスワードが合っているか判定する部分に脆弱性があるのではないかと思ったが、しっかりハッシュを使っていて問題なさそうに見える。

しばらくしてアカウントがない人はパスワードをチェックしていないことに気づいた。ということはアカウントがある人とない人では応答時間が違うのではないかと考えた。

応答時間は、ログインしようとすると少し薄い字だが表示してくれる。E, G, L, M, T, X, Yが長かったので、それで試してみるとフラグが得られた。

f:id:izumo27:20200524145449p:plain

おわりに

相変わらずBeginnersといいつつ初心者の僕には解けない問題ばかりでした。AtCoder Beginner Contestも最初は2,3問しか解けなかったのでそういうものなのかもしれませんが。

来年はBeginnerタグがついてる問題くらいは解けるようになっていたいです。