Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
pyCobaltHound — pyCobaltHound est une extension de script Aggressor pour Cobalt Strike qui vise à fournir une intégration profonde entre Cobalt Strike et Bloodhound. | Kitploit
Outils/GitHubGitHub/nvisosecurity/pycobalthound
Frameworks de Tests d'IntrusionEscalade de PrivilègesReconnaissanceFrameworks d'ExploitationMouvement LatéralCollecte d'InformationsPost-ExploitationRed Teaming
GitHubnvisosecurity/pycobalthound

pyCobaltHound

pyCobaltHound est une extension de script Aggressor pour Cobalt Strike qui vise à fournir une intégration profonde entre Cobalt Strike et Bloodhound.

Voir le dépôt
135195il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Résumé rapide

pyCobaltHound est une extension de script Aggressor pour Cobalt Strike qui vise à fournir une intégration profonde entre Cobalt Strike et Bloodhound.

pyCobaltHound s'efforce d'aider les opérateurs red team en :

  • Interroger automatiquement la base de données BloodHound pour découvrir les chemins d'escalade ouverts par des identifiants nouvellement collectés.
  • Marquer automatiquement les utilisateurs et ordinateurs compromis comme possédés.
  • Permettre aux opérateurs d'enquêter rapidement et facilement sur le potentiel d'escalade des sessions beacon et des utilisateurs.

Pour y parvenir, pyCobaltHound utilise un ensemble de requêtes intégrées. Les opérateurs peuvent également ajouter/supprimer leurs propres requêtes pour affiner les capacités de surveillance de pyCobaltHound. Cela leur offre la flexibilité d'adapter à la volée pendant les engagements pour tenir compte de cibles spécifiques à l'engagement (utilisateurs, hôtes, etc.).

pyCobaltHound

Installation et utilisation

Pour installer pyCobaltHound, clonez ce dépôt. N'oubliez pas de cloner également le sous-module inclus !

Vous pouvez utiliser la commande suivante :

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

Dépendances

Assurez-vous que les dépendances suivantes sont correctement installées :

PyCobalt

PyCobalt est une API Python pour Cobalt Strike. Elle expose de nombreuses fonctions Aggressor pour être utilisées directement depuis Python.

Setup

Assurez-vous d'avoir Python3+ installé. Bien que PyCobalt puisse fonctionner sur macOS et Windows également, nous ne l'avons vraiment testé que sur Linux.

Il existe deux façons d'utiliser la bibliothèque Python PyCobalt :

  1. L'exécuter directement depuis le dépôt en utilisant PYTHONPATH. pyCobaltHound adopte cette approche, en définissant le chemin de recherche depuis le programme Python à l'aide de la variable sys.path variable.
  2. Installer la bibliothèque Python PyCobalt. Pour ce faire, exécutez python3 setup.py install. Vous devrez modifier pycobalthound.py pour vous assurer qu'il utilise la bibliothèque installée au lieu de celle du dépôt inclus.
Remarks
  • Notez qu'il n'y a aucune garantie que le projet PyCobalt sera maintenu à l'avenir. En fait, la dernière mise à jour du projet visait à incorporer les modifications apportées dans Cobalt Strike 4.2. Cependant, comme pyCobaltHound n'utilise que des fonctions Aggressor de base pour s'interfacer avec Cobalt Strike et son opérateur, ce n'est pas un gros problème pour pyCobaltHound.
  • Le sous-module PyCobalt utilisé dans ce projet est un fork réalisé par nos soins. Cependant, nous ne contrôlons pas le dépôt PyCobalt.
Tips & tricks
  • PyCobalt est livré avec quelques commandes de la console de script pour gérer les scripts Python en cours d'exécution. Lorsque vous rechargez votre script Aggressor, vous devez d'abord arrêter explicitement les scripts Python. Sinon, ils tourneront indéfiniment sans rien faire. Pendant le développement de pyCobaltHound, nous avons remarqué que cela pouvait également conduire à un comportement indéfini.

    Le rechargement de pyCobaltHound peut être effectué comme suit :

    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
    
  • Pour que PyCobalt fonctionne correctement, vous ne pouvez appeler PyCobalt que dans un seul script Aggressor. Gardez cela à l'esprit si vous souhaitez utiliser pyCobaltHound avec d'autres scripts Aggressor qui utilisent PyCobalt. Notre approche consiste à avoir un script Aggressor avec des appels à python() et include() pour chaque outil basé sur PyCobalt.

notify2 (Optional)

notify2 est - ou était - un paquet pour afficher des notifications de bureau sur Linux. Comme nous le verrons plus tard, pyCobaltHound prend en charge plusieurs façons de notifier l'opérateur. notify2 est utilisé sur Linux pour envoyer des notifications au démon de notification via D-Bus.

Pour activer cela, notify2 doit être installé en utilisant :

pip install notify2

Usage in Cobalt Strike

Utiliser pyCobaltHound dans Cobalt Strike est aussi simple que d'importer le script Aggressor pycobalthound.cna dans votre client. Une fois cela fait, vous devriez voir un menu pyCobaltHound apparaître dans votre barre de menus Cobalt Strike.

Usage

Credential store monitoring

L'objectif initial de pyCobaltHound était de surveiller le cache d'identifiants de Cobalt Strike (View > Credentials) pour détecter les nouvelles entrées. Il le fait en réagissant à l'événement on_credentials que Cobalt Strike déclenche lors des modifications du magasin d'identifiants.

Lorsque cet événement est déclenché, pyCobaltHound va :

  1. Analyser et valider les données reçues de Cobalt Strike
  2. Vérifier s'il a déjà enquêté sur ces entités en examinant son cache
  3. Ajouter les entités à un cache pour les exécutions futures
  4. Vérifier si les entités existent dans la base de données BloodHound
  5. Marquer les entités comme possédées
  6. Interroger la base de données BloodHound pour chaque nouvelle entité en utilisant à la fois les requêtes intégrées et personnalisées.
  7. Analyser les résultats renvoyés, notifier l'opérateur de toute découverte intéressante et les écrire dans un rapport HTML de base.

Comme tout cela se produit de manière asynchrone par rapport au client principal Cobalt Strike, ce processus ne devrait pas bloquer votre interface utilisateur, vous pouvez donc continuer à travailler pendant que pyCobaltHound enquête en arrière-plan.

pyCobaltHound utilise des caches séparés par teamserver pour éviter les problèmes lors de l'utilisation de plusieurs teamservers.

Removing entities from the cache

Il existe parfois des situations où vous souhaiteriez enquêter à nouveau sur des utilisateurs spécifiques (ou l'ensemble du magasin d'identifiants). Cela peut être le cas lorsque vous avez téléchargé de nouvelles données dans la base de données BloodHound.

Comme pyCobaltHound a déjà dû enquêter (et donc mettre en cache) toutes les entités de votre magasin d'identifiants, il ne les évaluera pas par rapport à ces nouvelles données sans une intervention de l'opérateur.

Deux méthodes sont disponibles pour les opérateurs afin de contrôler quelles entités sont mises en cache.

Removing specific entities

Dans les cas où vous souhaitez supprimer une entité spécifique (ou plusieurs) du cache, vous pouvez le faire dans le visualiseur d'identifiants (View > Credentials). Sélectionnez simplement votre(vos) cible(s) et cliquez sur l'option remove from cache sous l'entrée de menu pyCobaltHound.

Removing the entire cache

Dans les cas où vous souhaitez supprimer toutes les entités du cache, vous pouvez le faire dans le menu principal de pyCobaltHound (Cobalt Strike > pyCobaltHound > Wipe cache). C'est très utile lorsque vous souhaitez réévaluer l'ensemble de votre magasin d'identifiants.

Manually triggering an investigation

Après avoir supprimé vos cibles du cache, vous pouvez demander manuellement à pyCobaltHound de ré-enquêter sur le contenu du magasin d'identifiants. Cela suit exactement le même processus que ci-dessus.

Beacon management

pyCobaltHound contient des fonctionnalités pour interagir avec les sessions beacon existantes. Cela se trouve dans le menu contextuel du beacon. Notez que ces commandes peuvent être exécutées sur un seul beacon ou une sélection de beacons.

Cette fonctionnalité est particulièrement utile lorsqu'il s'agit d'utilisateurs et d'ordinateurs dont les identifiants n'ont pas encore été compromis, mais qui sont effectivement sous notre contrôle (par exemple parce que nous avons un beacon fonctionnant sous leur jeton de session).

Mark as owned

La fonctionnalité Mark as owned (pyCobaltHound > Mark as owned) peut être utilisée pour marquer un beacon (ou une collection de beacons) comme possédé dans la base de données BloodHound.

Cette boîte de dialogue demandera à l'opérateur les informations suivantes :

  • Nodetype
    • Both : Si cette option est sélectionnée, l'utilisateur et l'ordinateur associés au contexte du beacon seront marqués comme possédés. pyCobaltHound ne marquera les ordinateurs comme possédés que si la session beacon s'exécute en tant qu'administrateur local, SYSTEM ou une session de haute intégrité en tant qu'un autre utilisateur.
    • User : Si cette option est sélectionnée, l'utilisateur associé au contexte du beacon sera marqué comme possédé.
    • Computer : Si cette option est sélectionnée, l'ordinateur associé au contexte du beacon sera marqué comme possédé, indépendamment du niveau d'intégrité de la session associée.
  • Domain
    • Étant donné que le contexte d'un beacon ne contient aucune référence au domaine, les opérateurs doivent le spécifier eux-mêmes

Investigation

La fonctionnalité Investigate (pyCobaltHound > Mark as owned) peut être utilisée pour enquêter sur les utilisateurs et les hôtes associés à un beacon (ou une collection de beacons).

Cette boîte de dialogue demandera à l'opérateur les informations suivantes :

  • Nodetype
    • Both : Si cette option est sélectionnée, l'utilisateur et l'ordinateur associés au contexte du beacon seront examinés. pyCobaltHound n'examinera les ordinateurs que si la session beacon s'exécute en tant qu'administrateur local, SYSTEM ou une session de haute intégrité en tant qu'un autre utilisateur.
    • Both without logic : Si cette option est sélectionnée, l'utilisateur et l'ordinateur associés au contexte du beacon seront examinés. pyCobaltHound examinera toutes les entités sans vérifier les niveaux d'intégrité.
    • User : Si cette option est sélectionnée, l'utilisateur associé au contexte du beacon sera examiné.
    • Computer : Si cette option est sélectionnée, l'ordinateur associé au contexte du beacon sera examiné, indépendamment du niveau d'intégrité de la session associée.
  • Domain
    • Étant donné que le contexte d'un beacon ne contient aucune référence au domaine, les opérateurs doivent le spécifier eux-mêmes
  • Generate a report
    • Si cette option est sélectionnée, un rapport HTML de base sera généré

Entity investigation

pyCobaltHound contient des fonctionnalités pour enquêter librement sur des entités. Cela se trouve dans le menu principal (Cobalt Strike > pyCobaltHound > Investigate).

Cette fonctionnalité est particulièrement utile lorsqu'il s'agit d'utilisateurs et d'ordinateurs dont les identifiants n'ont pas été compromis et qui ne sont pas sous notre contrôle.

Cette boîte de dialogue demandera à l'opérateur les informations suivantes :

  • Targets
    • Une chaîne de type CSV des entités que l'opérateur souhaite examiner. Cela peut être juste des noms d'utilisateurs/ordinateurs (par exemple user1) ou des FQDN ([email protected]).
    • Note : Ne mélangez pas les notations. Vous pouvez utiliser soit des noms d'utilisateurs/ordinateurs, soit des FQDN !
  • Domain included
    • Ce paramètre spécifie si la chaîne cible fournie contient juste des noms d'utilisateurs/ordinateurs ou des FQDN.
  • Domain
    • Si la chaîne cible ne contient pas de FQDN, l'opérateur devra indiquer le domaine auquel appartiennent les entités à examiner.
  • Generate a report
    • Si cette option est sélectionnée, un rapport HTML de base sera généré

Settings

Le menu des paramètres de pyCobaltHound se trouve sous Cobalt Strike > pyCobaltHound > Settings.

pyCobaltHound sauvegardera vos paramètres sur le disque. Chaque fois que pyCobaltHound est rechargé, il vérifiera l'existence d'un fichier de paramètres et chargera les paramètres sauvegardés s'il en trouve un.

pyCobaltHound sauvegarde un fichier de paramètres par teamserver, il est donc possible d'avoir des paramètres différents sur différents teamservers.

Neo4j

Pour s'authentifier à la base de données BloodHound, pyCobaltHound aura besoin des informations suivantes :

  • Neo4j username
  • Neo4j password
  • Neo4j URL

Note : si vous choisissez de sauvegarder vos paramètres de manière persistante (pour les conserver lors des redémarrages du client/hôte), pyCobaltHound désérialisera et stockera ces identifiants sur le disque.

Caching

Comme discuté précédemment, pyCobaltHound utilise un cache pour s'assurer de ne pas effectuer de travail inutile. Ce cache peut être désactivé dans les paramètres. C'est surtout utile lors du développement de nouvelles requêtes pour ne pas avoir à gérer/vider le cache constamment.

Notifications

pyCobaltHound prend en charge plusieurs méthodes de notification de l'opérateur lorsqu'il a identifié une entité d'intérêt. Il est possible de désactiver ces notifications.

Native notifications

Par défaut, pyCobaltHound notifiera l'opérateur en utilisant la boîte de message Aggressor par défaut. Cette option peut le flux de travail de l'opérateur. C'est cependant la méthode par défaut car elle est prise en charge sur chaque plateforme où vous pouvez exécuter un client Cobalt Strike.

Notify2 notifications

pyCobaltHound prend également en charge l'affichage de notifications de bureau sur Linux. C'est notre option préférée car elle n'interrompt pas le flux de travail de l'opérateur.

Reporting

Lors de certains de ses flux de travail, pyCobaltHound générera un rapport HTML. Ce choix de conception a été fait pour éviter de spammer l'opérateur avec des notifications géantes dans le cas où beaucoup d'entités étaient examinées. Ces rapports seront générés dans le dossier reports. Il est possible de désactiver la génération de rapports.

Query synchronization

Par défaut, pyCobaltHound synchronisera les requêtes entre les teamservers en utilisant un fichier central pour tous les paramètres liés aux requêtes. Cela signifie que les requêtes activées, ajoutées ou supprimées sur un teamserver seront également activées, ajoutées, supprimées pour les requêtes faites par d'autres teamservers. C'est surtout une option de commodité et peut être désactivée, ce qui est utile dans les cas où vous exécutez des requêtes spécifiques à un engagement qui ne s'appliquent pas à tous les teamservers auxquels vous êtes connecté.

Disabling

Lorsque la synchronisation des requêtes est désactivée, pyCobaltHound vérifiera l'existence de fichiers de requêtes uniques. S'ils existent, il les chargera et utilisera ces requêtes lors de ses flux de travail. Si les fichiers n'existent pas, il les créera et les chargera. Ce paramètre persistera après les rechargements.

Enabling

Lorsque la synchronisation des requêtes est activée, pyCobaltHound vérifiera l'existence de fichiers de requêtes uniques. S'ils existent, l'opérateur sera invité à faire un choix.

L'opérateur a les choix suivants :

  • Delete
    • Si choisi, pyCobaltHound supprimera simplement les fichiers de requêtes uniques. Toutes les requêtes personnalisées seront perdues.
  • Merge
    • Si choisi, pyCobaltHound tentera de fusionner les fichiers de requêtes uniques dans les fichiers de requêtes généraux. Avant de fusionner une requête, il vérifiera s'il n'y a pas de requête dans le fichier général portant le même nom ou la même instruction Cypher. En cas de conflit de fusion, l'opérateur sera invité à savoir s'il souhaite conserver les requêtes non fusionnées. Elles seront sauvegardées dans un fichier séparé. Les fichiers de requêtes uniques seront ensuite supprimés.
  • Keep
    • Si choisi, pyCobaltHound laissera simplement les fichiers de requêtes uniques. Toutes les requêtes personnalisées seront préservées et les fichiers seront rechargés si la synchronisation des requêtes est à nouveau désactivée.

Queries

Built-in queries

pyCobaltHound prend actuellement en charge les requêtes intégrées suivantes :

  • User (user-queries.json)
    • Chemin vers les administrateurs de domaine
    • Chemin vers les cibles de haute valeur
  • Computer (computer-queries.json)
    • Chemin vers les cibles de haute valeur

Managing queries

La gestion des différentes requêtes que pyCobaltHound utilise peut être effectuée via le menu principal (Cobalt Strike > pyCobaltHound > Queries).

Enabling/Disabling queries

La boîte de dialogue Update queries permet aux opérateurs d'activer/désactiver des requêtes spécifiques. Lors de l'utilisation de cette boîte de dialogue, l'opérateur sera d'abord invité à indiquer quel type de requêtes il souhaite mettre à jour. Cela est fait pour afficher/charger dynamiquement les bonnes requêtes au cours de ce flux de travail.

Après avoir répondu à la première boîte de dialogue, l'opérateur se verra présenter une liste de toutes les requêtes disponibles de ce type. Il peut alors choisir les requêtes qu'il souhaite activer/désactiver.

aggressor_query_update

L'option de type de requête est un contournement laid pour passer le type de requête à la fonction suivante du flux de travail et ne concerne pas l'opérateur.

Adding custom queries

La fonctionnalité Add query permet aux opérateurs d'ajouter/supprimer leurs propres requêtes pour affiner les capacités d'enquête de pyCobaltHound. Cela leur offre la flexibilité d'adapter pyCobaltHound à la volée pendant les engagements pour tenir compte de cibles spécifiques à l'engagement (utilisateurs, hôtes, etc.).

Cette boîte de dialogue demandera à l'opérateur les informations suivantes :

  • Name
    • Le nom de la requête personnalisée. Il sera utilisé dans divers menus et rapports lors des flux de travail de pyCobaltHound.
  • Cypher query
    • La requête Cypher que pyCobaltHound doit exécuter. Les opérateurs sont assez libres de définir leurs requêtes. Les seules exigences sont les suivantes :
      • pyCobaltHound génère dynamiquement la chaîne Cypher suivante en fonction des noms d'entités qu'il examine :
        • WITH [account names here] AS samAccountNames UNWIND samAccountNames AS names.
        • Le paramètre fictif {statement} sera remplacé par cette chaîne.
        • Cette chaîne Cypher prend les samAccountNames des cibles et les assigne à la variable "names".
      • Pour que votre requête fonctionne avec cela, vous devez vous assurer qu'elle commence par l'instruction suivante :
        • MATCH (x) WHERE x.name STARTS WITH names
        • Je recommande de filtrer (par exemple (x:User)) selon le type de requête que vous ajoutez.
      • pyCobaltHound attend que la requête retourne un ensemble distinct de noms d'utilisateurs.
        • Pour ce faire, terminez votre requête par RETURN DISTINCT (x.name)
      • Pour quelques exemples, référez-vous aux requêtes intégrées.
  • Report headline
    • Le titre que pyCobaltHound utilise pour la requête personnalisée. Il sera utilisé dans les notifications et les rapports lors des flux de travail de pyCobaltHound.
      • La seule exigence est que la phrase contienne un paramètre fictif {number} que pyCobaltHound remplacera par le nombre de résultats pour cette requête.
  • Status
    • Ce paramètre détermine si la requête est créée dans un état activé ou désactivé.
  • Query type
    • Le type de requête que vous ajoutez. Cela déterminera quel ensemble de requêtes est modifié.

Deleting custom queries

La boîte de dialogue Delete query permet aux opérateurs de supprimer des requêtes personnalisées spécifiques de pyCobaltHound. Lors de l'utilisation de cette boîte de dialogue, l'opérateur sera d'abord invité à indiquer quel type de requête il souhaite supprimer. Cela est fait pour afficher/charger dynamiquement les bonnes requêtes au cours de ce flux de travail.

Après avoir répondu à la première boîte de dialogue, l'opérateur se verra présenter une liste de toutes les requêtes disponibles de ce type. Il peut alors choisir les requêtes qu'il souhaite supprimer.

aggressor_query_remove

L'option de type de requête est un contournement laid pour passer le type de requête à la fonction suivante du flux de travail et ne concerne pas l'opérateur.

References

pyCobaltHound utilise/s'inspire de ce qui suit :

  • pycobalt par dcsync
  • Vampire par Coalfire-Research
  • ANGRYPUPPY par vysecurity
  • Max par knavesec
  • BloodHound par SpecterOps
Télécharger l’outil