Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
pyCobaltHound — pyCobaltHound è un'estensione di script Aggressor per Cobalt Strike che mira a fornire una profonda integrazione tra Cobalt Strike e Bloodhound. | Kitploit
Strumenti/GitHubGitHub/nvisosecurity/pycobalthound
Frameworks per Penetration TestingEscalation di PrivilegiRicognizioneFramework di ExploitMovimento LateraleRaccolta InformazioniPost-ExploitRed Teaming
GitHubnvisosecurity/pycobalthound

pyCobaltHound

pyCobaltHound è un'estensione di script Aggressor per Cobalt Strike che mira a fornire una profonda integrazione tra Cobalt Strike e Bloodhound.

Vedi Repository
1351954 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Riepilogo rapido

pyCobaltHound è un'estensione per script Aggressor per Cobalt Strike che mira a fornire una profonda integrazione tra Cobalt Strike e BloodHound.

pyCobaltHound si impegna ad assistere gli operatori red team:

  • interrogando automaticamente il database di BloodHound per scoprire percorsi di escalation aperti da credenziali appena raccolte.
  • contrassegnando automaticamente come compromised gli utenti e i computer compromessi.
  • permettendo agli operatori di investigare rapidamente e facilmente il potenziale di escalation delle sessioni beacon e degli utenti.

Per fare ciò, pyCobaltHound utilizza un insieme di query integrate. Gli operatori possono anche aggiungere/rimuovere le proprie query per ottimizzare le capacità di monitoraggio di pyCobaltHound. Questo offre la flessibilità di adattare al volo durante gli impegni per tenere conto di obiettivi specifici dell'impegno (utenti, host, ecc.).

pyCobaltHound

Installazione e utilizzo

Per installare pyCobaltHound clona questo repository. Non dimenticare di clonare anche il sottomodulo incluso!

Puoi usare il seguente comando:

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

Dipendenze

Assicurati che le seguenti dipendenze siano installate correttamente:

PyCobalt

PyCobalt è un'API Python per Cobalt Strike. Espone molte funzioni di Aggressor da utilizzare direttamente da Python.

Configurazione

Assicurati di avere Python3+ installato. Mentre PyCobalt potrebbe funzionare anche su macOS e Windows, lo abbiamo testato principalmente su Linux.

Ci sono due modi per usare la libreria Python PyCobalt:

  1. Eseguilo direttamente dal repository usando PYTHONPATH. pyCobaltHound adotta questo approccio, impostando il percorso di ricerca all'interno del programma Python usando la variabile sys.path.
  2. Installa la libreria Python PyCobalt. Per farlo, esegui python3 setup.py install. Dovrai modificare pycobalthound.py per assicurarti che usi la libreria installata invece di quella nel repository incluso.
Osservazioni
  • Nota che non c'è garanzia che il progetto PyCobalt venga mantenuto in futuro. In effetti, l'ultimo aggiornamento al progetto è stato per incorporare le modifiche apportate in Cobalt Strike 4.2. Tuttavia, poiché pyCobaltHound utilizza solo funzioni base di Aggressor per interfacciarsi con Cobalt Strike e il suo operatore, questo non è un grosso problema per pyCobaltHound.
  • Il sottomodulo PyCobalt usato in questo progetto è un fork realizzato da noi. Tuttavia non controlliamo il repository PyCobalt.
Suggerimenti e trucchi
  • PyCobalt include alcuni comandi della Script Console per gestire gli script Python in esecuzione. Quando ricarichi il tuo script Aggressor dovresti prima fermare esplicitamente gli script Python. Altrimenti rimarranno in esecuzione per sempre senza fare nulla. Durante lo sviluppo di pyCobaltHound abbiamo notato che questo può anche portare a comportamenti indefiniti.

    Il ricaricamento di pyCobaltHound può essere fatto come segue:

    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
    
  • Per un corretto funzionamento di PyCobalt, puoi chiamare PyCobalt solo in uno script Aggressor. Tienilo a mente se vuoi usare pyCobaltHound insieme ad altri script Aggressor che usano PyCobalt. Il nostro approccio è avere uno script Aggressor con chiamate a python() e include() per ogni strumento basato su PyCobalt.

notify2 (Opzionale)

notify2 è – o era – un pacchetto per mostrare notifiche desktop su Linux. Come vedremo più avanti, pyCobaltHound supporta alcuni modi per notificare l'operatore. notify2 viene usato su Linux per inviare notifiche al demone di notifica tramite D-Bus.

Per abilitarlo, notify2 deve essere installato usando:

pip install notify2

Utilizzo in Cobalt Strike

Usare pyCobaltHound in Cobalt Strike è semplice come importare lo script Aggressor pycobalthound.cna nel tuo client. Una volta fatto, dovresti vedere un menu pyCobaltHound apparire nella barra dei menu di Cobalt Strike.

Utilizzo

Monitoraggio del credential store

L'obiettivo iniziale di pyCobaltHound era monitorare la cache delle credenziali di Cobalt Strike (View > Credentials) per nuove voci. Lo fa reagendo all'evento on_credentials che Cobalt Strike attiva quando vengono apportate modifiche al credential store.

Quando questo evento viene attivato, pyCobaltHound:

  1. Analizza e convalida i dati ricevuti da Cobalt Strike
  2. Controlla se ha già investigato queste entità esaminando la sua cache
  3. Aggiunge le entità a una cache per esecuzioni future
  4. Controlla se le entità esistono nel database di BloodHound
  5. Contrassegna le entità come owned
  6. Interroga il database di BloodHound per ogni nuova entità utilizzando sia query integrate sia personalizzate.
  7. Analizza i risultati restituiti, notifica l'operatore di eventuali risultati interessanti e li scrive in un report HTML di base.

Poiché tutto ciò avviene in modo asincrono rispetto al client principale di Cobalt Strike, questo processo non dovrebbe bloccare la tua interfaccia utente, permettendoti di continuare a lavorare mentre pyCobaltHound indaga in background.

pyCobaltHound utilizza cache separate per ogni teamserver per prevenire problemi quando si usano più teamserver.

Rimozione di entità dalla cache

A volte ci sono situazioni in cui vorresti investigare nuovamente utenti specifici (o l'intero credential store). Potrebbe essere il caso quando hai caricato nuovi dati nel database di BloodHound.

Poiché pyCobaltHound dovrebbe aver già investigato (e quindi messo in cache) tutte le entità nel tuo credential store, non le valuterà rispetto a questi nuovi dati senza un intervento dell'operatore.

Sono disponibili due metodi per controllare quali entità sono in cache.

Rimozione di entità specifiche

Nei casi in cui desideri rimuovere una o più entità specifiche dalla cache, puoi farlo nel visualizzatore delle credenziali (View > Credentials). Basta selezionare i target e cliccare sull'opzione remove from cache sotto la voce di menu pyCobaltHound.

Rimozione dell'intera cache

Nei casi in cui desideri rimuovere tutte le entità dalla cache, puoi farlo nel menu principale di pyCobaltHound (Cobalt Strike > pyCobaltHound > Wipe cache). Questo è molto utile quando vuoi rivalutare l'intero credential store.

Attivazione manuale di un'investigazione

Dopo aver rimosso i target dalla cache, puoi richiedere manualmente a pyCobaltHound di reinvestigare il contenuto del credential store. Questo segue esattamente lo stesso processo di cui sopra.

Gestione dei beacon

pyCobaltHound contiene funzionalità per interagire con sessioni beacon esistenti. Si trovano nel menu contestuale del beacon. Nota che questi comandi possono essere eseguiti su un singolo beacon o su una selezione di beacon.

Questa funzionalità è particolarmente utile quando si ha a che fare con utenti e computer le cui credenziali non sono state ancora compromise, ma che sono effettivamente sotto il nostro controllo (ad esempio perché abbiamo un beacon in esecuzione con il loro token di sessione).

Marca come owned

La funzionalità Mark as owned (pyCobaltHound > Mark as owned) può essere utilizzata per contrassegnare come owned un beacon (o una selezione di beacon) nel database di BloodHound.

Questa finestra di dialogo chiederà all'operatore le seguenti informazioni:

  • Nodetype
    • Both: Se selezionato, sia l'utente che il computer associati al contesto del beacon verranno contrassegnati come owned. pyCobaltHound contrassegnerà i computer come owned solo se la sessione beacon è in esecuzione come amministratore locale, SYSTEM o una sessione ad alta integrità come un altro utente.
    • User: Se selezionato, l'utente associato al contesto del beacon verrà contrassegnato come owned.
    • Computer: Se selezionato, il computer associato al contesto del beacon verrà contrassegnato come owned, indipendentemente dal livello di integrità della sessione associata.
  • Domain
    • Poiché il contesto di un beacon non contiene alcun riferimento al dominio, gli operatori devono specificarlo da soli.

Investigazione

La funzionalità Investigate (pyCobaltHound > Investigate) può essere utilizzata per investigare gli utenti e gli host associati a un beacon (o a una selezione di beacon).

Questa finestra di dialogo chiederà all'operatore le seguenti informazioni:

  • Nodetype
    • Both: Se selezionato, sia l'utente che il computer associati al contesto del beacon verranno investigati. pyCobaltHound investigherà i computer solo se la sessione beacon è in esecuzione come amministratore locale, SYSTEM o una sessione ad alta integrità come un altro utente.
    • Both without logic: Se selezionato, sia l'utente che il computer associati al contesto del beacon verranno investigati. pyCobaltHound investigherà tutte le entità senza controllare i livelli di integrità.
    • User: Se selezionato, l'utente associato al contesto del beacon verrà contrassegnato come owned.
    • Computer: Se selezionato, il computer associato al contesto del beacon verrà contrassegnato come owned, indipendentemente dal livello di integrità della sessione associata.
  • Domain
    • Poiché il contesto di un beacon non contiene alcun riferimento al dominio, gli operatori devono specificarlo da soli.
  • Generate a report
    • Se questa opzione è selezionata, verrà generato un report HTML di base.

Investigazione di entità

pyCobaltHound contiene funzionalità per investigare liberamente le entità. Si trovano nel menu principale (Cobalt Strike > pyCobaltHound > Investigate).

Questa funzionalità è particolarmente utile quando si ha a che fare con utenti e computer le cui credenziali non sono state compromesse e non sono sotto il nostro controllo.

Questa finestra di dialogo chiederà all'operatore le seguenti informazioni:

  • Targets
    • Una stringa in stile CSV di entità che l'operatore desidera investigare. Può essere solo nomi di utente/computer (es. user1) o FQDN ([email protected]).
    • Nota: Non mescolare le notazioni. Puoi usare solo nomi di utente/computer o FQDN!
  • Domain included
    • Questo parametro specifica se la stringa target fornita contiene solo nomi di utente/computer o FQDN.
  • Domain
    • Se la stringa target non contiene FQDN, l'operatore dovrà indicare il dominio a cui appartengono le entità da investigare.
  • Generate a report
    • Se questa opzione è selezionata, verrà generato un report HTML di base.

Impostazioni

Il menu delle impostazioni di pyCobaltHound si trova in Cobalt Strike > pyCobaltHound > Settings.

pyCobaltHound salverà le tue impostazioni su disco. Ogni volta che pyCobaltHound viene ricaricato, controllerà l'esistenza di un file di impostazioni e caricherà le impostazioni salvate se ne trova uno.

pyCobaltHound salva un file di impostazioni per ogni teamserver, quindi è possibile avere impostazioni diverse su teamserver diversi.

Neo4j

Per autenticarsi al database di BloodHound, pyCobaltHound avrà bisogno delle seguenti informazioni:

  • Neo4j username
  • Neo4j password
  • Neo4j URL

Nota: se scegli di salvare in modo persistente le tue impostazioni (per preservarle tra riavvii del client/host), pyCobaltHound deserializzerà e memorizzerà queste credenziali su disco.

Caching

Come discusso in precedenza, pyCobaltHound utilizza la cache per assicurarsi di non eseguire lavoro non necessario. Questa cache può essere disabilitata nelle impostazioni. È utile principalmente quando si sviluppano nuove query per non dover gestire/pulire costantemente la cache.

Notifiche

pyCobaltHound supporta alcuni metodi diversi per notificare l'operatore una volta identificata un'entità di interesse. È possibile disabilitare queste notifiche.

Notifiche native

Per impostazione predefinita, pyCobaltHound notificherà l'operatore utilizzando la messagebox predefinita di Aggressor. Questa opzione può influenzare il flusso di lavoro dell'operatore. È comunque il metodo predefinito poiché è supportato su ogni piattaforma in cui puoi eseguire un client Cobalt Strike.

Notifiche notify2

pyCobaltHound supporta anche la visualizzazione di notifiche desktop su Linux. Questa è la nostra opzione preferita poiché non interrompe il flusso di lavoro dell'operatore.

Reportistica

Durante alcuni dei suoi flussi di lavoro, pyCobaltHound genererà un report HTML. Questa scelta progettuale è stata fatta per evitare di inondare l'operatore con notifiche enormi nel caso in cui vengano investigate molte entità. Questi report verranno generati nella cartella reports. È possibile disabilitare la generazione dei report.

Sincronizzazione delle query

Per impostazione predefinita, pyCobaltHound sincronizzerà le query tra i teamserver utilizzando un file centrale per tutte le impostazioni relative alle query. Ciò significa che le query abilitate, aggiunte o eliminate su un teamserver verranno anche abilitate, aggiunte o eliminate per le query effettuate da altri teamserver. Questa è principalmente un'opzione di comodità e può essere disabilitata, il che è utile nei casi in cui stai eseguendo query specifiche per un impegno che non si applicano a tutti i teamserver a cui sei connesso.

Disabilitazione

Quando la sincronizzazione delle query è disabilitata, pyCobaltHound controllerà l'esistenza di file di query unici. Se esistono, li caricherà e utilizzerà queste query durante i suoi flussi di lavoro. Se i file non esistono, li creerà e caricherà. Questa impostazione persisterà attraverso i ricaricamenti.

Abilitazione

Quando la sincronizzazione delle query è abilitata, pyCobaltHound controllerà l'esistenza di file di query unici. Se esistono, all'operatore verrà chiesto di scegliere.

L'operatore ha le seguenti scelte:

  • Delete
    • Se scelto, pyCobaltHound rimuoverà semplicemente i file di query unici. Tutte le query personalizzate andranno perse.
  • Merge
    • Se scelto, pyCobaltHound tenterà di unire i file di query unici nei file di query generali. Prima di unire una query, controllerà se non esiste già una query con lo stesso nome o la stessa istruzione Cypher nel file generale. Se si verificano conflitti di merge, all'operatore verrà chiesto se desidera mantenere le query non unite. Verranno salvate in un file separato. I file di query unici verranno quindi rimossi.
  • Keep
    • Se scelto, pyCobaltHound lascerà semplicemente i file di query unici. Tutte le query personalizzate verranno preservate e i file verranno caricati di nuovo se la sincronizzazione delle query viene disabilitata di nuovo.

Query

Query integrate

pyCobaltHound attualmente supporta le seguenti query integrate:

  • User (user-queries.json)
    • Percorso verso Domain Admins
    • Percorso verso High Value Targets
  • Computer (computer-queries.json)
    • Percorso verso High Value Targets

Gestione delle query

La gestione delle varie query utilizzate da pyCobaltHound può essere effettuata tramite il menu principale (Cobalt Strike > pyCobaltHound > Queries).

Abilitazione/Disabilitazione delle query

La finestra di dialogo Update queries consente agli operatori di abilitare/disabilitare query specifiche. Quando si utilizza questa finestra, all'operatore verrà prima chiesto quale tipo di query desidera aggiornare. Questo viene fatto per rendere/caricare dinamicamente le query corrette durante questo flusso di lavoro.

Dopo aver risposto alla prima finestra di dialogo, all'operatore verrà presentato un elenco di tutte le query disponibili di quel tipo. Qui potrà scegliere quali query abilitare/disabilitare.

aggressor_query_update

L'opzione del tipo di query è una soluzione poco elegante per passare il tipo di query alla funzione successiva nel flusso di lavoro e non è di competenza dell'operatore.

Aggiunta di query personalizzate

La funzionalità Add query consente agli operatori di aggiungere/rimuovere le proprie query per ottimizzare le capacità di investigazione di pyCobaltHound. Questo offre la flessibilità di adattare pyCobaltHound al volo durante gli impegni per tenere conto di obiettivi specifici dell'impegno (utenti, host, ecc.).

Questa finestra di dialogo chiederà all'operatore le seguenti informazioni:

  • Name
    • Il nome della query personalizzata. Verrà utilizzato in vari menu e report durante i flussi di lavoro di pyCobaltHound.
  • Cypher query
    • La query Cypher che pyCobaltHound deve eseguire. Gli operatori sono abbastanza liberi di definire le loro query. Gli unici requisiti sono i seguenti:
      • pyCobaltHound genera dinamicamente la seguente stringa Cypher basata sui nomi delle entità che sta investigando:
        • WITH [nomi account qui] AS samAccountNames UNWIND samAccountNames AS names.
        • Il segnaposto {statement} verrà sostituito con questa stringa.
        • Questa stringa Cypher prende i samAccountName dei target e li assegna alla variabile "names".
        • Per far funzionare la tua query con questo, devi assicurarti che inizi con la seguente istruzione:
          • MATCH (x) WHERE x.name STARTS WITH names
          • Consiglio di filtrare (ad es. (x:User)) a seconda del tipo di query che stai aggiungendo.
      • pyCobaltHound si aspetta che la query restituisca un insieme distinto di nomi utente.
        • Per farlo, termina la tua query con RETURN DISTINCT (x.name)
      • Per alcuni esempi, fai riferimento alle query integrate.
  • Report headline
    • Il titolo che pyCobaltHound usa per la query personalizzata. Verrà utilizzato nelle notifiche e nei report durante i flussi di lavoro di pyCobaltHound.
      • L'unico requisito è che la frase contenga un segnaposto {number} che pyCobaltHound sostituirà con la quantità di risultati per questa query.
  • Status
    • Questo parametro determina se la query viene creata nello stato abilitato o disabilitato.
  • Query type
    • Il tipo di query che stai aggiungendo. Determinerà quale insieme di query viene modificato.

Eliminazione di query personalizzate

La finestra di dialogo Delete query consente agli operatori di rimuovere query personalizzate specifiche da pyCobaltHound. Quando si utilizza questa finestra, all'operatore verrà prima chiesto quale tipo di query desidera rimuovere. Questo viene fatto per rendere/caricare dinamicamente le query corrette durante questo flusso di lavoro.

Dopo aver risposto alla prima finestra di dialogo, all'operatore verrà presentato un elenco di tutte le query disponibili di quel tipo. Qui potrà scegliere quali query rimuovere.

aggressor_query_remove

L'opzione del tipo di query è una soluzione poco elegante per passare il tipo di query alla funzione successiva nel flusso di lavoro e non è di competenza dell'operatore.

Riferimenti

pyCobaltHound utilizza/si ispira a quanto segue:

  • pycobalt di dcsync
  • Vampire di Coalfire-Research
  • ANGRYPUPPY di vysecurity
  • Max di knavesec
  • BloodHound di SpecterOps
Scarica lo strumento