はまやんはまやんはまやん

hamayanhamayan's blog

ASIS CTF Quals 2022 Writeup

[web] Beginner ducks

ソースコード有り。

GET /duck?what=[input]という感じで渡す。
入力は[A-Za-z.]しか使えず、最終的にwith open(eval(what),'rb') as f:部分で評価される。

with open('flag.txt') as f:
    flag = f.read()

で謎取得している部分があるが、withで読み込んでも変数自体は残るのか。
定義されている変数を参照するくらいしかできることがなさそうなので、実はfが読めちゃうのか?

>>> print(open('flag.txt'))
<_io.TextIOWrapper name='flag.txt' mode='r' encoding='UTF-8'>

以上を参考に色々実験していると/duck?what=f.nameでフラグが得られる。

ASIS{run-away-ducks-are-coming-🦆🦆}