88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-05-30 21:46:31Z)
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: lustrous.vl0., Site: Default-First-Site-Name)
443/tcp open ssl/http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
| ssl-cert: Subject: commonName=LusDC.lustrous.vl
| Subject Alternative Name: DNS:LusDC.lustrous.vl
| Not valid before: 2021-12-26T09:46:02
|_Not valid after: 2022-12-26T00:00:00
|_http-title: Not Found
|_ssl-date: TLS randomness does not represent time
|_http-server-header: Microsoft-HTTPAPI/2.0
| tls-alpn:
|_ http/1.1
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 (Domain: lustrous.vl0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
3389/tcp open ms-wbt-server Microsoft Terminal Services
| ssl-cert: Subject: commonName=LusDC.lustrous.vl
| Not valid before: 2025-05-29T21:09:49
|_Not valid after: 2025-11-28T21:09:49
|_ssl-date: 2025-05-30T21:48:12+00:00; -1s from scanner time.
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp open mc-nmf .NET Message Framing
49664/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
57557/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
57558/tcp open msrpc Microsoft Windows RPC
57597/tcp open msrpc Microsoft Windows RPC
57614/tcp open msrpc Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2022 (89%)
Aggressive OS guesses: Microsoft Windows Server 2022 (89%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: Host: LUSDC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
| smb2-time:
| date: 2025-05-30T21:47:32
|_ start_date: N/A
TRACEROUTE (using port 21/tcp)
HOP RTT ADDRESS
1 18.79 ms 10.8.0.1
2 19.34 ms 10.10.198.197
Nmap scan report for 10.10.198.198
Host is up (0.049s latency).
Not shown: 65529 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
3389/tcp open ms-wbt-server Microsoft Terminal Services
|_ssl-date: 2025-05-30T21:48:12+00:00; -1s from scanner time.
| ssl-cert: Subject: commonName=LusMS.lustrous.vl
| Not valid before: 2025-05-29T21:09:51
|_Not valid after: 2025-11-28T21:09:51
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49669/tcp open msrpc Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2022 (88%)
Aggressive OS guesses: Microsoft Windows Server 2022 (88%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2025-05-30T21:47:38
|_ start_date: N/A
TRACEROUTE (using port 135/tcp)
HOP RTT ADDRESS
- Hop 1 is the same as for 10.10.198.197
2 18.96 ms 10.10.198.198
Post-scan script results:
| clock-skew:
| 0s:
| 10.10.198.197
|_ 10.10.198.198
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Grâce au scan, on remarque que l’on peut accéder à l’un des serveurs en ftp de façon anonyme. En y accédant, on découvre plusieurs dossiers utilisateurs
Aucun fichier intéressant ne se trouve dans ces dossiers. Cependant, on peut utiliser les noms de ces derniers pour créer une liste des utilisateurs du domaine et tester leur validité avec Kerbrute.
Ainsi, tous les noms d’utilisateurs de la liste sont des noms d’utilisateurs valide.
ASREPROASTING
Avec la liste d’utilisateurs valide, on peut vérifier si l’un d’eux n’a pas la pré authentification activée afin de faire une attaque asreproasting. Pour cela, on peut utiliser le script GetNPUsers de impacket. On arrive alors a récupérer le hash du mot de passe du compte ben.cox que l’on arrive ensuite à casser avec john ce qui nous permet de récupérer le mot de passe de ce compte.
On peut alors utiliser ce compte pour récupérer la liste complète des utilisateurs du domaine :
Kerberoasting
Avec le compte de ben.cox, on peut récupérer la liste des utilisateurs avec un SPN afin de faire une attaque Kerberoasting.
On voit que deux comptes de services possèdent un SPN. En récupérant un TGS des deux services, on parvient à casser le mot de passe du compte svc_web avec rockyou : En revanche, après vérification sur bloodhound, ce compte ne dispose d’aucun privilège particulier.
PSCredential decrypt
En analysant le scan nmap réalisé au début, on remarque que winrm est activé sur les machines. De plus, ben.cox a un accès en winrm sur LUSMS
En accédant en winrm sur cette machine, on découvre dans son bureau un fichier admin.xml qui contient des identifiants PSCredential.
Un objet PSCredential en PowerShell est un type spécial qui permet de stocker de manière sécurisée un nom d’utilisateur et un mot de passe. Il est principalement utilisé pour passer des identifiants à des commandes ou des scripts nécessitant une authentification.
Le mot de passe contenu dans l’objet PSCredential est chiffré à l’aide de DPAPI (Data Protection API), une API intégrée à Windows. Ce chiffrement est lié à l'utilisateur ou à la machine, ce qui signifie que seul le compte qui a crée le mot de passe (ou le système selon le contexte) peut le déchiffrer.
Ici, comme on a cachés à la session de ben.cox, on peut déchiffrer ce PSCredential afin de récupérer le mot de passe. Pour ce faire, il suffit d’exécuter les commandes suivantes :
Cela nous permet de récupérer le mot de passe du compte administrateur local de la machine :
Secret note access
Après avoir récupérer tous les secrets de la machine compromise (SAM, LSA, etc…), on se retrouve rapidement bloqué. Pour débloquer la situation, il faut revoir le scan nmap et essayé d’exploiter le service web. Pour ce faire, il est nécessaire de modifier le fichier host afin de ne plus tomber sur la page par défaut du serveur IIS.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
┌──(kali㉿kali)-[~/ctf/vulnlab/lustrous]
└─$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 kali
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.10.153.117 lusdc.lustrous.vl lustrous.vl
Après avoir modifier le fichier, on peut accéder à une page web qui nous dit que nos identifiants ne sont pas valide alors que l’on a pas saisis d’identifiant.
Cela est du au fait que l’application web possède une authentification Kerberos. Cela signifie que si le navigateur le supporte, ce dernier va automatiquement essayer de s’authentifier avec les tickets de service qui sont sur notre machine. Cependant, dans notre cas, on a aucun ticket de service pour accéder à la machine. Pour obtenir un ticket de service, on peut utiliser le compte ben.cox qui est un compte du domaine qui devrait nous permettre d’obtenir un TGS.
Pour pouvoir demander un TGS, il faut d’abord modifier le fichier krb5.conf en faisant attention à la casse.
Ensuite, on peut demander un TGS au ticket en utilisant kinit
On peut alors vérifier que le ticket a bien été récupéré avec klist : Ensuite, en modifiant les clé suivantes dans about:config de firefox, on peut indiquer à firefox que l’on veut s’authentifier avec le TGS qui est sur notre machine
Clé Firefox
Valeur
network.negotiate-auth.trusted-uris
lusdc.lustrous.vl
network.negotiate-auth.delegation-uris
lusdc.lustrous.vl (facultatif pour SSO complet)
network.auth.use-sspi
false (important sous Linux !)
Ce qui nous permet d’accéder à la page web :
On remarque alors que certains utilisateurs stockent leur mot de passe en clair dans cette application :
Chaque utilisateur semble disposait de note personnel, il faudrait donc accéder aux notes de chacun d’entre eux afin de récupérer un secret potentiel.
Silver Ticket
Comme on a compromis le compte svc_web précédemment, on peut utiliser ce dernier pour générer des tickets de n’importe quel utilisateur pour accéder au service web.
Pour réaliser cela, on a besoin de plusieurs éléments :
SID du domaine : On peut l’obtenir facilement avec un whoami /user sur la machine compromises (il ne faut pas oublier d’enlever le numéro à la fin)
Cela nous permet de récupérer son mot de passe et de compromettre son compte :
Backup operator privilege
Par la suite, on découvre que l’utilisateur tony.ward fait parti du groupe backup operators
Ce groupe normalement vide, est un groupe qui permet à tous les membres de ce dernier d’effectuer une copie de n'importe quel fichier du DC sans restriction. Ainsi, on peut utiliser le module nxc backup_operator afin de récupérer les registres SAM, SYSTEM et SECURITY du DC et le compromettre.
Ensuite, avec secretsdump, on peut reconstruire les bases SAM et LSA :