Zetta

Hack The Box - Machine Zetta Walktrough / Writeup

Introduce Machine

Mesin maker kali ini adalah jkr, sistem operasi yang digunakan adalah Linux dan tingkatan dari mesin ini adalah Hard. Mesin ini direlease pada tanggal 31 Agustus 2019 dan retired pada tanggal 23 FebruarI 2020 dini hari waktu indonesia bagian barat (WIB).

Scanning & Enumeration

Seperti biasa hal yan pertama kita lakukan adalah Reconnaissance & Enumeration .

Port Scanning

Pertama kita akan memulai dengan melakukan pemindaian port menggunakan nmap, dari hasil pemindaian tersebut, kita mendapatkan port menarik yang terbuka :

PORT 80 HTTP

Zetta Website

Halaman di website ini semuanya statis dan tidak dinamis sama sekali, semua feature yang ada pada website tersebut tidak berfungi seperti form kontak dan sebagainya . Oleh karena itu kita akan melakukan enumerasi dengan melihat source code html website.

Source Enumeration

Pada source tersebut kita melihat bahwa script ini akan megenerate 32 character string secara random.

KFbpZGHRIpnzFbxTEYKyxRununcAz8Hj

Informasi ini kita simpan terlebih dahulu, karena belum tau manfaatnya buat apa kedepanya *yang pasti ada kegunaanya

Getting Username & Password FTP

Setelah melihat halaman secara keseluruhan, kita mendapatkan informasi username dan password FTP

Dilihat dari informasi diatas panjang character dari username tersebut adalah 32 character, informasi username dan password ini dibuat oleh fungsi randomString pada variable rString tadi

Karena kita sudah mengeneratenya sendiri, maka dari itu kita gunakan saja dan kita coba login ke service FTP :

Username : KFbpZGHRIpnzFbxTEYKyxRununcAz8Hj
Password : KFbpZGHRIpnzFbxTEYKyxRununcAz8Hj

PORT 21 : FTP

Kita berhasil login menggunakan credentials yang telah kida dapatkan.

RFC 2428 - FTP Extensions for IPv6

Dari gambar diatas kita mendapatkan beberapa informasi, seperti penggunan Ipv6 Connections diperbolehkan (RFC 2428) dan juga servernya mendukung FXP Transfer (File eXchange Protocol).

https://tools.ietf.org/html/rfc2428

FXP Transfer (File eXchange Protocol)

FXP ini adalah metode transfer data yang menggunakan FTP untuk mentransfer data dari satu server ke server yang lain (antar-server) tanpa perlu merutekan data ini melalui koneksi ke klien.

Sederhananya kalau kita ingin mengcopy file dari server 1 ke server 2, jika kita pakai cara "biasa" maka yang terjadi adalah file dari server 1 akan di download ke client dulu baru di upload ke server 2.

Sedangkan kalau penggunaan FXP yang terjadi adalah seperti gambar diatas, perintah transfer akan membuat pengopian terjadi secara langsung antara server 1 dan server 2.

The EPRT Command

Kita login kembali dengan menambahkan EPRT command, EPRT command ini digunakan untuk mengextend koneksi data contohnya dukungan ipv6. Jadi disini kita akan menegoisasikan komunikasi antar protocol menggunakan alamat ipv6 ( semacam jembatan gitu )

IPv6 Discovery

Saat kita mengirimkan command LIST kita mendapatkan Ipv6 dari FTP Server

Setelah kita mengidentifikasi IPv6 milik target, kita akan melakukan scanning kembali untuk melihat port lain yang terbuka.

Ternyata ada service lain yang hanya berjalan di IPv6 saja, selanjutnya kita akan menggunakan rsync tool untuk melihat informasi apa saja yang bisa kita dapatkan di port 8730 ini.

PORT 8730 - Rsync

Melihat list yang di share oleh server

Rsync get directory listing

Kemudian kita sync/download semua list file tersebut ke mesin lokal kita :

for i in $(cat list | awk '{print $1}'); do rsync rsync://[dead:beef::250:56ff:feb9:2560]:8730/${i} -av ${i}; done

Setelah mencoba list tersebut ternyata tidak ada satupun yang bisa kita download. Disini saya mencoba untuk menambahkan beberapa folder lainya yang ada pada hirarki sistem linux ke dalam list *feelingaja

/boot
/dev
/etc
/home
/lib
/lib32
/lib64
/lost+found
/media
/opt
/proc
/root
/run
/sbin
/srv
/sys
/usr
/var

Dan akhirnya ada satu folder yang bisa kita download yaitu folder /etc/

Karena saya cukup penasaran, kenapa file etc ini disembunyikan dari list. Maka saya langsung tertuju untuk melihat file konfigurasi rsyncd.conf.

Didalam file rsyncd.conf kita juga melihat ada folder lain yang bernama /home/roy .

Dari konfigurasi dibawah ini tidak ada settingan host allow yang artinya kita harus memiliki credentials dari user roy agar kita dapat mengakses & mendownload/sync folder tersebut.

Biasanya credentials rsync itu berada di folder /etc/rsyncds.secrets, tapi untuk saat kita tidak dapat mengakses file tersebut dikarenakan kita tak memiliki izin.

Bruteforce Rsync Password

Oleh karena itu kita akan melakukan serangan bruteforce untuk menemukan password si roy

for wordlist in $(cat rockyou-20.txt); do sshpass -p ${wordlist} rsync rsync://roy@[dead:beef::250:56ff:feb9:2560]:8730/home_roy --list-only ; echo -e "PASSWORD AS : ${wordlist} \n\n "; done

Kita berhasil mendapatkan password yang digunakan oleh roy dan selanjut kita akan rsync/mendownload folder tersebut ke mesin lokal kita

rsync -r rsync://roy@[dead:beef::250:56ff:feb9:2560]:8730/home_roy -av roy

Initial Shell

Upload SSH Keys via Rsync

Berhubungan write acces ke folder si roy ini verified, maka dari itu kita copy file ssh autorized_key kita ke dalam servernya si roy

rsync -av /root/.ssh/authorized_keys rsync://roy@[dead:beef::250:56ff:feb9:2560]:8730/home_roy/.ssh/authorized_keys

Getting Users.txt

Kita sudah mendapatkan akses shell berserta dengan flag user.txt

Ditahapan selanjutnya kita akan melakukan Previlege Escalation untuk menadpatkan akses user yang lebih tinggi.

Previlege Escalation

Pada direktori home si roy ada sebuah file .tudu.xml , kita dapat melihatnya menggunakan tools bernama tudo yang telah disediakan oleh mesin target

TuDu is a commandline tool to manage hierarchical TODO lists, so that you can organize everything you have to do in a simple and efficient way.

Collecting Information

Dari filet tersebut kita mendapatkan bebrapa informasi yang cukup menarik

Juicy Information 1.0
Juicy Information 1.1
Juicy Information 1.2

Finding .git directory

Informasi pertama (Juicy Information 1.0) kita akan mencoba mencari .git direktori yang ada pada file sistem target

find / -type d -name ".git" 2>/dev/null

Folder .git yang berada pada direktori pure-ftpd dan nginx, tidak ada yang menarik sama sekali.

Dan untuk di folder /etc/rsyslog.d/.git, kita mendapatkan sebuah credentials dan sayangnya credentials ini tidak bisa digunakan di service manapun, terutama di autentikasi PostgreSQL

PostgreSQL Logging

Di informasi kedua (Juicy Information 1.1) , kita akan mencoba melihat log yang ada pada direktori /var/log/postgresql/

dan apa yang terjadi jika kita mencoba login ke service postgresql menggunakan username dan password yang secara acak ? apakah akan juga tercatat didalam file log ?

Oke dari gambar diatas semua informasi tercatat didalam log yang di handle oleh syslog. Lalu berdasarkan petunjuk sebelumnya, kita dapat juga menggunakan local7.info untuk mengirim pesan syslog ke dalam data menggunakan logger command

Logger is a command-line tool that uses the syslog facility present on most Unix and Linux systems

PostgreSQL injection to RCE

Kita akan mencoba menggunakan featute logging tesebut untuk menangkap respon/informasi apabila ada error dalam penggunaan PostgreSQL ini

Output diatas memberikan Syntax error, dari sini kita bisa chaining ke Remote Code Execution. Samplenya upload atau buat sebuah file reverse shell dan dilanjutkan dengan mengeksekusi file tersebut secara langsung melalui injeksi kita tadi.

Kemudian kita akan menjalankan program tersebut :

logger -p local7.info “Papoy',now());Drop Table If Exists RCE; Create Table RCE(t TEXT);Copy RCE From Program \$\$bash /tmp/Papoy\$\$;-- -"

Reference : https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5

Dan kita akan mendapatkan akses shell dengan user sebagai postgre

Setelah mendapatkan akses shell kita melihat ada sebuah file history postgresq_historyyang berisikan informasi username dan password database

Password Scheme in Tudo.xml

Sesuai dengan informasi ketiga (Juicy Informatio 1.2 ) apabila kita mengiginkan user root kita akan memasukan sesuai dengan schema yang telah ditentukan berdasarkan file Tudu.xml<secret>@userid

Secret = sup3rs3cur3p4ass
Userid = root

Getting root.txt

Jadi untuk password user root adalah sup3rs3cur3p4ass@root dan kita dapat membaca flagnya

Terimakasih, Kalo di rasa tulisan ini bermanfaat, silahkan Share. Semoga kebermanfaatan ini terus berlanjut!

Download Versi PDF

Teman teman juga dapat mendownload tulisan ini dalam format pdf.