Az - Unauthenticated Enum & Initial Entry

Az - Enumerazione non autenticata e Accesso Iniziale

Impara l'hacking di AWS da zero a esperto con htARTE (Esperto Red Team di HackTricks AWS)!

Altri modi per supportare HackTricks:

Tenant Azure

Enumerazione del Tenant

Ci sono alcune API pubbliche di Azure che, conoscendo solo il dominio del tenant, un attaccante potrebbe interrogare per raccogliere ulteriori informazioni su di esso. Puoi interrogare direttamente l'API o utilizzare la libreria PowerShell AADInternals:

APIInformazioniFunzione AADInternals

login.microsoftonline.com/<domain>/.well-known/openid-configuration

Informazioni di accesso, inclusa l'ID del tenant

Get-AADIntTenantID -Domain <domain>

autodiscover-s.outlook.com/autodiscover/autodiscover.svc

Tutti i domini del tenant

Get-AADIntTenantDomains -Domain <domain>

login.microsoftonline.com/GetUserRealm.srf?login=<UserName>

Informazioni di accesso del tenant, inclusi il nome del tenant e il dominio del tipo di autenticazione. Se NameSpaceType è Managed, significa che viene utilizzato AzureAD.

Get-AADIntLoginInformation -UserName <UserName>

login.microsoftonline.com/common/GetCredentialType

Informazioni di accesso, inclusi informazioni sul Desktop SSO

Get-AADIntLoginInformation -UserName <UserName>

Puoi interrogare tutte le informazioni di un tenant Azure con solo un comando della libreria AADInternals:

Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table

Esempio di output delle informazioni del tenant Azure:

Tenant brand:       Company Ltd
Tenant name:        company
Tenant id:          1937e3ab-38de-a735-a830-3075ea7e5b39
DesktopSSO enabled: True

Name                           DNS   MX    SPF  Type      STS
----                           ---   --    ---  ----      ---
company.com                   True  True  True  Federated sts.company.com
company.mail.onmicrosoft.com  True  True  True  Managed
company.onmicrosoft.com       True  True  True  Managed
int.company.com              False False False  Managed

È possibile osservare dettagli sul nome del tenant, l'ID e il nome "brand". Inoltre, lo stato del Desktop Single Sign-On (SSO), noto anche come Seamless SSO, viene visualizzato. Quando abilitata, questa funzionalità facilita la determinazione della presenza (enumerazione) di un utente specifico all'interno dell'organizzazione target.

Inoltre, l'output presenta i nomi di tutti i domini verificati associati al tenant target, insieme ai rispettivi tipi di identità. Nel caso dei domini federati, viene anche rivelato il Fully Qualified Domain Name (FQDN) del provider di identità in uso, tipicamente un server ADFS. La colonna "MX" specifica se le email vengono instradate verso Exchange Online, mentre la colonna "SPF" indica l'elenco di Exchange Online come mittente di email. È importante notare che la funzione corrente di ricognizione non analizza le dichiarazioni "include" all'interno dei record SPF, il che potrebbe causare falsi negativi.

Enumerazione degli Utenti

È possibile verificare se esiste un nome utente all'interno di un tenant. Questo include anche gli utenti ospiti, il cui nome utente è nel formato:

<email>#EXT#@<tenant name>.onmicrosoft.com

L'email è l'indirizzo email dell'utente in cui il simbolo "@" è sostituito con l'underscore "_".

Con AADInternals, puoi facilmente verificare se l'utente esiste o meno:

# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"

Enumerazione non autenticata e accesso iniziale

Durante un test di penetrazione, la fase di enumerazione non autenticata è fondamentale per identificare informazioni sensibili e punti di accesso potenziali nel sistema target. Questa fase può includere la raccolta di informazioni come elenchi di risorse, configurazioni di servizi, versioni di software e altro ancora.

Strumenti e tecniche

Alcuni strumenti comuni utilizzati per l'enumerazione non autenticata includono Nmap, Dirb, Gobuster e Enum4linux. Questi strumenti possono aiutare a raccogliere informazioni utili senza la necessità di autenticazione.

Accesso iniziale

Una volta identificate le informazioni sensibili durante l'enumerazione non autenticata, è possibile utilizzarle per ottenere un accesso iniziale al sistema target. Questo può includere l'utilizzo di vulnerabilità note, configurazioni non sicure o altre tecniche per ottenere l'accesso al sistema senza la necessità di credenziali valide.

Ricorda sempre di ottenere l'autorizzazione esplicita prima di condurre test di penetrazione su qualsiasi sistema o rete.

UserName         Exists
--------         ------
user@company.com True

Puoi anche utilizzare un file di testo contenente un indirizzo email per riga:

user@company.com
user2@company.com
admin@company.com
admin2@company.com
external.user_gmail.com#EXT#@company.onmicrosoft.com
external.user_outlook.com#EXT#@company.onmicrosoft.com
# Invoke user enumeration
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal

Ci sono tre diversi metodi di enumerazione tra cui scegliere:

MetodoDescrizione

Normale

Questo si riferisce all'API GetCredentialType menzionata sopra. Il metodo predefinito.

Login

Questo metodo cerca di effettuare l'accesso come utente. Nota: le query verranno registrate nel log degli accessi.

Autologon

Questo metodo cerca di effettuare l'accesso come utente tramite il punto di accesso autologon. Le query non vengono registrate nel log degli accessi! Pertanto, funziona bene anche per attacchi di password spray e forza bruta.

Dopo aver scoperto i nomi utente validi è possibile ottenere informazioni su un utente con:

Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com

Lo script o365creeper ti permette anche di scoprire se un'email è valida.

# Put in emails.txt emails such as:
# - root@corp.onmicrosoft.com
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt

Enumerazione degli utenti tramite Microsoft Teams

Un'altra buona fonte di informazioni è Microsoft Teams.

L'API di Microsoft Teams consente di cercare gli utenti. In particolare, i punti finali "user search" externalsearchv3 e searchUsers potrebbero essere utilizzati per richiedere informazioni generali sugli account utente iscritti a Teams.

In base alla risposta dell'API è possibile distinguere tra utenti inesistenti e utenti esistenti che hanno una sottoscrizione Teams valida.

Lo script TeamsEnum potrebbe essere utilizzato per convalidare un dato insieme di nomi utente rispetto all'API di Teams.

python3 TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json

Enumerazione non autenticata e accesso iniziale

Durante un test di penetrazione, la fase di enumerazione non autenticata è spesso la prima fase in cui un attaccante cerca di raccogliere informazioni su un obiettivo senza la necessità di autenticarsi. Questo può includere la raccolta di informazioni su servizi esposti, configurazioni errate, versioni di software non patchate e altro ancora.

Strumenti e tecniche

Alcuni strumenti comuni utilizzati per l'enumerazione non autenticata includono Nmap, Dirb, Gobuster e Wfuzz. Questi strumenti possono aiutare a identificare servizi aperti, directory nascoste, file sensibili e altre informazioni utili per l'attaccante.

Accesso iniziale

Una volta completata l'enumerazione non autenticata, l'attaccante può utilizzare le informazioni raccolte per tentare di ottenere un accesso iniziale al sistema di destinazione. Questo potrebbe includere l'utilizzo di vulnerabilità note, attacchi di forza bruta, exploit di applicazioni web e altre tecniche per compromettere la sicurezza del sistema.

È importante condurre queste attività con il permesso esplicito del proprietario del sistema e nel rispetto delle leggi sulla sicurezza informatica.

[-] user1@domain - Target user not found. Either the user does not exist, is not Teams-enrolled or is configured to not appear in search results (personal accounts only)
[+] user2@domain - User2 | Company (Away, Mobile)
[+] user3@domain - User3 | Company (Available, Desktop)

Inoltre è possibile enumerare le informazioni sulla disponibilità degli utenti esistenti come segue:

  • Disponibile

  • Assente

  • Non disturbare

  • Occupato

  • Offline

Se è configurato un messaggio di fuori sede, è anche possibile recuperare il messaggio utilizzando TeamsEnum. Se è stato specificato un file di output, i messaggi di fuori sede vengono automaticamente memorizzati all'interno del file JSON:

jq . teamsenum-output.json

Enumerazione non autenticata e accesso iniziale

Durante un test di penetrazione, la fase di enumerazione non autenticata è cruciale per identificare informazioni sensibili e punti di accesso potenziali nel sistema target. Questa fase può includere la raccolta di informazioni tramite ricerche su motori di ricerca, esplorazione di repository pubblici, analisi di documenti esposti e altro ancora.

Ricerca di informazioni sensibili

Durante la fase di enumerazione non autenticata, è possibile cercare informazioni sensibili come credenziali, chiavi API, stringhe di connessione al database e altro ancora. Queste informazioni possono essere trovate in file di configurazione, repository pubblici, documenti esposti e altri luoghi accessibili senza autenticazione.

Identificazione dei punti di accesso potenziali

Oltre alla ricerca di informazioni sensibili, la fase di enumerazione non autenticata può aiutare a identificare potenziali punti di accesso al sistema target. Ciò potrebbe includere endpoint API non protetti, interfacce di amministrazione non autenticate, servizi esposti e altro ancora.

Approcci per l'enumerazione non autenticata

Gli approcci per l'enumerazione non autenticata possono variare a seconda del sistema target e delle informazioni disponibili. Tuttavia, è importante condurre ricerche approfondite e sfruttare al meglio le informazioni raccolte per identificare potenziali vulnerabilità e punti di accesso nel sistema target.

{
"email": "user2@domain",
"exists": true,
"info": [
{
"tenantId": "[REDACTED]",
"isShortProfile": false,
"accountEnabled": true,
"featureSettings": {
"coExistenceMode": "TeamsOnly"
},
"userPrincipalName": "user2@domain",
"givenName": "user2@domain",
"surname": "",
"email": "user2@domain",
"tenantName": "Company",
"displayName": "User2",
"type": "Federated",
"mri": "8:orgid:[REDACTED]",
"objectId": "[REDACTED]"
}
],
"presence": [
{
"mri": "8:orgid:[REDACTED]",
"presence": {
"sourceNetwork": "Federated",
"calendarData": {
"outOfOfficeNote": {
"message": "Dear sender. I am out of the office until March 23rd with limited access to my email. I will respond after my return.Kind regards, User2",
"publishTime": "2023-03-15T21:44:42.0649385Z",
"expiry": "2023-04-05T14:00:00Z"
},
"isOutOfOffice": true
},
"capabilities": [
"Audio",
"Video"
],
"availability": "Away",
"activity": "Away",
"deviceType": "Mobile"
},
"etagMatch": false,
"etag": "[REDACTED]",
"status": 20000
}
]
}

Servizi Azure

Ora che conosciamo i domini utilizzati dal tenant Azure è il momento di cercare i servizi Azure esposti.

Puoi utilizzare un metodo da MicroBust per raggiungere questo obiettivo. Questa funzione cercherà il nome di dominio di base (e alcune permutazioni) in diversi domini di servizio Azure:

Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose

Archiviazione Aperta

Potresti scoprire archiviazioni aperte con uno strumento come InvokeEnumerateAzureBlobs.ps1 che utilizzerà il file Microburst/Misc/permitations.txt per generare permutazioni (molto semplici) per cercare di trovare account di archiviazione aperti.

Import-Module .\MicroBurst\MicroBurst.psm1
Invoke-EnumerateAzureBlobs -Base corp
[...]
https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
[...]

# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
# Check: <Name>ssh_info.json</Name>
# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json

URL SAS

Un shared access signature (SAS) URL è un URL che fornisce accesso a una determinata parte di un account di archiviazione (potrebbe essere un intero contenitore, un file...) con specifici permessi (lettura, scrittura...) sulle risorse. Se ne trovi uno esposto potresti essere in grado di accedere a informazioni sensibili, hanno questo aspetto (questo è per accedere a un contenitore, se stesse concedendo l'accesso a un file, il percorso dell'URL conterrà anche quel file):

https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D

Usa Storage Explorer per accedere ai dati

Compromissione delle credenziali

Phishing

Password Spraying / Brute-Force

pageAz - Password Spraying

Riferimenti

Impara l'hacking su AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated