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
profilehound — ProfileHound - recopilador de OpenGraph de BloodHound para perfiles de usuario almacenados en las máquinas del dominio. Toma decisiones informadas sobre el saqueo de secretos identificando perfiles de usuario activos en las máquinas del dominio. | Kitploit
Herramientas/GitHubGitHub/m4lwhere/profilehound
OSINT (Inteligencia de Fuentes Abiertas)ReconocimientoMovimiento LateralRecopilación de InformaciónPost-ExplotaciónPruebas de PenetraciónRed Teaming
GitHubm4lwhere/profilehound

profilehound

ProfileHound - recopilador de OpenGraph de BloodHound para perfiles de usuario almacenados en las máquinas del dominio. Toma decisiones informadas sobre el saqueo de secretos identificando perfiles de usuario activos en las máquinas del dominio.

Ver Repositorio
1639hace 3 mesesRevisado 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
root@kitploit:~
    ____             _____ __     __  __                      __
   / __ \_________  / __(_) /__  / / / /___  __  ______  ____/ /
  / /_/ / ___/ __ \/ /_/ / / _ \/ /_/ / __ \/ / / / __ \/ __  /
 / ____/ /  / /_/ / __/ / /  __/ __  / /_/ / /_/ / / / / /_/ /
/_/   /_/   \____/_/ /_/_/\___/_/ /_/\____/\__,_/_/ /_/\__,_/

ProfileHound

ProfileHound es una herramienta post-escalada que ayuda a encontrar y alcanzar objetivos de red team localizando perfiles de usuario de dominio en las máquinas. Utiliza el formato OpenGraph de BloodHound para construir un nuevo edge llamado HasUserProfile que determina si existe un perfil de usuario en un equipo. Este edge permite a los operadores tomar decisiones informadas sobre qué equipos atacar para extraer secretos.

Esta herramienta requiere acceso administrativo al recurso compartido C$ en las máquinas objetivo para enumerar los perfiles de usuario.

Muchas gracias a Remi Gascou (@podalirius) por las herramientas ShareHound y bhopengraph. Llevaba tiempo queriendo construir una herramienta para recopilar estos datos y el uso de estas librerías me permitió centrarme en construir en lugar de en la fontanería.

[!WARNING] ProfileHound se encuentra en etapas tempranas de desarrollo y todavía no tiene implementados todos los modos de recopilación. Úsalo con precaución en entornos de producción; asumes el riesgo de utilizar esta herramienta.

¿Por qué?

Los objetivos posteriores a la explotación en Active Directory han pasado de los datos almacenados localmente a las aplicaciones SaaS y la nube. Para demostrar valor en el offsec, necesitamos mostrar cómo se puede comprometer el acceso a estos servicios. En muchos casos, estos servicios son utilizados únicamente por ciertos grupos o usuarios, como Recursos Humanos, Finanzas, etc. En algunos escenarios, ciertas aplicaciones SaaS solo se pueden acceder desde máquinas específicas.

El edge HasSession de BloodHound es excelente, pero solo es útil cuando un usuario tiene una sesión iniciada en una máquina. Si un usuario no tiene sesión iniciada en una máquina cuando se recopilan los datos, puede ser difícil encontrar qué equipo puede contener secretos para facilitar una explotación posterior. Los perfiles de usuario pueden contener una cantidad significativa de información valiosa en DPAPI, credenciales almacenadas en caché, claves SSH, claves de nube y más; no requieren una sesión de usuario activa para acceder a ellos.

HasUserProfile Edge Example

ProfileHound utiliza el formato OpenGraph de BloodHound para construir un nuevo edge de grafo llamado HasUserProfile que determina si existe un perfil de usuario en una máquina del dominio. Esto puede ayudar a los operadores a centrarse en las máquinas donde un usuario o grupo de alto valor tiene un perfil.

El edge HasUserProfile contiene propiedades para la fecha de creación y la fecha de última modificación del perfil. Esa información ayuda a determinar:

  • Si un perfil se usa activamente (con sesión iniciada en los últimos días)
  • Si el perfil se ha utilizado durante años (¡probablemente contenga muchos secretos!)

HasUserProfile Edge Properties Example

Este edge también tiene propiedades para las marcas de tiempo de creación y modificación del perfil, lo que permite consultas Cypher específicas para encontrar perfiles de usuario activos o de larga duración en máquinas concretas.

Instalación

Instala ProfileHound usando pipx (a menos que disfrutes del infierno de las dependencias):

root@kitploit:~
pipx install profilehound

Para usar la versión más reciente, puedes instalarla desde el código fuente:

root@kitploit:~
pipx install git+https://github.com/m4lwhere/profilehound.git

Docker

Para usar un enfoque containerizado, construye la imagen y ejecuta la herramienta con lo siguiente:

root@kitploit:~
docker build -t profilehound .
docker run --rm profilehound --help
docker run --rm -v ${PWD}:/profilehound profilehound --auth-user alice --auth-password whiteRabbit --auth-domain sccm.lab --dns 192.168.57.10 --auth-dc-ip 192.168.57.10

Uso

Por ejemplo, para ejecutar con una cuenta de administrador de dominio sccm.lab\alice con la contraseña whiteRabbit:

root@kitploit:~
$ profilehound --auth-user alice --auth-password whiteRabbit --auth-domain sccm.lab --target 192.168.57.0/27
    ____             _____ __     __  __                      __
   / __ \_________  / __(_) /__  / / / /___  __  ______  ____/ /
  / /_/ / ___/ __ \/ /_/ / / _ \/ /_/ / __ \/ / / / __ \/ __  /
 / ____/ /  / /_/ / __/ / /  __/ __  / /_/ / /_/ / / / / /_/ /
/_/   /_/   \____/_/ /_/_/\___/_/ /_/\____/\__,_/_/ /_/\__,_/    v0.1.1
@m4lwhere

BloodHound CE OpenGraph collector for user profiles stored on domain machines.

[12/30/25 11:58:05] INFO     Loaded 32 targets
[12/30/25 11:58:08] INFO     Successful authentication on 192.168.57.10 (192.168.57.10) as sccm.lab\alice
                    INFO     Successfully connected to share \\192.168.57.10\C$ as sccm.lab\alice
                    INFO     Enumerating profiles in \\192.168.57.10\C$\Users\...
                    INFO         vagrant:    S-1-5-21-3016982856-3796307652-1246469985-1000  created:2025-11-07      modified:2025-11-07
                    INFO     Found 1 domain profile(s) for 192.168.57.10
                    INFO     Successful authentication on 192.168.57.11 (192.168.57.11) as sccm.lab\alice
[12/30/25 11:58:09] INFO     Successfully connected to share \\192.168.57.11\C$ as sccm.lab\alice
                    INFO     Enumerating profiles in \\192.168.57.11\C$\Users\...
                    INFO         administrator:      S-1-5-21-3016982856-3796307652-1246469985-500   created:2025-11-07      modified:2025-11-07
                    INFO         alice:      S-1-5-21-3016982856-3796307652-1246469985-1112  created:2025-12-28      modified:2025-11-07
                    INFO         eve:        S-1-5-21-3016982856-3796307652-1246469985-1116  created:2025-12-27      modified:2025-11-07
                    INFO     Found 3 domain profile(s) for 192.168.57.11
                    INFO     Successful authentication on 192.168.57.12 (192.168.57.12) as sccm.lab\alice
                    INFO     Successfully connected to share \\192.168.57.12\C$ as sccm.lab\alice
                    INFO     Enumerating profiles in \\192.168.57.12\C$\Users\...
                    INFO         alice:      S-1-5-21-3016982856-3796307652-1246469985-1112  created:2025-12-28      modified:2025-12-28
                    INFO         franck:     S-1-5-21-3016982856-3796307652-1246469985-1117  created:2025-12-27      modified:2025-11-07
                    INFO         sccm-sql:   S-1-5-21-3016982856-3796307652-1246469985-1121  created:2025-11-07      modified:2025-11-07
                    INFO     Found 3 domain profile(s) for 192.168.57.12
                    INFO     Successful authentication on 192.168.57.13 (192.168.57.13) as sccm.lab\alice
                    INFO     Successfully connected to share \\192.168.57.13\C$ as sccm.lab\alice
                    INFO     Enumerating profiles in \\192.168.57.13\C$\Users\...
                    INFO         alice:      S-1-5-21-3016982856-3796307652-1246469985-1112  created:2025-12-26      modified:2025-12-28
                    INFO         sccm-account-da:    S-1-5-21-3016982856-3796307652-1246469985-1119  created:2025-12-26      modified:2025-11-07
                    INFO     Found 2 domain profile(s) for 192.168.57.13
[12/30/25 11:59:27] INFO     Found 4 machines with profiles
                    INFO     Exported OpenGraph intel to profilehound_20251230-115805.json

Esto crea un archivo llamado profilehound_20251230-115805.json en el directorio actual. Este archivo se puede importar directamente en BHCE arrastrándolo y soltándolo en la interfaz de BloodHound. Se analizará automáticamente y correlacionará los nodos mediante SID. El nuevo edge HasUserProfile se creará para mostrar la relación entre el usuario y el perfil.

ProfileHound además imprimirá un pequeño resumen de estadísticas en la consola una vez finalizado:

root@kitploit:~
╭───────────────────────── General Summary ──────────────────────────────╮
│        ProfileHound Statistics                                         │
│  Total Targets with Profiles    4                                      │
│  Total Unique Profiles (Users)  7                                      │
│  Average Profiles per Target    2.25                                   │
╰────────────────────────────────────────────────────────────────────────╯
       Top Connected Users
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ User          ┃ Machine Count ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ alice         │ 3             │
│ vagrant       │ 1             │
│ administrator │ 1             │
│ eve           │ 1             │
│ franck        │ 1             │
└───────────────┴───────────────┘
     Top Populated Machines
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Machine       ┃ Profile Count ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ 192.168.57.11 │ 3             │
│ 192.168.57.12 │ 3             │
│ 192.168.57.13 │ 2             │
│ 192.168.57.10 │ 1             │
└───────────────┴───────────────┘
                       Oldest User Profiles
┏━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ User            ┃ Machine         ┃ Created    ┃ Last Modified ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ vagrant         │ DC.sccm.lab     │ 2025-11-07 │ 2025-11-07    │
│ sccm-sql        │ MSSQL.sccm.lab  │ 2025-11-07 │ 2025-11-07    │
│ administrator   │ MECM.sccm.lab   │ 2025-11-07 │ 2025-11-07    │
│ sccm-account-da │ CLIENT.sccm.lab │ 2025-12-26 │ 2025-11-07    │
│ alice           │ CLIENT.sccm.lab │ 2025-12-26 │ 2025-12-28    │
└─────────────────┴─────────────────┴────────────┴───────────────┘
                Longest Lived Profiles (Created -> Modified)
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ User          ┃ Machine         ┃ Age (Days) ┃ Created    ┃ Last Modified ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ alice         │ CLIENT.sccm.lab │ 1.8        │ 2025-12-26 │ 2025-12-28    │
│ alice         │ MSSQL.sccm.lab  │ 0.0        │ 2025-12-28 │ 2025-12-28    │
│ sccm-sql      │ MSSQL.sccm.lab  │ 0.0        │ 2025-11-07 │ 2025-11-07    │
│ administrator │ MECM.sccm.lab   │ 0.0        │ 2025-11-07 │ 2025-11-07    │
│ vagrant       │ DC.sccm.lab     │ 0.0        │ 2025-11-07 │ 2025-11-07    │
└───────────────┴─────────────────┴────────────┴────────────┴───────────────┘
                     Top 5 Machines to Focus On (Hubs)
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Machine         ┃ Score ┃ Reason                                         ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ MECM.sccm.lab   │ 4.5   │ Has 3 profiles, potential lateral movement hub │
│ MSSQL.sccm.lab  │ 4.5   │ Has 3 profiles, potential lateral movement hub │
│ CLIENT.sccm.lab │ 3.5   │ Has 2 profiles, potential lateral movement hub │
│ DC.sccm.lab     │ 1.0   │ Has 1 profiles, potential lateral movement hub │
└─────────────────┴───────┴────────────────────────────────────────────────┘

Cómo funciona

ProfileHound usa el recurso compartido C$ para enumerar los perfiles de usuario en una máquina del dominio en \\<target>\C$\Users\. Leerá el archivo NTUSER.DAT del usuario para determinar si la cuenta es de dominio o local, obteniendo el SID de los metadatos del archivo. Por ejemplo, recopilará todos los directorios de usuario en \\<target>\C$\Users\ y luego recorrerá cada directorio para buscar el archivo NTUSER.DAT en \\<target>\C$\Users\<username>\NTUSER.DAT. Si el archivo NTUSER.DAT pertenece a un SID conocido, intentará encontrar el SID del usuario leyendo su directorio DPAPI (p. ej., \\<target>\C$\Users\<username>\AppData\Roaming\Microsoft\Protect\<SID>).

Debido a que accedemos al recurso compartido C$, necesitamos una cuenta administrativa para autenticarnos en la máquina objetivo. ProfileHound usará las credenciales proporcionadas para autenticarse en la máquina objetivo. Si usas una cuenta de dominio, puedes usar la opción --auth-domain para especificar el dominio. Si usas una cuenta local, puedes usar la opción --smb-local-auth.

Por defecto, ProfileHound se detiene después de un fallo de autenticación de dominio SMB para reducir el riesgo de bloqueo de cuentas. Si esperas que algunos endpoints rechacen la autenticación de dominio y quieres continuar escaneando los objetivos restantes, usa --smb-ignore-failed-domain-auth.

Si ProfileHound se detiene durante la recopilación de datos SMB después de haber encontrado perfiles, intentará exportar los resultados parciales de OpenGraph antes de salir.

Se recopilan las fechas de creación y última modificación del archivo NTUSER.DAT, que pueden usarse para determinar si el perfil está activo. Esta correlación se maneja dentro de las consultas Cypher sobre las propiedades del edge; hay ejemplos más abajo.

Es interesante notar que si el archivo NTUSER.DAT tiene una última modificación anterior a la fecha de creación, es probable que el perfil se haya creado pero no se haya utilizado de forma tangible. Esta condición existe porque el archivo NTUSER.DAT se copia del perfil C:\Users\Default cuando se crea un nuevo perfil de usuario, manteniendo la misma fecha de modificación aunque la fecha de creación sea posterior. Debido a esto, podemos estar razonablemente seguros de que ese perfil específico no contendrá secretos.

Selección de objetivos

ProfileHound utiliza la librería ShareHound de @podalirius_ para enumerar objetivos. Si no se proporcionan las opciones --target ni --target-file, ProfileHound enumerará los objetivos conectándose a LDAP para recopilar automáticamente todos los FQDN de las máquinas del dominio.

Consultas interesantes

Podemos extraer muchas conclusiones potentes de estos datos, que nos indican dónde debemos centrar nuestra atención. Todas estas consultas se pueden importar en BloodHound arrastrando y soltando el archivo ProfileHound_Cypher_Queries.zip en la interfaz de BloodHound usando el botón Import de la página Saved Queries. Aquí tienes algunos ejemplos:

Buscar todos los edges de perfil de usuario

Esta es una consulta simple que encontrará todos los perfiles de usuario en el grafo.

root@kitploit:~
MATCH p=(u:User)-[:HasUserProfile]->(c:Computer)
RETURN p

Buscar perfiles de usuario por nombre de grupo

Esto encontrará todos los perfiles de usuario que son miembros del grupo "Administrators" del dominio.

root@kitploit:~
MATCH p=(g:Group)<-[:MemberOf*1..]-(u:User)-[:HasUserProfile]->(c:Computer)
WHERE toLower(g.samaccountname) = "administrators"
RETURN p

Buscar perfiles de usuario activos en los últimos 3 días

Esto encontrará todos los perfiles de usuario que han sido modificados en los últimos 3 días. Ayuda a determinar dónde un perfil de usuario podría ser la máquina principal de un usuario y contener buen botín.

root@kitploit:~
WITH 3 as active_days
MATCH p = (u:User)-[e:HasUserProfile]-(c:Computer)
WHERE e.profileModified > (datetime().epochseconds - (active_days * 86400))
RETURN p

Perfiles de usuario activos dentro de un grupo específico (potente)

Esta es una consulta extremadamente potente para localizar perfiles de usuario específicos utilizados en los últimos 3 días por miembros de un grupo concreto.

root@kitploit:~
WITH 3 as active_days, "administrators" as group_name
MATCH p = (g:Group)<-[:MemberOf*1..]-(u:User)-[e:HasUserProfile]-(c:Computer)
WHERE e.profileModified > (datetime().epochseconds - (active_days * 86400)) AND toLower(g.samaccountname) = group_name
RETURN p

Eliminar perfiles de usuario no utilizados

Esto eliminará cualquier perfil de usuario donde el archivo NTUSER.DAT haya sido modificado antes de la fecha de creación. Esto indica que el perfil fue creado, pero no utilizado de forma tangible. Esta condición existe porque el archivo NTUSER.DAT se copia del perfil C:\Users\Default cuando se crea un nuevo perfil de usuario, manteniendo la misma fecha de modificación aunque la fecha de creación sea posterior.

root@kitploit:~
match p = (u:User)-[e:HasUserProfile]-(c:Computer)
where e.profileCreated < e.profileModified
return p

Créditos

Esto simplemente no habría sido posible sin las librerías ShareHound y bhopengraph de Remi Gascou (@podalirius).

Mejoras futuras

El enfoque de esta herramienta es determinar qué máquinas tienen más probabilidades de contener secretos para usuarios específicos. Las mejoras futuras incluirán:

  • Implementar la librería SCCMHunter de @garrettfoster13 para mejorar la recopilación de datos.
    • Usar la función get_lastlogon para crear edges HasUserProfile en las máquinas.
    • Usar la función get_puser para asociar usuarios de dominio como propietarios principales de dispositivos específicos.
  • Implementar la correlación de propiedad de dispositivos Azure AD desde AzureHound.
    • Esto parece recopilarse ya como un objeto AZDeviceOwner en .data.owners[owner.DeviceOwner.onPremisesSecurityIdentifier]
  • Usar ShareHound para explorar archivos sensibles en perfiles coincidentes e incorporarlos al grafo.
  • Analizar el archivo NTUSER.DAT para extraer programas, documentos y actividad del navegador recientes.
Descargar herramienta