
O Spray365 facilita o password spraying em contas Microsoft (Office 365 / Azure AD) por meio de sua abordagem personalizável de duas etapas. O plano de execução integrado inclui opções que tentam contornar o Azure Smart Lockout e políticas de acesso condicional inseguras.

O Spray365 é uma ferramenta de password spraying que identifica credenciais válidas para contas da Microsoft (Office 365 / Azure AD). Como o Spray365 é diferente de muitas outras ferramentas de password spraying já disponíveis? O Spray365 permite que as senhas sejam pulverizadas a partir de um "plano de execução". Embora ter um plano de execução pré-gerado que descreva a operação de spraying bem antes de ela ocorrer traga muitos outros benefícios que o Spray365 aproveita, isso também permite que os sprays de senha sejam retomados (opção -R) após um erro de rede ou outra interrupção. Embora seja mais fácil gerar um plano de execução do Spray365 diretamente usando o Spray365, outras ferramentas que produzem uma estrutura JSON compatível facilitam a construção de fluxos de trabalho únicos de password spraying.
O Spray365 expõe algumas opções úteis ao pulverizar credenciais. User agents aleatórios podem ser usados para detectar e contornar políticas de acesso condicional inseguras configuradas para limitar os tipos de dispositivos permitidos. Da mesma forma, o argumento --shuffle_auth_order é uma ótima maneira de pulverizar credenciais de forma menos previsível. Essa opção foi adicionada na tentativa de contornar bloqueios inteligentes de conta (por exemplo, Azure Smart Lockout). Embora não seja perfeito, randomizar a ordem em que as credenciais são testadas também traz outros benefícios, como dificultar ainda mais a detecção dessas operações de spraying. O Spray365 também suporta o proxy de tráfego via HTTP/HTTPS, o que se integra bem com outras ferramentas como Burp Suite para manipular a origem da operação de spraying.



Clone o repositório, instale os pacotes Python necessários e execute o Spray365!
$ git clone https://github.com/MarkoH17/Spray365
$ cd Spray365
~/Spray365$ pip3 install -r requirements.txt -U
~/Spray365$ python3 spray365.py
Um plano de execução é necessário para pulverizar credenciais, então precisamos criar um! O Spray365 pode gerar seu próprio plano de execução executando o comando generate no modo "normal": (spray365.py generate normal). Consulte a ajuda (spray365.py generate -h / spray365.py generate normal -h) para mais detalhes.
$ python3 spray365.py generate normal -ep <execution_plan_filename> -d <domain_name> -u <file_containing_usernames> -pf <file_containing_passwords>
exemplo:
$ python3 spray365.py generate normal -ep ex-plan.s365 -d example.com -u usernames -pf passwords
O Spray365 também pode auditar configurações de autenticação multifator (MFA) e políticas de acesso condicional, pulverizando credenciais válidas. Os planos de execução no estilo auditoria tentam todas as combinações de User-Agent + AAD Client ID + AAD Endpoint ID para um determinado par de credenciais.
O Spray365 pode gerar um plano de execução no estilo auditoria executando o comando generate no modo "audit": (spray365.py generate audit). Consulte a ajuda (spray365.py generate -h / spray365.py generate audit -h) para mais detalhes. Embora seja possível fornecer uma lista de usuários e senhas separadamente (-u e -pf), essas opções são mais adequadas para planos de execução de password spraying (não auditoria), o que provavelmente causaria muitas tentativas de login inválidas. Em vez disso, considere usar -u / --user_file com --passwords_in_userfile, que instruirá o Spray365 a extrair as senhas do "user_file" dividindo cada linha do arquivo de entrada por dois pontos, onde o valor antes dos dois pontos é tratado como nome de usuário e o valor após os dois pontos é tratado como senha (ex: <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
exemplo:
$ python3 spray365.py generate audit -ep ex-plan.s365 -d example.com -u usernames --passwords_in_userfile
Depois que um plano de execução é criado, o Spray365 pode ser usado para processá-lo. Executar o Spray365 no modo "spray" (spray365.py spray) processará o plano de execução especificado e pulverizará as credenciais apropriadas. Todos os tipos de planos de execução (normal e auditoria) podem ser processados neste modo. Consulte a ajuda (spray365.py spray -h) para mais detalhes.
$ python3 spray365.py spray -ep <execution_plan_filename>
exemplo:
$ python3 spray365.py spray -ep ex-plan.s365
Após pulverizar credenciais a partir de um plano de execução, o Spray365 gera um arquivo JSON com os resultados. Esse arquivo pode ser processado usando outras ferramentas como JQ para obter insights sobre a operação de spraying após sua ocorrência. No entanto, o Spray365 também inclui um comando "review" que pode ser usado para obter informações sobre:
Consulte a ajuda (spray365.py review -h) para mais detalhes.
$ python3 spray365.py review <spray_results_json_filename>
exemplo:
$ 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 | Ferramenta / Outro | Link |
|---|---|---|
| @__TexasRanger | msspray: Realizar ataques de password spray contra o Azure AD, bem como validar a implementação de MFA em endpoints do Azure e Office 365 | https://github.com/SecurityRiskAdvisors/msspray |
O uso deste software para atacar alvos sem consentimento mútuo prévio é ilegal. É de responsabilidade do usuário final obedecer todas as leis aplicáveis, locais, estaduais e federais, além de quaisquer políticas de uso aceitável aplicáveis. O uso deste software isenta o(s) autor(es) de qualquer responsabilidade por uso indevido ou danos causados.