Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/l0ss/grouper
Escalation di PrivilegiAnalisi delle VulnerabilitàAudit di ConfigurazionePenetration Testing
GitHubl0ss/grouper

Grouper

Uno script PowerShell per aiutare a trovare impostazioni vulnerabili nei Criteri di Gruppo AD. (deprecato, usa Grouper2 invece!)

Vedi Repository
7321167 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Grouper

NON USARE PIÙ GROUPER. USA GROUPER2! https://github.com/l0ss/Grouper2

Uno script PowerShell per aiutare a trovare impostazioni vulnerabili nelle Criteri di Gruppo AD.

Un'immagine di un pesce

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

Riepilogo

Grouper è un modulo PowerShell progettato per pentester e red team (anche se probabilmente utile anche per sysadmin) che setaccia l'output XML (di solito molto rumoroso) del cmdlet Get-GPOReport (parte del modulo Criteri di Gruppo di Microsoft) e identifica tutte le impostazioni definite negli Oggetti Criteri di Gruppo (GPO) che potrebbero essere utili a qualcuno che cerca di fare qualcosa di divertente/malvagio.

Esempi del tipo di cose che trova nei GPO:

  • GPO che concedono autorizzazioni di modifica sul GPO stesso a utenti non predefiniti.
  • Script di avvio e spegnimento
    • gli argomenti e lo script stesso spesso includono credenziali.
    • gli script sono spesso memorizzati con autorizzazioni che consentono di modificarli.
  • Programmi di installazione MSI distribuiti automaticamente
    • di nuovo, spesso memorizzati in un luogo che ti concederà autorizzazioni di modifica.
  • Buone vecchie password delle preferenze dei Criteri di Gruppo.
  • Voci di registro di autologon contenenti credenziali.
  • Altre credenziali memorizzate nel registro per cose divertenti come VNC.
  • Attività pianificate con credenziali memorizzate.
    • Anche queste spesso eseguono script da condivisioni file poco sicure.
  • Diritti utente
    • Utile per individuare dove gli amministratori hanno accidentalmente concesso l'accesso RDP a 'Utenti del dominio' o quei diritti divertenti che permettono di eseguire mimikatz anche senza privilegi di amministratore completi.
  • Modifiche alle autorizzazioni dei file locali
    • Buono per trovare quelle macchine in cui gli amministratori hanno semplicemente impostato "Controllo completo" per "Everyone" su "C:\Program Files".
  • Condivisioni file
  • File INI
  • Variabili d'ambiente
  • ... e molto altro! (beh, non moltissimo, ma un po')

Sì, è piuttosto grezzo, ma mi risparmia un'enorme quantità di tempo nella lettura di quei terribili report GPO HTML da 150 MB, e se funziona per me, potrebbe funzionare anche per te.

Nota: anche se alcuni nomi di funzioni potrebbero includere la parola audit, Grouper NON è assolutamente pensato per essere un audit esaustivo delle configurazioni best practice, ecc. Se vuoi quello, dovresti usare Microsoft SCT e LGPO.exe o simili.

Utilizzo

Genera un report GPO su una macchina Windows con i cmdlet dei Criteri di Gruppo installati. Questi sono installati per impostazione predefinita sui controller di dominio, possono essere installati su client Windows tramite RSAT o abilitati tramite la procedura guidata "Aggiungi funzionalità" sui server Windows.

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

Importa il modulo Grouper.

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

Esegui Grouper.

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

Parametri

Ci sono anche un paio di parametri con cui puoi giocare che alterano quali impostazioni dei criteri Grouper ti mostrerà:

root@kitploit:~
-showDisabled

Per impostazione predefinita, Grouper ti mostrerà solo i GPO attualmente abilitati e collegati a un'unità organizzativa in AD. Questo attiva/disattiva questo comportamento.

root@kitploit:~
-Online

Per impostazione predefinita, Grouper funziona solo con l'output XML vero e proprio di Get-GPOReport e non effettua alcuna comunicazione di rete, il che lo rende piuttosto "opsec safe", anche se odio quel termine.

Se lo invochi con -Online, Grouper attiverà dei controlli che richiedono di comunicare (almeno) con il dominio AD da cui è stato generato il report, ma probabilmente comporteranno anche la comunicazione con, ad esempio, file server. Questo permetterà a Grouper di fare cose utili come riportare gli ACL sui file presi di mira dai GPO e verificare se, ad esempio, l'utente corrente può scrivere sul file in questione.

root@kitploit:~
-Level

Grouper ha 3 livelli di filtro che puoi applicare al suo output.

  1. Mostrami tutte le impostazioni che puoi.
  2. (Predefinito) Mostrami solo le impostazioni che sembrano 'interessanti' ma potrebbero non essere vulnerabili.
  3. Mostrami solo le impostazioni che sono sicuramente una pessima idea e conterranno probabilmente credenziali o mi concederanno in altro modo l'accesso come amministratore su un host.

L'utilizzo è semplice. -Level 3, -Level 2, ecc.


Domande frequenti

Sono in un incarico e non riesco a trovare una macchina unita al dominio a cui ho accesso con i cmdlet dei Criteri di Gruppo installati e non voglio installarli perché è rumoroso e disordinato!

Get-GPOReport funziona perfettamente su macchine non unite al dominio tramite runas /netonly. Avrai bisogno di alcune credenziali con privilegi bassi, ma è normale.

Fai così:

root@kitploit:~
runas /netonly /user:dominio\utente powershell.exe

su una macchina non unita al dominio che possa comunicare con un controller di dominio.

Poi, nella sessione PowerShell risultante, fai così:

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

Facile.

Non mi fido di te, quindi non voglio eseguire il tuo script losco su una macchina unita al dominio, ma voglio provare Grouper.

Tutto ciò di cui Grouper ha bisogno per funzionare è PowerShell 2.0 e il file xml generato da Get-GPOReport. Puoi eseguirlo su una VM senza scheda di rete se sei preoccupato e funzionerà comunque bene.

Detto questo, è un codice piuttosto semplice, quindi non dovrebbe essere difficile vedere che non fa nulla di losco.

Penso che sia stupido che tu dipenda dai cmdlet MS Criteri di Gruppo/RSAT per Grouper. Dovresti scriverlo per interrogare direttamente il dominio o analizzare i file dei criteri direttamente da SYSVOL.

Risposta breve: Sì.

Risposta lunga: Sì, fare una di queste cose sarebbe meglio, ma ci sono un paio di cose che mi hanno impedito di farle ANCORA.

Idealmente vorrei analizzare i file dei criteri direttamente da SYSVOL, ma sono memorizzati in vari formati di file, alcuni sono proprietari, sono davvero fastidiosi da leggere, e non ho né il tempo né l'inclinazione per scrivere una serie di parser da zero quando Microsoft fornisce già cmdlet che fanno il lavoro molto bene.

In un futuro non troppo lontano vorrei incorporare Get-GPOReport di Microsoft in Grouper, così non avresti bisogno di RSAT, ma devo capire se questo costituirebbe una violazione del copyright. Devo anche capire come fare effettivamente quella cosa che ho appena detto.


Domande che mi aspetto

Grouper mi mostra tutte queste impostazioni che non sono vulnerabili. MA CHE CAZZO, FALSO POSITIVO?

Grouper non è uno scanner di vulnerabilità. Grouper si limita a filtrare l'enorme quantità di fuffa e rumore nei report dei Criteri di Gruppo per mostrarti solo le impostazioni dei criteri che POTREBBERO essere configurate in modi sfruttabili.

Per quanto possibile, sto lavorando su ciascuna delle categorie di controlli per aggiungere filtri extra che rimuovano le configurazioni chiaramente non vulnerabili e riducano ulteriormente il rumore, ma i Criteri di Gruppo sono estremamente flessibili ed è piuttosto difficile anticipare ogni possibile errore che un amministratore potrebbe fare.

Grouper non mi ha mostrato una cosa che so essere totalmente vulnerabile nei Criteri di Gruppo. MA CHE CAZZO, FALSO NEGATIVO?

Figo, hai appena trovato un modo per migliorare Grouper! Scorri in basso e vedrai dove ho fornito una piccola guida per aggiungere nuovi controlli a Grouper.

Non ho un ambiente di laboratorio e non ho un file di report GPO a portata di mano! Inoltre sono molto impaziente!

Ti copro le spalle, ragazzo. Nel repository c'è un test_report.xml con cui puoi provarlo. Contiene un sacco di impostazioni errate, così puoi vedere come appare.

Dovrai eseguirlo con il flag -showDisabled perché è così pieno di configurazioni terribili che non ho nemmeno voluto abilitare il GPO in un ambiente di laboratorio.

Sono ancora più impaziente del tipo precedente ed esigo immediatamente immagini belle!

OK.

Screenshot dell'output di test

Ma aspetta, come faccio a capire a quali utenti/computers si applicano queste impostazioni? La tua cosa è inutile!

Risposta breve: PowerView farà un buon lavoro in questo.

Risposta più lunga: Proverò ad aggiungere questa funzionalità a un certo punto, ma nel frattempo, stai zitto e usa PowerView.

Odio uno dei controlli che fa Grouper e non voglio mai più vederlo.

Figo, facile da risolvere.

Apri grouper.ps1, trova l'array "$polchecks" e commenta semplicemente la riga in cui quel controllo viene aggiunto all'array.

Fatto.

Voglio migliorare Grouper ma non riesco a dare un senso al tuo orribile codice spaghetti. Aiutami ad aiutarti.

Certo, sembra buona idea.

  1. Ottieni un output XML di GPOReport che includa il tipo di criterio/impostazione che vuoi che Grouper sia in grado di trovare. Potrebbe essere necessario creare un criterio adatto in un ambiente di laboratorio.

  2. Trova l'oggetto XML <GPO> che corrisponde al criterio target.

  3. Trova la sottosezione dell'xml che corrisponde alle informazioni che vuoi estrarre dal criterio. Le impostazioni dei criteri sono divise in criteri Utente o Computer, quindi di solito si trovano in:

    root@kitploit:~
    GPO.Computer.ExtensionData.Extension
    oppure
    GPO.User.ExtensionData.Extension
    
  4. Ora arriva la parte fastidiosa: il motivo per cui questo codice è così incasinato è che ogni sezione di impostazione dei criteri è strutturata in modo diverso e usa convenzioni di denominazione molto diverse, quindi dovrai capire come è strutturato il tuo criterio target. Buona fortuna?

  5. Ecco lo scheletro di una funzione di controllo che puoi usare per iniziare. Assicurati che non restituisca nulla o che restituisca $null se non viene trovato nulla di interessante.

    root@kitploit:~
    Function Get-GPOThing {
        [cmdletbinding()]
        Param (
            [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]  [System.Xml.XmlElement]$polXML,
            [Parameter(Mandatory=$true)][ValidateSet(1,2,3)][int]$level
        )
    
        ######
        # Descrizione: Verifica la presenza di Cose.
        # Vulnerabile: Descrizione di ciò che mostra se Level -eq 3
        # Interessante: Descrizione di ciò che mostra se Level -eq 2
        # Noioso: Tutte le Cose.
        ######
    
    	$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
                    ""
                }
            }
        }
    }
    
    
  6. Con Ctrl-F scendi fino a "$polchecks" e aggiungilo all'array dei controlli insieme agli altri.

  7. Provalo.

  8. Se funziona, invia una pull request!

  9. Se ti blocchi, contattami. Cercherò di aiutare se riesco a racimolare qualche minuto.


Crediti, reclami, commenti, minacce di morte, errata

Grazie mille a:

  • @harmj0y per la sua funzione di decifratura delle password GPP.
  • @sysop_host e @prashant3535 per il loro aiuto e incoraggiamento. Credo che ci sia ancora una riga o due rubate da @sysop_host in questo coso, ma non sono sicuro di dove e odierei incolparlo del mio codice schifoso.

A proposito di codice schifoso, sì, so che è un po' un casino. Ho cercato di renderlo il più modulare possibile in modo che altri possano aggiungere ulteriori controlli senza troppe difficoltà, ma ha ancora bisogno di molto amore. Se vedi un errore che ho fatto e che necessita disperatamente di una correzione, per favore fammelo sapere.

Scarica lo strumento