👁️Active Directory

Liste d'outils dédiés à la reconnaissance d'active directory

Sites

https://podalirius.net/en/articles/useful-ldap-queries-for-windows-active-directory-pentesting/

PingCastle

PingCastle est un outil multifonction permettant d'auditer un environnement d'Active Directory.

ressource: https://www.pingcastle.com/

BloodHound

BloodHound utilise la théorie des graphes pour révéler les relations cachées et souvent involontaires au sein d'un environnement Active Directory ou Azure. Les attaquants peuvent utiliser BloodHound pour identifier facilement des chemins d'attaque très complexes qui seraient autrement impossibles à identifier rapidement.

ressource: https://github.com/BloodHoundAD/BloodHound

Remote bloodhound ingestion with bloodhound-python

$ bloodhound-python -u <username> -p <password> -d <domain> -v --zip -c All -dc <Domain Controller> -ns <Target IP>

RustHound

RustHound est un ingestor pour BloodHound écrit en Rust

Exemple d'utilisation:

$ rusthound -d domain.local -u '<username>' -p '<password>' -o /tmp/demo -z

ressource: https://github.com/OPENCYBER-FR/RustHound

Local bloodhound ingestion with SharpHound

Exemple d'utilisation:

> SharpHound.exe --CollectionMethod all -d <domain>

Impacket - GetADUsers.py

GetADUsers.py est un code exemple de la suite Impacket permettant d'énumérer les utilisateurs d'un domaine avec les identifiant d'un utilisateur du domaine.

Exemple d'utilisation:

$ python3 GetADUsers.py -all -dc-ip <dc_ip> <domain>/<username>

ressource: https://github.com/SecureAuthCorp/impacket/tree/master/examples

rpcclient

rpcclient est un utilitaire initialement développé pour tester la fonctionnalité MS-RPC dans Samba lui-même.

Voir la section Hacking protocols pour plus d'informations sur comment l'utiliser dans le cadre de tests d'intrusion.

ressource: https://www.samba.org/samba/docs/current/man-html/rpcclient.1.html

AD Explorer

Active Directory Explorer (AD Explorer) est un visualiseur et un éditeur avancés d'Active Directory (AD). Vous pouvez utiliser AD Explorer pour naviguer facilement dans une base de données AD, définir des emplacements favoris, afficher les propriétés et les attributs des objets sans avoir à ouvrir de boîtes de dialogue, modifier les autorisations, afficher le schéma d'un objet et exécuter des recherches sophistiquées que vous pouvez enregistrer et réexécuter.

ressource: https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer

Utiliser AD explorer pour bloodhound

Il est possible de faire un snapshot dans AD Explorer en allant dans File > Create snapshot...

Cela vous permettra de créer un snapshot du Domaine en ".dat" que vous devrez alors convertir dans un format compatible avec BloodHound.

ADExplorerSnapshot

ADExplorerSnapshot est un outil capable de convertir ce fichier .dat en .json importable dans BloodHound.

Exemple d'utilisation:

$ python3 ADExplorerSnapshot.py <snapshot.dat>

ressource: https://github.com/c3c/ADExplorerSnapshot.py

ADModule

Module PowerShell ActiveDirectory signé par Microsoft.

ressource: https://github.com/samratashok/ADModule

Enumération d'Active Directory avec Powerview

Enumération du domaine

> Get-NetDomain  #Donne des informations sur le domaine courrant

Forest                : target.com
DomainControllers     : (DC-01.target.com)
Chilldren             :
DomainMode            :
...

> Get-NetDomain -domain <domain>  #Donne des infomations sur un domaine spécifique

> (Get-DomainPolicy).”system access” #Permet de relever les politiques du domaine courant

PasswordConplexity       <1>
MaximumPasswordAge       <42>
MinimumPasswordLength    <8>
...

> Get-NetDomainController  #Donne des informations sur le controleur de domaine courant

Forest            : target.com
CurrentTime       : ...
OSVersion         : Windows Server 2012 R2 Standard Evaluation
Roles             : (...)
...

Enumération des utilisateurs

> Get-NetUser  #Donne l'ensemble des utilsateurs du domaine courant avec leurs informations

> Get-UserProperty –Properties pwdlastset  #Donne la date de la derniere màj de mot de passe faite pour chaque utilisateur

# Certains administrateurs font parfois l'erreur de mettre le mot de passe d'un compte utilisateur du domaine dans le champ description de celui-ci (souvent lors de création de compte test).
# Cette commande vous permettra de rechercher correspondance avec un mot clé (ici pass) dans le champs Description de chaque utilisateur
> Find-UserField -SearchField Description –SearchTerm “pass”

samaccountname                        Description
--------------
UserTest                              password P@ssw0rd123

Enumération des ordinateurs

> Get-NetComputer  #Donne la liste des ordinateurs dans le domaine courant

> Get-NetComputer –OperatingSystem "Windows Server 2012"  #Permet de rechercher les ordinateurs avec un OS spécifique

> Get-NetComputer -Ping  #Donne tous les ordinateurs actifs dans le domaine courant

Enumération des groupes

> Get-NetGroup  #Donne l'ensemble des groupes du domaine courant

> Get-NetGroup *admin*  #Donne l'ensemble des groupes contenant "admin" dans leur nom

> Get-NetGroupMember -GroupName "Domain Admins" #Donne l'ensemble des utilisateurs du groupe spécifié

> Get-NetGroup –UserName "<username>"  #Inversement, donne l'ensemble des groupes auxquels appartient l'utilisateur spécifié

Enumération par machine

> Get-NetLocalGroup –ComputerName <computername> #Donne la liste des utilisateurs locaux sur la machine (nécessite des droits administrateur)

> Get-NetLoggedon –ComputerName <computername>  #Donne les utilisateur actuellement connectés à une machine spécifique

> Get-LastLoggedOn –ComputerName <computername>  #Donne le dernier utilisateur qui s'est connecté à la machine

Partages

> Invoke-ShareFinder #Permet de trouver les partages présents sur l'hôte et dans le domaine courant

GPO

> Get-NetGPO -ComputerName <computername> #Donne la liste des GPO sur une machine spécifique

> Find-GPOComputerAdmin –Computername <computername> #Utilisez cette commande pour rechercher des utilisateurs disposant de droits d'administrateur local sur la machine

> Find-GPOLocation -UserName <username> #Utilisez cette commande pour rechercher tous les ordinateurs sur lesquels l'utilisateur spécifié dispose de droits d'administrateur local dans le domaine actuel via le GPO appliqué.

> Get-NetOU  #Utilisez cette commande pour obtenir toutes les unités d'organisation pdu domaine actuel.

Domain Trust Enumeration

Dans un environnement AD, la confiance est une relation entre deux domaines ou forêts qui permet aux utilisateurs d'un domaine ou d'une forêt d'accéder aux ressources de l'autre domaine ou forêt.

Par exemple, un utilisateur du domaine A peut demander ou accéder aux ressources du domaine B (comme interroger les ordinateurs du domaine B).

Direction des approbations :

  • Approbation bidirectionnelle (bidirectionnelle) : les utilisateurs du domaine A peuvent accéder aux ressources du domaine B et vice versa.

  • Confiance unidirectionnelle (Unidirectionnelle) : Les utilisateurs du domaine de confiance peuvent accéder aux ressources du domaine de confiance mais l'inverse n'est pas vrai.

Transitivité des confiances :

  • Confiance parent-enfant : Elle est créée automatiquement entre le nouveau domaine et le domaine qui le précède dans la hiérarchie de l'espace de noms, chaque fois qu'un nouveau domaine est ajouté dans une arborescence. Par exemple, usa.target.com est un enfant de target.com). Cette confiance est toujours transitive dans les deux sens.

  • Approbation de racine d'arborescence : elle est créée automatiquement chaque fois qu'une nouvelle arborescence de domaine est ajoutée à une racine de forêt. Cette confiance est toujours transitive dans les deux sens.

Approbations externes : entre deux domaines dans des forêts différentes lorsque les forêts n'ont pas de relation d'approbation. Il peut être unidirectionnel ou bidirectionnel et non transitif.

En tant que red teamers, il est important d'énumérer les approbations de domaine afin d'étendre la surface d'attaque.

> Get-NetDomainTrust  #Utilisez cette commande pour obtenir une liste de toutes les approbations de domaine pour le domaine actuel

> Get-NetForest  #Utilisez cette commande pour obtenir des détails sur la forêt actuelle.

> Get-NetForest -Forest <forestname>  #Donne des détails sur une forêt spécifique

> Get-NetForestDomain  #Utilisez cette commande pour obtenir tous les domaines de la forêt actuelle.

> Get-NetForestCatalog  #Utilisez cette commande pour obtenir tous les catalogues globaux de la forêt actuelle.

> Get-NetForestTrust  #Utilisez cette commande pour mapper les relations de confiance d'une forêt.

Recherche d'élévation

> Find-LocalAdminAccess #Utilisez cette commande pour rechercher toutes les machines du domaine actuel sur lesquelles l'utilisateur actuel dispose d'un accès administrateur local.

> Invoke-EnumerateLocalAdmin #Utilisez cette commande pour rechercher des administrateurs locaux sur toutes les machines du domaine (nécessite des privilèges d'administrateur sur des machines non DC).

> Invoke-UserHunter #Utilisez cette commande pour rechercher des ordinateurs sur lesquels un domaine s'est connecté

> Invoke-UserHunter -UserName "<username>" #Utilisez cette commande pour rechercher des ordinateurs sur lesquels un utilisateur spécifique a des sessions

> Invoke-UserHunter -CheckAccess #Utilisez cette commande pour rechercher des ordinateurs sur lesquels un administrateur de domaine est connecté et auxquels l'utilisateur actuel a accès

Enumération des ACL

> Get-ObjectAcl -SamAccountName "<grouname>" -ResolveGUIDs #Utilisez cette commande pour énumérer les ACL du groupe spécifié

> Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name}  #tilisez cette commande pour voir si un utilisateur dispose de droits de modification sur un objet de stratégie de groupe.

> Get-ObjectAcl -SamAccountName <username> -ResolveGUIDs -RightsFilter "ResetPassword" #Utilisez cette commande pour vérifier si l'utilisateur spécifié dispose de l'autorisation réinitialiser le mot de passe.

Dernière mise à jour