TCPサーバの接続情報とファイルが与えられた。
このファイルをtreebox.py
が得られた。
treebox.py
を読むと、以下のことが読み取れた。
flag
にある。import
またはメソッドの呼び出しがある場合は実行しない。
そこで、Pythonで直接メソッドの呼び出しを書かずにメソッドを呼び出す方法を探した。
すると、メタクラスというものがあることがわかった。
インタラクティブモードで試してみると、クラス名だけでメタクラスに指定したクラスのインスタンスを作れることがわかった。
A file and information to connect to a TCP server were given.
Opening the file with treebox.py
.
Reading treebox.py
, I found these things:
flag
in the current directory.import
or method calls.
Seeing this, I searched for ways to call methods without writing method calls directly.
As a result, I found metaclasses.
Trying on the interactive mode, I found that we can create an instance of a class specified as the metaclass using only a name of a class.
さらに、演算子から呼び出せる特殊メソッドを用いてexec
メソッドを呼び出すことを試みた。
一見第一引数の self
が邪魔になりそうに思えるが、インタラクティブモードで試してみると self
に相当する引数は渡らないことがわかった。
After that, I tried to call the exec
method via special methods that can be called from operators.
The first argument self
looked like an obstacle, but an experiment on the interactive mode revealed that no arguments that correspond to self
are actually passed.
これらを踏まえ、以下のプログラムを送信することでflagが得られた。
Based on these, I obtained the flag by sending this program.