
Strumento di spraying password lento e costante, progettato per effettuare spray a intervalli su un lungo periodo di tempo.
hey, yo mi sento come spraycharles - Chiddy Bang
Strumento di password spraying lento e costante, progettato per eseguire spray a intervalli regolari per un lungo periodo di tempo.
Include plugin di spraying per Office365, OWA, EWS, Okta, ADFS, Cisco SSL VPN, Citrix Netscaler, Sonciwall, NTLM over HTTP e SMB.
Post del blog associato di @sprocket_ed che tratta NTLM su HTTP, Exchange Web Services e Spraycharles.
Spraycharles è uno sprayer di password relativamente semplice, progettato in un'epoca in cui non c'erano molti strumenti disponibili pubblicamente che permettessero di eseguire lo spraying di password in modo non manuale durante un test di penetrazione. Forse la migliore caratteristica di Spraycharles è la possibilità di impostare uno spray di lunga durata usando -a/--attempts e -i/--interval, lasciarlo eseguire per diversi giorni, mentre lo si controlla periodicamente. Se hai un servizio unico o qualcosa di particolare per cui eseguire lo spray, è anche molto facile creare un template per un nuovo modulo e iniziare a spruzzare.
Spraycharles non è stato progettato inizialmente pensando ai provider di autenticazione/cloud moderni. Se cerchi funzionalità più avanzate, potresti voler dare un'occhiata a strumenti come CredMaster o TeamFiltration. Spraycharles non è stato progettato per essere veloce - è single-threaded e orientato a un approccio basato su volume/tempo.
Spraycharles può essere installato con pip3 install spraycharles o clonando questo repository ed eseguendo pip3 install .
[!TIP] Questo registrerà gli alias
spraycharlesesc(abbreviazione) nel tuo PATH. I file di log e output vengono salvati in~/.spraycharles. È possibile specificare una posizione di output alternativa con un flag da riga di comando.
Esegui i seguenti comandi per costruire il container Docker di Spraycharles:
git clone https://github.com/Tw1sm/spraycharles
cd spraycharles/extras
docker build . -t spraycharles
Esegui il seguente comando per utilizzare il container Docker di Spraycharles:
docker run -it -v ~/.spraycharles:/root/.spraycharles spraycharles -h
Potrebbe essere necessario specificare volumi aggiuntivi in base a dove sono archiviati gli elenchi di nomi utente e password.
Per gli utenti Nix o NixOS è disponibile un pacchetto. Tieni presente che le ultime versioni potrebbero essere presenti solo nel canale unstable.
nix-env -iA nixos.spraycharles
Il sottocomando spray:
Usage: spraycharles spray [OPTIONS] COMMAND [ARGS]...
Password spraying lento e costante
╭─ Opzioni ─────────────────────────────────────────────────────────────────────────────╮
│ --debug Abilita il logging di debug (sovrascrive --quiet) │
│ --config TEXT File di configurazione. │
│ --help -h Mostra questo messaggio ed esci. │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Configurazione Utente/Password ──────────────────────────────────────────────────────╮
│ * --usernames -u TEXT Percorso del file con l'elenco dei nomi utente │
│ [default: None] │
│ [required] │
│ * --passwords -p TEXT Singola password da spruzzare o percorso del file con │
│ l'elenco delle password │
│ [default: None] │
│ [required] │
│ --equal -e Esegue 1 spray per ogni utente dove password = nome │
│ utente │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Target dello Spray ──────────────────────────────────────────────────────────────────╮
│ --host -H TEXT Host su cui eseguire lo spray │
│ (ip o hostname). Può essere │
│ qualsiasi cosa quando si usa il │
│ modulo Office365 - usato solo │
│ per il nome del file di log │
│ [default: None] │
│ * --module -m [ADFS|CiscoSSLVPN|Citrix|NTLM Modulo corrispondente │
│ |Office365|Okta|OWA|SMB|Sonic all'host di destinazione │
│ wall] [default: None] │
│ [required] │
│ --path TEXT Endpoint di autenticazione NTLM │
│ (es. rpc o ews) │
│ [default: None] │
│ --port -P INTEGER Porta su cui connettersi │
│ all'host specificato │
│ [default: 443] │
│ --fireprox -f TEXT URL dell'interfaccia fireprox │
│ desiderata │
│ [default: None] │
│ --domain -d TEXT HTTP - Antepone DOMINIO\ ai │
│ nomi utente; SMB - Fornisce │
│ il dominio per la connessione │
│ SMB │
│ [default: None] │
│ --no-ssl Usa HTTP invece di HTTPS │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Output ──────────────────────────────────────────────────────────────────────────────╮
│ --output -o TEXT Nome e percorso del file di output dei risultati │
│ [default: None] │
│ --quiet Non registra ogni tentativo di login nella console │
│ --analyze Esegue l'analizzatore dei risultati dopo ogni intervallo di │
│ spray (i falsi positivi anticipati sono più probabili) │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Comportamento dello Spray ───────────────────────────────────────────────────────────╮
│ --attempts -a INTEGER Numero di invii di login per intervallo (per ogni │
│ utente) │
│ [default: None] │
│ --interval -i INTEGER Minuti tra un intervallo di login e l'altro │
│ [default: None] │
│ --timeout -t INTEGER Soglia di timeout per le richieste web [default: 5] │
│ --jitter INTEGER Tempo di jitter tra le richieste in secondi │
│ [default: None] │
│ --jitter-min INTEGER Tempo minimo tra le richieste in secondi │
│ [default: None] │
│ --pause Mette in pausa lo spray tra gli intervalli se viene │
│ trovato un nuovo login potenzialmente riuscito │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Notifiche ───────────────────────────────────────────────────────────────────────────╮
│ --notify -n [Slack|Teams|Discord] Abilita notifiche per Slack, Teams o │
│ Discord │
│ [default: None] │
│ --webhook -w TEXT Webhook utilizzato per il modulo di │
│ notifica specificato │
│ [default: None] │
╰───────────────────────────────────────────────────────────────────────────────────────╯
A causa della quantità di flag CLI spesso utilizzati, è possibile popolare i parametri della riga di comando da un file yaml usando il flag --config. Inoltre, ogni volta che usi Spraycharles, le tue opzioni CLI verranno scritte in un file yaml (last-config.yaml) nella directory corrente per una facile modifica e riutilizzo.
Spraycharles ha la capacità di inviare notifiche a Discord, Slack e Microsoft Teams dopo un tentativo di login potenzialmente riuscito. Questo elenco di provider di notifiche può essere ampliato usando lo script utils/notify.py. Per qualsiasi potenziale agente di notifica, devi specificare il suo nome e un URL webhook.
Puoi specificarli usando il file di configurazione per mantenere il comando più corto:
notify: Slack
webhook: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Le notifiche inviate a qualsiasi provider includeranno il nome host target associato al job di spraying. Questo è particolarmente utile quando si esegue lo spraying su più target contemporaneamente.
Hai la possibilità di apportare modifiche ai file di nomi utente e password forniti mentre lo spray è in esecuzione. Le aggiunte o le rimozioni dalle liste avranno effetto al prossimo cambio di password.
[!NOTE] Se inserisci una nuova password nell'elenco, deve essere dopo la password che si sta attualmente spruzzando, per essere spruzzata (Spraycharles mantiene un contatore interno del ciclo usato come indice per prelevare la password successiva nella posizione corrispondente nell'elenco aggiornato)
Spraycharles include alcune utilità aggiuntive per assistere negli sforzi di spraying. Elenco completo dei moduli di Spraycharles:
Usage: spraycharles [OPTIONS] COMMAND [ARGS]...
╭─ Opzioni ─────────────────────────────────────────────────────────────────────────────╮
│ --help -h Mostra questo messaggio ed esci. │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Comandi ─────────────────────────────────────────────────────────────────────────────╮
│ analyze Analizza i file di output di Spraycharles per potenziali hit di spray │
│ gen Genera elenchi di password personalizzati da file JSON │
│ modules Elenca i moduli di spraying │
│ parse Analizza gli endpoint NTLM su HTTP e SMB per raccogliere informazioni │
│ sul dominio │
│ spray Password spraying lento e costante │
╰───────────────────────────────────────────────────────────────────────────────────────╯
Il sottocomando "gen" di Spraycharles genera un elenco di password basato sulle specifiche fornite in extras/list_elements.json
spraycharles gen extras/list_elements.json custom_passwords.txt
Il sottocomando parse di Spraycharles estrae il dominio interno da servizi NTLM su HTTP e SMB usando un comando simile a quello elencato di seguito.
spraycharles parse https://example.com/ews
spraycharles parse smb://host.domain.local
Il sottomodulo analyze può leggere i tuoi oggetti JSON di output e determinare le lunghezze delle risposte statisticamente rilevanti. Con dati sufficienti, dovrebbe essere in grado di estrarre i login riusciti dal tuo file dei risultati. Questo non è l'unico modo per determinare i login riusciti, dipende dal sito target, e ti consiglio comunque di controllare i dati tu stesso per essere sicuro di non perdere nulla. Per SMB, troverà semplicemente le voci con codici NTSTATUS che indicano successo.
spraycharles analyze myresults.json
Questo strumento è progettato per l'uso durante test di penetrazione; l'utilizzo di questo strumento per attaccare target senza previo consenso reciproco è illegale. È responsabilità dell'utente finale rispettare tutte le leggi locali, statali e federali applicabili. Gli sviluppatori non si assumono alcuna responsabilità legale e non sono responsabili per qualsiasi uso improprio di questo programma.
Spraycharles utilizza Poetry per gestire le dipendenze. Installa dal sorgente e configura per lo sviluppo con:
pip3 install poetry
git clone https://github.com/Tw1sm/spraycharles
cd spraycharles
poetry install
ntlm_challenger.py, incluso nella cartella utils