Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Grouper — Un script de PowerShell para ayudar a encontrar configuraciones vulnerables en la Directiva de Grupo de AD. (obsoleto, ¡use Grouper2 en su lugar!) | Kitploit
Herramientas/GitHubGitHub/l0ss/grouper
Escalada de PrivilegiosAnálisis de VulnerabilidadesAuditoría de ConfiguraciónPruebas de Penetración
GitHubl0ss/grouper

Grouper

Un script de PowerShell para ayudar a encontrar configuraciones vulnerables en la Directiva de Grupo de AD. (obsoleto, ¡use Grouper2 en su lugar!)

Ver Repositorio
7321161hace 7 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Grouper

NO USES MÁS GROUPER. ¡USA GROUPER2! https://github.com/l0ss/Grouper2

Un script de PowerShell para ayudar a encontrar configuraciones vulnerables en la Directiva de Grupo de Active Directory.

Una imagen de un pez

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

Resumen

Grouper es un módulo de PowerShell diseñado para pentesters y redteamers (aunque probablemente también útil para administradores de sistemas) que examina el (normalmente muy ruidoso) resultado XML del cmdlet Get-GPOReport (parte del módulo de Directiva de Grupo de Microsoft) e identifica todas las configuraciones definidas en Objetos de Directiva de Grupo (GPO) que podrían resultar útiles para alguien que intente hacer algo divertido/maligno.

Ejemplos del tipo de cosas que encuentra en las GPO:

  • GPOs que otorgan permisos de modificación sobre la propia GPO a usuarios no predeterminados.
  • Scripts de inicio y apagado
    • los argumentos y el propio script a menudo incluyen credenciales.
    • los scripts suelen almacenarse con permisos que permiten modificarlos.
  • Instaladores MSI desplegados automáticamente
    • de nuevo, a menudo almacenados en un lugar que te otorgará permisos de modificación.
  • Las clásicas contraseñas de Preferencias de Directiva de Grupo.
  • Entradas de registro de Autologon que contienen credenciales.
  • Otras credenciales almacenadas en el registro para cosas divertidas como VNC.
  • Tareas programadas con credenciales almacenadas.
    • También suelen ejecutar cosas desde recursos compartidos de archivos mal asegurados.
  • Derechos de usuario
    • Útil para detectar cuando los administradores otorgaron accidentalmente acceso RDP a 'Usuarios del dominio' o esos derechos divertidos que permiten ejecutar mimikatz incluso sin privilegios de administrador completos.
  • Ajustes a permisos de archivos locales
    • Bueno para encontrar esas máquinas donde los administradores simplemente pusieron "Control total" para "Todos" en "C:\Archivos de programa".
  • Recursos compartidos de archivos
  • Archivos INI
  • Variables de entorno
  • ... ¡y mucho más! (bueno, no mucho, pero algo)

Sí, es bastante tosco, pero me ahorra una enorme cantidad de tiempo leyendo esos horribles informes HTML de GPO de 150MB, y si funciona para mí, puede que funcione para ti.

Nota: Aunque algunos nombres de funciones puedan incluir la palabra auditoría, Groper NO pretende ser una auditoría exhaustiva de configuraciones de mejores prácticas, etc. Si quieres eso, deberías usar Microsoft SCT y LGPO.exe o algo similar.

Uso

Genera un informe de GPO en una máquina Windows con los cmdlets de Directiva de Grupo instalados. Estos están instalados por defecto en los Controladores de Dominio, se pueden instalar en clientes Windows usando RSAT, o se pueden habilitar mediante el asistente "Agregar característica" en servidores Windows.

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

Importa el módulo Grouper.

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

Ejecuta Grouper.

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

Parámetros

También hay un par de parámetros que puedes modificar y que alteran qué configuraciones de directiva te mostrará Grouper:

root@kitploit:~
-showDisabled

Por defecto, Grouper solo te mostrará las GPO que están actualmente habilitadas y vinculadas a una OU en AD. Esto cambia ese comportamiento.

root@kitploit:~
-Online

Por defecto, Grouper solo trabaja con el resultado XML real de Get-GPOReport, y no realiza comunicaciones de red en absoluto, lo que lo hace bastante "seguro para opsec", aunque odio ese término.

Si lo invocas con -Online, Grouper activará comprobaciones que requieren hablar (al menos) con el dominio de AD desde el cual se generó el informe, pero también implicará probablemente hablar con servidores de archivos, por ejemplo. Esto permitirá a Grouper hacer cosas útiles como informar sobre las ACL de los archivos objetivo de las GPO y comprobar si, por ejemplo, el usuario actual puede escribir en el archivo en cuestión.

root@kitploit:~
-Level

Grouper tiene 3 niveles de filtrado que puedes aplicar a su salida.

  1. Muéstrame todas las configuraciones que puedas.
  2. (Predeterminado) Muéstrame solo las configuraciones que parezcan 'interesantes' pero que pueden o no ser vulnerables.
  3. Muéstrame solo las configuraciones que definitivamente son una pésima idea y probablemente tengan credenciales o vayan a concederme acceso de administrador en un equipo.

El uso es sencillo. -Level 3, -Level 2, etc.


Preguntas Frecuentes

Estoy en un encargo y no puedo encontrar una máquina unida al dominio a la que tenga acceso y que tenga los cmdlets de Directiva de Grupo instalados, y no quiero instalarlos porque es ruidoso y desordenado.

Get-GPOReport funciona perfectamente en máquinas no unidas al dominio mediante runas /netonly. Necesitarás algunas credenciales de bajo privilegio, pero eso es de esperar.

Haz esto:

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

en una máquina no unida al dominio que pueda comunicarse con un controlador de dominio.

Luego, en la sesión de PowerShell resultante, haz esto:

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

Fácil.

No confío en ti, así que no quiero ejecutar tu script de aspecto sospechoso en una máquina unida al dominio, pero quiero probar Grouper.

Todo lo que necesita Grouper para funcionar es PowerShell 2.0 y el archivo xml de salida de Get-GPOReport. Puedes ejecutarlo en una VM sin tarjeta de red si estás preocupado y seguirá funcionando bien.

Dicho esto, es código bastante básico, así que no debería ser difícil ver que no está haciendo nada remotamente sospechoso.

Creo que es estúpido que dependas de los cmdlets de Directiva de Grupo MS/RSAT para Grouper. Deberías escribirlo para consultar directamente el dominio o analizar los archivos de directiva directamente desde SYSVOL.

Respuesta corta: Sí.

Respuesta larga: Sí, hacer una de esas cosas sería mejor, pero hay un par de cosas que me impidieron hacerlas TODAVÍA.

Idealmente, me gustaría analizar los archivos de directiva directamente desde SYSVOL, pero se almacenan en varios formatos de archivo diferentes, algunos son propietarios, son realmente difíciles de leer, y no tengo ni el tiempo ni la inclinación para escribir un montón de analizadores desde cero cuando Microsoft ya proporciona cmdlets que hacen el trabajo muy bien.

En un futuro no muy lejano, me gustaría integrar Get-GPOReport de Microsoft en Grouper, para que no necesites RSAT en absoluto, pero necesito averiguar si eso será algún tipo de violación de derechos de autor. También necesito descubrir cómo hacer eso que acabo de decir.


Preguntas que anticipo

Grouper me muestra todas estas configuraciones que no son vulnerables. ¿WTF BRO, FALSO POSITIVO MUCHO?

Grouper no es un escáner de vulnerabilidades. Grouper simplemente filtra la enorme cantidad de paja y ruido en los informes de Directiva de Grupo para mostrarte solo las configuraciones de directiva que PODRÍAN estar configuradas de formas explotables.

En la medida de lo posible, estoy trabajando en cada una de las categorías de comprobaciones para agregar filtrado adicional que elimine configuraciones obviamente no vulnerables y reduzca aún más los niveles de ruido, pero la Directiva de Grupo es extremadamente flexible y es bastante difícil anticipar cada posible error que un administrador pueda cometer.

Grouper no me mostró algo que sé que es totalmente vulnerable en la Directiva de Grupo. WTF BRO, FALSO NEGATIVO MUCHO?

Genial, acabas de encontrar una manera de mejorar Grouper. Desplázate hacia abajo y verás donde he proporcionado una pequeña guía para agregar nuevas comprobaciones a Grouper.

¡No tengo un entorno de laboratorio y no tengo un informe de GPO a mano! ¡También soy muy impaciente!

Te cubro, chico. Hay un test_report.xml en el repositorio con el que puedes probarlo. Tiene un montón de configuraciones malas para que puedas ver cómo se ve.

Necesitarás ejecutarlo con la bandera -showDisabled porque está tan lleno de configuraciones realmente horribles que ni siquiera quise habilitar la GPO en un entorno de laboratorio.

¡Soy aún más impaciente que el último tipo y exijo imágenes bonitas de inmediato!

OK.

Captura de pantalla del resultado de prueba

Pero espera, ¿cómo averiguo qué usuarios/equipos aplican estas directivas? ¡Tu cosa es inútil!

Respuesta corta: PowerView hará un buen trabajo en esto.

Respuesta larga: Intentaré agregar esta funcionalidad en algún momento, pero mientras tanto, cállate y usa PowerView.

Odio una de las comprobaciones que hace Grouper y no quiero volver a verla.

Genial, fácil de arreglar.

Abre grouper.ps1, encuentra el array "$polchecks" y simplemente comenta la línea donde se agrega esa comprobación al array.

Listo.

Quiero mejorar Grouper pero no puedo entender tu horrible código espagueti. Ayúdame a ayudarte.

Claro, suena bien.

  1. Obtén algo de salida XML de GPOReport que incluya el tipo de directiva/configuración que quieres que Grouper pueda encontrar. Esto puede requerir crear una directiva adecuada en un entorno de laboratorio.

  2. Encuentra el objeto XML <GPO> que coincida con tu directiva objetivo.

  3. Encuentra la subsección del XML que coincida con la información que quieres extraer de la directiva. Las configuraciones de directiva se dividen en directiva de Usuario o de Equipo, por lo que normalmente estará en:

    root@kitploit:~
    GPO.Computer.ExtensionData.Extension
    o
    GPO.User.ExtensionData.Extension
    
  4. Ahora viene la parte molesta: la razón por la que este código es un desastre es que cada sección de configuración de directiva está estructurada de manera diferente y usan convenciones de nomenclatura muy distintas, así que vas a tener que descubrir cómo está estructurada tu directiva objetivo. ¡Buena suerte!

  5. Aquí tienes un esqueleto de una función de comprobación que puedes usar para empezar. Asegúrate de que no devuelva nada o devuelva $null si no se encuentra nada interesante.

    root@kitploit:~
    Function Get-GPOThing {
        [cmdletbinding()]
        Param (
            [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]  [System.Xml.XmlElement]$polXML,
            [Parameter(Mandatory=$true)][ValidateSet(1,2,3)][int]$level
        )
    
        ######
        # Descripción: Comprueba Cosas.
        # Vulnerable: Descripción de lo que muestra si Level -eq 3
        # Interesante: Descripción de lo que muestra si Level -eq 2
        # Aburrido: Todas las Cosas.
        ######
    
    	$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, quejas, comentarios, amenazas de muerte, erratas

Muchas gracias a:

  • @harmj0y por su función auxiliar de descifrado de contraseñas GPP.
  • @sysop_host y @prashant3535 por su ayuda y ánimo. Creo que probablemente todavía hay una o dos líneas robadas de @sysop_host en esto, pero realmente no estoy seguro de dónde y odiaría culparlo por mi código de mierda.

Hablando de código de mierda, sí, sé que esto es un poco desastre. He intentado hacerlo lo más modular posible para que otros puedan agregar comprobaciones adicionales sin demasiada molestia, pero todavía necesita mucho cariño. Si ves un error que he cometido y que necesita arreglarse desesperadamente, por favor dímelo.

Descargar herramienta
  • Ctrl-f hasta "$polchecks" y agrégalo al array de comprobaciones junto con las demás.

  • Pruébalo.

  • Si funciona, ¡envía un pull request!

  • Si te atascas, contáctame. Intentaré ayudar si puedo encontrar unos minutos.