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).
Seperti biasa hal yan pertama kita lakukan adalah Reconnaissance & Enumeration
.
Pertama kita akan memulai dengan melakukan pemindaian port menggunakan nmap, dari hasil pemindaian tersebut, kita mendapatkan port menarik yang terbuka :
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.
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
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 : KFbpZGHRIpnzFbxTEYKyxRununcAz8HjPassword : KFbpZGHRIpnzFbxTEYKyxRununcAz8Hj
Kita berhasil login menggunakan credentials yang telah kida dapatkan.
Dari gambar diatas kita mendapatkan beberapa informasi, seperti penggunan Ipv6 Connections diperbolehkan (RFC 2428) dan juga servernya mendukung 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.
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 )
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.
Melihat list yang di share oleh server
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.
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
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
Kita sudah mendapatkan akses shell berserta dengan flag user.txt
Ditahapan selanjutnya kita akan melakukan Previlege Escalation untuk menadpatkan akses user yang lebih tinggi.
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.
Dari filet tersebut kita mendapatkan bebrapa informasi yang cukup menarik
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
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
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\$\$;-- -"