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
pyCobaltHound — pyCobaltHound es una extensión de script Aggressor para Cobalt Strike que tiene como objetivo proporcionar una integración profunda entre Cobalt Strike y Bloodhound. | Kitploit
Herramientas/GitHubGitHub/nvisosecurity/pycobalthound
Frameworks de Pruebas de PenetraciónEscalada de PrivilegiosReconocimientoFrameworks de ExploitsMovimiento LateralRecopilación de InformaciónPost-ExplotaciónRed Teaming
GitHubnvisosecurity/pycobalthound

pyCobaltHound

pyCobaltHound es una extensión de script Aggressor para Cobalt Strike que tiene como objetivo proporcionar una integración profunda entre Cobalt Strike y Bloodhound.

13519hace 4 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
Ver Repositorio

Resumen rápido

pyCobaltHound es una extensión de script Aggressor para Cobalt Strike que tiene como objetivo proporcionar una integración profunda entre Cobalt Strike y Bloodhound.

pyCobaltHound se esfuerza por ayudar a los operadores de equipos rojos mediante:

  • Consultar automáticamente la base de datos de BloodHound para descubrir rutas de escalación abiertas por credenciales recién recolectadas.
  • Marcar automáticamente como comprometidos los usuarios y equipos comprometidos.
  • Permitir a los operadores investigar rápida y fácilmente el potencial de escalación de las sesiones de beacon y de los usuarios.

Para lograr esto, pyCobaltHound utiliza un conjunto de consultas integradas. Los operadores también pueden añadir/eliminar sus propias consultas para ajustar las capacidades de monitoreo de pyCobaltHound. Esto les da la flexibilidad de adaptar pyCobaltHound sobre la marcha durante los compromisos para tener en cuenta objetivos específicos del compromiso (usuarios, hosts, etc.).

Instalación y uso

Para instalar pyCobaltHound, clone este repositorio. ¡No olvide clonar también el submódulo incluido!

Puede usar el siguiente comando:

  • git clone https://github.com/NVISOsecurity/pyCobaltHound.git --recurse-submodules

Dependencias

Asegúrese de que las siguientes dependencias estén correctamente instaladas:

PyCobalt

PyCobalt es una API de Python para Cobalt Strike. Expone muchas funciones de Aggressor para ser utilizadas directamente desde Python.

Configuración

Asegúrese de tener instalado Python3+. Aunque PyCobalt puede funcionar también en macOS y Windows, solo lo hemos probado realmente en Linux.

Hay dos formas de usar la librería Python PyCobalt:

  1. Ejecutarlo directamente desde el repositorio usando PYTHONPATH. pyCobaltHound adopta este enfoque, estableciendo la ruta de búsqueda desde el programa Python usando la variable sys.path.
  2. Instalar la librería Python PyCobalt. Para hacerlo, ejecute python3 setup.py install. Deberá modificar pycobalthound.py para asegurarse de que use la librería instalada en lugar de la del repositorio incluido.
Observaciones
  • Tenga en cuenta que no hay garantía de que el proyecto PyCobalt se mantenga en el futuro. De hecho, la última actualización del proyecto fue para incorporar los cambios realizados en Cobalt Strike 4.2. Dado que pyCobaltHound solo utiliza funciones básicas de Aggressor para interactuar con Cobalt Strike y su operador, esto no es un gran problema para pyCobaltHound.
  • El submódulo PyCobalt utilizado en este proyecto es un fork realizado por nosotros. Sin embargo, no controlamos el repositorio de PyCobalt.
Consejos y trucos
  • PyCobalt viene con algunos comandos de la consola de scripts para gestionar los scripts Python en ejecución. Cuando recargue su script Aggressor, debería detener explícitamente los scripts Python primero. De lo contrario, se ejecutarán para siempre sin hacer nada. Durante el desarrollo de pyCobaltHound, notamos que esto también puede provocar un comportamiento indefinido.

    Recargar pyCobaltHound se puede hacer de la siguiente manera:

    root@kitploit:~
    aggressor> python-stop-all`
    [pycobalt] Asking script to stop: /root/pycobalthound/pycobalthound.py
    [pycobalt] Script process exited: /root/pycobalthound/pycobalthound.py
    
    aggressor> reload example.cna`
    [pycobalt] Executing script /root/pycobalthound/pycobalthound.py
    
  • Para que PyCobalt funcione correctamente, solo puede llamar a PyCobalt en un script Aggressor. Tenga esto en cuenta si desea usar pyCobaltHound junto con otros scripts Aggressor que usen PyCobalt. Nuestro enfoque es tener un script Aggressor con llamadas a python() e include() para cada herramienta basada en PyCobalt.

notify2 (Opcional)

notify2 es – o era – un paquete para mostrar notificaciones de escritorio en Linux. Como veremos más adelante, pyCobaltHound soporta algunas formas de notificar al operador. notify2 se usa en Linux para enviar notificaciones al demonio de notificaciones a través de D-Bus.

Para habilitarlo, notify2 debe instalarse usando:

pip install notify2

Uso en Cobalt Strike

Usar pyCobaltHound en Cobalt Strike es tan simple como importar el script Aggressor pycobalthound.cna en su cliente. Una vez hecho esto, debería ver un menú pyCobaltHound en la barra de menú de su Cobalt Strike.

Uso

Monitoreo del almacén de credenciales

El objetivo inicial de pyCobaltHound era monitorear el caché de credenciales de Cobalt Strike (Ver > Credenciales) en busca de nuevas entradas. Lo hace reaccionando al evento on_credentials que Cobalt Strike dispara cuando se realizan cambios en el almacén de credenciales.

Cuando se dispara este evento, pyCobaltHound:

  1. Analiza y valida los datos recibidos de Cobalt Strike.
  2. Comprueba si ya ha investigado estas entidades revisando su caché.
  3. Agrega las entidades a un caché para futuras ejecuciones.
  4. Comprueba si las entidades existen en la base de datos de BloodHound.
  5. Marca las entidades como comprometidas.
  6. Consulta la base de datos de BloodHound para cada nueva entidad utilizando tanto consultas integradas como personalizadas.
  7. Analiza los resultados devueltos, notifica al operador sobre cualquier hallazgo interesante y los escribe en un informe HTML básico.

Dado que todo esto tiene lugar de forma asíncrona con respecto al cliente principal de Cobalt Strike, este proceso no debería bloquear su interfaz de usuario, por lo que puede seguir trabajando mientras pyCobaltHound investiga en segundo plano.

pyCobaltHound utiliza cachés separados por teamserver para evitar problemas al usar múltiples teamservers.

Eliminar entidades del caché

A veces hay situaciones en las que desearía investigar usuarios específicos (o todo el almacén de credenciales) nuevamente. Esto podría ser el caso cuando ha subido nuevos datos a la base de datos de BloodHound.

Dado que pyCobaltHound ya debería haber investigado (y por lo tanto almacenado en caché) todas las entidades en su almacén de credenciales, no las evaluará contra estos nuevos datos sin alguna intervención del operador.

Hay dos métodos disponibles para que los operadores controlen qué entidades están en caché.

Eliminar entidades específicas

En casos donde desee eliminar una entidad específica (o varias) del caché, puede hacerlo en el visor de credenciales (Ver > Credenciales). Simplemente seleccione su(s) objetivo(s) y haga clic en la opción eliminar del caché bajo la entrada del menú pyCobaltHound.

Eliminar todo el caché

En casos donde desee eliminar todas las entidades del caché, puede hacerlo en el menú principal de pyCobaltHound (Cobalt Strike > pyCobaltHound > Limpiar caché). Esto es más útil cuando desea reevaluar todo su almacén de credenciales.

Desencadenar manualmente una investigación

Después de eliminar sus objetivos del caché, puede solicitar manualmente que pyCobaltHound reinvestigue el contenido del almacén de credenciales. Esto sigue exactamente el mismo proceso que el anterior.

Gestión de beacons

pyCobaltHound contiene funcionalidad para interactuar con sesiones de beacon existentes. Esto se puede encontrar en el menú contextual del beacon. Tenga en cuenta que estos comandos se pueden ejecutar en un solo beacon o en una selección de beacons.

Esta funcionalidad es especialmente útil cuando se trata de usuarios y equipos cuyas credenciales no han sido comprometidas (todavía), pero que efectivamente están bajo nuestro control (por ejemplo, porque tenemos un beacon ejecutándose bajo su token de sesión).

Marcar como comprometido

La funcionalidad Marcar como comprometido (pyCobaltHound > Marcar como comprometido) se puede usar para marcar un beacon (o un conjunto de beacons) como comprometido en la base de datos de BloodHound.

Este diálogo preguntará al operador la siguiente información:

  • Tipo de nodo
    • Ambos: Si se selecciona, tanto el usuario como el equipo asociados al contexto del beacon serán marcados como comprometidos. pyCobaltHound solo marcará equipos como comprometidos si la sesión del beacon se ejecuta como administrador local, SYSTEM o una sesión de alta integridad como otro usuario.
    • Usuario: Si se selecciona, el usuario asociado al contexto del beacon será marcado como comprometido.
    • Equipo: Si se selecciona, el equipo asociado al contexto del beacon será marcado como comprometido, independientemente del nivel de integridad de la sesión asociada.
  • Dominio
    • Dado que el contexto de un beacon no contiene ninguna referencia al dominio, los operadores deben especificarlo ellos mismos.

Investigación

La funcionalidad Investigar (pyCobaltHound > Marcar como comprometido) se puede usar para investigar los usuarios y hosts asociados con un beacon (o un conjunto de beacons).

Este diálogo preguntará al operador la siguiente información:

  • Tipo de nodo
    • Ambos: Si se selecciona, tanto el usuario como el equipo asociados al contexto del beacon serán investigados. pyCobaltHound solo investigará equipos si la sesión del beacon se ejecuta como administrador local, SYSTEM o una sesión de alta integridad como otro usuario.
    • Ambos sin lógica: Si se selecciona, tanto el usuario como el equipo asociados al contexto del beacon serán investigados. pyCobaltHound investigará todas las entidades sin verificar los niveles de integridad.
    • Usuario: Si se selecciona, el usuario asociado al contexto del beacon será marcado como comprometido.
    • Equipo: Si se selecciona, el equipo asociado al contexto del beacon será marcado como comprometido, independientemente del nivel de integridad de la sesión asociada.
  • Dominio
    • Dado que el contexto de un beacon no contiene ninguna referencia al dominio, los operadores deben especificarlo ellos mismos.
  • Generar un informe
    • Si se selecciona esta opción, se generará un informe HTML básico.

Investigación de entidades

pyCobaltHound contiene funcionalidad para investigar entidades libremente. Esto se puede encontrar en el menú principal (Cobalt Strike > pyCobaltHound > Investigar).

Esta funcionalidad es especialmente útil cuando se trata de usuarios y equipos cuyas credenciales no han sido comprometidas y no están bajo nuestro control.

Este diálogo preguntará al operador la siguiente información:

  • Objetivos
    • Una cadena de estilo CSV de entidades que el operador desea investigar. Pueden ser solo nombres de usuario/equipo (por ejemplo, usuario1) o FQDN ([email protected]).
    • Nota: No mezcle notaciones. ¡Puede usar solo nombres de usuario/equipo o solo FQDN!
  • Dominio incluido
    • Este parámetro especifica si la cadena de objetivos proporcionada contiene solo nombres de usuario/equipo o FQDN.
  • Dominio
    • Si la cadena de objetivos no contiene FQDN, el operador deberá indicar el dominio al que pertenecen las entidades a investigar.
  • Generar un informe
    • Si se selecciona esta opción, se generará un informe HTML básico.

Ajustes

El menú de ajustes de pyCobaltHound se encuentra en Cobalt Strike > pyCobaltHound > Ajustes.

pyCobaltHound guardará sus ajustes en disco. Cada vez que se recarga pyCobaltHound, comprobará la existencia de un archivo de ajustes y cargará los ajustes guardados si encuentra uno.

pyCobaltHound guarda un archivo de ajustes por teamserver, por lo que es posible tener diferentes ajustes en diferentes teamservers.

Neo4j

Para autenticarse en la base de datos de BloodHound, pyCobaltHound necesitará la siguiente información:

  • Nombre de usuario de Neo4j
  • Contraseña de Neo4j
  • URL de Neo4j

Nota: si elige guardar sus ajustes de forma persistente (para conservarlos a través de reinicios del cliente/host), pyCobaltHound deserializará y almacenará estas credenciales en disco.

Caché

Como se discutió antes, pyCobaltHound utiliza caché para asegurarse de no realizar trabajo innecesario. Este caché se puede deshabilitar en los ajustes. Esto es especialmente útil al desarrollar nuevas consultas, para no tener que gestionar/limpiar constantemente el caché.

Notificaciones

pyCobaltHound soporta algunos métodos diferentes para notificar al operador una vez que ha identificado una entidad de interés. Es posible deshabilitar estas notificaciones.

Notificaciones nativas

Por defecto, pyCobaltHound notificará al operador usando el cuadro de mensaje predeterminado de Aggressor. Esta opción puede interrumpir el flujo de trabajo del operador. Sin embargo, es el método predeterminado ya que es compatible en todas las plataformas donde se puede ejecutar un cliente de Cobalt Strike.

Notificaciones de Notify2

pyCobaltHound también soporta mostrar notificaciones de escritorio en Linux. Esta es nuestra opción preferida ya que no interrumpe el flujo de trabajo del operador.

Informes

Durante algunos de sus flujos de trabajo, pyCobaltHound generará un informe HTML. Esta decisión de diseño se tomó para evitar saturar al operador con notificaciones enormes en caso de que se investiguen muchas entidades. Estos informes se generarán en la carpeta reports. Es posible deshabilitar la generación de informes.

Sincronización de consultas

Por defecto, pyCobaltHound sincronizará las consultas entre teamservers utilizando un archivo central para todos los ajustes relacionados con consultas. Esto significa que las consultas habilitadas, añadidas o eliminadas en un teamserver también se habilitarán, añadirán o eliminarán en las consultas realizadas por otros teamservers. Esto es principalmente una opción de conveniencia y se puede deshabilitar, lo cual es útil en casos donde está ejecutando consultas específicas de un compromiso que no se aplican a todos los teamservers a los que está conectado.

Deshabilitando

Cuando la sincronización de consultas está deshabilitada, pyCobaltHound comprobará la existencia de archivos de consulta únicos. Si existen, los cargará y utilizará estas consultas durante sus flujos de trabajo. Si los archivos no existen, los creará y cargará. Esta configuración persistirá a través de recargas.

Habilitando

Cuando la sincronización de consultas está habilitada, pyCobaltHound comprobará la existencia de archivos de consulta únicos. Si existen, se le preguntará al operador que elija.

El operador tiene las siguientes opciones:

  • Eliminar
    • Si se elige, pyCobaltHound simplemente eliminará los archivos de consulta únicos. Todas las consultas personalizadas se perderán.
  • Fusionar
    • Si se elige, pyCobaltHound intentará fusionar los archivos de consulta únicos en los archivos de consulta generales. Antes de fusionar una consulta, comprobará si no hay una consulta en el archivo general que tenga el mismo nombre o la misma declaración Cypher. Si ocurre algún conflicto de fusión, se le preguntará al operador si desea conservar las consultas no fusionadas. Se guardarán en un archivo separado. Luego, los archivos de consulta únicos se eliminarán.
  • Conservar
    • Si se elige, pyCobaltHound simplemente dejará los archivos de consulta únicos. Todas las consultas personalizadas se conservarán y los archivos se volverán a cargar si la sincronización de consultas se deshabilita nuevamente.

Consultas

Consultas integradas

pyCobaltHound actualmente soporta las siguientes consultas integradas:

  • Usuario (user-queries.json)
    • Ruta a Administradores de dominio
    • Ruta a Objetivos de alto valor
  • Equipo (computer-queries.json)
    • Ruta a Objetivos de alto valor

Gestión de consultas

La gestión de las diversas consultas que utiliza pyCobaltHound se puede realizar a través del menú principal (Cobalt Strike > pyCobaltHound > Consultas).

Habilitar/Deshabilitar consultas

El diálogo Actualizar consultas permite a los operadores habilitar/deshabilitar consultas específicas. Al usar este diálogo, primero se le preguntará al operador qué tipo de consultas desea actualizar. Esto se hace para representar/cargar dinámicamente las consultas correctas durante este flujo de trabajo.

Después de responder al primer diálogo, se le presentará al operador una lista de todas las consultas disponibles de ese tipo. Aquí pueden elegir qué consultas desean habilitar/deshabilitar.

aggressor_query_update

La opción de tipo de consulta es una solución provisional para pasar el tipo de consulta a la siguiente función en el flujo de trabajo y no es relevante para el operador.

Añadir consultas personalizadas

La funcionalidad Añadir consulta permite a los operadores añadir/eliminar sus propias consultas para ajustar las capacidades de investigación de pyCobaltHound. Esto les da la flexibilidad de adaptar pyCobaltHound sobre la marcha durante los compromisos para tener en cuenta objetivos específicos del compromiso (usuarios, hosts, etc.).

Este diálogo preguntará al operador la siguiente información:

  • Nombre
    • El nombre de la consulta personalizada. Se utilizará en varios menús e informes durante los flujos de trabajo de pyCobaltHound.
  • Consulta Cypher
    • La consulta Cypher que pyCobaltHound necesita ejecutar. Los operadores son bastante libres de definir sus consultas. Los únicos requisitos son los siguientes:
      • pyCobaltHound genera dinámicamente la siguiente cadena Cypher basada en los nombres de entidad que está investigando:
        • WITH [nombres de cuentas aquí] AS samAccountNames UNWIND samAccountNames AS names.
        • El marcador de posición {statement} será reemplazado por esta cadena.
        • Esta cadena Cypher toma los samAccountNames de los objetivos y los asigna a la variable "names".
        • Para que su consulta funcione con esto, debe asegurarse de que comience con la siguiente declaración:
          • MATCH (x) WHERE x.name STARTS WITH names
          • Recomiendo filtrar (por ejemplo, (x:User)) dependiendo del tipo de consulta que esté añadiendo.
      • pyCobaltHound espera que la consulta devuelva un conjunto distinto de nombres de usuario.
        • Para hacerlo, termine su consulta con RETURN DISTINCT (x.name)

Eliminar consultas personalizadas

El diálogo Eliminar consulta permite a los operadores eliminar consultas personalizadas específicas de pyCobaltHound. Al usar este diálogo, primero se le preguntará al operador qué tipo de consulta desea eliminar. Esto se hace para representar/cargar dinámicamente las consultas correctas durante este flujo de trabajo.

Después de responder al primer diálogo, se le presentará al operador una lista de todas las consultas disponibles de ese tipo. Aquí pueden elegir qué consultas desean eliminar.

aggressor_query_remove

La opción de tipo de consulta es una solución provisional para pasar el tipo de consulta a la siguiente función en el flujo de trabajo y no es relevante para el operador.

Referencias

pyCobaltHound utiliza/toma inspiración de lo siguiente:

  • pycobalt por dcsync
  • Vampire por Coalfire-Research
  • ANGRYPUPPY por vysecurity
  • Max por knavesec
  • BloodHound por SpecterOps
Descargar herramienta
  • Para algunos ejemplos, consulte las consultas integradas.
  • Titular del informe
    • El titular que pyCobaltHound utiliza para la consulta personalizada. Se utilizará en notificaciones e informes durante los flujos de trabajo de pyCobaltHound.
      • El único requisito es que la oración contenga un marcador de posición {number} que pyCobaltHound reemplazará con la cantidad de resultados de esta consulta.
  • Estado
    • Este parámetro determina si la consulta se crea en estado habilitado o deshabilitado.
  • Tipo de consulta
    • El tipo de consulta que está añadiendo. Esto determinará qué conjunto de consultas se edita.