skip to content
Yupy Syntax

HackTheBox - Mentor

/ 5 min read

Last Updated:

HackTheBox - Mentor Write up

HackTheBox baru-baru ini merilis mesin baru bernama “Mentor” yang menghadirkan tantangan menarik. Dalam penyelesaiannya, langkah pertama adalah mengidentifikasi vhost baru yang menyediakan dokumentasi API. Dokumentasi ini berisi daftar semua titik akhir yang dapat diakses.

Selanjutnya, dengan memanfaatkan kerentanan injeksi perintah, kita dapat memperoleh akses shell terbalik (rev shell). Setelah itu, kredensial database dapat diperoleh, dan hash database dapat di-dump.

Informasi tambahan yang berguna bisa ditemukan di file konfigurasi SNMP, yang berisi kata sandi pengguna. Akhirnya, untuk mendapatkan hak akses root, kita dapat menjalankan biner “sh” yang tersedia.

Information Gathering

Hasil dari perintah curl 10.10.11.193 yang dilakukan dari terminal. Output menunjukkan bahwa server mengembalikan respons HTTP 302 yang menunjukkan bahwa dokumen telah dipindahkan ke URL baru: http://mentorquotes.htb/. Ini adalah respons standar ketika sebuah halaman web telah dipindahkan sementara ke lokasi yang berbeda. Informasi tambahan dari output ini meliputi server yang digunakan (Apache/2.4.52 di Ubuntu) dan alamat IP server (10.10.11.193) alt text alt text

Scan Nmap: hasil dari perintah nmap -sC -sV mentorquotes.htb yang dilakukan dari terminal. Output ini merinci informasi yang ditemukan oleh Nmap saat memindai domain mentorquotes.htb (dengan IP 10.10.11.193) alt text

Fuzzing Directory: hasil dari perintah wfuzz yang digunakan untuk melakukan fuzzing terhadap domain mentorquotes.htb. alt text

Salah satu hasil menunjukkan respons 404 (Not Found) dengan payload api. alt text

Jika API subdomain kami Fuzzing lagi akan mendapatkan seperti berikut: alt text

Pada direktori /admin menunjukkan pesan kesalahan dalam format JSON. Ada dua bagian utama yang terlihat: satu berlabel Raw Data dan yang lain berlabel Pretty. Bagian Pretty diperluas untuk menampilkan detail pesan kesalahan, yang mencakup dua kesalahan yang menyatakan bahwa header hilang dengan pesan field required dan tipe value.error.missing. Ini menunjukkan bahwa ada upaya untuk mengakses endpoint API (seperti yang disiratkan oleh URL api.mentorquotes.htb/admin) tetapi gagal karena informasi header yang hilang yang biasanya diperlukan untuk otentikasi atau menentukan tipe konten dalam permintaan HTTP. alt text

Pada /docs menampilkan Dokumen API seperti digambar Dan kita juga melihat bahwa pemilik situs web tersebut jamesdan emailnya adalah james@mentorquotes.htb alt text

Exploitation

Mari kita coba mendaftar dengan bantuan dokumentasi. Namun, saya lebih suka bekerja dengan Burp Suite, jadi saya akan menangkap permintaan menggunakan Burp. alt text

Akun dibuat menggunakan kredensial acak. alt text

Sekarang, mari kita juga menangkap permintaan ke endpoint login di Burp. alt text

Dan kami berhasil mendapatkan token JWT-nya. alt text

Kami juga menangkap permintaan ke endpoint /users di Burp, yang akan memberikan daftar semua pengguna. alt text

Namun, kali ini kami mendapatkan kesalahan 403 Forbidden, yang memberi tahu kami bahwa hanya admin yang dapat mengakses sumber daya ini. alt text

Post Exploitation

Kami menggunakan snmpwalk untuk mendapatkan kredensial alt text alt text

Kami mencari kredensial login dan mendapatkan password dari user James alt text

Saat ini kami mencoba masuk dengan kredensial yang sama dan berhasil mendapatkan token JWT-nya. alt text

Dan kali ini, kami berhasil mendapatkan daftar pengguna. alt text

Jika kami kembali masih mendapatkan error untuk mengakses direktori /admin/ alt text

Kami menggunakan autentikasi token yang didapat tadi dan mendapatkan response 2 endpoint

  • /check
  • /backup
alt text

Implementasi titik akhir /check belum selesai. alt text

Tetapi titik akhir /backup memberitahu kami bahwa metode GET tidak diizinkan.

Mari kita lihat perubahan dalam permintaan tersebut. alt text

Dan hal tersebut mengindikasikan bahwa itu memerlukan objek JSON dengan atribut body. alt text

Kami menyertakan objek JSON kosong dan mengubah jenis konten menjadi application/json, yang menambahkan satu atribut tambahan yang disebut path untuk ditentukan. alt text

Setelah menyertakan keduanya, muncul pesan sukses yaitu Done! alt text

Mari kita mencoba injeksi perintah dasar dengan menggunakan perintah ping, tetapi sebelumnya kita akan memulai tcpdump. alt text

Dan JSON objeknya terlihat seperti ini. Coba dasar technique injeksi perintah dengan ;

Mari kita kirim request. dan kami mencoba mendapatkan shell baliknya. alt text alt text

Dalam direktori /app, saya menemukan file db.py yang berisi kredensial PostgreSQL.

/app/app # cat db.py
import os
from sqlalchemy import (Column, DateTime, Integer, String, Table, create_engine, MetaData)
from sqlalchemy.sql import func
from databases import Database
# Database url if none is passed the default one is used
DATABASE_URL = os.getenv("DATABASE_URL", "postgresql://postgres:postgres@172.22.0.1/mentorquotes_db")
# SQLAlchemy for quotes
engine = create_engine(DATABASE_URL)
metadata = MetaData()
quotes = Table(
"quotes",
metadata,
Column("id", Integer, primary_key=True),
Column("title", String(50)),
Column("description", String(50)),
Column("created_date", DateTime, default=func.now(), nullable=False)
)
# SQLAlchemy for users
engine = create_engine(DATABASE_URL)
metadata = MetaData()
users = Table(
"users",
metadata,
Column("id", Integer, primary_key=True),
Column("email", String(50)),
Column("username", String(50)),
Column("password", String(128) ,nullable=False)
)
# Databases query builder
database = Database(DATABASE_URL)

Untuk berinteraksi dengan database PostgreSQL, kita perlu meneruskan port menggunakan chisel. alt text

Mari kita transfer file biner chisel. alt text alt text

Marilah kita terhubung ke basis data PostgreSQL. Kami berhasil mendapatkan ketiga hash, di antaranya ada yang milik kami. alt text alt text alt text

Kami memecahkan hash menggunakan CrackStation dan mendapatkan kata sandi pengguna yang disebut 123meunomeeivani. alt text alt text

Privileges Escalation

Memeriksa apakah dalam file snmpd.conf kami terdapat kata sandi SuperSecurePassword123__ alt text

Kami mencoba login dengan user James yang passwordnya sudah kita dapatkan tadi alt text

Memeriksa apakah pengguna tersebut memiliki hak istimewa sudo. alt text

Kemudian kami melihatnya menjalankan biner /bin/sh dengan hak istimewa root. alt text

Submit Flag in HackTheBox

alt text