IPv4アドレスとポート番号、ELFファイルshellcode
、
そしてブラウザ上でLinuxのターミナルが使えるサービスのURLが与えられた。
shellcode
をobjdump
で逆アセンブルして読むと、
読み込み先のアドレスをprintf
関数で出力した後、scanf
関数でそこに文字列を読み込んでいることが読み取れた。
この読み込み先のアドレスは-0x50(%rbp)
であり、リターンアドレスは0x58バイト先である。
そこで、シェルを起動するプログラムを入力し、リターンアドレスをそのアドレスに設定してみることにした。
以下が今回使用したシェルを起動するプログラムのソースコードである。
An IPv4 address and a port number, a ELF file shellcode
,
and an URL of a service where we can use a Linux terminal on a Web browser was given.
Disassenbling shellcode
via objdump
in printf
and reading a string via the function scanf
after that.
The address to store what is read was -0x50(%rbp)
and the return address is 0x58 bytes ahead from there.
Based on this, I decided to try to input a program to launch the shell and set the return address to the address of the program.
This is the source code for the program to launch the shell used for this challenge:
これを
I assembled this via
プログラムを送るのは、以下の手順で行った。
echo (処理結果) | base64 -d | gunzip > attack.pl
というコマンドを実行する。
処理結果は右クリックから「貼り付け」で貼り付ける。
結果は、ルートディレクトリのディレクトリ名と思われる文字列が並び、flagがありそうな様子は無かった。
プログラムを調整して調査を行ったところ、/home/user/flag
というファイルが見つかり、
以下のプログラムを実行することでflagが得られた。
echo (the result) | base64 -d | gunzip > attack.pl
on the terminal.
I pasted the result using the "Paste" menu after right-clicking.
As a result, strings that looked like the directories in the root directory appeared and there didn't seem the flag.
I modified the program for investigation. As a rseult, I found a file /home/user/flag
and obtained the flag via this program: