Az - Unauthenticated Enum & Initial Entry

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!

HackTricks를 지원하는 다른 방법:

Azure 테넌트

테넌트 열거

테넌트의 도메인을 알고 있는 공격자는 일부 공개 Azure API를 쿼리하여 더 많은 정보를 수집할 수 있습니다. API를 직접 쿼리하거나 PowerShell 라이브러리 AADInternals를 사용할 수 있습니다:

API정보AADInternals 함수

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

테넌트 ID를 포함한 로그인 정보

Get-AADIntTenantID -Domain <domain>

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

테넌트의 모든 도메인

Get-AADIntTenantDomains -Domain <domain>

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

테넌트의 로그인 정보를 포함한, 테넌트 이름 및 도메인 인증 유형. NameSpaceTypeManaged인 경우, AzureAD가 사용됨.

Get-AADIntLoginInformation -UserName <UserName>

login.microsoftonline.com/common/GetCredentialType

데스크톱 SSO 정보를 포함한 로그인 정보

Get-AADIntLoginInformation -UserName <UserName>

AADInternals 라이브러리의 한 명령어로 Azure 테넌트의 모든 정보를 쿼리할 수 있습니다:

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

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

테넌트의 이름, ID 및 "브랜드" 이름에 대한 세부 정보를 관찰할 수 있습니다. 또한 데스크톱 단일 로그인(SSO)의 상태, 일명 Seamless SSO도 표시됩니다. 이 기능이 활성화되면 해당 기능을 통해 특정 사용자의 존재(열거)를 대상 조직 내에서 확인할 수 있습니다.

또한 결과에는 대상 테넌트와 관련된 모든 확인된 도메인의 이름과 해당 식별 유형이 표시됩니다. 연합 도메인의 경우 사용 중인 식별 공급자의 완전한 정규 도메인 이름(FQDN)(일반적으로 ADFS 서버)도 공개됩니다. "MX" 열은 이메일이 Exchange Online으로 라우팅되는지 여부를 지정하며, "SPF" 열은 Exchange Online을 이메일 발신자로 나열합니다. 현재의 정찰 기능은 SPF 레코드 내의 "include" 문을 구문 분석하지 않으므로 잘못된 부정적 결과가 발생할 수 있음을 주의해야 합니다.

사용자 열거

테넌트 내에서 사용자 이름이 존재하는지 확인할 수 있습니다. 이는 게스트 사용자를 포함하며, 게스트 사용자의 사용자 이름 형식은 다음과 같습니다:

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

사용자의 이메일 주소는 " @"가 밑줄 "_"로 대체된 사용자의 이메일 주소입니다.

AADInternals를 사용하여 사용자가 존재하는지 확인할 수 있습니다:

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

인증되지 않은 열거 및 초기 진입

이 섹션에서는 Azure에서 인증되지 않은 열거 및 초기 진입을 수행하는 방법에 대해 설명합니다.

Azure 인증되지 않은 열거

  1. Azure Portal 인증되지 않은 열거: Azure Portal에 대한 인증되지 않은 열거를 수행하여 정보 수집 및 공격 표면을 확장합니다.

  2. Azure 서비스 열거: Azure에서 호스팅되는 서비스 및 리소스를 식별하기 위해 서비스 열거를 수행합니다.

  3. Azure AD 사용자 및 그룹 열거: Azure Active Directory(AD)에서 사용자 및 그룹을 열거하여 권한 상태를 식별합니다.

Azure 초기 진입

  1. Azure Portal 암호 재설정: Azure Portal에 대한 암호를 재설정하여 계정 액세스를 획들할 수 있습니다.

  2. Azure 서비스 암호 재설정: Azure에서 호스팅되는 서비스의 암호를 재설정하여 서비스 액세스를 획들할 수 있습니다.

  3. Azure AD 사용자 암호 재설정: Azure AD 사용자의 암호를 재설정하여 사용자 계정에 액세스할 수 있습니다.

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

당신은 각 행에 하나의 이메일 주소가 포함된 텍스트 파일을 사용할 수도 있습니다:

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

세 가지 다른 열거 방법을 선택할 수 있습니다:

방법설명

Normal

위에서 언급한 GetCredentialType API를 참조합니다. 기본 방법입니다.

Login

이 방법은 사용자로 로그인을 시도합니다. 참고: 쿼리는 로그인 로그에 기록됩니다.

Autologon

이 방법은 사용자로 자동 로그온 엔드포인트를 통해 로그인을 시도합니다. 쿼리는 로그인 로그에 기록되지 않습니다! 따라서, 패스워드 스프레이 및 브루트포스 공격에도 잘 작동합니다.

유효한 사용자 이름을 발견한 후 사용자에 대한 정보를 얻을 수 있습니다:

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

스크립트 o365creeper를 사용하면 이메일이 유효한지 확인할 수도 있습니다.

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

Microsoft Teams를 통한 사용자 열거

다른 유용한 정보원은 Microsoft Teams입니다.

Microsoft Teams의 API를 사용하면 사용자를 검색할 수 있습니다. 특히 "사용자 검색" 엔드포인트 externalsearchv3searchUsers를 사용하여 Teams에 등록된 사용자 계정에 대한 일반 정보를 요청할 수 있습니다.

API 응답에 따라 존재하지 않는 사용자와 유효한 Teams 구독을 가진 기존 사용자를 구별할 수 있습니다.

TeamsEnum 스크립트를 사용하여 주어진 사용자 이름 집합을 Teams API에 대해 유효성을 검사할 수 있습니다.

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

인증되지 않은 열거 및 초기 진입

이 섹션에서는 Azure 환경에서 인증되지 않은 열거 및 초기 진입을 수행하는 방법에 대해 설명합니다. 이러한 공격은 Azure 환경에서 보안 취약점을 식별하고 악용하는 데 도움이 될 수 있습니다.

서비스 및 리소스 열거

Azure에서는 인증되지 않은 상태에서도 서비스 및 리소스에 대한 정보를 얻을 수 있습니다. 이를 통해 환경을 더 잘 이해하고 추가적인 공격을 수행할 수 있습니다.

초기 진입

인증되지 않은 열거를 통해 수집한 정보를 기반으로 초기 진입을 시도할 수 있습니다. Azure 환경에서 약점을 찾아 공격자가 시스템에 액세스할 수 있는 방법을 찾을 수 있습니다.

이러한 공격은 신중하게 계획되고 수행되어야 하며 항상 법적인 권한을 준수해야 합니다.

[-] 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)

또한 다음과 같은 기존 사용자의 가용성 정보를 열람할 수 있습니다:

  • Available

  • Away

  • DoNotDisturb

  • Busy

  • Offline

업무 외 메시지가 구성되어 있는 경우, TeamsEnum을 사용하여 메시지를 검색할 수도 있습니다. 출력 파일이 지정된 경우, 업무 외 메시지는 자동으로 JSON 파일에 저장됩니다:

jq . teamsenum-output.json

인증되지 않은 열거 및 초기 진입

이 섹션에서는 Azure에서 인증되지 않은 열거 및 초기 진입을 수행하는 방법에 대해 설명합니다.

서비스 열거

Azure에서는 다양한 서비스가 호스팅되며, 이러한 서비스를 식별하고 열거하는 것은 공격 표면을 확장하는 데 도움이 될 수 있습니다. 일반적으로 사용되는 도구 및 기술을 사용하여 Azure에서 서비스를 열거할 수 있습니다.

미인증 Blob 스토리지 엑세스

Azure Blob 스토리지는 데이터를 저장하는 데 사용되며 종종 중요한 정보를 포함합니다. 미인증 Blob 스토리지 엑세스를 찾으면 데이터 유출의 위험이 있습니다.

미인증 SQL 데이터베이스 액세스

Azure SQL 데이터베이스는 중요한 데이터를 저장하는 데 사용됩니다. 미인증 SQL 데이터베이스 액세스를 찾으면 데이터 유출 및 데이터베이스 조작의 위험이 있습니다.

미인증 앱 서비스 엑세스

Azure 앱 서비스는 웹 애플리케이션을 호스팅하는 데 사용됩니다. 미인증 앱 서비스 엑세스를 찾으면 웹 애플리케이션의 취약점을 악용할 수 있습니다.

미인증 가상 머신 액세스

Azure 가상 머신은 중요한 워크로드를 실행하는 데 사용됩니다. 미인증 가상 머신 액세스를 찾으면 시스템을 손상시키거나 중요한 데이터에 액세스할 수 있습니다.

{
"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
}
]
}

Azure Services

이제 Azure 테넌트가 사용하는 도메인을 알았으므로 노출된 Azure 서비스를 찾아보는 시간입니다.

이러한 목표를 위해 MicroBust의 메소드를 사용할 수 있습니다. 이 함수는 여러 Azure 서비스 도메인에서 기본 도메인 이름 (및 몇 가지 순열)을 검색할 것입니다:

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

오픈 스토리지

InvokeEnumerateAzureBlobs.ps1와 같은 도구를 사용하여 오픈 스토리지를 발견할 수 있습니다. 이 도구는 Microburst/Misc/permitations.txt 파일을 사용하여 간단한 순열을 생성하여 오픈 스토리지 계정을 찾으려고 시도합니다.

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

SAS URLs

공유 액세스 서명 (SAS) URL은 특정 스토리지 계정의 일부 (전체 컨테이너, 파일 등)에 대한 액세스를 제공하는 URL이며 특정 권한 (읽기, 쓰기 등)을 가지고 있습니다. 유출된 것을 발견하면 민감한 정보에 액세스할 수 있습니다. 다음과 같이 보입니다 (이것은 컨테이너에 액세스하기 위한 것이며 파일에 대한 액세스를 부여하는 경우 URL의 경로에도 해당 파일이 포함될 것입니다):

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

Storage Explorer를 사용하여 데이터에 액세스합니다

자격 증명 침해

피싱

패스워드 스프레이 / 브루트포스

pageAz - Password Spraying

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹 배우기 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법:

最終更新