Cipher Block Chaining CBC-MAC
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: Εκπαίδευση HackTricks 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 και ένα block cipher 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
Το οποίο είναι δυνατό να υπολογιστεί χωρίς να γνωρίζετε το κλειδί της κρυπτογράφησης.
Φανταστείτε ότι κρυπτογραφείτε το όνομα Διαχειριστής σε μπλοκ 8bytes:
Administ
rator\00\00\00
Μπορείτε να δημιουργήσετε ένα όνομα χρήστη που ονομάζεται Administ (m1) και να ανακτήσετε την υπογραφή (s1).
Στη συνέχεια, μπορείτε να δημιουργήσετε ένα όνομα χρήστη που ονομάζεται το αποτέλεσμα του rator\00\00\00 XOR s1
. Αυτό θα δημιουργήσει E(m2 XOR s1 XOR 0)
που είναι s32.
τώρα, μπορείτε να χρησιμοποιήσετε το s32 ως την υπογραφή του πλήρους ονόματος Διαχειριστής.
Αποκτήστε την υπογραφή του ονόματος χρήστη Administ (m1) που είναι s1
Αποκτήστε την υπογραφή του ονόματος χρήστη rator\x00\x00\x00 XOR s1 XOR 0 είναι s32**.**
Ορίστε το cookie σε s32 και θα είναι ένα έγκυρο cookie για τον χρήστη Διαχειριστής.
Εάν μπορείτε να ελέγξετε το χρησιμοποιούμενο IV, η επίθεση θα μπορούσε να είναι πολύ εύκολη. Αν τα cookies είναι απλώς το κρυπτογραφημένο όνομα χρήστη, για να παριστάνετε τον χρήστη "διαχειριστής" μπορείτε να δημιουργήσετε τον χρήστη "Διαχειριστής" και θα λάβετε το cookie του. Τώρα, αν μπορείτε να ελέγξετε το IV, μπορείτε να αλλάξετε το πρώτο Byte του IV έτσι ώστε IV[0] XOR "A" == IV'[0] XOR "a" και να αναδημιουργήσετε το cookie για τον χρήστη Διαχειριστής. Αυτό το cookie θα είναι έγκυρο για να παριστάνετε τον χρήστη διαχειριστή με το αρχικό IV.
Περισσότερες πληροφορίες στο https://en.wikipedia.org/wiki/CBC-MAC
Μάθετε & εξασκηθείτε στο AWS Hacking:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)