[Vulnhub] – unknowndevice64

Pada kesempatan kali ini, penulis ingin kembali berbagi pengalamannya dalam mengerjakan Vulnhub.

Langsung saja gaskeun! ūüėÄ

Pertama kita menggunakan netdiscover untuk mencari IP address VM kita, berikut commandnya:

$ sudo netdiscover -i wlp3s0 -r 172.20.10.1/24

Sepertinya, IP address VM kita ada di 172.20.10.12. Kalau begitu, langkah berikutnya adalah kita scan port untuk mencari tahu port apa saja yang dapat kita akses. Tool yang digunakan adalah nmap, berikut commandnya:

$ sudo nmap -A -O -v -p1-65535 -oX unknowndevice.xml 172.20.10.12

Command -oX tersebut sebenarnya opsional karena kita hanya memasukkan hasil dari scan ke dalam file XML agar lebih mudah dilihat. Setelah dari XML, penulis meng-convert file xml tersebut menjadi sebuah file HTML. Tool yang digunakan adalah xsltproc, berikut commandnya:

$ xsltproc unknowndevice.xml -o unknowndevice.html

Berikut adalah hasil port scan:

Dari gambar diatas dapat kita lihat bahwa port yang terbuka adalah port 1337 dimana service yang berjalan adalah ssh dan port 31337 dimana service yang berjalan adalah http dengan backend Python.

Karena kita belum mempunyai informasi yang cukup, pertama mari kita lihat dulu ada apa saja di bagian http.

Hanyalah sebuah website sederhana yang tidak ada apa-apa. Mari kita coba lihat page-source.

 

Di dalam page-source terdapat sebuah clue yakni ada sebuah file gambar yang tersimpan di server. File tersebut bernama key_is_h1dd3n.jpg. Maka mari kita coba buka gambar tersebut.

Dari gambar tersebut, penulis mencoba untuk meng-extract informasi dari gambar tersebut. Tools mulai dari binwalk, foremost pun dicoba, bahkan stegsolve. Namun tidak menghasilkan apapun.

Maka dicobalah untuk menggunakan steghide. Saat kita mau extract isi dari file gambar tersebut, kita diminta untuk memasukkan password. Dari nama file kita bisa mengetahui bahwa password yang kita butuhkan adalah h1dd3n.

Setelah berhasil meng-extract file yang terdapat dalam file gambar tersebut, kita mendapatkan sebuah file txt yang berisi karakter-karakter yang merupakan bahasa Brainf*ck (Sensor dulu ye h3h3h3). Dari situ, digunakanlah tool yang bernama bf atau disebut sebagai brainf*ck interpreter. Berikut adalah hasil dari proses translate.

Dari hasil translate, kita mendapatkan sebuah informasi yang merupakan credential untuk ssh. Berarti langkah berikutnya adalah kita masuk ke dalam ssh.

YESH! Kita berhasil masuk. Namun kok ada yang aneh ya?

Kita tidak bisa menjalankan command yang kita inginkan. Dan setelah di cari tahu dari environment variable nya tidak menunjukkan /bin/bash atau /bin/sh tapi /bin/rbash. Apa sih rbash itu?

Menurut link ini, rbash atau Restricted Bash sebenarnya adalah bash sederhana tapi dengan beberapa fitur yang dilarang (diblokir).

Dalam kasus ini, bagaimana caranya kita mengetahui apa saja command yang bisa kita gunakan?

Disini dapat kita lihat bahwa isi dari environment variable PATH adalah /home/ud64/prog. Untuk environment variable ini, PATH menyimpan informasi untuk darimana shell harus mencari file executable untuk dijalankan. Mari kita lihat apa aja isi dari directory tersebut:

Ternyata, program yang dapat kita gunakan hanya ada 4, yakni:

  • date
  • id
  • vi
  • whoami

Lalu jika hanya itu, bagaimana kita bisa mendapatkan root?

Setelah melakukan pencarian selama beberapa menit, penulis menemukan bahwa program vi itu bisa digunakan untuk menjalankan command. Dengan informasi ini, kita bisa memanggil /bin/sh atau /bin/bash untuk mendapatkan shell.

Yeay! Shell!

Tapi kok masih masuk rbash ya?

Itu karena kita belum set environment variable nya menjadi yang benar. Jika kita bandingkan dengan shell yang “sehat” maka isi variable $SHELL dan $PATH akan sebagai berikut:

Dapat dilihat bahwa shell yang sehat akan berisikan /bin/bash sedangkan pada shell kita ini masih berisikan /bin/rbash. Jadi yang perlu kita lakukan adalah mengubah si rbash itu menjadi bash atau sh. Bagaimana?Kita bisa melakukan export untuk mengubah isi dari environment variable. Berikut command yang penulis gunakan:

$ export SHELL=/bin/sh

$ export PATH=/usr/bin

Dari command diatas, penulis mengubah isi dari $SHELL menjadi /bin/sh yang menandakan bahwa shell yang ingin penulis gunakan bukanlah yang rbash tapi sh. Lalu $PATH diganti dengan /usr/bin untuk menandakan jika ingin mengeksekusi suatu perintah, shell akan mencari dari directory /usr/bin tersebut.

YEAY kita berhasil keluar dari rbash ūüėÄ (membutuhkan waktu sekitar beberapa hari untuk penulis menyadari akan cara ini (penulis tidak mengerjakan Vulnhub ini setiap hari dan setiap waktu dan pengalaman penulis dalam hal ini belum seberapa)).

Kemudian, hal berikutnya yang harus kita lakukan adalah melakukan privilege escalation agar kita menjadi root. Seperti pada writeup sebelumnya, penulis menggunakan fitur SUID untuk melakukan privilege escalation. Jadi sekarang kita perlu mencari program apa saja yang mempunyai permission tersebut.

Didapatkanlah beberapa program yang memiliki permission s yang dapat kita gunakan. Untuk kali ini, penulis menggunakan program sudo. Namun, saat kita ingin menjalankan program dengan sudo kita harus mengetahui terlebih dahulu password sudo dari user tersebut. Karena kita tidak mempunyai informasi tersebut, penulis mencoba untuk mencari tahu program apa saja yang dapat dijalankan dengan sudo tapi tidak membutuhkan password, berikut command yang digunakan:

$ sudo -l

Lebih lengkapnya dapat dilihat di man sudo. Berikut output dari command tersebut:

Terlihat bahwa program yang berada di path /usr/bin/sysud64 dapat dijalankan dengan sudo tanpa memerlukan password. Mari kita periksa program apakah itu.

Rupanya program itu adalah strace. Setelah pencarian di G O O G L E, penulis menemukan cara eksekusi strace untuk spawn shell pada link.

Dengan begitu, penulis melakukan eksekusi program tersebut dengan bantuan sudo dan mendapatkan root. Berikut commandnya:

$ sudo /usr/bin/sysud64 -o /dev/null /bin/sh

YEAH ROOT!

Sekarang kita tinggal mencari flag root di /root.

Dan didapatkanlah F L A G.

 

Leave a Reply

Your email address will not be published. Required fields are marked *