
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 ist ein Tool zum Password Spraying, das gültige Anmeldedaten für Microsoft-Konten (Office 365 / Azure AD) identifiziert. Was unterscheidet Spray365 von den vielen anderen verfügbaren Password-Spraying-Tools? Spray365 ermöglicht das Durchführen von Password-Spraying auf Basis eines „Ausführungsplans“. Ein vorab erstellter Ausführungsplan, der die Spraying-Operation lange vor ihrer Ausführung beschreibt, bietet viele weitere Vorteile, die Spray365 nutzt, und erlaubt es zudem, Password-Sprays nach einem Netzwerkfehler oder einer anderen Unterbrechung fortzusetzen (-R-Option). Obwohl es am einfachsten ist, einen Spray365-Ausführungsplan direkt mit Spray365 zu erstellen, ermöglichen andere Tools, die eine kompatible JSON-Struktur erzeugen, die Entwicklung individueller Password-Spraying-Workflows.
Spray365 bietet einige nützliche Optionen beim Spraying von Anmeldedaten. Es können zufällige User-Agents verwendet werden, um unsichere Conditional-Access-Richtlinien zu erkennen und zu umgehen, die auf die Einschränkung zulässiger Gerätetypen abzielen. Ebenso ist das Argument --shuffle_auth_order eine gute Möglichkeit, Anmeldedaten in weniger vorhersagbarer Weise zu sprayen. Diese Option wurde in dem Versuch hinzugefügt, intelligente Kontosperrungen (z. B. Azure Smart Lockout) zu umgehen. Obwohl es nicht perfekt ist, hat die Randomisierung der Reihenfolge, in der Anmeldedaten versucht werden, auch andere Vorteile, wie z. B. die noch schwierigere Erkennung dieser Spraying-Operationen. Spray365 unterstützt auch die Weiterleitung von Traffic über HTTP/HTTPS, was sich gut mit anderen Tools wie Burp Suite kombinieren lässt, um die Quelle der Spraying-Operation zu manipulieren.



Repository klonen, die erforderlichen Python-Pakete installieren und Spray365 ausführen!
$ git clone https://github.com/MarkoH17/Spray365
$ cd Spray365
~/Spray365$ pip3 install -r requirements.txt -U
~/Spray365$ python3 spray365.py
Für das Spraying von Anmeldedaten wird ein Ausführungsplan benötigt. Also muss einer erstellt werden! Spray365 kann seinen eigenen Ausführungsplan generieren, indem der Befehl generate im Modus „normal“ ausgeführt wird: (spray365.py generate normal). Weitere Details finden Sie in der Hilfe (spray365.py generate -h / spray365.py generate normal -h).
$ python3 spray365.py generate normal -ep <execution_plan_filename> -d <domain_name> -u <file_containing_usernames> -pf <file_containing_passwords>
z. B.
$ python3 spray365.py generate normal -ep ex-plan.s365 -d example.com -u usernames -pf passwords
Spray365 kann auch Multifaktor-Authentifizierungs- (MFA) und Conditional-Access-Richtlinienkonfigurationen überprüfen, indem gültige Anmeldedaten gesprayt werden. Audit-Ausführungspläne versuchen alle Kombinationen von User-Agent + AAD-Client-ID + AAD-Endpunkt-ID für ein gegebenes Paar von Anmeldedaten.
Spray365 kann einen Audit-Ausführungsplan generieren, indem der Befehl generate im Modus „audit“ ausgeführt wird: (spray365.py generate audit). Weitere Details finden Sie in der Hilfe (spray365.py generate -h / spray365.py generate audit -h). Obwohl es möglich ist, eine Liste von Benutzern und Passwörtern separat anzugeben (-u und -pf), eignen sich diese Optionen besser für Ausführungspläne zum Password Spraying (nicht zum Auditieren), da dies wahrscheinlich viele ungültige Anmeldeversuche verursachen würde. Verwenden Sie stattdessen -u / --user_file mit --passwords_in_userfile, was Spray365 anweist, die Passwörter aus der „user_file“ zu extrahieren, indem jede Zeile der Eingabedatei an einem Doppelpunkt geteilt wird, wobei der Wert vor dem Doppelpunkt als Benutzername und der Wert nach dem Doppelpunkt als Passwort behandelt wird (z. B. <username>:<password>, jsmith:Password01).
$ python3 spray365.py generate audit -ep <execution_plan_filename> -d <domain_name> -u <file_containing_usernames_and_passwords> --passwords_in_userfile
z. B.
$ python3 spray365.py generate audit -ep ex-plan.s365 -d example.com -u usernames --passwords_in_userfile
Sobald ein Ausführungsplan erstellt wurde, kann Spray365 zum Verarbeiten verwendet werden. Das Ausführen von Spray365 im Modus „spray“ (spray365.py spray) verarbeitet den angegebenen Ausführungsplan und sprayt die entsprechenden Anmeldedaten. Alle Arten von Ausführungsplänen (normal und audit) können in diesem Modus verarbeitet werden. Weitere Details finden Sie in der Hilfe (spray365.py spray -h).
$ python3 spray365.py spray -ep <execution_plan_filename>
z. B.
$ python3 spray365.py spray -ep ex-plan.s365
Nach dem Sprayen von Anmeldedaten aus einem Ausführungsplan gibt Spray365 eine JSON-Datei mit den Ergebnissen aus. Diese Datei kann mit anderen Tools wie JQ verarbeitet werden, um Einblicke in die Spraying-Operation im Nachhinein zu gewinnen. Spray365 enthält jedoch auch einen „review“-Befehl, mit dem folgende Informationen abgerufen werden können:
Weitere Details finden Sie in der Hilfe (spray365.py review -h).
$ python3 spray365.py review <spray_results_json_filename>
z. B.
$ python3 spray365.py review spray365_results_2022-05-20_18-58-31.json
Usage: spray365.py generate normal [OPTIONS]
Generate 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.
| Autor | Werkzeug / Sonstiges | Link |
|---|---|---|
| @__TexasRanger | msspray: Führen Sie Password-Spraying-Angriffe gegen Azure AD durch und validieren Sie die Implementierung von MFA auf Azure- und Office 365-Endpunkten | https://github.com/SecurityRiskAdvisors/msspray |
Die Nutzung dieser Software zum Angriff auf Ziele ohne vorherige gegenseitige Zustimmung ist illegal. Es liegt in der Verantwortung des Endbenutzers, alle geltenden lokalen, staatlichen und bundesstaatlichen Gesetze sowie alle geltenden Richtlinien zur akzeptablen Nutzung einzuhalten. Die Verwendung dieser Software entbindet den/die Autor(en) von jeglicher Verantwortung für Missbrauch oder verursachte Schäden.