
Microsoft Entra ID (Azure AD) 인증되지 않은 열거
출처: EvilMist Toolkit - Invoke-EntraEnum.ps1 - https://github.com/Logisek/EvilMist
공개 API를 사용하여 테넌트 정보를 검색합니다.
azmap.dev 서비스에서 테넌트 세부 정보를 검색합니다.
# DOMAIN을 대상 도메인으로 바꾸세요 (예: example.com)
curl -s "https://azmap.dev/api/tenant?domain=DOMAIN&extract=true"
응답에 포함된 항목: tenantId, displayName, countryCode
토큰 엔드포인트를 포함한 OpenID Connect 구성을 검색합니다.
# DOMAIN을 대상 도메인으로 바꾸세요
curl -s "https://login.microsoftonline.com/DOMAIN/v2.0/.well-known/openid-configuration"
응답에 포함된 항목: token_endpoint, authorization_endpoint, jwks_uri, issuer
도메인 네임스페이스 및 페더레이션 구성을 검색합니다.
# DOMAIN을 대상 도메인으로 바꾸세요
curl -s "https://login.microsoftonline.com/getuserrealm.srf?login=enum@DOMAIN&json=1"
응답에 포함된 항목:
NameSpaceType - "Managed" 또는 "Federated"AuthURL - 페더레이션 인증 URL (페더레이션된 경우)CloudInstanceName - 클라우드 인스턴스 (예: "microsoftonline.com")FederationBrandName - 조직 브랜딩 이름DomainName - 검증된 도메인Azure AD에 사용자가 존재하는지 확인합니다. 사용자 존재 여부에 따라 서로 다른 코드를 반환합니다.
# EMAIL을 대상 이메일 주소로 바꾸세요
curl -s -X POST "https://login.microsoftonline.com/common/GetCredentialType" \
-H "Content-Type: application/json" \
-d '{
"Username": "EMAIL",
"isOtherIdpSupported": true,
"checkPhones": false,
"isRemoteNGCSupported": true,
"isCookieBannerShown": false,
"isFidoSupported": true,
"originalRequest": "",
"country": "US",
"forceotclogin": false,
"isExternalFederationDisallowed": false,
"isRemoteConnectSupported": false,
"federationFlags": 0,
"isSignup": false,
"flowToken": "",
"isAccessPassSupported": true
}'
IfExistsResult 코드:
0 = 사용자 존재 (Azure IdP)1 = 사용자 없음2 = 잘못된 요청4 = 서버 오류5 = 사용자 존재 (페더레이션 IdP)6 = 사용자 존재 (외부 비-Microsoft IdP)Azure/M365 관련 레코드에 대한 DNS 쿼리입니다. dig, nslookup 또는 host 명령을 사용하세요.
# 기본 도메인 CNAME
dig CNAME DOMAIN
# Autodiscover CNAME
dig CNAME autodiscover.DOMAIN
dig CNAME lyncdiscover.DOMAIN
dig CNAME sip.DOMAIN
dig TXT DOMAIN
dig SRV _ldap._tcp.DOMAIN
dig SRV _kerberos._tcp.DOMAIN
dig SRV _autodiscover._tcp.DOMAIN
dig SRV _sip._tls.DOMAIN
dig SRV _sipfederationtls._tcp.DOMAIN
dig MX DOMAIN
완전히 탐지 불가 - 감사 로그가 생성되지 않습니다.
사용자의 OneDrive 개인 사이트 URL을 프로빙하여 사용자 존재 여부를 확인합니다.
# TENANT를 테넌트 이름으로 바꾸세요 (예: example)
# USERPATH를 다음과 같은 형식의 이메일로 바꾸세요: user_domain_com (@와 .은 _로 대체)
# 예: [email protected] → john_doe_example_com
curl -s -o /dev/null -w "%{http_code}" -I \
"https://TENANT-my.sharepoint.com/personal/USERPATH/_layouts/15/onedrive.aspx"
상태 코드:
200 = 사용자 존재, OneDrive 접근 가능401/403 = 사용자 존재, 접근 거부됨404 = 사용자 없음curl -s -o /dev/null -w "%{http_code}" -I \
"https://example-my.sharepoint.com/personal/john_doe_example_com/_layouts/15/onedrive.aspx"
서명 인증서 및 토큰 엔드포인트를 포함한 페더레이션 메타데이터를 검색합니다.
# DOMAIN을 대상 도메인으로 바꾸세요
curl -s "https://login.microsoftonline.com/DOMAIN/FederationMetadata/2007-06/FederationMetadata.xml"
응답에 포함된 항목 (XML):
Desktop SSO(Seamless Single Sign-On)가 활성화되었는지 탐지합니다.
# DOMAIN을 대상 도메인으로 바꾸세요
curl -s "https://login.microsoftonline.com/getuserrealm.srf?login=user@DOMAIN&json=1"
확인할 항목: DesktopSsoEnabled: true
# TENANT_ID를 테넌트 GUID로 바꾸세요
curl -s -o /dev/null -w "%{http_code}" \
"https://autologon.microsoftazuread-sso.com/TENANT_ID/winauth/trust/2005/usernamemixed"
테넌트와 연결된 Azure 리소스를 검색합니다. DNS 해석을 사용합니다.
# TENANT를 테넌트 이름으로 바꾸세요
# 기본 테넌트 도메인
dig A TENANT.onmicrosoft.com
# SharePoint
dig A TENANT.sharepoint.com
# OneDrive
dig A TENANT-my.sharepoint.com
# Azure Blob Storage
dig A TENANT.blob.core.windows.net
# Azure Files
dig A TENANT.file.core.windows.net
# Azure Queue
dig A TENANT.queue.core.windows.net
# Azure Table
dig A TENANT.table.core.windows.net
# Key Vault
dig A TENANT.vault.azure.net
# Azure SQL
dig A TENANT.database.windows.net
# App Service
dig A TENANT.azurewebsites.net
# Kudu/Git 배포
dig A TENANT.scm.azurewebsites.net
# 클라우드 서비스
dig A TENANT.cloudapp.net
dig A TENANT.cloudapp.azure.com
# Exchange Online Protection
dig A TENANT.mail.protection.outlook.com
# 컨테이너 레지스트리
dig A TENANT.azurecr.io
# Redis Cache
dig A TENANT.redis.cache.windows.net
# Service Bus
dig A TENANT.servicebus.windows.net
# Front Door
dig A TENANT.azurefd.net
# Azure AD B2C
dig A TENANT.b2clogin.com
# API Management
dig A TENANT.azure-api.net
# Traffic Manager
dig A TENANT.trafficmanager.net
# HDInsight
dig A TENANT.azurehdinsight.net
# Cosmos DB
dig A TENANT.documents.azure.com
# Cognitive Search
dig A TENANT.search.windows.net
# Cognitive Services
dig A TENANT.cognitiveservices.azure.com
# 일반적인 접미사: dev, prod, staging, test, uat, qa, backup, dr, api, app, web, data
dig A TENANTdev.blob.core.windows.net
dig A TENANTprod.azurewebsites.net
dig A TENANTstaging.vault.azure.net
Autodiscover V2 JSON 엔드포인트를 통해 사용자 존재 여부를 확인합니다.
# EMAIL을 대상 이메일 주소로 바꾸세요
curl -s -o /dev/null -w "%{http_code}" -L --max-redirs 0 \
"https://autodiscover-s.outlook.com/autodiscover/autodiscover.json?Email=EMAIL&Protocol=Autodiscoverv1"
상태 코드:
200 = 사용자 존재302 (리다이렉트) = 사용자 없음401/403 = 사용자 존재 (인증 필요)사용자 열거를 위한 레거시 XML 기반 Autodiscover 엔드포인트입니다.
# DOMAIN을 대상 도메인으로 바꾸세요
# EMAIL을 대상 이메일 주소로 바꾸세요
curl -s -X POST "https://autodiscover.DOMAIN/autodiscover/autodiscover.xml" \
-H "Content-Type: text/xml; charset=utf-8" \
-d '<?xml version="1.0" encoding="utf-8"?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
<Request>
<EMailAddress>EMAIL</EMailAddress>
<AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>
</Request>
</Autodiscover>'
응답 지표:
RedirectAddr = 사용자 존재RedirectUrl = 존재 가능성을 나타냄ErrorCode: InvalidUser = 사용자 없음ErrorCode: NoError = 사용자 존재노출 여부 확인을 위해 EWS 엔드포인트를 프로빙합니다.
# Office 365 EWS 엔드포인트
curl -s -o /dev/null -w "%{http_code}" \
"https://outlook.office365.com/EWS/Exchange.asmx"
curl -s -o /dev/null -w "%{http_code}" \
"https://outlook.office.com/EWS/Exchange.asmx"
# 온프레미스/사용자 지정 도메인 엔드포인트
# DOMAIN을 대상 도메인으로 바꾸세요
curl -s -o /dev/null -w "%{http_code}" \
"https://DOMAIN/EWS/Exchange.asmx"
curl -s -o /dev/null -w "%{http_code}" \
"https://mail.DOMAIN/EWS/Exchange.asmx"
curl -s -o /dev/null -w "%{http_code}" \
"https://ews.DOMAIN/EWS/Exchange.asmx"
사용 가능 여부를 나타내는 상태 코드:
200, 301, 302, 307, 308 = 사용 가능401, 403 = 사용 가능 (인증 필요)404 = 사용 불가SharePoint 및 Teams 사이트를 검색합니다.
# TENANT를 테넌트 이름으로 바꾸세요
# 테넌트 루트
curl -s -o /dev/null -w "%{http_code}" \
"https://TENANT.sharepoint.com"
# OneDrive 루트
curl -s -o /dev/null -w "%{http_code}" \
"https://TENANT-my.sharepoint.com"
# 확인할 일반적인 사이트 이름
# 사이트: intranet, portal, hr, finance, it, projects, marketing, sales, support, admin, security, dev