This repository was archived by the owner on May 18, 2026. It is now read-only.
v0.2.0-beta
Pre-release
Pre-release
⚠️ Notice
When upgrading from a previous version of Spray365, ensure that you install the latest dependencies! Install the latest version of Spray365 and its dependencies with:
$ git clone https://github.com/MarkoH17/Spray365
$ cd Spray365
~/Spray365$ pip3 install -r requirements.txt -U
~/Spray365$ python3 spray365.py🎉 What's New
- Spray365 has been refactored into different modules, making it easier to develop new features!
- Generating execution plans have been split into two different sub-types:
normal, andaudit. Generating normal execution plans (spray365.py generate normal) works the same as previous versions. However, generating audit execution plans (spray365.py generate audit) will cause Spray365 to create all combinations ofUser-Agent,AAD_Client, andAAD_Endpointfor each set of credentials. Audit-type execution plans can (and should) be sprayed with known-valid credentials to identify flaws in MFA / conditional access policy configurations. - Audit-type execution plans inspired the addition of another type of password input:
--passwords_in_userfile. When this option is specified, each line in the user file (-u / --user_file) will be split on a colon, where the value preceding the colon is treated as the username, and the value after the colon is treated as the password (e.g.jsmith:Password01). - Results from spraying can be reviewed using the new
reviewmode (spray365.py review <results.json>). This new mode displays valid/invalid users and valid/partial-valid/invalid credentials.
🏗️ What's Changed
- Arguments are now parsed using Click, simplifying validation and enforcement of mutually exclusive options.
- Credential, AuthResult, and AuthError objects were refactored. This means that only new execution plans (and Spray365 results) can be processed using v0.2.0-beta.
- Dependencies were bumped to their latest versions.
Full Changelog: 0.1.5-beta...0.2.0-beta