
Outil de pulvérisation de mots de passe lent et discret, conçu pour pulvériser à intervalles réguliers sur une longue période.
hey, yo je me sens comme spraycharles - Chiddy Bang
Outil de pulvérisation de mots de passe lent et discret, conçu pour pulvériser à intervalles réguliers sur une longue période.
Inclut des plugins de pulvérisation pour Office365, OWA, EWS, Okta, ADFS, Cisco SSL VPN, Citrix Netscaler, Sonicwall, NTLM over HTTP et SMB.
Article de blog associé par @sprocket_ed couvrant NTLM over HTTP, Exchange Web Services et Spraycharles.
Spraycharles est un pulvérisateur de mots de passe relativement simple, conçu à une époque où il n'y avait pas beaucoup d'outils disponibles permettant de faire de la pulvérisation de mots de passe de manière non manuelle pendant un test d'intrusion. La meilleure fonctionnalité de Spraycharles est peut-être la possibilité de configurer une pulvérisation longue durée en utilisant -a/--attempts et -i/--interval, et de la laisser s'exécuter sur plusieurs jours, tout en vérifiant périodiquement son état. Si vous avez un service ponctuel ou quelque chose d'unique à pulvériser, il est également très facile de modéliser un nouveau module et de commencer à pulvériser.
Spraycharles n'a pas été initialement conçu pour les fournisseurs d'authentification cloud modernes. Si vous recherchez des fonctionnalités plus avancées, vous pouvez consulter des outils comme CredMaster ou TeamFiltration. Spraycharles n'a pas été conçu pour être rapide - il est mono-thread et orienté vers une approche basée sur le volume/temps.
Spraycharles peut être installé avec pip3 install spraycharles ou en clonant ce dépôt et en exécutant pip3 install .
[!TIP] Cela enregistrera les alias
spraycharlesetsc(pour faire court) dans votre chemin. Les fichiers de log et de sortie sont stockés dans~/.spraycharles. Un emplacement de sortie alternatif peut être spécifié avec un indicateur en ligne de commande.
Exécutez les commandes suivantes pour construire le conteneur Docker de Spraycharles :
git clone https://github.com/Tw1sm/spraycharles
cd spraycharles/extras
docker build . -t spraycharles
Exécutez la commande suivante pour utiliser le conteneur Docker de Spraycharles :
docker run -it -v ~/.spraycharles:/root/.spraycharles spraycharles -h
Vous devrez peut-être spécifier des volumes supplémentaires en fonction de l'emplacement où sont stockées les listes de noms d'utilisateur et de mots de passe.
Pour les utilisateurs de Nix ou NixOS, un paquet est disponible. Gardez à l'esprit que les dernières versions peuvent n'être présentes que dans le canal unstable.
nix-env -iA nixos.spraycharles
La sous-commande spray :
Usage: spraycharles spray [OPTIONS] COMMAND [ARGS]...
Pulvérisation de mots de passe lente et discrète
╭─ Options ─────────────────────────────────────────────────────────────────────────────╮
│ --debug Activer les logs de débogage (remplace --quiet) │
│ --config TEXT Fichier de configuration. │
│ --help -h Afficher ce message et quitter. │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Configuration Utilisateur/Mot de passe ─────────────────────────────────────────────╮
│ * --usernames -u TEXT Chemin du fichier de la liste d'utilisateurs │
│ [valeur par défaut: None] │
│ [obligatoire] │
│ * --passwords -p TEXT Mot de passe unique à pulvériser ou chemin du fichier │
│ de la liste de mots de passe │
│ [valeur par défaut: None] │
│ [obligatoire] │
│ --equal -e Effectue 1 pulvérisation pour chaque utilisateur où │
│ le mot de passe = nom d'utilisateur │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Cible de pulvérisation ──────────────────────────────────────────────────────────────╮
│ --host -H TEXT Hôte à pulvériser (ip ou │
│ hostname). Peut être n'importe │
│ quoi lors de l'utilisation du │
│ module Office365 - uniquement │
│ utilisé pour le nom du fichier │
│ de log │
│ [valeur par défaut: None] │
│ * --module -m [ADFS|CiscoSSLVPN|Citrix|NTLM Module correspondant à l'hôte │
│ |Office365|Okta|OWA|SMB|Sonic cible │
│ wall] [valeur par défaut: None] │
│ [obligatoire] │
│ --path TEXT Point de terminaison │
│ d'authentification NTLM (ex. │
│ rpc ou ews) │
│ [valeur par défaut: None] │
│ --port -P INTEGER Port de connexion sur l'hôte │
│ spécifié │
│ [valeur par défaut: 443] │
│ --fireprox -f TEXT URL de l'interface Fireprox │
│ souhaitée │
│ [valeur par défaut: None] │
│ --domain -d TEXT HTTP - Préfixer DOMAIN\ aux │
│ noms d'utilisateur ; SMB - │
│ Fournir le domaine pour la │
│ connexion smb │
│ [valeur par défaut: None] │
│ --no-ssl Utiliser HTTP au lieu de HTTPS │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Sortie ──────────────────────────────────────────────────────────────────────────────╮
│ --output -o TEXT Nom et chemin du fichier de résultats [valeur par défaut: │
│ None] │
│ --quiet Ne pas enregistrer chaque tentative de connexion dans la │
│ console │
│ --analyze Exécuter l'analyseur de résultats après chaque intervalle de │
│ pulvérisation (les faux positifs précoces sont plus │
│ probables) │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Comportement de pulvérisation ───────────────────────────────────────────────────────╮
│ --attempts -a INTEGER Nombre de soumissions de connexion par intervalle │
│ (pour chaque utilisateur) │
│ [valeur par défaut: None] │
│ --interval -i INTEGER Minutes entre les intervalles de pulvérisation │
│ [valeur par défaut: None] │
│ --timeout -t INTEGER Seuil de temporisation des requêtes Web │
│ [valeur par défaut: 5] │
│ --jitter INTEGER Temps de gigue entre les requêtes en secondes │
│ [valeur par défaut: None] │
│ --jitter-min INTEGER Temps minimum entre les requêtes en secondes │
│ [valeur par défaut: None] │
│ --pause Mettre en pause la pulvérisation entre les intervalles │
│ si une nouvelle connexion potentiellement réussie a │
│ été trouvée │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Notifications ───────────────────────────────────────────────────────────────────────╮
│ --notify -n [Slack|Teams|Discord] Activer les notifications pour Slack, Teams │
│ ou Discord │
│ [valeur par défaut: None] │
│ --webhook -w TEXT Webhook utilisé pour le module de │
│ notification spécifié │
│ [valeur par défaut: None] │
╰───────────────────────────────────────────────────────────────────────────────────────╯
En raison du nombre d'indicateurs CLI souvent utilisés, une alternative consiste à peupler les paramètres de ligne de commande à partir d'un fichier yaml en utilisant l'indicateur --config. De plus, chaque fois que vous utilisez Spraycharles, vos options CLI sont écrites dans un fichier yaml (last-config.yaml) dans le répertoire actuel pour une modification et une réutilisation faciles.
Spraycharles a la capacité d'envoyer des notifications à Discord, Slack et Microsoft Teams suite à une tentative de connexion potentiellement réussie. Cette liste de fournisseurs de notification peut être augmentée en utilisant le script utils/notify.py. Pour tout agent de notification potentiel, vous devez spécifier son nom et une URL de webhook.
Vous pouvez les spécifier en utilisant le fichier de configuration pour raccourcir votre commande :
notify: Slack
webhook: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Les notifications envoyées à l'un des fournisseurs incluront le nom d'hôte cible associé au travail de pulvérisation. Cela est particulièrement utile lors de la pulvérisation de plusieurs cibles à la fois.
Vous avez la possibilité de modifier les fichiers de noms d'utilisateur et de mots de passe fournis pendant que la pulvérisation est en cours. Les ajouts ou suppressions dans les listes prendront effet lors de la prochaine rotation de mot de passe.
[!NOTE] Si vous insérez un nouveau mot de passe dans la liste, il doit être après le mot de passe en cours de pulvérisation, pour être pulvérisé (Spraycharles maintient un compteur de boucle interne utilisé comme index pour récupérer le mot de passe suivant à la position correspondante dans la liste mise à jour).
Spraycharles est livré avec quelques utilitaires supplémentaires pour aider aux efforts de pulvérisation. Liste complète des modules Spraycharles :
Usage: spraycharles [OPTIONS] COMMAND [ARGS]...
╭─ Options ─────────────────────────────────────────────────────────────────────────────╮
│ --help -h Afficher ce message et quitter. │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commandes ───────────────────────────────────────────────────────────────────────────╮
│ analyze Analyser les fichiers de sortie de Spraycharles pour les hits potentiels │
│ gen Générer des listes de mots de passe personnalisées à partir d'un fichier │
│ JSON │
│ modules Lister les modules de pulvérisation │
│ parse Analyser les points de terminaison NTLM over HTTP et SMB pour collecter │
│ des informations de domaine │
│ spray Pulvérisation de mots de passe lente et discrète │
╰───────────────────────────────────────────────────────────────────────────────────────╯
La sous-commande gen de Spraycharles générera une liste de mots de passe basée sur les spécifications fournies dans extras/list_elements.json
spraycharles gen extras/list_elements.json custom_passwords.txt
La sous-commande parse de Spraycharles extraira le domaine interne des services NTLM over HTTP et SMB en utilisant une commande similaire à celle ci-dessous.
spraycharles parse https://example.com/ews
spraycharles parse smb://host.domain.local
Le sous-module analyze peut lire vos objets JSON de sortie et déterminer les longueurs de réponse qui sont statistiquement pertinentes. Avec suffisamment de données, il devrait être capable d'extraire les connexions réussies de votre fichier de résultats. Ce n'est pas la seule façon de déterminer les connexions réussies, cela dépend de votre site cible, et je recommanderais toujours de vérifier les données vous-même pour être sûr de ne rien manquer. Pour SMB, il trouvera simplement les entrées avec des codes NTSTATUS indiquant un succès.
spraycharles analyze myresults.json
Cet outil est conçu pour être utilisé lors de tests d'intrusion ; l'utilisation de cet outil pour attaquer des cibles sans consentement mutuel préalable est illégale. Il est de la responsabilité de l'utilisateur final de respecter toutes les lois locales, étatiques et fédérales applicables. Les développeurs n'assument aucune responsabilité et ne sont pas responsables de toute mauvaise utilisation de ce programme.
Spraycharles utilise Poetry pour gérer les dépendances. Installez depuis la source et configurez pour le développement avec :
pip3 install poetry
git clone https://github.com/Tw1sm/spraycharles
cd spraycharles
poetry install
ntlm_challenger.py, inclus dans le dossier utils