
Ferramenta de pulverização de senhas lenta e discreta, projetada para pulverizar em intervalos ao longo de um longo período de tempo.
hey, yo I'm feeling like spraycharles - Chiddy Bang
Ferramenta de pulverização de senhas lenta e gradual, projetada para pulverizar em um intervalo durante um longo período de tempo.
Inclui plugins de pulverização para Office365, OWA, EWS, Okta, ADFS, Cisco SSL VPN, Citrix Netscaler, Sonciwall, NTLM sobre HTTP e SMB.
Postagem de blog associada por @sprocket_ed cobrindo NTLM sobre HTTP, Exchange Web Services e Spraycharles.
Spraycharles é um pulverizador de senhas relativamente simples, projetado em uma época em que não havia muitas ferramentas públicas disponíveis que permitissem que a pulverização de senhas fosse um processo não manual durante um teste de penetração. Talvez a melhor característica do Spraycharles seja a capacidade de configurar uma pulverização de longa duração usando -a/--attempts e -i/--interval, e deixá-la rodar ao longo de vários dias, enquanto verifica periodicamente. Se você tem um serviço único ou algo específico para pulverizar, também é muito fácil criar um novo módulo a partir de um modelo e começar a pulverizar.
Spraycharles não foi inicialmente projetado pensando em provedores modernos de autenticação/nuvem. Se você está procurando recursos mais avançados, pode querer conferir ferramentas como CredMaster ou TeamFiltration. Spraycharles não foi projetado para ser rápido - é single-threaded e voltado para uma abordagem mais de volume/tempo.
Spraycharles pode ser instalado com pip3 install spraycharles ou clonando este repositório e executando pip3 install .
[!TIP] Isso registrará os apelidos
spraycharlesesc(abreviação) em seu caminho. Os arquivos de log e saída são armazenados em~/.spraycharles. Um local de saída alternativo pode ser especificado com uma flag de CLI.
Execute os seguintes comandos para construir o contêiner Docker do Spraycharles:
git clone https://github.com/Tw1sm/spraycharles
cd spraycharles/extras
docker build . -t spraycharles
Execute o seguinte comando para usar o contêiner Docker do Spraycharles:
docker run -it -v ~/.spraycharles:/root/.spraycharles spraycharles -h
Pode ser necessário especificar volumes adicionais com base em onde as listas de nomes de usuário e senhas estão sendo armazenadas.
Para usuários Nix ou NixOS, há um pacote disponível. Lembre-se de que os lançamentos mais recentes podem estar presentes apenas no canal unstable.
nix-env -iA nixos.spraycharles
O subcomando spray:
Usage: spraycharles spray [OPTIONS] COMMAND [ARGS]...
Pulverização de senhas lenta e gradual
╭─ Opções ─────────────────────────────────────────────────────────────────────────────╮
│ --debug Ativar log de depuração (sobrescreve --quiet) │
│ --config TEXT Arquivo de configuração. │
│ --help -h Mostrar esta mensagem e sair. │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Configuração de Usuário/Senha ───────────────────────────────────────────────────────╮
│ * --usernames -u TEXT Caminho do arquivo da lista de nomes de usuário │
│ [padrão: None] │
│ [obrigatório] │
│ * --passwords -p TEXT Senha única para pulverizar ou caminho do arquivo de │
│ lista de senhas │
│ [padrão: None] │
│ [obrigatório] │
│ --equal -e Faz 1 pulverização para cada usuário onde senha = │
│ nome de usuário │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Alvo da Pulverização ────────────────────────────────────────────────────────────────╮
│ --host -H TEXT Host para pulverizar senha (ip │
│ ou hostname). Pode ser qualquer │
│ coisa ao usar o módulo │
│ Office365 - usado apenas para o │
│ nome do arquivo de log │
│ [padrão: None] │
│ * --module -m [ADFS|CiscoSSLVPN|Citrix|NTLM Módulo correspondente ao host │
│ |Office365|Okta|OWA|SMB|Sonic alvo │
│ wall] [padrão: None] │
│ [obrigatório] │
│ --path TEXT Endpoint de autenticação NTLM │
│ (ex.: rpc ou ews) │
│ [padrão: None] │
│ --port -P INTEGER Porta para conectar no host │
│ especificado │
│ [padrão: 443] │
│ --fireprox -f TEXT URL da interface fireprox │
│ desejada │
│ [padrão: None] │
│ --domain -d TEXT HTTP - Preceder DOMÍNIO\ aos │
│ nomes de usuário; SMB - Fornecer │
│ domínio para conexão smb │
│ [padrão: None] │
│ --no-ssl Usar HTTP em vez de HTTPS │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Saída ───────────────────────────────────────────────────────────────────────────────╮
│ --output -o TEXT Nome e caminho do arquivo de saída de resultados [padrão: │
│ None] │
│ --quiet Não registrará cada tentativa de login no console │
│ --analyze Executar o analisador de resultados após cada intervalo de │
│ pulverização (falsos positivos precoces são mais prováveis) │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Comportamento da Pulverização ───────────────────────────────────────────────────────╮
│ --attempts -a INTEGER Número de submissões de login por intervalo (para cada │
│ usuário) │
│ [padrão: None] │
│ --interval -i INTEGER Minutos entre intervalos de login [padrão: None] │
│ --timeout -t INTEGER Limite de tempo limite da requisição web [padrão: 5] │
│ --jitter INTEGER Tempo de variação entre requisições em segundos │
│ [padrão: None] │
│ --jitter-min INTEGER Tempo mínimo entre requisições em segundos │
│ [padrão: None] │
│ --pause Pausar a pulverização entre intervalos se um novo │
│ login potencialmente bem-sucedido foi encontrado │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Notificações ────────────────────────────────────────────────────────────────────────╮
│ --notify -n [Slack|Teams|Discord] Ativar notificações para Slack, Teams ou │
│ Discord │
│ [padrão: None] │
│ --webhook -w TEXT Webhook usado para o módulo de notificação │
│ especificado │
│ [padrão: None] │
╰───────────────────────────────────────────────────────────────────────────────────────╯
Devido à quantidade de flags de CLI frequentemente usadas, uma alternativa é preencher os parâmetros da linha de comando a partir de um arquivo yaml usando a flag --config. Além disso, cada vez que você usar o Spraycharles, suas opções de CLI serão gravadas em um arquivo yaml (last-config.yaml) no diretório atual para fácil modificação e reutilização.
Spraycharles tem a capacidade de emitir notificações para Discord, Slack e Microsoft Teams após uma tentativa de login potencialmente bem-sucedida. Esta lista de provedores de notificação pode ser aumentada usando o script utils/notify.py. Para qualquer um dos agentes de notificação potenciais, você deve especificar seu nome e uma URL de webhook.
Você pode especificá-los usando o arquivo de configuração para manter seu comando mais curto:
notify: Slack
webhook: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
As notificações enviadas para qualquer um dos provedores incluirão o hostname alvo associado ao trabalho de pulverização. Isso é especialmente útil ao pulverizar vários alvos ao mesmo tempo.
Você tem a capacidade de fazer alterações nos arquivos de nome de usuário e senha fornecidos enquanto a pulverização está em andamento. Adições ou remoções nas listas entrarão em vigor na próxima rotação de senha
[!NOTE] Se você inserir uma nova senha na lista, ela deve estar depois da senha que está sendo pulverizada atualmente, para ser pulverizada (Spraycharles mantém um contador de loop interno usado como índice para buscar a próxima senha na posição correspondente na lista atualizada)
Spraycharles é empacotado com alguns utilitários adicionais para auxiliar nos esforços de pulverização. Lista completa de módulos do Spraycharles:
Usage: spraycharles [OPTIONS] COMMAND [ARGS]...
╭─ Opções ─────────────────────────────────────────────────────────────────────────────╮
│ --help -h Mostrar esta mensagem e sair. │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Comandos ───────────────────────────────────────────────────────────────────────────╮
│ analyze Analisar arquivos de saída do Spraycharles em busca de possíveis acertos │
│ gen Gerar listas de senhas personalizadas a partir de arquivo JSON │
│ modules Listar módulos de pulverização │
│ parse Analisar endpoints NTLM sobre HTTP e SMB para coletar informações de │
│ domínio │
│ spray Pulverização de senhas lenta e gradual │
╰───────────────────────────────────────────────────────────────────────────────────────╯
O subcomando "gen" do Spraycharles gerará uma lista de senhas com base nas especificações fornecidas em extras/list_elements.json
spraycharles gen extras/list_elements.json custom_passwords.txt
O subcomando parse do Spraycharles extrairá o domínio interno de serviços NTLM sobre HTTP e SMB usando um comando semelhante ao listado abaixo.
spraycharles parse https://example.com/ews
spraycharles parse smb://host.domain.local
O submódulo analyze pode ler seus objetos JSON de saída e determinar comprimentos de resposta que são estatisticamente relevantes. Com dados suficientes, deve ser capaz de extrair logins bem-sucedidos do seu arquivo de resultados. Esta não é a única maneira de determinar logins bem-sucedidos, dependendo do seu site alvo, e eu ainda recomendo verificar os dados você mesmo para garantir que nada seja perdido. Para SMB, ele simplesmente encontrará entradas com códigos NTSTATUS que indicam sucesso.
spraycharles analyze myresults.json
Esta ferramenta foi projetada para uso durante testes de penetração; o uso desta ferramenta para atacar alvos sem consentimento mútuo prévio é ilegal. É de responsabilidade do usuário final obedecer a todas as leis locais, estaduais e federais aplicáveis. Os desenvolvedores não assumem qualquer responsabilidade e não são responsáveis por qualquer uso indevido deste programa.
Spraycharles usa Poetry para gerenciar dependências. Instale a partir da fonte e configure para desenvolvimento com:
pip3 install poetry
git clone https://github.com/Tw1sm/spraycharles
cd spraycharles
poetry install
ntlm_challenger.py, que está incluído na pasta utils