Cipher Block Chaining CBC-MAC
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Αν το cookie είναι μόνο το όνομα χρήστη (ή το πρώτο μέρος του cookie είναι το όνομα χρήστη) και θέλεις να προσποιηθείς το όνομα χρήστη "admin". Τότε, μπορείς να δημιουργήσεις το όνομα χρήστη "bdmin" και bruteforce το πρώτο byte του cookie.
Cipher block chaining message authentication code (CBC-MAC) είναι μια μέθοδος που χρησιμοποιείται στην κρυπτογραφία. Λειτουργεί παίρνοντας ένα μήνυμα και κρυπτογραφώντας το μπλοκ προς μπλοκ, όπου η κρυπτογράφηση κάθε μπλοκ συνδέεται με το προηγούμενο. Αυτή η διαδικασία δημιουργεί μια αλυσίδα μπλοκ, διασφαλίζοντας ότι η αλλαγή έστω και ενός bit του αρχικού μηνύματος θα οδηγήσει σε μια απρόβλεπτη αλλαγή στο τελευταίο μπλοκ των κρυπτογραφημένων δεδομένων. Για να γίνει ή να αντιστραφεί μια τέτοια αλλαγή, απαιτείται το κλειδί κρυπτογράφησης, διασφαλίζοντας την ασφάλεια.
Για να υπολογίσεις το CBC-MAC του μηνύματος m, κρυπτογραφείς το m σε λειτουργία CBC με μηδενικό αρχικοποιητικό διανύσμα και κρατάς το τελευταίο μπλοκ. Η παρακάτω εικόνα σκιαγραφεί τον υπολογισμό του CBC-MAC ενός μηνύματος που αποτελείται από μπλοκ χρησιμοποιώντας ένα μυστικό κλειδί k και έναν μπλοκ κρυπτογράφο E:
Με το CBC-MAC συνήθως το IV που χρησιμοποιείται είναι 0.
Αυτό είναι ένα πρόβλημα γιατί 2 γνωστά μηνύματα (m1
και m2
) ανεξάρτητα θα δημιουργήσουν 2 υπογραφές (s1
και s2
). Έτσι:
E(m1 XOR 0) = s1
E(m2 XOR 0) = s2
Τότε ένα μήνυμα που αποτελείται από τα m1 και m2 που συνδυάζονται (m3) θα δημιουργήσει 2 υπογραφές (s31 και s32):
E(m1 XOR 0) = s31 = s1
E(m2 XOR s1) = s32
Το οποίο είναι δυνατό να υπολογιστεί χωρίς να γνωρίζεις το κλειδί της κρυπτογράφησης.
Φαντάσου ότι κρυπτογραφείς το όνομα Administrator σε 8bytes μπλοκ:
Administ
rator\00\00\00
Μπορείς να δημιουργήσεις ένα όνομα χρήστη που ονομάζεται Administ (m1) και να ανακτήσεις την υπογραφή (s1).
Έπειτα, μπορείς να δημιουργήσεις ένα όνομα χρήστη που ονομάζεται το αποτέλεσμα του rator\00\00\00 XOR s1
. Αυτό θα δημιουργήσει E(m2 XOR s1 XOR 0)
που είναι s32.
Τώρα, μπορείς να χρησιμοποιήσεις το s32 ως την υπογραφή του πλήρους ονόματος Administrator.
Πάρε την υπογραφή του ονόματος χρήστη Administ (m1) που είναι s1
Πάρε την υπογραφή του ονόματος χρήστη rator\x00\x00\x00 XOR s1 XOR 0 είναι s32**.**
Ρύθμισε το cookie σε s32 και θα είναι ένα έγκυρο cookie για τον χρήστη Administrator.
Αν μπορείς να ελέγξεις το χρησιμοποιούμενο IV, η επίθεση θα μπορούσε να είναι πολύ εύκολη. Αν το cookie είναι απλώς το όνομα χρήστη που έχει κρυπτογραφηθεί, για να προσποιηθείς τον χρήστη "administrator" μπορείς να δημιουργήσεις τον χρήστη "Administrator" και θα πάρεις το cookie του. Τώρα, αν μπορείς να ελέγξεις το IV, μπορείς να αλλάξεις το πρώτο Byte του IV έτσι ώστε IV[0] XOR "A" == IV'[0] XOR "a" και να αναγεννήσεις το cookie για τον χρήστη Administrator. Αυτό το cookie θα είναι έγκυρο για να προσποιηθείς τον χρήστη administrator με το αρχικό IV.
Περισσότερες πληροφορίες στο https://en.wikipedia.org/wiki/CBC-MAC
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)