
Lors de tests de pénétration, nous détectons assez souvent des erreurs dans la configuration du domaine. Bien que cela ne semble pas critique pour beaucoup, en réalité, de telles inexactitudes peuvent compromettre l'ensemble du domaine.
Par exemple, selon les résultats du pentest dans une entreprise, nous sommes arrivés à la conclusion que toutes les machines disponibles dans le domaine n'étaient pas inférieures à Windows10 / Windows Server2016, et qu'ils avaient tous les derniers correctifs sur eux. Le réseau était régulièrement scanné, les machines étaient dures. Tous les utilisateurs se sont assis à travers des jetons et ne connaissaient pas leurs "mots de passe de 20 caractères". Tout semble aller bien, mais IPv6 n'a pas été désactivé. Le schéma de capture de domaine ressemblait à ceci:
mitm6 -> ntlmrelay -> attaque par délégation -> le hachage du mot de passe administrateur local est reçu -> le hachage du mot de passe administrateur du domaine est reçu.
Malheureusement, les certifications populaires telles que OSCP, GPEN ou CEH n'enseignent pas les tests de pénétration d'Active Directory.
Dans cet article, nous examinerons plusieurs types d'attaques Active Directory que nous avons effectuées dans le cadre de pentests, ainsi que les outils utilisés. Cela ne peut en aucun cas être considéré comme un guide complet pour tous les types d'attaques et d'outils, il y en a vraiment beaucoup, et il est difficile de s'intégrer dans un seul article.
Donc, pour la démonstration, nous utilisons un ordinateur portable sur Kali Linux 2019 et les hôtes virtuels élevés sur VMware. Imaginez que l’objectif principal du pentest est d’obtenir les droits d’administrateur de domaine et, en tant qu’entrée, nous avons accès au réseau d’entreprise de l’entreprise via Ethernet. Pour commencer à tester le domaine, nous avons besoin d'un compte.
Obtenir un compte
Considérez les deux méthodes les plus courantes, à mon avis, pour obtenir le login et le mot de passe du compte de domaine: usurpation LLMNR / NBNS et attaque sur le protocole IPv6.
Usurpation LLMNR / NBNS
Beaucoup a été dit sur cette attaque. L'essentiel est que le client envoie des LLMNR multicast et diffuse des requêtes NBT-NS pour résoudre les noms d'hôte si cela n'était pas possible via DNS. Tout utilisateur du réseau peut répondre à de telles demandes.
Outils permettant une attaque:
- Réponse
- Inveight
- Modules Metasploit: auxiliaire / usurpation / llmnr / llmnr_response, auxiliaire / usurpation / nbns / nbns_response,
auxiliaire / serveur / capture / smb, auxiliaire / serveur / capture / http_ntlm
Avec une attaque réussie, nous pouvons obtenir le hachage NetNTLM du mot de passe de l'utilisateur.
Responder -I eth0 -wrf

Le hachage résultant, nous pouvons déboguer ou exécuter des relais NTLM.
Attaque IPv6
Si IPv6 est utilisé dans le réseau d'entreprise, nous pouvons répondre aux demandes DHCPv6 et définir notre adresse IP comme serveur DNS sur la machine attaquée. Puisque IPv6 a priorité sur IPv4, les requêtes DNS du client seront envoyées à notre adresse. En savoir plus sur l'attaque
ici .
Outils:
Exécution de l'utilitaire mitm6
mitm6 -i vmnet0
Une fois l'attaque terminée, un nouveau serveur DNS avec notre adresse IPv6 apparaîtra sur le poste de travail attaqué.

Les machines attaquées tenteront de s'authentifier auprès de notre machine. Après avoir élevé le serveur SMB à l'aide de l'utilitaire
smbserver.py , nous pouvons obtenir des hachages de mot de passe utilisateur.
smbserver.py -smb2support SMB /root/SMB

Actions de hachage capturées
L'étape suivante consiste soit à effectuer une attaque cryptographique sur les hachages de mot de passe et à obtenir le mot de passe en texte clair, soit à exécuter un relais NTLM.
Force brute du mot de passe
C'est simple: prenez un mot de passe de hachage, hashcat
hashcat -m 5600 -a 3 hash.txt /usr/share/wordlists/rockyou.txt
et brutus. Le mot de passe peut être obtenu ou non :)
Le mot de passe de l'utilisateur Harvey a été récupéré - Pbvf2019Relais NTLM
Nous pouvons également exécuter des relais NTLM. Après avoir vérifié que la
signature SMB n'est pas utilisée
, nous utilisons l'utilitaire
ntlmrelayx.py et
menons une attaque. Là encore, en fonction de l'objectif, nous sélectionnons le vecteur dont nous avons besoin. Examinons certains d'entre eux.
Accès à la machine attaquée via le protocole SMB
Effectuez une attaque avec la touche
i .
ntlmrelayx.py -t 192.168.1.5 -l loot -i

Avec une attaque réussie, nous pouvons nous connecter à la machine distante à l'aide de netcat.

Collecte d'informations sur le domaine
Dans ce cas, nous effectuons le relais vers le contrôleur de domaine.
ntlmrelayx.py -t ldap://192.168.1.2
Si l'attaque réussit, nous obtiendrons des informations détaillées sur le domaine:

Ajout d'un nouvel ordinateur au domaine
Par défaut, chaque utilisateur a la possibilité de créer jusqu'à 10 ordinateurs dans le domaine. Pour créer un ordinateur, vous devez exécuter un relais sur un contrôleur de domaine à l'aide du protocole LDAP. La création d'utilisateurs et d'ordinateurs via une connexion LDAP non chiffrée est interdite. De plus, un compte ne peut pas être créé si la connexion via SMB est interceptée.
ntlmrelayx.py -t ldaps://192.168.1.2 --add-computer

Comme vous pouvez le voir sur la figure, nous avons pu créer un ordinateur RORYOTGS $.
Lors de la création de plus de 10 ordinateurs, nous obtenons une erreur de la forme suivante:

En utilisant les informations d'identification d'un ordinateur RORYOTGS $, nous pouvons effectuer des demandes légitimes à un contrôleur de domaine.
Collecte d'informations sur le domaine
Nous avons donc un utilisateur de domaine ou un compte d'ordinateur. Pour continuer les tests, nous devons collecter les informations disponibles pour une meilleure planification des attaques. Considérez certains des outils qui nous aideront à déterminer la recherche des systèmes les plus critiques, à planifier et à exécuter une attaque.
Bloodhound
L'un des outils les plus importants utilisés dans presque tous les tests de pénétration interne. Le projet se développe activement et est complété par de nouvelles fonctionnalités.
Informations collectées par Bloodhound- Groupe - Effectue la collecte des membres du groupe
- LocalAdmin - Effectue la collecte d'administration locale
- RDP - Effectue la collecte d'utilisateurs de bureau à distance
- DCOM - Effectue la collecte des utilisateurs COM distribués
- GPOLocalGroup - Effectue une collecte d'administration locale à l'aide d'objets de stratégie de groupe
- Session - Effectue la collecte de session
- ComputerOnly - Effectue l'administration locale, RDP, DCOM et la collecte de sessions
- LoggedOn - Effectue la collecte de sessions privilégiées (nécessite des droits d'administrateur sur les systèmes cibles)
- Approbations - Effectue l'énumération d'approbation de domaine
- ACL - Effectue la collecte des ACL
- Conteneur - Effectue la collecte des conteneurs;
- DcOnly - Effectue la collecte à l'aide de LDAP uniquement. Comprend Group, Trusts, ACL, ObjectProps, Container et GPOLocalGroup
- Tout - Exécute toutes les méthodes de collecte sauf GPOLocalGroup et LoggedOn
- Rechercher dans la forêt - Rechercher tous les domaines de la forêt au lieu de votre domaine actuel
- Domaine - Recherchez un domaine particulier. Utilise votre domaine actuel s'il est nul (par défaut: nul)
- Stealth - Exécute des méthodes de collecte furtive. Toutes les options furtives sont à filetage unique
- SkipGCDeconfliction - Ignore la déconfliction du catalogue global pendant l'énumération de session. Cela peut accélérer l'énumération, mais entraînera de possibles inexactitudes dans les données
- ExcludeDc - Exclut les contrôleurs de domaine de l'énumération (évite les drapeaux Microsoft ATA)
- ComputerFile - Spécifiez un fichier à partir duquel charger les noms / adresses IP des ordinateurs
- OU - Spécifiez l'unité d'organisation à énumérer
Les collecteurs d'informations sont
SharpHound.exe (nécessite l'installation de .NET v3.5) et le script
SharpHound.ps1 écrit en PowerShell. Il existe également un compilateur écrit par un développeur Python tiers,
Bloodhound-python .
En tant que base de données,
Neo4j est utilisé, qui a sa propre syntaxe, qui vous permet d'effectuer des requêtes personnalisées. Vous pouvez en savoir plus sur la syntaxe
ici .
Hors de la boîte 12 demandes sont disponibles- Trouver tous les administrateurs de domaine
- Trouver les chemins les plus courts vers les administrateurs de domaine
- Rechercher des principaux avec des droits DCSync
- Utilisateurs avec appartenance à un groupe de domaine étranger
- Groupes avec appartenance à un groupe de domaine étranger
- Mapper les approbations de domaine
- Chemins les plus courts vers des systèmes de délégation sans contrainte
- Chemins les plus courts des utilisateurs Kerberoastable
- Chemins les plus courts vers les administrateurs de domaine à partir d'utilisateurs Kerberoastable
- Chemin le plus court depuis les principaux propriétaires
- Chemins les plus courts vers les administrateurs de domaine à partir des principaux propriétaires
- Chemins les plus courts vers des cibles de grande valeur
Les développeurs fournissent également le script
DBCreator.py , qui vous permet de générer une base de données aléatoire pour les tests.

Neo4j possède une API REST. Il existe différents utilitaires qui peuvent se connecter à la base de données et utiliser les données reçues:
Examinons certains d'entre eux.
Cypherdog
CypherDog est un shell BloodHound écrit en PowerShell. Comprend 27 applets de commande.
Liste des applets de commande Par défaut, une authentification est requise pour accéder à la base de données neo4j. Vous pouvez désactiver l'authentification en modifiant le fichier neo4j.conf. Il doit décommenter la ligne
dbms.security.auth_enabled = false. Mais ce n'est pas recommandé, car tout utilisateur peut se connecter à la base de données à 127.0.0.1:7474 (la configuration par défaut). Vous pouvez en savoir plus sur l'authentification et l'autorisation dans neo4j
ici.Gofetch
GoFetch utilise un graphique créé dans Bloodhound pour planifier et exécuter une attaque.
Exemple de graphique Bloodhound Lancement d'attaque
.\Invoke-GoFetch.ps1 -PathToGraph .\pathFromBloodHound.json
gt-generator
gt-generator , utilisant les données BloodHound, facilite la création de tickets d'or. Pour recevoir un ticket d'or, seuls le hachage du nom d'utilisateur et du mot de passe de l'utilisateur KRBTGT sont requis.
python gt-generator.py -s 127.0.0.1 -u user -p pass administrator <KRBTGT_HASH>

Powerview
PowerView est un framework Powershell inclus avec
PowerSploit . Voici une liste de certaines applets de commande qui peuvent vous aider à collecter des informations sur un domaine.
Liste des applets de commande Adidnsdump
Lors de l'utilisation du DNS intégré dans Active Directory, tout utilisateur de domaine peut interroger tous les enregistrements DNS par défaut.
Outil utilisé:
Adidnsdump.
Attaques de domaine
Maintenant que nous avons les informations sur le domaine, nous passons à la prochaine phase des tests de pénétration - directement à l'attaque. Considérons 4 vecteurs potentiels:
- Torréfaction
- Attaque via ACL
- Délégation Kerberos
- Abus des autorisations de GPO
Torréfaction
Ce type d'attaque cible le protocole Kerberos. Il existe 2 types d'attaque comme la torréfaction:
Kerberoast
L'attaque a été démontrée pour la première fois par l'utilisateur
timmedin à DerbyCon en 2014 (
vidéo ). Avec une attaque réussie, nous pourrons trier le mot de passe de l'échographie du service en mode hors ligne, sans crainte de bloquer l'utilisateur. Très souvent, les comptes de service ont des droits excessifs et un mot de passe perpétuel, ce qui peut nous permettre d'obtenir des droits d'administrateur de domaine.
Pour comprendre l'essence de l'attaque, réfléchissez au fonctionnement de Kerberos.

1. Le mot de passe est converti en un hachage NTLM, l'horodatage est chiffré avec un hachage et envoyé à KDC en tant qu'authentificateur dans la demande de ticket TGT (AS-REQ). Le contrôleur de domaine (KDC) vérifie les informations utilisateur et crée un ticket TGT.
2. Le ticket TGT est crypté, signé et envoyé à l'utilisateur (AS-REP). Seul le service Kerberos (KRBTGT) peut ouvrir et lire les données d'un ticket TGT.
3. L'utilisateur soumet le ticket TGT au contrôleur de domaine à la demande du ticket TGS (TGS-REQ). Le contrôleur de domaine ouvre un ticket TGT et vérifie la somme de contrôle PAC.
4. Le ticket TGS est crypté avec le hachage NTLM du mot de passe du compte de service et est envoyé à l'utilisateur (TGS-REP).
5. L'utilisateur fournit un ticket TGS à l'ordinateur sur lequel le service s'exécute (AP-REQ). Le service ouvre un ticket TGS à l'aide de son hachage NTLM.
6. L'accès au service est fourni (AS-REP).
Après avoir reçu un ticket TGS (TGS-REP), nous pouvons trouver le mot de passe pour le compte de service hors ligne. Par exemple, en utilisant hashcat.
Selon la
RFC396 , 20 types de cryptage sont réservés au protocole Kerberos. Les types de cryptage utilisés actuellement, par ordre de priorité:
- AES256_CTS_HMAC_SHA1
- AES128_CTS_HMAC_SHA1
- RC4_HMAC_MD5
Dans les versions récentes de Windows, le cryptage AES est utilisé par défaut. Mais pour la compatibilité avec les systèmes sous les serveurs Windows Vista et Windows 2008, la prise en charge de l'algorithme RC4 est requise. Lors d'une attaque, une tentative est toujours effectuée pour obtenir un ticket TGS avec le cryptage RC4_HMAC_MD5, ce qui permet de trier les mots de passe plus rapidement, puis avec le reste.
Harmj0y a mené une
étude intéressante et a découvert que si les propriétés des utilisateurs spécifient la prise en charge du chiffrement uniquement Kerberos AES128 et AES256, un ticket Kerberos est toujours émis avec le chiffrement RC4_HMAC_MD5.

La désactivation de RC4_HMAC_MD5 est nécessaire au niveau du
domaine.L'attaque Kerberoasting a 2 approches.
1. L'ancienne méthode. Les tickets TGS sont demandés via setspn.exe ou .NET System.IdentityModel.Tokens.KerberosRequestorSecurityToken de la classe Powershell, récupérés de la mémoire à l'aide de mimikatz, puis convertis au format souhaité (John, Hashcat) et triés.
2. La nouvelle méthode.
machosec a remarqué que la classe
KerberosRequestorSecurityToken a une méthode
GetRequest , qui extrait la partie chiffrée avec un mot de passe d'un ticket TGS.
Outils pour mener une attaque:
1) Rechercher des enregistrements SPN
2) Demander un ticket TGS
Vous pouvez afficher les tickets actuellement mis en cache à l'aide de la commande klist.
Enregistrements SPN communs- TERMSRV - Bureau à distance
- SmtpSVC et SMTP - Courrier
- WSMAN - WinRM
- ExchangeAB, ExchangeRFR, ExchangeMDM - MS Exchange
- POP / POP3 - Service postal POP3
- IMAP / IMAP4 - Service de messagerie IMAP
- MSSQLSvc - Microsoft SQL Server
- MONGO - Serveur de base de données MongoDB
- DNS - serveur DNS
- HTTP, WWW - Serveur Web
- LDAP - LDAP
- FTP - Serveur FTP
3) Exportation de billets:
Un exemple d'exécution automatisée des 3 points:
- RiskiskSPN
Find-PotentiallyCrackableAccounts -Sensitive -Stealth -GetSPNs | Get-TGSCipher -Format "Hashcat" | Out-File kerberoasting.txt
- Powersploit
Invoke-Kerberoast -Domain jet.lab -OutputFormat Hashcat | fl
- GetUserSPNs.py
GetUserSPNs.py -request jet.lab\user:Password
Asreproast
La vulnérabilité est que la pré-authentification Kerberos est désactivée. Dans ce cas, nous pouvons envoyer des demandes AS-REQ à un utilisateur dont la pré-authentification Kerberos est désactivée et obtenir la partie chiffrée avec un mot de passe.

La vulnérabilité est rare, car la désactivation de la pré-authentification n'est pas le paramètre par défaut.
Recherche d'utilisateurs avec l'authentification Kerberos désactivée:
- Powerview
Get-DomainUser -PreauthNotRequired -Properties samaccountname -Verbose
- Module Active Directory
get-aduser -filter * -properties DoesNotRequirePreAuth | where {$_.DoesNotRequirePreAuth -eq "True" -and $_.Enabled -eq "True"} | select Name
Obtenir la partie cryptée:
Attaque via ACL
Une ACL dans un contexte de domaine est un ensemble de règles qui définissent les droits d'accès des objets dans AD. Une ACL peut être configurée pour un seul objet (par exemple, un compte d'utilisateur) ou pour une unité d'organisation, par exemple, l'unité d'organisation. Lorsque vous configurez l'ACL sur l'unité d'organisation, tous les objets de l'unité d'organisation hériteront de l'ACL. Les ACL contiennent des entrées de contrôle d'accès (ACE) qui déterminent comment le SID interagit avec l'objet Active Directory.
Par exemple, nous avons trois groupes: A, B, C, où le groupe C est membre du groupe B et le groupe B est membre du groupe A. Lorsque vous ajoutez un invité au groupe C, l'invité sera non seulement membre du groupe C, mais aussi un membre indirect des groupes B et A. Lors de l'ajout de l'accès à un objet de domaine au groupe A, l'utilisateur invité aura également accès à cet objet. Dans une situation où l'utilisateur est un membre direct d'un seul groupe et que ce groupe est un membre indirect des 50 autres groupes, il est facile de perdre la connexion des autorisations héritées.
Vous pouvez récupérer les ACL associées à l'objet en exécutant la commande suivante
Get-ObjectACL -Samaccountname Guest -ResolveGUIDs
Vous pouvez utiliser l'outil pour exploiter les erreurs de configuration ACL.
Invoke-ACLPwn . Le script Powershell collecte des informations sur toutes les listes de contrôle d'accès dans le domaine à l'aide du collecteur BloodHound, SharpHound, et crée une chaîne pour obtenir l'autorisation writeDACL. Une fois la chaîne créée, le script exécute chaque étape de la chaîne. L'ordre du script:
- L'utilisateur est ajouté aux groupes nécessaires.
- Deux ACE (réplication des modifications de répertoire et réplication des modifications de répertoire TOUT) sont ajoutées aux ACL de l'objet de domaine.
- Si vous avez des droits sur DCSync à l'aide de l'utilitaire Mimikatz, le hachage du mot de passe de l'utilisateur krbtgt est demandé (paramètre par défaut).
- Une fois l'opération terminée, le script supprime tous les groupes et entrées ACE ajoutés dans l'ACL.
Le script vise uniquement à utiliser les autorisations writeDACL. Les droits d'accès suivants peuvent également intéresser un attaquant:
- ForceChangePassword. Droits de modifier le mot de passe utilisateur lorsque le mot de passe actuel n'est pas connu. Fonctionnement avec PowerSploit - Set-DomainUserPassword.
- AddMembers. Droits d'ajouter des groupes, des ordinateurs et des utilisateurs à des groupes. Fonctionnement avec PowerSploit - Add-DomainGroupMember.
- GenericWrite Droits de modifier les attributs d'un objet. Par exemple, modifiez la valeur du paramètre scriptPath. La prochaine fois que l'utilisateur se connecte au système, le fichier spécifié démarre. Fonctionnement avec PowerSploit - Set-DomainObject.
- WriteOwner. Droits de changer le propriétaire de l'objet. Fonctionnement avec PowerSploit - Set-DomainObjectOwner.
- AllExtendedRights. Droits d'ajouter des utilisateurs à des groupes, de modifier les mots de passe des utilisateurs, etc. Fonctionnement avec PowerSploit - Set-DomainUserPassword ou Add-DomainGroupMember.
Fonctionnement:
À partir d'une machine qui se trouve dans un domaine
./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe
À partir d'une machine qui n'est pas dans un domaine
/Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -Username 'domain\user' -Domain 'fqdn_of_target_domain' -Password 'Pass'
- aclpwn.py est un outil similaire écrit en Python
Délégation Kerberos
La délégation d'autorité Kerberos vous permet de réutiliser les informations d'identification de l'utilisateur final pour accéder aux ressources hébergées sur un autre serveur.
La délégation Kerberos peut être de trois types:
- Illimité (délégation sans contrainte). La seule option de délégation avant Windows Server 2003
- Délégation restreinte depuis Windows Server 2003
- Délégation contrainte basée sur les ressources Introduit dans Windows Server 2012
Délégation illimitée
Dans le composant logiciel enfichable Active Directory, la fonction de délégation illimitée activée est la suivante:

Pour plus de clarté, considérez comment la délégation illimitée se produit sur un diagramme.

- Le mot de passe utilisateur est converti en hachage ntlm. L'horodatage est chiffré avec ce hachage et envoyé au contrôleur de domaine pour demander un ticket TGT.
- Le contrôleur de domaine vérifie les informations sur l'utilisateur (restriction de connexion, appartenance à des groupes, etc.), crée un ticket TGT et l'envoie à l'utilisateur. Le ticket TGT est crypté, signé et seul krbtgt peut lire ses données.
- L'utilisateur demande un ticket TGS pour accéder au service Web sur le serveur Web.
- Le contrôleur de domaine fournit un ticket TGS.
- L'utilisateur envoie des tickets TGT et TGS au serveur Web.
- Le compte de service du serveur Web utilise le ticket TGT de l'utilisateur pour demander un ticket TGS pour accéder au serveur de base de données.
- Le compte de service se connecte au serveur de base de données en tant qu'utilisateur.
Le principal danger d'une délégation illimitée est que lorsqu'une machine avec une délégation illimitée est compromise, un attaquant pourra obtenir des tickets TGT d'utilisateurs de cette machine et accéder à n'importe quel système du domaine au nom de ces utilisateurs.
Rechercher des machines dans un domaine avec délégation illimitée:
Exportation de ticket:

Délégation limitée
Le mode de délégation limitée vous permet d'accéder uniquement aux services autorisés et sur une machine spécifique. Dans le composant logiciel enfichable Active Directory, cela ressemble à ceci:

Avec une délégation limitée, 2 extensions de protocole Kerberos sont utilisées:
S4U2Self est utilisé lorsque le client ne s'authentifie pas à l'aide de Kerberos.
Pour une délégation illimitée, TGT est utilisé pour identifier l'utilisateur, auquel cas l'extension S4U utilise la structure
PA-FOR-USER comme nouveau type dans le champ de données padata / pré-authentification. Le processus S4U2self n'est autorisé que si l'utilisateur demandeur a le champ TRUSTED_TO_AUTH_FOR_DELEGATION défini dans son userAccountControl.
S4U2Proxy permet au compte de service d'utiliser le ticket de redirection reçu dans le processus S4U2proxy pour demander un ticket TGS pour l'accès aux services autorisés (msds-allowtodelegateto). KDC vérifie si le service demandé est spécifié dans le champ msds-allowtodelegateto de l'utilisateur demandeur et émet un ticket si la vérification réussit. Ainsi, la délégation est «limitée» à des services cibles spécifiques.
Vous pouvez rechercher des ordinateurs et des utilisateurs dans un domaine de délégation limité à l'aide de PowerView .Recherche d'ordinateurs avec délégation illimitée Get-DomainComputer -TrustedtoAuth
Recherche d'utilisateurs à délégation limitée Get-DomainUser -TrustedtoAuth
Pour mener une attaque, nous avons besoin d'un mot de passe ouvert, d'un hachage de mot de passe NTLM ou d'un ticket TGT.
Délégation limitée basée sur les ressources
Comme pour la délégation régulière, des extensions S4U sont utilisées. Étant donné que la délégation basée sur les ressources est principalement une délégation limitée, les attaques qui concernent la délégation limitée régulière sont également disponibles ici. La seule différence est que dans une délégation limitée simple, le service A doit avoir l' attribut msDS-AllowedToDelegateTo = ServiceB, et ici le service B doit avoir l' attribut msDS-AllowedToActOnBehalfOfOtherIdentity = Service A.
Cette propriété permet une attaque supplémentaire publiée par harmj0y. Une attaque nécessite des autorisations pour modifier le paramètre PrincipalsAllowedToDelegateToAccount, qui définit l'attribut msds-AllowedToActOnBehalfOfOtherIdentity, qui contient une liste de contrôle d'accès (ACL). Contrairement à une délégation limitée, nous n'avons pas besoin des droits d'administrateur de domaine pour modifier l'attribut msds-AllowedToActOnBehalfOfOtherIdentity. Vous pouvez savoir qui est autorisé à modifier l'attribut comme suit: (Get-acl "AD:$((get-adcomputer Windows7).distinguishedname)").access | Where-Object -Property ActiveDirectoryRights -Match WriteProperty |out-gridview
Donc, pour mener l'attaque, exécutez mitm6 mitm6 -I vmnet0
Nous commençons ntlmrelayx avec l'option --delegate-access ntlmrelayx -t ldaps://dc1.jet.lab --delegate-access
L'attaque crée un ordinateur ZGXTPVYX $ avec des droits de délégation sur un ordinateur Windows7. $x = Get-ADComputer Windows7 -Properties msDS-AllowedToActOnBehalfOfOtherIdentity $x.'msDS-AllowedToActOnBehalfOfOtherIdentity'.Access
Un bon rapport de délégation a été présenté aux PHDays par Yegor Podmokov.
Abus des autorisations de GPO
Les objets de stratégie de groupe est un outil qui permet aux administrateurs de gérer efficacement un domaine. Mais il se trouve que les utilisateurs se voient attribuer des droits inutiles, y compris pour modifier les stratégies de GPO.Pour illustrer l'exemple, nous ajouterons à l'utilisateur Ragnar les droits de modification de la stratégie des contrôleurs de domaine par défaut (dans la vie réelle, les droits de cette stratégie ne sont accordés qu'aux administrateurs de domaine, mais l'essence de l'attaque ne change pas; dans le cas d'une autre stratégie, seuls les hôtes contrôlés changent).
Énumérer les droits sur tous les objets de stratégie de groupe du domaine à l'aide de PowerView . Get-NetGPO | % {Get-ObjectAcl -ResolveGUIDs -Name $_.Name}
Un utilisateur Ragnar a le droit de modifier un objet de stratégie de groupe dont le GUID est 6AC1786C-016F-11D2-945F-00C04FB984F9. Pour déterminer quels hôtes du domaine appliquent cette stratégie, exécutez la commande suivante Get-NetOU -GUID "6AC1786C-016F-11D2-945F-00C04FB984F9" | % {Get-NetComputer -AdSpath $_}
Vous avez l'hôte dc1.jet.lab.Connaissant la politique spécifique que l'utilisateur Ragnar peut modifier et les hôtes auxquels cette politique s'applique, nous pouvons effectuer diverses actions sur l'hôte dc1.jet.lab.Voici les options d'utilisation de l'objet de stratégie de groupe Les outils New-GPOImmediateTask et SharpGPOAbuse vous permettent de:- Exécuter la tâche dans le planificateur de tâches
- Ajouter des droits d'utilisateur (SeDebugPrivilege, SeTakeOwnershipPrivilege, etc.)
- Ajouter un script qui s'exécute après le démarrage
- Ajouter un utilisateur au groupe local
Par exemple, ajoutez une tâche dans le planificateur de tâches pour obtenir une session Meterpreter: New-GPOImmediateTask -TaskName test3 -GPODisplayName "Default Domain Controllers Policy" -CommandArguments '<powershell_meterepreter_payload>' -Force
Après l'exécution, le test de tâche planifiée
apparaît et une session Meterpreter apparaît.
Pour supprimer une tâche planifiée, vous devez exécuter la commande suivante: New-GPOImmediateTask -Remove -Force -GPODisplayName SecurePolicy
Conclusions
Dans l'article, nous n'avons examiné que certains vecteurs d'attaque. Des vues telles que Enumerate Accounts et Password spray , MS14-068 , un tas de bogues d'imprimante et de délégation sans contrainte, les attaques sur Exchange ( Ruler , PrivExchange , ExchangeRelayX ) peuvent élargir considérablement la portée de l'attaque.Les techniques d'attaque et les méthodes d'épinglage (Golden ticket, Silver ticket, Pass-The-Hash, Over pass the hash, SID History, DC Shadow, etc.) changent constamment, et l'équipe de défense devrait toujours être prête pour de nouveaux types d'attaques.