Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Grouper — Um script PowerShell para ajudar a encontrar configurações vulneráveis na Política de Grupo do AD. (descontinuado, use Grouper2 em vez disso!) | Kitploit
Ferramentas/GitHubGitHub/l0ss/grouper
Escalada de PrivilégiosAnálise de VulnerabilidadesAuditoria de ConfiguraçãoTestes de Penetração
GitHubl0ss/grouper

Grouper

Um script PowerShell para ajudar a encontrar configurações vulneráveis na Política de Grupo do AD. (descontinuado, use Grouper2 em vez disso!)

Ver Repositório
732116há 7 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Grouper

NÃO USE MAIS O GROUPER. USE O GROUPER2! https://github.com/l0ss/Grouper2

Um script PowerShell para ajudar a encontrar configurações vulneráveis na Política de Grupo do AD.

Uma foto de um peixe

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

Resumo

O Grouper é um módulo PowerShell projetado para pentesters e redteamers (embora provavelmente também útil para sysadmins) que filtra a saída XML geralmente muito ruidosa do cmdlet Get-GPOReport (parte do módulo de Política de Grupo da Microsoft) e identifica todas as configurações definidas nos Objetos de Política de Grupo (GPOs) que podem ser úteis para alguém tentando fazer algo divertido/maligno.

Exemplos dos tipos de coisas que ele encontra nas GPOs:

  • GPOs que concedem permissões de modificação na própria GPO para usuários não padrão.
  • Scripts de inicialização e desligamento
    • os argumentos e o próprio script geralmente incluem credenciais.
    • os scripts geralmente são armazenados com permissões que permitem modificá-los.
  • Instaladores MSI sendo implantados automaticamente
    • novamente, muitas vezes armazenados em algum lugar que lhe concede permissões de modificação.
  • Boas e velhas senhas de Preferências de Política de Grupo.
  • Entradas de registro de logon automático contendo credenciais.
  • Outras credenciais armazenadas no registro para coisas divertidas como VNC.
  • Tarefas agendadas com credenciais armazenadas.
    • Também geralmente executam coisas de compartilhamentos de arquivos mal protegidos.
  • Direitos de Usuário
    • Útil para identificar onde admins acidentalmente concederam acesso RDP a 'Domain Users' ou aqueles direitos divertidos que permitem executar o mimikatz mesmo sem privilégios de admin completos.
  • Ajustes nas permissões de arquivos locais
    • Bom para encontrar aquelas máquinas onde os admins simplesmente marcaram 'Controle Total' para 'Everyone' em 'C:\Program Files'.
  • Compartilhamentos de Arquivos
  • Arquivos INI
  • Variáveis de Ambiente
  • ... e muito mais! (bem, não muito, mas alguns)

Sim, é bem cru, mas me economiza um tempo enorme lendo aqueles terríveis relatórios de GPO em HTML de 150MB, e se funciona para mim, pode funcionar para você.

Nota: Embora alguns nomes de funções possam incluir a palavra audit, o Grouper NÃO é explicitamente destinado a ser uma auditoria exaustiva de configurações de melhores práticas, etc. Se você quer isso, deve usar o Microsoft SCT e o LGPO.exe ou algo assim.

Uso

Gere um Relatório de GPO em uma máquina Windows com os cmdlets de Política de Grupo instalados. Eles são instalados por padrão nos Controladores de Domínio, podem ser instalados em clientes Windows usando RSAT, ou podem ser habilitados através do assistente "Adicionar Recurso" em servidores Windows.

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

Importe o módulo Grouper.

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

Execute o Grouper.

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

Parâmetros

Há também alguns parâmetros que você pode ajustar que alteram quais configurações de política o Grouper irá mostrar:

root@kitploit:~
-showDisabled

Por padrão, o Grouper mostrará apenas as GPOs que estão atualmente habilitadas e vinculadas a uma OU no AD. Isso alterna esse comportamento.

root@kitploit:~
-Online

Por padrão, o Grouper trabalha apenas com a saída XML real do Get-GPOReport e não faz nenhuma comunicação de rede, tornando-o bastante "seguro para opsec", embora eu odeie esse termo.

Se você o invocar com -Online, o Grouper ativará verificações que exigem comunicação com (pelo menos) o domínio AD do qual o relatório foi gerado, mas também provavelmente envolverá comunicação com, por exemplo, servidores de arquivos. Isso permitirá que o Grouper faça coisas úteis como relatar as ACLs em arquivos visados pelas GPOs e verificar se, por exemplo, o usuário atual pode escrever no arquivo em questão.

root@kitploit:~
-Level

O Grouper tem 3 níveis de filtragem que você pode aplicar à sua saída.

  1. Mostre-me todas as configurações que puder.
  2. (Padrão) Mostre-me apenas configurações que parecem 'interessantes' mas podem ou não ser vulneráveis.
  3. Mostre-me apenas configurações que são definitivamente uma péssima ideia e provavelmente terão credenciais ou concederão acesso de admin em um host.

O uso é direto. -Level 3, -Level 2, etc.


Perguntas Frequentes

Estou em um trabalho e não consigo encontrar uma máquina associada ao domínio à qual tenho acesso com os cmdlets de Política de Grupo instalados e não quero instalá-los porque é barulhento e bagunçado!

O Get-GPOReport funciona perfeitamente em máquinas não associadas ao domínio via runas /netonly. Você precisará de algumas credenciais de baixo privilégio, mas isso é esperado.

Faça assim:

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

em uma máquina não associada ao domínio que possa se comunicar com um controlador de domínio.

Em seguida, na sessão PowerShell resultante, faça assim:

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

Fácil.

Não confio em você, então não quero executar seu script suspeito em uma máquina associada ao domínio, mas quero testar o Grouper.

Tudo o que o Grouper precisa para funcionar é PowerShell 2.0 e o arquivo XML de saída do Get-GPOReport. Você pode executá-lo em uma VM sem placa de rede se estiver preocupado e ainda funcionará.

Dito isso, o código é bem básico, então não deve ser difícil ver que não está fazendo nada remotamente suspeito.

Acho idiota você depender dos cmdlets de Política de Grupo da Microsoft/RSAT para o Grouper. Você deveria simplesmente escrevê-lo para consultar diretamente o domínio ou analisar os arquivos de política diretamente do SYSVOL.

Resposta curta: Sim.

Resposta longa: Sim, fazer uma dessas coisas seria melhor, mas há algumas coisas que me impediram de fazê-las AINDA.

Idealmente, eu gostaria de analisar os arquivos de política diretamente do SYSVOL, mas eles são armazenados em vários formatos de arquivo diferentes, alguns são proprietários, são um verdadeiro pesadelo para ler, e não tenho nem tempo nem vontade de escrever vários parsers para eles do zero quando a Microsoft já fornece cmdlets que fazem o trabalho muito bem.

Num futuro próximo, gostaria de incorporar o Get-GPOReport da Microsoft no Grouper, para que você não precisasse do RSAT, mas preciso descobrir se isso será algum tipo de violação de direitos autorais. Também preciso descobrir como realmente fazer essa coisa que acabei de dizer.


Perguntas que estou antecipando

O Grouper está me mostrando todas essas configurações que não são vulneráveis. WTF BRO FALSO POSITIVO MUITO?

O Grouper não é um scanner de vulnerabilidades. O Grouper meramente filtra a enorme quantidade de lixo e ruído nos relatórios de Política de Grupo para mostrar apenas as configurações de política que PORDERIAM ser configuradas de maneiras exploráveis.

Na medida do possível, estou trabalhando em cada uma das categorias de verificações para adicionar filtragem extra para remover configurações obviamente não vulneráveis e reduzir ainda mais os níveis de ruído, mas a Política de Grupo é extremamente flexível e é bastante difícil antecipar todos os possíveis erros que um admin pode cometer.

O Grouper não me mostrou algo que eu sei que é totalmente vulnerável na Política de Grupo. WTF BRO FALSO NEGATIVO MUITO?

Legal, você acabou de encontrar uma maneira de melhorar o Grouper! Role para baixo e você verá onde forneci um pequeno guia para adicionar novas verificações ao Grouper.

Não tenho um ambiente de laboratório e não tenho um arquivo de relatório de GPO em mãos! Também sou muito impaciente!

Eu cuido de você, garoto. Há um test_report.xml no repositório que você pode testar. Ele tem um monte de configurações ruins para que você veja como é.

Você precisará executá-lo com a flag -showDisabled porque está tão cheio de configurações realmente horríveis que nem quis ativar a GPO em um ambiente de laboratório.

Sou ainda mais impaciente que o último cara e exijo imagens bonitas imediatamente!

OK.

Screenshot da saída de teste

Mas espera, como descubro quais usuários/computadores essas políticas se aplicam? Sua coisa é inútil!

Resposta curta: O PowerView fará um bom trabalho nisso.

Resposta mais longa: Tentarei adicionar essa funcionalidade em algum momento, mas por enquanto, cale a boca e use o PowerView.

Eu odeio uma das verificações que o Grouper faz e nunca mais quero vê-la.

Certo, facilmente resolvido.

Abra o grouper.ps1, encontre o array "$polchecks" e simplesmente comente a linha onde essa verificação é adicionada ao array.

Pronto.

Quero melhorar o Grouper, mas não consigo entender seu código-espaguete horrível. Ajude-me a ajudá-lo.

Claro, parece bom.

  1. Obtenha alguma saída XML do GPOReport que inclua o tipo de política/configuração que você deseja que o Grouper seja capaz de encontrar. Isso pode exigir a criação de uma política adequada em um ambiente de laboratório.

  2. Encontre o objeto XML <GPO> que corresponde à sua política alvo.

  3. Encontre a subseção do xml que corresponde às informações que você deseja extrair da política. As configurações de política são divididas em política de Usuário ou de Computador, então isso geralmente estará em:

    root@kitploit:~
    GPO.Computer.ExtensionData.Extension
    ou
    GPO.User.ExtensionData.Extension
    
  4. Agora a parte chata - a razão pela qual esse código é tão bagunçado é que cada seção de configuração de política é estruturada de forma diferente e elas usam convenções de nomenclatura amplamente variadas, então você precisará descobrir como sua política alvo é estruturada. Boa sorte?

  5. Aqui está um esqueleto de uma função de verificação que você pode usar para começar. Certifique-se de que ela ou não retorna nada ou retorna $null se nada interessante for encontrado.

    root@kitploit:~
    Function Get-GPOThing {
        [cmdletbinding()]
        Param (
            [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]  [System.Xml.XmlElement]$polXML,
            [Parameter(Mandatory=$true)][ValidateSet(1,2,3)][int]$level
        )
    
        ######
        # Descrição: Verifica por Coisas.
        # Vulnerável: Descrição do que mostra se Level -eq 3
        # Interessante: Descrição do que mostra se Level -eq 2
        # Chato: Todas as Coisas.
        ######
    
    	$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éditos, reclamações, comentários, ameaças de morte, errata

Muito obrigado a:

  • @harmj0y pela sua função auxiliar de descriptografia de senha GPP.
  • @sysop_host e @prashant3535 pela sua assistência e incentivo. Acredito que ainda haja uma ou duas linhas roubadas do @sysop_host nesta coisa, mas não tenho certeza de onde e odiaria culpá-lo pelo meu código ruim.

Falando em código ruim, sim, eu sei que isso é uma bagunça. Tentei torná-lo o mais modular possível para que outros possam adicionar verificações adicionais sem muita dificuldade, mas ainda precisa de muito carinho. Se você vir um erro que fiz que precisa desesperadamente ser corrigido, por favor, me avise.

Baixar ferramenta
  • Use Ctrl-f para ir até "$polchecks" e adicione-a ao array de verificações junto com as outras.

  • Teste.

  • Se funcionar, envie um pull request!

  • Se ficar preso, me chame. Tentarei ajudar se conseguir arranjar alguns minutos.