Cognito User Pools
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Maktaba ya mtumiaji ni directory ya watumiaji katika Amazon Cognito. Kwa maktaba ya mtumiaji, watumiaji wako wanaweza kuingia kwenye programu yako ya wavuti au simu kupitia Amazon Cognito, au kuunganishwa kupitia mtoa huduma wa utambulisho wa third-party (IdP). Iwe watumiaji wako wanaingia moja kwa moja au kupitia upande wa tatu, wanachama wote wa maktaba ya mtumiaji wana wasifu wa directory ambao unaweza kufikia kupitia SDK.
Maktaba za watumiaji zinatoa:
Huduma za kujiandikisha na kuingia.
UI ya wavuti iliyojengwa ndani, inayoweza kubadilishwa ili kuingia watumiaji.
Kuingia kwa kijamii na Facebook, Google, Login with Amazon, na Sign in with Apple, na kupitia mtoa huduma wa utambulisho wa SAML na OIDC kutoka kwa maktaba yako ya watumiaji.
Usimamizi wa directory ya watumiaji na wasifu wa watumiaji.
Vipengele vya usalama kama uthibitishaji wa hatua nyingi (MFA), ukaguzi wa akidi zilizovunjika, ulinzi wa kuchukua akaunti, na uthibitishaji wa simu na barua pepe.
Mifumo iliyobadilishwa na uhamaji wa watumiaji kupitia AWS Lambda triggers.
Msimbo wa chanzo wa programu mara nyingi pia utakuwa na ID ya maktaba ya mtumiaji na ID ya programu ya mteja, (na wakati mwingine siri ya programu?) ambazo zinahitajika kwa mtumiaji kuingia kwenye Maktaba ya Mtumiaji ya Cognito.
Usajili: Kwa default mtumiaji anaweza kujiandikisha mwenyewe, hivyo anaweza kuunda mtumiaji kwa ajili yake mwenyewe.
Uainishaji wa watumiaji: Kazi ya usajili inaweza kutumika kupata majina ya watumiaji ambayo tayari yapo. Taarifa hii inaweza kuwa muhimu kwa shambulio la brute-force.
Kuingia kwa brute-force: Katika sehemu ya Uthibitishaji una mbinu zote ambazo mtumiaji anapaswa kuingia, unaweza kujaribu kuingia kwa nguvu kupata akidi halali.
Pacu, sasa inajumuisha moduli za cognito__enum
na cognito__attack
ambazo zinafanya otomatiki uainishaji wa mali zote za Cognito katika akaunti na kuashiria mipangilio dhaifu, sifa za mtumiaji zinazotumika kwa udhibiti wa ufikiaji, nk, na pia zinafanya otomatiki uundaji wa watumiaji (ikiwemo msaada wa MFA) na kupandisha hadhi kulingana na sifa za kawaida zinazoweza kubadilishwa, akidi zinazoweza kutumika, majukumu yanayoweza kuchukuliwa katika token za id, nk.
Kwa maelezo ya kazi za moduli angalia sehemu ya 2 ya blog post. Kwa maelekezo ya usakinishaji angalia ukurasa mkuu wa Pacu.
Cognito Scanner ni chombo cha CLI katika python ambacho kinatekeleza mashambulizi tofauti kwenye Cognito ikiwa ni pamoja na uundaji wa akaunti zisizohitajika na oracle ya akaunti. Angalia hii kiungo kwa maelezo zaidi.
CognitoAttributeEnum: Hii skripti inaruhusu kuhesabu sifa halali za watumiaji.
User Pools inaruhusu kwa default kujiandikisha watumiaji wapya.
Unaweza kupata kosa linaloonyesha kuwa unahitaji kutoa maelezo zaidi kuhusu mtumiaji:
Unaweza kutoa maelezo yanayohitajika kwa JSON kama:
Unaweza kutumia hii kazi pia kuorodhesha watumiaji waliopo. Hii ni ujumbe wa kosa wakati mtumiaji tayari yupo na jina hilo:
Kumbuka katika amri iliyopita jinsi sifa za kawaida zinaanza na "custom:". Pia fahamu kwamba unapojisajili huwezi kuunda sifa mpya za kawaida kwa mtumiaji. Unaweza tu kutoa thamani kwa sifa za kawaida (hata kama hazihitajiki) na sifa za kawaida zilizotajwa.
Au tu kujaribu ikiwa kitambulisho cha mteja kinapatikana. Hii ndiyo hitilafu ikiwa kitambulisho cha mteja hakipo:
Utapata kosa hili na huwezi kujiandikisha au kuhesabu watumiaji:
Cognito inaruhusu kuhakiki mtumiaji mpya kwa kuangalia barua pepe yake au nambari ya simu. Hivyo, unapounda mtumiaji kwa kawaida utahitajika angalau jina la mtumiaji na nenosiri na barua pepe na/au nambari ya simu. Weka tu moja unayoimiliki ili upokee msimbo wa kuhakiki akaunti yako mpya ya mtumiaji iliyoundwa kama hii:
Hata kama inaonekana unaweza kutumia barua pepe hiyo hiyo na nambari ya simu, unapohitaji kuthibitisha mtumiaji aliyeundwa, Cognito italamika kuhusu kutumia taarifa hizo hizo na haitakuruhusu kuthibitisha akaunti.
Kwa default, mtumiaji anaweza kubadilisha thamani ya sifa zake kwa kutumia kitu kama:
Unaweza kupata sifa za kawaida zikitumika (kama isAdmin
), kwani kwa kawaida unaweza kubadilisha thamani za sifa zako unaweza kuwa na uwezo wa kuongeza haki kwa kubadilisha thamani mwenyewe!
Unaweza kutumia hii kubadilisha barua pepe na nambari ya simu ya mtumiaji, lakini kisha, hata kama akaunti inabaki kuwa imethibitishwa, sifa hizo zimewekwa katika hali ya kuthibitishwa (unahitaji kuzithibitisha tena).
Hutaweza kuingia kwa barua pepe au nambari ya simu hadi uzithibitisha, lakini utaweza kuingia kwa jina la mtumiaji.
Kumbuka kwamba hata kama barua pepe ilibadilishwa na haijathibitishwa itaonekana katika Token ya ID ndani ya email
sehemu na sehemu email_verified
itakuwa false, lakini ikiwa programu haiangalii hiyo unaweza kujifanya kuwa watumiaji wengine.
Zaidi ya hayo, kumbuka kwamba unaweza kuweka chochote ndani ya name
sehemu kwa kubadilisha sifa ya jina. Ikiwa programu inafanya ukaguzi wa sehemu hiyo kwa sababu fulani badala ya email
(au sifa nyingine yoyote) unaweza kuwa na uwezo wa kujifanya kuwa watumiaji wengine.
Hata hivyo, ikiwa kwa sababu fulani umebadilisha barua pepe yako kwa mfano kuwa mpya unayoweza kufikia unaweza kuthibitisha barua pepe hiyo kwa nambari uliyopokea katika anwani hiyo ya barua pepe:
Tumia phone_number
badala ya email
kubadilisha/thibitisha nambari mpya ya simu.
Msimamizi pia anaweza kuwezesha chaguo la kuingia kwa kutumia jina la mtumiaji linalopendekezwa na mtumiaji. Kumbuka kwamba huwezi kubadilisha thamani hii kuwa jina lolote la mtumiaji au preferred_username ambalo tayari linatumika kuiga mtumiaji tofauti.
Inawezekana kurejesha nenosiri kwa kujua tu jina la mtumiaji (au email au simu inakubalika) na kuwa na ufikiaji kwake kwani nambari itatumwa huko:
Majibu ya seva daima yatakuwa chanya, kama vile jina la mtumiaji lilipo. Huwezi kutumia njia hii kuhesabu watumiaji.
Kwa msimbo unaweza kubadilisha nenosiri kwa:
Ili kubadilisha nenosiri unahitaji kujua nenosiri la awali:
Mkusanyiko wa watumiaji unasaidia njia tofauti za kuthibitisha kwake. Ikiwa una jina la mtumiaji na nenosiri kuna pia mbinu tofauti zinazosaidiwa kuingia. Zaidi ya hayo, wakati mtumiaji anathibitishwa katika Mkusanyiko aina 3 za tokeni hutolewa: ID Token, Access token na Refresh token.
ID Token: Inajumuisha madai kuhusu utambulisho wa mtumiaji aliyethibitishwa, kama vile name
, email
, na phone_number
. ID token inaweza pia kutumika kuwatambulisha watumiaji kwenye seva zako za rasilimali au programu za seva. Lazima uthibitishe sahihi ya ID token kabla hujaweza kuamini madai yoyote ndani ya ID token ikiwa unaitumia katika programu za nje.
ID Token ndiyo token ambayo ina thamani za sifa za mtumiaji, hata zile za kawaida.
Access Token: Inajumuisha madai kuhusu mtumiaji aliyethibitishwa, orodha ya makundi ya mtumiaji, na orodha ya mipaka. Lengo la access token ni kuidhinisha operesheni za API katika muktadha wa mtumiaji katika mkusanyiko wa watumiaji. Kwa mfano, unaweza kutumia access token kumpatia mtumiaji wako ufikiaji wa kuongeza, kubadilisha, au kufuta sifa za mtumiaji.
Refresh Token: Kwa kutumia refresh tokens unaweza kupata ID Tokens na Access Tokens mpya kwa mtumiaji hadi refresh token iwe batili. Kwa kawaida, refresh token inaisha siku 30 baada ya mtumiaji wa programu yako kuingia kwenye mkusanyiko wako wa watumiaji. Unapounda programu kwa mkusanyiko wako wa watumiaji, unaweza kuweka muda wa kumalizika wa refresh token wa programu kuwa thamani yoyote kati ya dakika 60 na miaka 10.
Hii ni mchakato wa uthibitishaji upande wa seva:
Programu ya upande wa seva inaita AdminInitiateAuth
API operation (badala ya InitiateAuth
). Operesheni hii inahitaji akreditif za AWS zenye ruhusa zinazojumuisha cognito-idp:AdminInitiateAuth
na cognito-idp:AdminRespondToAuthChallenge
. Operesheni inarudisha vigezo vya uthibitishaji vinavyohitajika.
Baada ya programu ya upande wa seva kuwa na vigezo vya uthibitishaji, inaita AdminRespondToAuthChallenge
API operation. Operesheni ya AdminRespondToAuthChallenge
inafanikiwa tu unapotoa akreditif za AWS.
Hii mbinu HAIRUHUSIWI kwa kawaida.
Ili kuingia unahitaji kujua:
kitambulisho cha mkusanyiko wa watumiaji
kitambulisho cha mteja
jina la mtumiaji
nenosiri
siri ya mteja (tu ikiwa programu imewekwa ili kutumia siri)
Ili uweze kuingia kwa njia hii programu hiyo lazima iruhusu kuingia na ALLOW_ADMIN_USER_PASSWORD_AUTH
.
Zaidi ya hayo, ili kufanya kitendo hiki unahitaji akreditif zenye ruhusa cognito-idp:AdminInitiateAuth
na cognito-idp:AdminRespondToAuthChallenge