[HackTheBox] – Registry

Didapatkan sebuah box bernama Registry dengan IP 10.10.10.159

Menurut peserta lain, box ini akan berisi banyak enumerasi, real-life dan costum exploitation.

Mari kita mulai dengan nmap dan dirbuster

Terdapat port 22, 80, dan 443 serta ditemukan directory install dan index.html

Pada directory /install/index.php ditemukan tulisan tulisan aneh, nampaknya kita diberikan sebuah file.

Setelah di ambil, ternyata merupakan sebuah zip file, mari kita unzip dan lihat isinya

Ditemukan 2 file, yaitu ca.crt dan sebuah readme.md

ca.crt merupakan sebuah certificate dan readme.md akan berisi clue tentang box yang kita hadapi sekarang ini.

Kita diberikan referensi kepada Docker Registry, namun dimana kita harus melakukan ekstraksi data docker tersebut ?

Oh ternyata ada vhost, oleh sebab itu pembuat box juga meng include certificate agar kita memperhatikannya lebih baik, docker.registry.htb.

Baik, page tersebut kosong, tapi nampaknya kita perlu menggunakan referensi dari

https://docs.docker.com/registry/spec/api/

Kita mengetes dengan menambahkan pada URL menjadi docker.registry.htb/v2 untuk mengecek endpoint yang menggunakan Docker Registry API. Kita diberikan sebuah Basic HTTP Authentication, namun bisa kita lewati dengan user dan password paling basic, yaitu admin admin, haha

Mari kita lanjutkan dengan mengecek repository apa saja yang ada pada docker ini

Ditemukan repository bernama bolt-image, mari kita cek tags apa saja yang ada pada repo tersebut.

Hanya ditemukan 1 tag, bernama latest

Mari kita melakukan GET pada manifest yang ada pada repository bolt-image dan dengan tag latest

File latest merupakan semacam database berformat JSON

Terdapat 10 blob dengan 10 digest yang berbeda, kita bisa mendownload semuanya

Setelah semua blob terdownload, unzip semuanya dan didapatkan semacam filesystem dari docker.registry.htb

Penulis stuck disini sangat lama hehe, melakukan enumerasi selama berhari hari, penulis mendapatkan :

  • Private Key RSA
  • config file di directory .ssh
  • Sebuah Expect Script untuk login SSH

Baiklah kita sudah cukup enumerasi untuk melanjutkan yang mantap mantap

Kita akan melakukan koneksi SSH ke bolt@10.10.10.159 dengan menggunakan RSA private key dan passphrase

Kita dapat user.txt nya

ytc0ytdmnzywnzgxngi0zte0otm3ywzi

Selain itu, penulis juga menemukan sebuah file database bolt.db

File tersebut merupakan file SQLite, sehingga penulis memindahkannya ke mesin lokal dan membukanya menggunakan SQLite

Kita mendapatkan 1 user admin dengan password yang di hashing menggunakan bcrypt atau blowfish encrypt, mari kita crack passwordnya menggunakan hashcat dan wordlist rockyou

Dapet password untuk admin nya, mari kita coba login ke 10.10.10.159/bolt/bolt (ditemukan setelah dirbusting yang sangat lama), jangan tertipu dengan 10.10.10.159/bolt (rabbit hole)

Kita login dengan username admin dan password strawberry

Didapatkan sebuah dashboard yang penuh dengan menu, pada saat pengerjaan, penulis menemukan “reverse-shell.php” di panel sebelah kanan, sehingga penulis mengira harus melakukan file upload untuk mendapatkan reverse shell ke www-data.

Kita dapat melakukan file upload disini, namun cuma ada beberapa file type yang diterima untuk dilakukan upload, dan file ekstensi .php dilarang untuk di upload. Penulis sempat mencoba melakukan file tampering namun ternyata file upload terlindungi oleh backend protection pula “File Upload Failed”

Penulis menemukan bahwa, karena kita login sebagai admin, kita bisa change configuration di bagian file upload.

Tambahkan “php” ke array accept_file_types, sekarang kita bisa mengupload file .php

Namun ada beberapa hal yang perlu diperhatikan dalam file upload ini :

  • Terdapat firewall untuk melimit koneksi outbound, hanya menerima koneksi inbound
  • Ada cron job yang aktif setiap beberapa detik atau menit, sangat sebentar jangka waktunya, yang akan mereset config file ini, menghapus file yang kita upload
  • Karena ada firewall, kita tidak bisa menggunakan payload reverse shell, melainkan kita menggunakan payload bind shell

Sehingga kita akan memaksa websitenya menjadi penerima, yang melakukan listen dan mesin lokal kita yang akan nc dan mendapatkan shell dari situ

Sip, kita sudah dapat shell sebagai www-data mari kita cari cara menjadi root buat cat root.txt nya

Penulis akan melakukan enumerasi linux dengan menggunakan script shell yang akan di copy dari mesin lokal menggunakan secure copy melalui ssh user bolt dan menaruhnya di directory /tmp dimana permissionnya selalu world writtable.

Setelah dijalankan, penulis memindahkannya lagi ke mesin lokal, jaga jaga jika shellnya mati kita tidak perlu mengulang enumerasi linux.

Ditemukan hal yang menarik, user www-data bisa melakukan command backup menggunakan restic dengan permission sebagai root tanpa harus menyediakan password seperti sudo.

Nah karena kita memiliki user www-data dan kita diberikan permission root untuk melakukan backup -r rest*, kita bisa membackup root/root.txt yang tadinya tidak bisa kita akses, memindahkannya ke mesin lokal kita dimana kita adalah root, dan membukanya tanpa masalah.

Step by step melakukan backup menggunakan restic :

  • Cari di github sebuah tool dengan nama rest-server
  • Selesaikan instalasi di mesin lokal, dan kirim executablenya melalui secure copy rsa lagi ke folder /tmp di www-data melalui bolt@10.10.10.159:/tmp
  • Masih di folder yang sama yaitu /tmp, mari kita bikin directory bernama misalnya /myrepo
  • restic init -r /tmp/myrepo/ (untuk melakukan inisialisasi repository dengan path yang sudah ditentukan, akan mendapatkan response berupa “created restic repository f1043e78fa at /tmp/myrepo”)
  • ./rest-server –no-auth –path /tmp/myrepo/ & (untuk menyalakan server restic tanpa authentikasi di path yang sudah ditentukan dan menaruh prosesnya di background)
  • sudo restic backup -r rest:http://127.0.0.1:8000 /root/root.txt (melakukan backup root/root.txt ke localhost, akan mendapatkan response berupa snapshot 27e5cf86 saved)
  • pergi ke mesin lokal, dan tarik backup dengan restic restore 27e5cf86 -r rest:http://10.10.10.159:8000 –target /root/Documents/htb/registry/

Didapatkan root.txt

ntrkzgnkotaxyju0ntrinda4yzbkztgw

 

[ROOT SHELL DISCONTINUED]

Leave a Reply

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