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

ECB

(ECB) Ηλεκτρονικό Βιβλίο Κωδικών - συμμετρικό σχήμα κρυπτογράφησης που αντικαθιστά κάθε μπλοκ του καθαρού κειμένου με το μπλοκ του κρυπτογραφημένου κειμένου. Είναι το απλούστερο σχήμα κρυπτογράφησης. Η κύρια ιδέα είναι να χωρίσετε το καθαρό κείμενο σε μπλοκ N bit (εξαρτάται από το μέγεθος του μπλοκ των εισερχόμενων δεδομένων, αλγόριθμο κρυπτογράφησης) και στη συνέχεια να κρυπτογραφήσετε (αποκρυπτογραφήσετε) κάθε μπλοκ του καθαρού κειμένου χρησιμοποιώντας το μόνο κλειδί.

Η χρήση του ECB έχει πολλές επιπτώσεις στην ασφάλεια:

  • Μπλοκ από το κρυπτογραφημένο μήνυμα μπορούν να αφαιρεθούν
  • Μπλοκ από το κρυπτογραφημένο μήνυμα μπορούν να μετακινηθούν

Ανίχνευση της ευπάθειας

Φανταστείτε ότι συνδέεστε σε μια εφαρμογή πολλές φορές και πάντα λαμβάνετε το ίδιο cookie. Αυτό συμβαίνει επειδή το cookie της εφαρμογής είναι <username>|<password>.
Στη συνέχεια, δημιουργείτε δύο νέους χρήστες, και οι δύο με το ίδιο μακρύ κωδικό πρόσβασης και σχεδόν το ίδιο όνομα χρήστη.
Ανακαλύπτετε ότι τα μπλοκ των 8B όπου οι πληροφορίες και των δύο χρηστών είναι οι ίδιες είναι ίσα. Στη συνέχεια, φαντάζεστε ότι αυτό μπορεί να συμβαίνει επειδή χρησιμοποιείται το ECB.

Όπως στο παρακάτω παράδειγμα. Παρατηρήστε πώς αυτά τα 2 αποκωδικοποιημένα cookies έχουν πολλές φορές το μπλοκ \x23U\xE45K\xCB\x21\xC8.

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

Αυτό συμβαίνει επειδή το όνομα χρήστη και ο κωδικός πρόσβασης αυτών των cookies περιείχαν πολλές φορές το γράμμα "a" (για παράδειγμα). Οι μπλοκ που είναι διαφορετικοί είναι μπλοκ που περιείχαν τουλάχιστον 1 διαφορετικό χαρακτήρα (ίσως το διαχωριστικό "|" ή κάποια απαραίτητη διαφορά στο όνομα χρήστη).

Τώρα, ο επιτιθέμενος χρειάζεται απλώς να ανακαλύψει αν η μορφή είναι <username><delimiter><password> ή <password><delimiter><username>. Για να το κάνει αυτό, μπορεί απλώς να δημιουργήσει αρκετά ονόματα χρήστη με παρόμοια και μακριά ονόματα χρήστη και κωδικούς πρόσβασης μέχρι να βρει τη μορφή και το μήκος του διαχωριστικού:

Μήκος ονόματος χρήστη:Μήκος κωδικού πρόσβασης:Μήκος ονόματος χρήστη+Κωδικού πρόσβασης:Μήκος cookie (μετά την αποκωδικοποίηση):
2248
3368
3478
44816
771416

Εκμετάλλευση της ευπάθειας

Αφαίρεση ολόκληρων μπλοκ

Γνωρίζοντας τη μορφή του cookie (<username>|<password>), προκειμένου να προσποιηθεί το όνομα χρήστη admin, δημιουργήστε έναν νέο χρήστη με το όνομα aaaaaaaaadmin και αποκτήστε το cookie και αποκωδικοποιήστε το:

\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

Μπορούμε να δούμε το μοτίβο \x23U\xE45K\xCB\x21\xC8 που δημιουργήθηκε προηγουμένως με το όνομα χρήστη που περιείχε μόνο a.
Στη συνέχεια, μπορείτε να αφαιρέσετε το πρώτο μπλοκ των 8B και θα αποκτήσετε ένα έγκυρο cookie για το όνομα χρήστη admin:

\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

Μετακίνηση μπλοκ

Σε πολλές βάσεις δεδομένων είναι το ίδιο να αναζητάς WHERE username='admin'; ή WHERE username='admin '; (Σημειώστε τα επιπλέον κενά)

Έτσι, ένας άλλος τρόπος για να προσποιηθείς τον χρήστη admin θα ήταν να:

  • Δημιουργήσεις ένα όνομα χρήστη που: len(<username>) + len(<delimiter) % len(block). Με μέγεθος μπλοκ 8B μπορείς να δημιουργήσεις ένα όνομα χρήστη που ονομάζεται: username , με τον διαχωριστή | το κομμάτι <username><delimiter> θα δημιουργήσει 2 μπλοκ των 8Bs.
  • Στη συνέχεια, να δημιουργήσεις έναν κωδικό πρόσβασης που θα γεμίσει έναν ακριβή αριθμό μπλοκ που περιέχουν το όνομα χρήστη που θέλουμε να προσποιηθούμε και κενά, όπως: admin

Το cookie αυτού του χρήστη θα αποτελείται από 3 μπλοκ: τα πρώτα 2 είναι τα μπλοκ του ονόματος χρήστη + διαχωριστής και το τρίτο από τον κωδικό πρόσβασης (ο οποίος προσποιείται το όνομα χρήστη): username |admin

Στη συνέχεια, απλώς αντικατέστησε το πρώτο μπλοκ με το τελευταίο και θα προσποιείσαι τον χρήστη admin: admin |username

Αναφορές

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