
Herramienta de pulverización de contraseñas lenta y sigilosa, diseñada para pulverizar en intervalos durante un largo período de tiempo.
hey, yo, me siento como spraycharles - Chiddy Bang
Herramienta de pulverización de contraseñas lenta y constante, diseñada para rociar en un intervalo durante un largo período de tiempo.
Incluye plugins de pulverización para Office365, OWA, EWS, Okta, ADFS, Cisco SSL VPN, Citrix Netscaler, Sonicwall, NTLM sobre HTTP y SMB.
Artículo de blog asociado por @sprocket_ed cubriendo NTLM sobre HTTP, Exchange Web Services y Spraycharles.
Spraycharles es un pulverizador de contraseñas relativamente simple, diseñado en un momento en que no había muchas herramientas disponibles públicamente que permitieran que la pulverización de contraseñas fuera un proceso no manual durante una prueba de penetración. Quizás la mejor característica de Spraycharles es la capacidad de configurar una pulverización de larga duración usando -a/--attempts e -i/--interval, y dejarlo correr durante varios días, verificándolo periódicamente. Si tienes un servicio único o algo especial para pulverizar, también es muy fácil crear una plantilla para un nuevo módulo y empezar a pulverizar.
Spraycharles no fue diseñado originalmente pensando en proveedores modernos de autenticación/nube. Si buscas funciones más avanzadas, quizás quieras echar un vistazo a herramientas como CredMaster o TeamFiltration. Spraycharles no fue diseñado para ser rápido - es de un solo hilo y está orientado más a un enfoque de volumen/tiempo.
Spraycharles se puede instalar con pip3 install spraycharles o clonando este repositorio y ejecutando pip3 install .
[!TIP] Esto registrará los alias
spraycharlesyscpara abreviar en tu PATH. Los archivos de registro y salida se almacenan en~/.spraycharles. Se puede especificar una ubicación de salida alternativa con un indicador de línea de comandos.
Ejecuta los siguientes comandos para construir el contenedor Docker de Spraycharles:
git clone https://github.com/Tw1sm/spraycharles
cd spraycharles/extras
docker build . -t spraycharles
Ejecuta el siguiente comando para usar el contenedor Docker de Spraycharles:
docker run -it -v ~/.spraycharles:/root/.spraycharles spraycharles -h
Puede que necesites especificar volúmenes adicionales según dónde se almacenen las listas de nombres de usuario y contraseñas.
Para usuarios de Nix o NixOS hay un paquete disponible. Ten en cuenta que las últimas versiones pueden estar solo en el canal unstable.
nix-env -iA nixos.spraycharles
El subcomando spray:
Usage: spraycharles spray [OPTIONS] COMMAND [ARGS]...
Pulverización de contraseñas lenta y constante
╭─ Options ─────────────────────────────────────────────────────────────────────────────╮
│ --debug Habilita el registro de depuración (anula --quiet) │
│ --config TEXT Archivo de configuración. │
│ --help -h Muestra este mensaje y sale. │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ User/Pass Config ────────────────────────────────────────────────────────────────────╮
│ * --usernames -u TEXT Ruta del archivo de la lista de usuarios [default: │
│ None] │
│ [required] │
│ * --passwords -p TEXT Contraseña única a pulverizar o ruta del archivo de │
│ la lista de contraseñas │
│ [default: None] │
│ [required] │
│ --equal -e Realiza 1 pulverización por cada usuario donde │
│ contraseña = nombre de usuario │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Spray Target ────────────────────────────────────────────────────────────────────────╮
│ --host -H TEXT Host al que pulverizar │
│ contraseñas (ip o nombre de │
│ host). Puede ser cualquier cosa │
│ al usar el módulo Office365 - │
│ solo se usa para el nombre del │
│ archivo de registro │
│ [default: None] │
│ * --module -m [ADFS|CiscoSSLVPN|Citrix|NTLM Módulo correspondiente al host │
│ |Office365|Okta|OWA|SMB|Sonic destino │
│ wall] [default: None] │
│ [required] │
│ --path TEXT Endpoint de autenticación NTLM │
│ (ej., rpc o ews) │
│ [default: None] │
│ --port -P INTEGER Puerto al que conectarse en el │
│ host especificado │
│ [default: 443] │
│ --fireprox -f TEXT URL de la interfaz fireprox │
│ deseada │
│ [default: None] │
│ --domain -d TEXT HTTP - Anteponer DOMINIO\ a │
│ los nombres de usuario; SMB - │
│ Proporcionar dominio para la │
│ conexión smb │
│ [default: None] │
│ --no-ssl Usar HTTP en lugar de HTTPS │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Output ──────────────────────────────────────────────────────────────────────────────╮
│ --output -o TEXT Nombre y ruta del archivo de resultados [default: None] │
│ --quiet No registrará cada intento de inicio de sesión en la consola │
│ --analyze Ejecutar el analizador de resultados después de cada │
│ intervalo de pulverización (los falsos positivos tempranos │
│ son más probables) │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Spray Behavior ──────────────────────────────────────────────────────────────────────╮
│ --attempts -a INTEGER Número de envíos de inicio de sesión por intervalo │
│ (por cada usuario) │
│ [default: None] │
│ --interval -i INTEGER Minutos entre intervalos de inicio de sesión │
│ [default: None] │
│ --timeout -t INTEGER Umbral de tiempo de espera de solicitud web │
│ [default: 5] │
│ --jitter INTEGER Tiempo de variación entre solicitudes en segundos │
│ [default: None] │
│ --jitter-min INTEGER Tiempo mínimo entre solicitudes en segundos │
│ [default: None] │
│ --pause Pausar la pulverización entre intervalos si se │
│ encuentra un nuevo posible inicio de sesión exitoso │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Notifications ───────────────────────────────────────────────────────────────────────╮
│ --notify -n [Slack|Teams|Discord] Habilitar notificaciones para Slack, Teams │
│ o Discord │
│ [default: None] │
│ --webhook -w TEXT Webhook utilizado para el módulo de │
│ notificación especificado │
│ [default: None] │
╰───────────────────────────────────────────────────────────────────────────────────────╯
Debido a la cantidad de indicadores de CLI que se usan a menudo, una alternativa es completar los parámetros de línea de comandos desde un archivo yaml usando el indicador --config. Además, cada vez que uses Spraycharles, tus opciones de CLI se escribirán en un archivo yaml (last-config.yaml) en el directorio actual para facilitar la modificación y reutilización.
Spraycharles tiene la capacidad de enviar notificaciones a Discord, Slack y Microsoft Teams después de un intento de inicio de sesión potencialmente exitoso. Esta lista de proveedores de notificaciones se puede ampliar usando el script utils/notify.py. Para cualquiera de los agentes de notificación potenciales, debes especificar su nombre y una URL de webhook.
Puedes especificarlos usando el archivo de configuración para mantener tu comando más corto:
notify: Slack
webhook: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Las notificaciones enviadas a cualquiera de los proveedores incluirán el nombre de host de destino asociado con el trabajo de pulverización. Esto es especialmente útil cuando se pulverizan múltiples objetivos a la vez.
Tienes la capacidad de realizar cambios en los archivos de nombre de usuario y contraseña proporcionados mientras la pulverización está en curso. Las adiciones o eliminaciones de las listas surtirán efecto en la próxima rotación de contraseña.
[!NOTE] Si insertas una nueva contraseña en la lista, debe estar después de la contraseña que se está pulverizando actualmente, para que sea pulverizada (Spraycharles mantiene un contador de bucle interno que se usa como índice para tomar la siguiente contraseña en el lugar correspondiente de la lista actualizada)
Spraycharles incluye algunas utilidades adicionales para ayudar con los esfuerzos de pulverización. Lista completa de módulos de Spraycharles:
Usage: spraycharles [OPTIONS] COMMAND [ARGS]...
╭─ Options ─────────────────────────────────────────────────────────────────────────────╮
│ --help -h Muestra este mensaje y sale. │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────────────────────────────────────────╮
│ analyze Analizar archivos de salida de Spraycharles para posibles aciertos de │
│ pulverización │
│ gen Generar listas de contraseñas personalizadas desde un archivo JSON │
│ modules Listar módulos de pulverización │
│ parse Parsear endpoints NTLM sobre HTTP y SMB para recopilar información de │
│ dominio │
│ spray Pulverización de contraseñas lenta y constante │
╰───────────────────────────────────────────────────────────────────────────────────────╯
El subcomando "gen" de Spraycharles generará una lista de contraseñas basada en las especificaciones proporcionadas en extras/list_elements.json
spraycharles gen extras/list_elements.json custom_passwords.txt
El subcomando parse de Spraycharles extraerá el dominio interno de servicios NTLM sobre HTTP y SMB usando un comando similar al que se muestra a continuación.
spraycharles parse https://example.com/ews
spraycharles parse smb://host.domain.local
El submódulo analyze puede leer tus objetos JSON de salida y determinar las longitudes de respuesta que son estadísticamente relevantes. Con suficientes datos, debería poder extraer los inicios de sesión exitosos de tu archivo de resultados. Esta no es la única forma de determinar inicios de sesión exitosos, depende de tu sitio objetivo, y aún recomendaría verificar los datos tú mismo para asegurarte de que no se pierda nada. Para SMB, simplemente encontrará entradas con códigos NTSTATUS que indican éxito.
spraycharles analyze myresults.json
Esta herramienta está diseñada para su uso durante pruebas de penetración; el uso de esta herramienta para atacar objetivos sin consentimiento mutuo previo es ilegal. Es responsabilidad del usuario final cumplir con todas las leyes locales, estatales y federales aplicables. Los desarrolladores no asumen ninguna responsabilidad y no son responsables por el mal uso de este programa.
Spraycharles usa Poetry para gestionar las dependencias. Instalar desde el código fuente y configurar para desarrollo con:
pip3 install poetry
git clone https://github.com/Tw1sm/spraycharles
cd spraycharles
poetry install
ntlm_challenger.py, que se incluye en la carpeta utils