Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Grouper — Un script PowerShell pour aider à trouver les paramètres vulnérables dans les stratégies de groupe AD. (déprécié, utilisez Grouper2 à la place !) | Kitploit
Outils/GitHubGitHub/l0ss/grouper
Escalade de PrivilègesAnalyse des VulnérabilitésAudit de ConfigurationTests d'Intrusion
GitHubl0ss/grouper

Grouper

Un script PowerShell pour aider à trouver les paramètres vulnérables dans les stratégies de groupe AD. (déprécié, utilisez Grouper2 à la place !)

Voir le dépôt
732116il y a 7 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Grouper

N'UTILISEZ PLUS GROUPER. UTILISEZ GROUPER2 ! https://github.com/l0ss/Grouper2

Un script PowerShell pour aider à trouver les paramètres vulnérables dans la stratégie de groupe Active Directory.

Une photo d'un poisson

Photo par Jon Hanson - https://www.flickr.com/people/61952179@N00?rb=1 - https://creativecommons.org/licenses/by-sa/2.0/

Résumé

Grouper est un module PowerShell conçu pour les pentesters et les redteamers (bien que probablement aussi utile pour les administrateurs système) qui passe au crible la sortie XML (généralement très bruyante) de l'applet de commande Get-GPOReport (partie du module Stratégie de groupe de Microsoft) et identifie tous les paramètres définis dans les objets de stratégie de groupe (GPO) qui pourraient s'avérer utiles à quelqu'un essayant de faire quelque chose d'amusant/de malveillant.

Exemples du genre de choses qu'il trouve dans les GPO :

  • GPO qui accordent des autorisations de modification sur le GPO lui-même à des utilisateurs non par défaut.
  • Scripts de démarrage et d'arrêt
    • les arguments et le script lui-même incluent souvent des identifiants.
    • les scripts sont souvent stockés avec des autorisations qui vous permettent de les modifier.
  • Programmes d'installation MSI déployés automatiquement
    • encore une fois, souvent stockés quelque part qui vous accordera des autorisations de modification.
  • Les bons vieux mots de passe de préférences de stratégie de groupe.
  • Entrées de registre Autologon contenant des identifiants.
  • Autres identifiants stockés dans le registre pour des trucs amusants comme VNC.
  • Tâches planifiées avec des identifiants stockés.
    • Exécutent aussi souvent des éléments à partir de partages de fichiers mal sécurisés.
  • Droits utilisateur
    • Pratique pour repérer où les administrateurs ont accidentellement accordé l'accès RDP aux « Utilisateurs du domaine » ou ces droits amusants qui vous permettent d'exécuter mimikatz même sans privilèges d'administration complets.
  • Modifications des autorisations de fichiers locaux
    • Utile pour trouver ces machines où les administrateurs ont simplement attribué « Contrôle total » pour « Tout le monde » sur « C:\Program Files ».
  • Partages de fichiers
  • Fichiers INI
  • Variables d'environnement
  • ... et bien plus encore ! (enfin, pas beaucoup, mais un peu)

Oui, c'est assez rudimentaire, mais cela me fait gagner énormément de temps à lire ces horribles rapports GPO HTML de 150 Mo, et si ça marche pour moi, ça pourrait marcher pour vous.

Remarque : Bien que certains noms de fonctions puissent inclure le mot audit, Grouper n'est explicitement PAS destiné à être un audit exhaustif des configurations de meilleures pratiques, etc. Si vous voulez ça, vous devriez utiliser Microsoft SCT et LGPO.exe ou quelque chose du genre.

Utilisation

Générez un rapport GPO sur une machine Windows avec les applets de commande Stratégie de groupe installées. Ceux-ci sont installés par défaut sur les contrôleurs de domaine, peuvent être installés sur les clients Windows à l'aide de RSAT, ou peuvent être activés via l'assistant « Ajouter une fonctionnalité » sur les serveurs Windows.

root@kitploit:~
Get-GPOReport -All -ReportType xml -Path C:\temp\gporeport.xml

Importez le module Grouper.

root@kitploit:~
Import-Module .\grouper.psm1

Exécutez Grouper.

root@kitploit:~
Invoke-AuditGPOReport -Path C:\temp\gporeport.xml

Paramètres

Il y a aussi quelques paramètres que vous pouvez modifier pour modifier les paramètres de stratégie que Grouper vous montrera :

root@kitploit:~
-showDisabled

Par défaut, Grouper ne vous montrera que les GPO actuellement activés et liés à une unité d'organisation dans AD. Cela bascule ce comportement.

root@kitploit:~
-Online

Par défaut, Grouper fonctionne uniquement avec la sortie XML réelle de Get-GPOReport et n'effectue aucune communication réseau, ce qui le rend assez « sûr sur le plan opérationnel », même si je déteste ce terme.

Si vous l'invoquez avec -Online, Grouper activera les vérifications qui nécessitent de communiquer avec (au moins) le domaine AD à partir duquel le rapport a été généré, mais impliqueront probablement aussi de parler, par exemple, aux serveurs de fichiers. Cela permettra à Grouper de faire des choses pratiques comme signaler les ACL sur les fichiers ciblés par les GPO et de vérifier si, par exemple, l'utilisateur actuel peut écrire dans le fichier en question.

root@kitploit:~
-Level

Grouper dispose de 3 niveaux de filtrage que vous pouvez appliquer à sa sortie.

  1. Montrez-moi tous les paramètres que vous pouvez.
  2. (Par défaut) Montrez-moi uniquement les paramètres qui semblent « intéressants » mais qui peuvent ou non être vulnérables.
  3. Montrez-moi uniquement les paramètres qui sont définitivement une très mauvaise idée et qui contiendront probablement des identifiants ou m'accorderont autrement un accès administrateur sur un hôte.

L'utilisation est simple. -Level 3, -Level 2, etc.


Foire aux questions

Je suis en mission et je ne trouve pas de machine jointe à un domaine à laquelle j'ai accès avec les applets de commande Stratégie de groupe installées et je ne veux pas les installer parce que c'est bruyant et désordonné !

Get-GPOReport fonctionne parfaitement sur les machines non jointes à un domaine via runas /netonly. Vous aurez besoin d'identifiants à faibles privilèges, mais c'est à prévoir.

Faites comme ceci :

root@kitploit:~
runas /netonly /user:domaine\utilisateur powershell.exe

sur une machine non jointe à un domaine qui peut communiquer avec un contrôleur de domaine.

Ensuite, dans la session PowerShell résultante, faites comme ceci :

root@kitploit:~
Get-GpoReport -Domain exemple.com -All -ReportType xml -Path C:\temp\gporeport.xml

Facile.

Je ne vous fais pas confiance, donc je ne veux pas exécuter votre script louche sur une machine jointe à un domaine, mais je veux essayer Grouper.

Tout ce dont Grouper a besoin pour fonctionner est PowerShell 2.0 et le fichier xml de sortie de Get-GPOReport. Vous pouvez l'exécuter sur une VM sans carte réseau si vous êtes inquiet et cela fonctionnera toujours très bien.

Cela dit, le code est assez basique, donc il ne devrait pas être difficile de voir qu'il ne fait rien de louche.

Je pense que c'est stupide de votre part de compter sur les applets de commande MS Stratégie de groupe/RSAT pour Grouper. Vous devriez simplement l'écrire pour interroger directement le domaine ou analyser les fichiers de stratégie directement à partir de SYSVOL.

Réponse courte : Oui.

Réponse longue : Oui, faire l'une de ces choses serait mieux, mais il y a quelques choses qui m'ont empêché de les faire ENCORE.

Idéalement, j'aimerais analyser les fichiers de stratégie directement depuis SYSVOL, mais ils sont stockés dans différents formats de fichiers, certains sont propriétaires, ils sont vraiment pénibles à lire, et je n'ai ni le temps ni l'envie d'écrire plusieurs analyseurs pour eux à partir de zéro alors que Microsoft fournit déjà des applets de commande qui font le travail très bien.

Dans un avenir pas trop lointain, j'aimerais intégrer le Get-GPOReport de Microsoft dans Grouper, afin que vous n'ayez pas besoin de RSAT du tout, mais je dois déterminer si cela va être une sorte de violation du droit d'auteur. Je dois aussi comprendre comment faire cette chose que je viens de dire.


Questions que j'anticipe

Grouper me montre tous ces paramètres qui ne sont pas vulnérables. C'EST QUOI CE BORDEL ? FAUX POSITIF OU QUOI ?

Grouper n'est pas un scanner de vulnérabilités. Grouper filtre simplement l'énorme quantité de superflu et de bruit dans les rapports de stratégie de groupe pour vous montrer uniquement les paramètres de stratégie qui POURRAIENT être configurés de manière exploitable.

Dans la mesure du possible, je travaille sur chacune des catégories de vérifications pour ajouter un filtrage supplémentaire afin de supprimer les configurations évidemment non vulnérables et réduire encore le bruit, mais la stratégie de groupe est extrêmement flexible et il est assez difficile d'anticiper toutes les erreurs possibles qu'un administrateur pourrait commettre.

Grouper ne m'a pas montré une chose que je sais être totalement vulnérable dans la stratégie de groupe. C'EST QUOI CE BORDEL ? FAUX NÉGATIF OU QUOI ?

Cool, vous venez de trouver un moyen d'améliorer Grouper ! Faites défiler vers le bas et vous verrez où j'ai fourni un petit guide pour ajouter de nouvelles vérifications à Grouper.

Je n'ai pas d'environnement de laboratoire et je n'ai pas de fichier de rapport GPO sous la main ! Et je suis aussi très impatient !

Je vous couvre, mon ami. Il y a un test_report.xml dans le dépôt que vous pouvez essayer. Il contient un tas de mauvais paramètres pour que vous puissiez voir à quoi ça ressemble.

Vous devrez l'exécuter avec le drapeau -showDisabled parce qu'il contient tellement de configurations vraiment horribles que je n'ai même pas voulu activer le GPO dans un environnement de laboratoire.

Je suis encore plus impatient que le précédent et j'exige des belles images immédiatement !

OK.

Capture d'écran de la sortie de test

Mais attendez, comment savoir à quels utilisateurs/ordinateurs ces stratégies s'appliquent ? Votre truc est inutile !

Réponse courte : PowerView fera un bon travail là-dessus.

Réponse plus longue : J'essaierai d'ajouter cette fonctionnalité à un moment donné, mais en attendant, taisez-vous et utilisez PowerView.

Je déteste l'une des vérifications que fait Grouper et je ne veux plus jamais la voir.

Cool, facile à résoudre.

Ouvrez grouper.ps1, trouvez le tableau "$polchecks" et commentez simplement la ligne où cette vérification est ajoutée au tableau.

Fait.

Je veux améliorer Grouper mais je ne comprends pas votre code spaghetti horrible. Aidez-moi à vous aider.

Bien sûr, d'accord.

  1. Obtenez une sortie XML GPOReport qui inclut le type de stratégie/paramètre que vous voulez que Grouper soit capable de trouver. Cela peut nécessiter de créer une stratégie appropriée dans un environnement de laboratoire.

  2. Trouvez l'objet XML <GPO> qui correspond à votre stratégie cible.

  3. Trouvez la sous-section du XML qui correspond aux informations que vous voulez extraire de la stratégie. Les paramètres de stratégie sont divisés en stratégie Utilisateur ou Ordinateur, donc cela se trouvera généralement dans :

    root@kitploit:~
    GPO.Computer.ExtensionData.Extension
    ou
    GPO.User.ExtensionData.Extension
    
  4. Voici la partie ennuyeuse - la raison pour laquelle ce code est un tel fouillis est que chaque section de paramètre de stratégie est structurée différemment et utilise des conventions de dénomination très différentes, donc vous allez devoir comprendre comment votre stratégie cible est structurée. Bonne chance ?

  5. Voici un squelette de fonction de vérification que vous pouvez utiliser pour commencer. Assurez-vous qu'elle ne retourne rien du tout ou retourne $null si rien d'intéressant n'est trouvé.

    root@kitploit:~
    Function Get-GPOThing {
        [cmdletbinding()]
        Param (
            [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]  [System.Xml.XmlElement]$polXML,
            [Parameter(Mandatory=$true)][ValidateSet(1,2,3)][int]$level
        )
    
        ######
        # Description: Vérifie les trucs.
        # Vulnérable: Description de ce qu'il montre si Level -eq 3
        # Intéressant: Description de ce qu'il montre si Level -eq 2
        # Ennuyeux: Tous les trucs.
        ######
    
    	$settingsThings = ($polXml.Thing.ExtensionData.Extension.Thing |  Sort-Object GPOSettingOrder)
    
        if ($settingsThings) {
    	    foreach ($setting in $settingsThings) {
                if ($level -eq 1) {
                    $output = @{}
                    $output.Add("Name", $setting.Name)
                    if ($setting.SettingBoolean) {
                        $output.Add("SettingBoolean", $setting.SettingBoolean)
                    }
                    if ($setting.SettingNumber) {
                        $output.Add("SettingNumber", $setting.SettingNumber)
                    }
                    $output.Add("Type", $setting.Type.InnerText)
                    Write-Output $output
                    ""
                }
            }
        }
    }
    
    

Crédits, plaintes, commentaires, menaces de mort, errata

Merci beaucoup à :

  • @harmj0y pour sa fonction d'aide au déchiffrement des mots de passe GPP.
  • @sysop_host et @prashant3535 pour leur aide et leurs encouragements. Je crois qu'il y a probablement encore une ou deux lignes volées à @sysop_host dans ce truc, mais je ne suis vraiment pas sûr où et je détesterais le blâmer pour mon code de merde.

En parlant de code de merde, oui je sais que c'est un peu désordonné. J'ai essayé de le rendre aussi modulaire que possible pour que d'autres puissent ajouter des vérifications supplémentaires sans trop de tracas, mais il a encore besoin de beaucoup d'amour. Si vous voyez une erreur que j'ai faite et qui doit absolument être corrigée, faites-le moi savoir.

Télécharger l’outil
  • Ctrl-f jusqu'à "$polchecks" et ajoutez-le au tableau de vérifications avec les autres.

  • Testez-le.

  • Si ça marche, soumettez une pull request !

  • Si vous êtes bloqué, contactez-moi. J'essaierai d'aider si je peux trouver quelques minutes.