IPv4アドレスとポート番号、そしてブラウザ上でLinuxのターミナルが使えるサービスのURLが与えられた。
このターミナル上でnc
コマンドを用いて指定のIPv4アドレスとポート番号に接続すると、
flagの場所が16進数で表示され、入力を求められた。
適当な文字列を入力すると、その文字列が出力された。
さらに、%
を含む文字列を入力すると、printf
の書式として解釈されるようだった。
そこで、以下の入力を入れてみた。
An IPv4 address and a port number, and an URL of a service where we can use a Linux terminal on a Web browser was given.
I connected to the specified IPv4 address and the port number via nc
command on the terminal.
Then, the place of "flag" is displayed in hexadecimal and I was asked to enter some input.
I entered some string, and the string was printed.
Also, I found that entering strings that contain %
results in the string interpreted as the format specifier for the function printf
.
Seeing this, I tried entering this input:
すると、以下の出力がされ、この環境ではポインタは32ビットっぽいことが読み取れた。
As a result, this output was produced and I found that pointers in the environment seems 32-bit long.
また、以下の入力を入れてみた。
Also I tried entering this input.
すると、以下の出力がされ、4番目以降のデータとして入力した文字列が使われることが読み取れた。
It resulted in this output being produced, and I found that the string entered is used as the data for the 4th formatting and later.
そこで、まず出力されるflagの位置がASCII印字可能文字で表せるようになるまで、接続をし直した。
そして、flagの位置が0x565d2060
となったとき、以下の入力を入れた。
Seeing this, I reconnected to the server until the place of "flag" displayed becomes able to express using only ASCII printable characters.
Then, seeing the place of "flag" being 0x565d2060
, I entered this input:
すると、以下の出力がされ、flagが得られた。
As a result, this output was produced and I obtained the flag.