[Vulnhub] HackInOS: 1

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

Pertama kita lakukan pencarian IP dari vulnbox kita dengan netdiscover:

$ sudo netdiscover -i wlp3s0 -r 172.20.10.0/24

Dengan hasil sebagai berikut:

Kedua, kita lakukan port-scanning dengan nmap:

$ sudo nmap -A -O -v -p1-65535 -T4  172.20.10.14

Dengan hasil sebagai berikut:

Dapat kita lihat dari sini bahwa ada 2 port yang open yakni port 22 (SSH) dan port 8000 (http). Dan dapat dilhat juga bahwa pada port 8000 terdapat robots.txt yang dimana memberikan kita informasi bahwa ada page upload.php dan directory uploads.

Penulis mengabaikan port 22 (SSH) terlebih dahulu karena tidak punya informasi login. Penulis melihat isi dari port 8000.

Ternyata isi dari websitenya adalah WordPress. Mengingat informasi yang penulis dapat dari robots.txt tadi penulis coba langsung untuk menuju ke upload.php.

Hmm, upload file image ya. Penulis pun mencoba mainkan dengan upload file php 😀 .

Urh…? Tidak terjadi apapun dan hanya muncul emote :). Penulis pun coba melihat isi dari page source.

Hmm terlihat seperti form standard. Tapi tunggu…

Ohoho, lihat apa yang penulis temukan. Sebuah hint 😀 . Penulis pun langsung membuka halaman tersebut.

Hooooo, ternyata isi dari hintnya merupakan source code dari upload.php.

Disini dikatakan bahwa kita “harus” meng-upload file gambar. Kenapa? Karena di bagian validasi dituliskan bahwa agar kita bisa masuk ke dalam validasi:

Gambar yang kita upload haruslah merupakan PNG atau GIF. Yah berarti kita tidak bisa meng-upload file reverse dong 🙁 .

Or can we? 🙂

Mari kita perhatikan kembali source code nya. Agar kita bisa masuk pada validasi diatas, yang perlu kita lakukan hanyalah membuat program tersebut mengenali file yang kita upload sebagai file gambar. Apa artinya? Pada file yang akan kita upload, kita perlu menyisipkan identifier atau dalam hal ini magic number. Dengan magic number ini kita bisa membuat suatu file menjadi file apa saja.

Pada saat ini, yang dibutuhkan agar bisa upload file reverse shell adalah menambahkan identifier pada file tersebut dengan identifier GIF atau PNG. Kali ini, penulis menggunakan identifier GIF. Maka pada file reverse shell pun ditambahkan identifier GIF.

Setelah itu pun penulis mencoba melakukan upload file tersebut.

Wokeeeee, file berhasil terupload. Tapi kok nama filenya ? ya? Pada source code memang ditulis bahwa jika upload sukses maka tulisan tersebut akan di print. Lalu bagaimana kita bisa mengetahui nama filenya?

Pada potongan code diatas, dilihat bahwa file yang kita upload nama filenya akan dirubah. Dimana tahapannya adalah sebagai berikut:
> Nama file akan di tambahkan dengan random number dari 1 sampai 100 lalu di hash MD5.

> Hasil dari MD5 nya akan ditambahkan dengan extension file aslinya.

Dari sana, kita bisa mencari file tersebut. Tapi kan akan membutuhkan waktu lama :(.

Oh tentu tidak, ada fitur yang namanya scripting. 😀

Dengan informasi tersebut, penulis membuat sebuah script sederhana menggunakan bahasa programming Python untuk membuat list kemungkinan filename dari file tersebut. Berikut scriptnya:

 

Bingo! Nama file yang kita upload menjadi e276ea2a738fa66a8fe0dfdb92f328c2.php.

Karena kita sudah mendapatkan nama file reverse shell kita, maka kita dapat melakukan reverse shell pada server ini. Pertama kita set listener dengan menggunakan netcat:

$ nc -nlvp 6969

Setelah itu tinggal mengakses file reverse shell untuk memulai proses.

YES SHELL SPAWNED!

Sekarang dari sini yang bisa kita lakukan adalah privilege escalation. Untuk itu penulis mencoba dengan teknik abuse SUID. Dengan command:

$ find / -perm -u=s -type f 2>/dev/null

Dari list yang kita dapat, ada satu program yang menarik yaitu tail yang dimana adalah command untuk menampilkan bagian terakhir dari sebuah file.

Dan program ini berjalan sebagai root.

Lalu? Hubungannya apa?

Nah, dari sini karena tail berjalan sebagai root, kita bisa melakukan read pada file yang hanya memiliki permission read pada root yaitu shadow yang berada di /etc/shadow.

$ tail /etc/shadow

Tidak ada yang menarik :(. Disini kita memerlukan password dari user root.

Lalu bagaimana dong? Kan program head tidak bisa digunakan untuk baca file tersebut karena tidak berjalan sebagai root.

Setelah melakukan googling, penulis menemukan fitur menarik dari tail yang bisa dilihat pada link berikut.

$ tail -n+1 /etc/shadow

NAH! Kita dapat hash dari username root. Karena masih dalam bentuk hash, kita harus crack dahulu hashnya. Disini, penulis menggunakan tools john the ripper.

Lalu didapatlah password root yakni “john”. Setelah itu penulis tinggal melakukan privilege escalation dan mendapatkan flag yang berada di path /root/flag.

P.S: Vulnbox ini cukup menarik untuk penulis karena memerlukan sedikit scripting.

 

Leave a Reply

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