Shellcode

IPv4アドレスとポート番号、ELFファイルshellcode、 そしてブラウザ上でLinuxのターミナルが使えるサービスのURLが与えられた。

shellcodeTDM-GCCobjdumpで逆アセンブルして読むと、 読み込み先のアドレスを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 shellcodevia objdump in TDM-GCC, I found that printing the address where the input is read to via the function 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:

launch-shell.asm

これをNASMでアセンブルして埋め込んだ以下のプログラムを作り、ターミナルに送って実行した。

I assembled this via NASM and embed the result to this program. Then, I sent this program to the terminal and executed that.

attack.pl

プログラムを送るのは、以下の手順で行った。

  1. プログラムに、CyberChefで Gzip と To Base64 をかける。
  2. 処理結果をコピーし、ターミナルで echo (処理結果) | base64 -d | gunzip > attack.pl というコマンドを実行する。 処理結果は右クリックから「貼り付け」で貼り付ける。

結果は、ルートディレクトリのディレクトリ名と思われる文字列が並び、flagがありそうな様子は無かった。
プログラムを調整して調査を行ったところ、/home/user/flagというファイルが見つかり、 以下のプログラムを実行することでflagが得られた。

How I sent the program is:
  1. Apply "Gzip" and "To Base64" to the program on CyberChef.
  2. Copy the result and execute a command 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:

attack-mod.pl

flag{It_is_our_ch0ices_that_show_what_w3_truly_are_far_m0re_thAn_our_abi1ities}

setodaNote CTF