
Spray365 makes spraying Microsoft accounts (Office 365 / Azure AD) easy through its customizable two-step password spraying approach. The built-in execution plan features options that attempt to bypass Azure Smart Lockout and insecure conditional access policies.

Spray365 est un outil de pulvérisation de mots de passe qui identifie les identifiants valides pour les comptes Microsoft (Office 365 / Azure AD). En quoi Spray365 est-il différent des nombreux autres outils de pulvérisation de mots de passe déjà disponibles ? Spray365 permet de pulvériser les mots de passe à partir d'un « plan d'exécution ». Le fait de disposer d'un plan d'exécution pré-généré qui décrit l'opération de pulvérisation bien avant qu'elle n'ait lieu offre de nombreux autres avantages que Spray365 exploite, mais cela permet également de reprendre les pulvérisations de mots de passe (option -R) après une erreur réseau ou toute autre interruption. Bien qu'il soit plus facile de générer un plan d'exécution Spray365 directement avec Spray365, d'autres outils produisant une structure JSON compatible permettent de créer facilement des flux de travail uniques de pulvérisation de mots de passe.
Spray365 expose quelques options utiles lors de la pulvérisation d'identifiants. Des agents utilisateurs aléatoires peuvent être utilisés pour détecter et contourner les stratégies d'accès conditionnel non sécurisées qui limitent les types d'appareils autorisés. De même, l'argument --shuffle_auth_order est un excellent moyen de pulvériser les identifiants de manière moins prévisible. Cette option a été ajoutée pour tenter de contourner les verrouillages intelligents de comptes (par exemple, Azure Smart Lockout). Bien que ce ne soit pas parfait, randomiser l'ordre dans lequel les identifiants sont essayés présente d'autres avantages, comme rendre la détection de ces opérations de pulvérisation encore plus difficile. Spray365 prend également en charge le proxy du trafic via HTTP/HTTPS, ce qui s'intègre bien avec d'autres outils comme Burp Suite pour manipuler la source de l'opération de pulvérisation.



Clonez le dépôt, installez les paquets Python requis, puis lancez Spray365 !
$ git clone https://github.com/MarkoH17/Spray365
$ cd Spray365
~/Spray365$ pip3 install -r requirements.txt -U
~/Spray365$ python3 spray365.py
Un plan d'exécution est nécessaire pour pulvériser les identifiants, nous devons donc en créer un ! Spray365 peut générer son propre plan d'exécution en exécutant la commande generate en mode « normal » : (spray365.py generate normal). Voir l'aide (spray365.py generate -h / spray365.py generate normal -h) pour plus de détails.
$ python3 spray365.py generate normal -ep <nom_du_fichier_plan_execution> -d <nom_de_domaine> -u <fichier_contenant_les_noms_utilisateurs> -pf <fichier_contenant_les_mots_de_passe>
ex.
$ python3 spray365.py generate normal -ep ex-plan.s365 -d example.com -u usernames -pf passwords
Spray365 peut également auditer les configurations d'authentification multifacteur (MFA) et de stratégies d'accès conditionnel en pulvérisant des identifiants valides. Les plans d'exécution de type audit tentent toutes les combinaisons d'Agent Utilisateur + ID Client AAD + ID Point de Terminaison AAD pour une paire d'identifiants donnée.
Spray365 peut générer un plan d'exécution de type audit en exécutant la commande generate en mode « audit » : (spray365.py generate audit). Voir l'aide (spray365.py generate -h / spray365.py generate audit -h) pour plus de détails. Bien qu'il soit possible de fournir une liste d'utilisateurs et de mots de passe séparément (-u et -pf), ces options conviennent mieux aux plans d'exécution pour la pulvérisation de mots de passe (pas l'audit), ce qui entraînerait probablement de nombreuses tentatives de connexion invalides. Envisagez plutôt d'utiliser -u / --user_file avec --passwords_in_userfile, ce qui indiquera à Spray365 d'extraire les mots de passe du « fichier_utilisateur » en divisant chaque ligne du fichier d'entrée sur le caractère deux-points, où la valeur avant les deux-points est traitée comme le nom d'utilisateur et la valeur après les deux-points comme le mot de passe (ex. <nom_utilisateur>:<mot_de_passe>, jsmith:Password01).
$ python3 spray365.py generate audit -ep <nom_du_fichier_plan_execution> -d <nom_de_domaine> -u <fichier_contenant_noms_utilisateurs_et_mots_de_passe> --passwords_in_userfile
ex.
$ python3 spray365.py generate audit -ep ex-plan.s365 -d example.com -u usernames --passwords_in_userfile
Une fois le plan d'exécution créé, Spray365 peut être utilisé pour le traiter. L'exécution de Spray365 en mode « spray » (spray365.py spray) traitera le plan d'exécution spécifié et pulvérisera les identifiants appropriés. Tous les types de plans d'exécution (normal et audit) peuvent être traités dans ce mode. Voir l'aide (spray365.py spray -h) pour plus de détails.
$ python3 spray365.py spray -ep <nom_du_fichier_plan_execution>
ex.
$ python3 spray365.py spray -ep ex-plan.s365
Après avoir pulvérisé les identifiants à partir d'un plan d'exécution, Spray365 génère un fichier JSON contenant les résultats. Ce fichier peut être traité avec d'autres outils comme JQ pour obtenir des informations sur l'opération de pulvérisation après qu'elle a eu lieu. Cependant, Spray365 inclut également une commande « review » qui peut être utilisée pour connaître :
Voir l'aide (spray365.py review -h) pour plus de détails.
$ python3 spray365.py review <nom_du_fichier_json_resultats_pulverisation>
ex.
$ python3 spray365.py review spray365_results_2022-05-20_18-58-31.json
Usage: spray365.py generate normal [OPTIONS]
Generates a vanilla (normal) execution plan
Options:
-ep, --execution_plan File path where execution plan should be saved [required]
-d, --domain Office 365 domain to authenticate against [required]
--delay Delay in seconds to wait between authentication attempts [default: 30]
-mD, --min_loop_delay Minimum time to wait between authentication attempts for a given user. This option takes into account the time one spray iteration will take, so a pre-authentication delay may not occur every time [default: 0]
User options:
-u, --user_file File containing usernames to spray (one per line without domain) [required]
Password options: [mutually_exclusive, required]
-p, --password Password to spray
-pf, --password_file File containing passwords to spray (one per line)
--passwords_in_userfile Extract passwords from user_file (colon separated)
Authentication options:
-cID, --aad_client Client ID used during authentication. Leave unspecified for random selection, or provide a comma-separated string
-eID, --aad_endpoint Endpoint ID used during authentication. Leave unspecified for random selection, or provide a comma-separated string
User Agent options: [mutually_exclusive]
-cUA, --custom_user_agent Set custom user agent for authentication requests
-rUA, --random_user_agent Randomize user agent for authentication requests [default: True]
Shuffle options: [all_or_none]
-S, --shuffle_auth_order Shuffle order of authentication attempts so that each iteration (User1:Pass1, User2:Pass1, User3:Pass1) will be sprayed in a random order with a random arrangement of passwords, e.g (User4:Pass16, User13:Pass25, User19:Pass40). Be aware this option introduces the possibility that the time between consecutive authentication attempts for a given user may occur DELAY seconds apart. Consider using the-mD/--min_loop_delay option to enforce a minimum delay between authentication attempts for any given user.
-SO, --shuffle_optimization_attempts [default: 10]
-h, --help Show this message and exit.
Usage: spray365.py generate audit [OPTIONS]
Generate an execution plan to identify flaws in MFA / Conditional Access Policies. This works best with with known credentials.
Options:
-ep, --execution_plan File path where execution plan should be saved [required]
-d, --domain Office 365 domain to authenticate against [required]
--delay Delay in seconds to wait between authentication attempts [default: 30]
-mD, --min_loop_delay Minimum time to wait between authentication attempts for a given user. This option takes into account the time one spray iteration will take, so a pre-authentication delay may not occur every time [default: 0]
User options:
-u, --user_file File containing usernames to spray (one per line without domain) [required]
Password options: [mutually_exclusive, required]
-p, --password Password to spray
-pf, --password_file File containing passwords to spray (one per line)
--passwords_in_userfile Extract passwords from user_file (colon separated)
Shuffle options: [all_or_none]
-S, --shuffle_auth_order Shuffle order of authentication attempts so that each iteration (User1:Pass1, User2:Pass1, User3:Pass1) will be sprayed in a random order with a random arrangement of passwords, e.g (User4:Pass16, User13:Pass25, User19:Pass40). Be aware this option introduces the possibility that the time between consecutive authentication attempts for a given user may occur DELAY seconds apart. Consider using the-mD/--min_loop_delay option to enforce a minimum delay between authentication attempts for any given user.
-SO, --shuffle_optimization_attempts [default: 10]
-h, --help Show this message and exit.
Usage: spray365.py spray [OPTIONS]
Password spray user accounts using an existing execution plan
Options:
-ep, --execution_plan File path to execution plan [required]
-l, --lockout Number of account lockouts to observe before aborting spraying session (disable with 0) [default: 5]
-R, --resume_index Resume spraying passwords from this position in the execution plan [x>=1]
-i, --ignore_success Ignore successful authentication attempts for users and continue to spray credentials. Setting this flag will enable spraying credentials for users even if Spray365 has already identified valid credentials.
Proxy options: [all_or_none]
-x, --proxy HTTP Proxy URL (format: http[s]://proxy.address:port)
-k, --insecure Disable HTTPS certificate verification
-h, --help Show this message and exit.
Usage: spray365.py review [OPTIONS] RESULTS
View data from password spraying results to identify valid accounts and more
Options:
--show_invalid_creds
--show_invalid_users
-h, --help Show this message and exit.
| Auteur | Outil / Autre | Lien |
|---|---|---|
| @__TexasRanger | msspray : Mener des attaques par pulvérisation de mots de passe contre Azure AD et valider la mise en œuvre de MFA sur les points de terminaison Azure et Office 365 | https://github.com/SecurityRiskAdvisors/msspray |
L'utilisation de ce logiciel 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 applicables, locales, étatiques et fédérales, ainsi que toutes les politiques d'utilisation acceptable en vigueur. L'utilisation de ce logiciel décharge l'auteur/les auteurs de toute responsabilité en cas d'utilisation abusive ou de dommages causés.