Translated ['', 'src/pentesting-cloud/azure-security/az-unauthenticated-

This commit is contained in:
Translator
2026-06-16 13:29:51 +00:00
parent 05599fcb0e
commit 2170db3d17
@@ -2,21 +2,21 @@
{{#include ../../../banners/hacktricks-training.md}}
## Azure Huurder
## Azure Tenant
### Tenant Enumeration
Daar is 'n paar **openbare Azure APIs** wat, as 'n aanvaller net die **domein van die huurder** ken, navrae kan stuur om meer inligting daaroor te versamel.\
Jy kan die API direk bevra of die PowerShell-biblioteek [**AADInternals**](https://github.com/Gerenios/AADInternals) gebruik (`Install-Module AADInternals`):
Daar is sekere **public Azure APIs** wat, met net die **domein van die tenant**, n attacker kan navraag doen om meer inligting daaroor te versamel.\
Jy kan die API direk navraag doen of die PowerShell-biblioteek [**AADInternals**](https://github.com/Gerenios/AADInternals) gebruik (`Install-Module AADInternals`):
- **Aanmeldinligting insluitend huurder-ID**
- **Login information including tenant ID**
- `Get-AADIntTenantID -Domain <domain>` (main API `login.microsoftonline.com/<domain>/.well-known/openid-configuration`)
- **Alle geldige domeine in die huurder**
- **All valid doimains in the tenant**
- `Get-AADIntTenantDomains -Domain <domain>` (main API `autodiscover-s.outlook.com/autodiscover/autodiscover.svc`)
- **Aanmeldinligting van die gebruiker**. As `NameSpaceType` op `Managed` staan, beteken dit dat EntraID gebruik word
- **Login information of the user**. If `NameSpaceType` is `Managed`, it means EntraID is used
- `Get-AADIntLoginInformation -UserName <UserName>` (main API `login.microsoftonline.com/GetUserRealm.srf?login=<UserName>`)
Jy kan al die inligting van 'n Azure-huurder navraag doen met **slegs een opdrag van** [**AADInternals**](https://github.com/Gerenios/AADInternals):
Jy kan al die information van n Azure tenant navraag doen met **net een command van** [**AADInternals**](https://github.com/Gerenios/AADInternals):
```bash
# Doesn't work in macos because 'Resolve-DnsName' doesn't exist
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
@@ -35,33 +35,83 @@ company.mail.onmicrosoft.com True True True Managed
company.onmicrosoft.com True True True Managed
int.company.com False False False Managed
```
Dit is moontlik om besonderhede oor die tenant se naam, ID en "brand" naam waar te neem. Verder word die status van die Desktop Single Sign-On (SSO), ook bekend as [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), gewys. Wanneer dit geaktiveer is, maak hierdie funksie die bepaling van die teenwoordigheid (enumeration) van 'n spesifieke gebruiker binne die teiken-organisasie moontlik.
Dit is moontlik om besonderhede oor die tenant se naam, ID, en "brand" naam waar te neem. Boonop word die status van Desktop Single Sign-On (SSO), ook bekend as [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), vertoon. Wanneer dit geaktiveer is, vergemaklik hierdie funksie die bepaling van die teenwoordigheid (enumeration) van n spesifieke user binne die teiken-organisasie.
Verder vertoon die uitset die name van alle geverifieerde domeine wat met die teiken-tenant geassosieer is, saam met hul onderskeie identiteits-tipes. In die geval van gefedereerde domeine word ook die Fully Qualified Domain Name (FQDN) van die gebruikte identity provider, gewoonlik 'n ADFS-bediener, bekend gemaak. Die "MX"-kolom spesifiseer of e-posse na Exchange Online gerouteer word, terwyl die "SPF"-kolom aandui of Exchange Online as 'n e-possender gelys is. Dit is belangrik om op te let dat die huidige reconnaissance-funksie nie die "include"-uitsprake binne SPF-rekords ontleed nie, wat tot false negatives kan lei.
Verder toon die output die name van alle verified domains wat met die teiken tenant geassosieer is, saam met hul onderskeie identity tipes. In die geval van federated domains, word die Fully Qualified Domain Name (FQDN) van die identity provider in gebruik, tipies n ADFS server, ook bekendgestel. Die "MX" kolom spesifiseer of emails na Exchange Online gerouteer word, terwyl die "SPF" kolom aandui of Exchange Online as n email sender gelys word. Dit is belangrik om daarop te let dat die huidige reconnaissance-funksie nie die "include"-stellings binne SPF records ontleed nie, wat tot false negatives kan lei.
### Gebruiker Enumerasie
### User Enumeration
> [!TIP]
> Let daarop dat selfs al gebruik 'n tenant verskeie e-posadresse vir dieselfde gebruiker, die **username is uniek**. Dit beteken dat dit slegs met die domein waarmee die gebruiker geassosieer is sal werk en nie met die ander domeine nie.
> Let daarop dat selfs al gebruik n tenant verskeie emails vir dieselfde user, die **username is unique**. Dit beteken dat dit slegs sal werk met die domain wat die user geassosieer het en nie met die ander domains nie.
Dit is moontlik om te **kontroleer of 'n username bestaan** binne 'n tenant. Dit sluit ook **guest users** in, wie se username in die formaat is:
Dit is moontlik om te **check if a username exists** binne n tenant. Dit sluit ook **guest users** in, wie se username in die formaat is:
```
<email>#EXT#@<tenant name>.onmicrosoft.com
```
Die e-pos is die gebruiker se e-posadres waar die “@” vervang is deur die underscore “\_“.
Die e-pos is die gebruiker se e-posadres waar “@” vervang is met onderstreep “\_“.
Met [**AADInternals**](https://github.com/Gerenios/AADInternals) kan jy maklik nagaan of die gebruiker bestaan of nie:
Met [**AADInternals**](https://github.com/Gerenios/AADInternals), kan jy maklik nagaan of die gebruiker bestaan of nie:
```bash
# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
```
Ek het nie toegang tot die lêer nie. Plak asseblief die README.md-inhoud wat jy vertaal wil hê, en ek sal dit na Afrikaans vertaal terwyl ek markdown, tags en skakels onveranderd laat.
# Ongeauthentiseerde enum and initial entry in Azure
Azure has many services and features that can accidentally expose information or provide footholds for initial access. This page covers common unauthenticated enumeration and initial entry opportunities in Azure.
## Common attack surface
- Public storage accounts with readable blobs
- Misconfigured Azure App Services
- Exposed Azure Functions
- Open management endpoints
- Weak or missing authentication on APIs
## Enumeration ideas
Look for:
- Tenant names
- Subscription IDs
- Resource group names
- Service names
- Public DNS records
- Open ports and services linked to Azure assets
Useful sources include:
- Search engines
- `amass`
- `subfinder`
- `nmap`
- `aquatone`
## Initial entry paths
Common ways to get in include:
- Leaked credentials
- Public upload features
- Misconfigured OAuth or SSO flows
- Exposed admin panels
- SSRF leading to metadata access
## Notes
Azure metadata endpoints can sometimes reveal tokens or instance details if reachable from a compromised service. Always check for:
- `169.254.169.254`
- Managed identity access
- Role assignments
- Sensitive environment variables
Careful unauthenticated enum can quickly reveal weak points for further pentesting.
```
UserName Exists
-------- ------
user@company.com True
```
Jy kan ook 'n tekslêer gebruik wat een e-posadres per reël bevat:
Jy kan ook 'n tekslêer gebruik wat een e-posadres per ry bevat:
```
user@company.com
user2@company.com
@@ -75,18 +125,18 @@ external.user_outlook.com#EXT#@company.onmicrosoft.com
# Invoke user enumeration
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
```
Daar is tans **4 verskillende enumerasie-metodes** om van te kies. Jy kan inligting vind in `Get-Help Invoke-AADIntUserEnumerationAsOutsider`:
Tans is daar **4 verskillende enumerasie-metodes** om van te kies. Jy kan inligting vind in `Get-Help Invoke-AADIntUserEnumerationAsOutsider`:
Dit ondersteun die volgende enumerasie-metodes: Normal, Login, Autologon, and RST2.
Dit ondersteun die volgende enumerasie-metodes: Normal, Login, Autologon, en RST2.
- Die **Normal** metode lyk tans of dit met alle tenants werk. Voorheen het dit vereis dat Desktop SSO (aka Seamless SSO) vir ten minste een domein aangeskakel was.
- Die **Normal**-metode blyk tans met alle tenants te werk. Voorheen het dit Desktop SSO (ook bekend as Seamless SSO) vereis om vir ten minste een domain geaktiveer te wees.
- Die **Login** metode werk met enige tenant, maar enumerasie-navrae sal in die Azure AD sign-in log as failed login events aangeteken word!
- Die **Login**-metode werk met enige tenant, maar enumerasie-navrae sal in Azure AD sign-in log as failed login events gelog word!
- Die **Autologon** metode lyk nie meer met alle tenants te werk nie. Dit vereis waarskynlik dat DesktopSSO of directory sync geaktiveer is.
- Die **Autologon**-metode blyk nie meer met alle tenants te werk nie. Waarskynlik vereis dit dat DesktopSSO of directory sync geaktiveer is.
Nadat jy die geldige gebruikersname ontdek het, kan jy **inligting oor 'n gebruiker'** kry met:
Nadat jy die geldige usernames ontdek het, kan jy **info about a user** kry met:
```bash
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
```
@@ -105,11 +155,11 @@ python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -U /tmp/users.
Nog 'n goeie bron van inligting is Microsoft Teams.
Die API van Microsoft Teams maak dit moontlik om na gebruikers te soek. In die besonder kan die "user search" endpoints **externalsearchv3** en **searchUsers** gebruik word om algemene inligting oor by Teams aangemelde gebruikersrekeninge op te vra.
Die API van Microsoft Teams laat toe om vir users te search. In die besonder kan die "user search" endpoints **externalsearchv3** en **searchUsers** gebruik word om algemene inligting oor Teams-enrolled user accounts aan te vra.
Afhangend van die API-respons is dit moontlik om te onderskei tussen nie-bestaande gebruikers en bestaande gebruikers wat 'n geldige Teams-subskripsie het.
Afhangend van die API response is dit moontlik om tussen nie-bestaande users en bestaande users te onderskei wat 'n geldige Teams subscription het.
Die script [**TeamsEnum**](https://github.com/lucidra-security/TeamsEnum) kan gebruik word om 'n gegewe stel gebruikersname teen die Teams API te valideer, maar jy benodig toegang tot 'n gebruiker met Teams-toegang om dit te gebruik.
Die script [**TeamsEnum**](https://github.com/lucidra-security/TeamsEnum) kan gebruik word om 'n gegewe stel usernames teen die Teams API te validate, maar jy het access nodig tot 'n user met Teams access om dit te gebruik.
```bash
# Install
git clone https://github.com/lucidra-security/TeamsEnum
@@ -119,13 +169,94 @@ python3 -m pip install -r requirements.txt
# Login and ask for password
python3 ./TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
```
I don't have the README.md content. Please paste the Markdown content you want translated and I'll translate it to Afrikaans, preserving all tags, links, paths and code.
# Ongeliseerde Azure Enum en Initial Entry
Azure is Microsoft se cloud platform. In hierdie afdeling sal ons kyk hoe om **unauthenticated enum** uit te voer en hoe om **initial entry** te verkry deur verskeie **misconfigurations**, blootgestelde dienste en swak toegangsbeheer te benut.
## Algemene aanvanklike toegangspunte
- **Blob Storage** met openbare lees-toegang
- **Azure Files** shares wat verkeerd gekonfigureer is
- **Virtual Machines** met oop poorte en swak credentials
- **App Services** met exposed endpoints
- **Key Vault** met onvoldoende access control
- **SaaS** integrasies en leaked secrets in configs of repos
## Enum tegnieke
### Storage accounts
Kontroleer vir:
- Publiek toeganklike containers
- Lysbare blobs
- Opgelaaide backups, configs, scripts, en credentials
- Metadata wat informasie oor die omgewing lek
Voorbeelde van nuttige data:
- connection strings
- SAS tokens
- account names
- internal hostnames
- API keys
### App Services
Kyk vir:
- default pages
- debug endpoints
- deployment metadata
- exposed environment variables
- staging slots met swakker beveiliging
### Key Vault
Selfs wanneer direkte lees nie moontlik is nie, kan jy soms:
- names van secrets enum
- vault metadata ontdek
- verwysings na services en applications vind
### Virtual Machines
Gebruik:
- open ports scanning
- banner grabbing
- service enumeration
- default credentials waar toepaslik
## Initial entry ideeë
Sodra jy nuttige data vind, kyk of jy:
- authentication kan omseil
- een of ander service kan misbruik om code execution te kry
- tokens of credentials kan hergebruik
- toegang tot internal networks kan kry
## Belangrike notes
- Baie Azure omgewings lek data deur swak permissies of public endpoints
- Groot dele van aanvalswerk is dikwels passief: enum, identification, en validatie
- Let op na logs, backup files, debug output, en misconfigurations
## Practical focus
Hierdie workflow is gewoonlik:
1. discover
2. enum
3. validate access
4. extract secrets
5. initial entry
Hou in gedagte dat sukses dikwels hang van klein foute af, soos:
- openbare opslag
- swak RBAC
- hardcoded secrets
- verkeerd ingestelde network rules
```
[-] 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)
```
Daarbenewens is dit moontlik om beskikbaarheidsinligting oor bestaande gebruikers te verkry, soos die volgende:
Verder is dit moontlik om beskikbaarheidinligting oor bestaande gebruikers soos die volgende te enumereer:
- Available
- Away
@@ -133,11 +264,32 @@ Daarbenewens is dit moontlik om beskikbaarheidsinligting oor bestaande gebruiker
- Busy
- Offline
As 'n **afwesigheidsboodskap** gekonfigureer is, kan die boodskap ook met TeamsEnum opgevra word. As 'n uitsetlêer gespesifiseer is, word die afwesigheidsboodskappe outomaties binne die JSON-lêer gestoor:
As n **out-of-office message** gekonfigureer is, is dit ook moontlik om die boodskap met TeamsEnum te verkry. As n uitvoerlêer gespesifiseer is, word die out-of-office messages outomaties binne die JSON-lêer gestoor:
```
jq . teamsenum-output.json
```
Ek het nie die lêerinhoud ontvang nie. Plak asseblief die inhoud van src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md wat jy wil hê ek moet vertaal; ek sal dit in Afrikaans teruggee en markdown, links, tags, padhervorsings en kode onvertaal laat.
## Azure
Azure is a comprehensive cloud platform with a wide range of services, including infrastructure, hosting, and various SaaS solutions. This section focuses on Azure security techniques relevant to pentesting and initial entry.
### Azure unauthenticated enum and initial entry
Unauthenticated enum and initial entry in Azure often start with identifying exposed services, misconfigurations, and publicly accessible resources. Common targets include storage accounts, App Services, function apps, and other endpoints that may leak sensitive information or allow limited interaction without authentication.
Typical steps include:
- Enumerating publicly reachable Azure resources
- Checking for misconfigured storage containers and blobs
- Reviewing exposed metadata and configuration data
- Identifying weak access controls or missing authentication
- Leveraging leaked information for initial access
Examples of useful checks:
- Public blob listings
- Open file shares
- Exposed application settings
- Weakly protected management endpoints
The goal is to find an entry point that can be used for further assessment or post-exploitation activity.
```json
{
"email": "user2@domain",
@@ -194,7 +346,7 @@ az-password-spraying.md
## Azure Services using domains
Dit is ook moontlik om te probeer om **Azure services exposed** te vind in algemene azure subdomeine soos dié gedokumenteer in hierdie [post:
Dit is ook moontlik om te probeer om **Azure services exposed** te vind in algemene azure subdomains soos diegene wat gedokumenteer is in hierdie [post:
](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
- App Services: `azurewebsites.net`
@@ -216,32 +368,69 @@ Dit is ook moontlik om te probeer om **Azure services exposed** te vind in algem
- Search Appliance: `search.windows.net`
- API Services: `azure-api.net`
You can use a method from [**MicroBust**](https://github.com/NetSPI/MicroBurst) for such goal. This function will search the base domain name (and a few permutations) in several **azure domeine:**
Jy kan n method van [**MicroBust**](https://github.com/NetSPI/MicroBurst) gebruik vir so n doel. Hierdie function sal die base domain name (en n paar permutations) in verskeie **azure domains:** soek
```bash
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
```
## Phishing
- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) vir credentials of deur [OAuth Apps](az-oauth-apps-phishing.md)
- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) for credentials or via [OAuth Apps](az-oauth-apps-phishing.md)
- [**Device Code Authentication** Phishing](az-device-code-authentication-phishing.md)
### Exchange Online direct-to-tenant SMTP spoofing
As 'n teiken **Exchange Online / EOP** gebruik maar sy publieke **MX** na 'n **third-party mail gateway** wys (Mimecast, Proofpoint, Mailgun, on-prem filtering, ens.), toets of Exchange Online steeds mail aanvaar wat **direk** na die tenant host `*.mail.protection.outlook.com` gestuur word. In daardie geval kan 'n attacker die **external gateway** oorslaan en phishing mail regstreeks na EOP submit.
Dit is nuttig vir **initial access / phishing** omdat delivery steeds kan gebeur selfs wanneer die spoofed sender **SPF**, **DKIM**, en **DMARC** faal. Vir internal senders kan Outlook ook die spoofed sender as 'n regte employee resolve, wat trust verhoog.
**Recon / triage:**
```bash
# If the MX already points to Microsoft, this specific path is usually not the issue
dig +short MX target.com
# Typical vulnerable pattern: the MX points to a third-party filter
# 10 mxb.eu.mailgun.org.
```
Die direkte EOP-gasheer is gewoonlik die tenant-spesifieke `mail.protection.outlook.com`-naam (byvoorbeeld `target-com.mail.protection.outlook.com`). Jy kan dikwels die tenant-benamingspatroon herstel uit publieke tenant/domain-enumeration en Exchange-verwante autodiscover-reaksies.
**Minimal PoC:**
```powershell
Send-MailMessage -SmtpServer target-com.mail.protection.outlook.com -To victim@target.com -From ceo@target.com -Subject "Urgent" -Body "Review the attached payment change" -BodyAsHTML
```
**Validation signals:**
- Mail word gestuur na `*.mail.protection.outlook.com` in plaas van die public MX host.
- Die boodskap word afgelewer al wys headers mislukkings soos `spf=fail`, `dkim=none`, `dmarc=fail`, of `compauth=none`.
- n Secure Partner connector verwerp gewoonlik die `RCPT TO` stadium met `5.7.51 TenantInboundAttribution; Rejecting.`
**Technical notes / defensive hunting:**
- **Enhanced Filtering for Connectors** help Exchange om die oorspronklike sender korrek toe te ken, maar self is dit **nie** die boundary wat direkte-na-tenant aflewering blokkeer nie.
- Microsoft dokumenteer twee praktiese controls wanneer n external MX voor Exchange Online gebruik word:
- Skep n **Partner inbound connector** met `SenderDomains *` en `RestrictDomainsToCertificate` of `RestrictDomainsToIPAddresses` sodat net die goedgekeurde gateway by die tenant kan aflewer.
- Skep n **priority 0 transport rule** wat inbound mail in quarantine plaas tensy die sender IP aan goedgekeurde gateway ranges behoort **of** `X-MS-Exchange-Organization-AuthAs` `Internal` bevat.
- Hunt vir mail waar **Received** `*.mail.protection.outlook.com` as die eerste Microsoft hop wys, maar sender-authentication headers steeds **SPF/DKIM/DMARC failures** toon.
- As die target steeds **Direct Send** toelaat, deaktiveer dit hoofsaaklik **internal** sender spoofing; dit vervang nie die connector / transport-rule mitigation vir arbitrêre **external** spoofing nie.
## Filesystem Credentials
Die **`az cli`** stoor baie interessante inligting in **`<HOME>/.Azure`**:
- **`azureProfile.json`** bevat inligting oor aangemelde gebruikers uit die verlede
- **`clouds.config`** bevat inligting oor subscriptions
- **`service_principal_entries.json`** bevat toepassings credentials (tenant id, clients and secret)
- **`msal_token_cache.json`** bevat **access tokens and refresh tokens**
Die **`az cli`** stoor baie interessante inligting binne **`<HOME>/.Azure`**:
- **`azureProfile.json`** bevat info oor gebruikers wat in die verlede ingelog het
- **`clouds.config`** bevat info oor subscriptions
- **`service_principal_entries.json`** bevat applications **credentials** (tenant id, clients en secret)
- **`msal_token_cache.json`** bevat **access tokens en refresh tokens**
Let wel dat op macOS en Linux word hierdie lêers **onbeskermd** in duidelike teks gestoor.
Let op dat hierdie lêers in macOS en linux **onbeskermd** in clear text gestoor word.
## Verwysings
## References
- [https://aadinternals.com/post/just-looking/](https://aadinternals.com/post/just-looking/)
- [https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/](https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/)
- [https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
- [https://labs.infoguard.ch/posts/ghost-sender/](https://labs.infoguard.ch/posts/ghost-sender/)
- [https://learn.microsoft.com/en-us/exchange/mail-flow-best-practices/manage-mail-flow-using-third-party-cloud](https://learn.microsoft.com/en-us/exchange/mail-flow-best-practices/manage-mail-flow-using-third-party-cloud)
- [https://learn.microsoft.com/en-us/defender-office-365/anti-phishing-policies-about](https://learn.microsoft.com/en-us/defender-office-365/anti-phishing-policies-about)
- [https://techcommunity.microsoft.com/blog/exchange/direct-send-vs-sending-directly-to-an-exchange-online-tenant/4439865](https://techcommunity.microsoft.com/blog/exchange/direct-send-vs-sending-directly-to-an-exchange-online-tenant/4439865)
{{#include ../../../banners/hacktricks-training.md}}