Συμμετρική Κρυπτογραφία
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.
Τι να αναζητήσετε σε CTFs
- Κακή χρήση λειτουργίας: ECB patterns, CBC malleability, CTR/GCM nonce reuse.
- Padding oracles: διαφορετικά σφάλματα/χρόνοι απόκρισης για κακό padding.
- MAC confusion: χρήση CBC-MAC με μηνύματα μεταβλητού μήκους, ή λάθη MAC-then-encrypt.
- XOR παντού: stream ciphers και custom constructions συχνά μειώνονται σε XOR με ένα keystream.
AES modes and misuse
ECB: Electronic Codebook
ECB leaks patterns: equal plaintext blocks → equal ciphertext blocks. Αυτό επιτρέπει:
- Cut-and-paste / αναδιάταξη blocks
- Διαγραφή blocks (αν η μορφή παραμένει έγκυρη)
Αν μπορείτε να ελέγξετε το plaintext και να παρατηρήσετε ciphertext (ή cookies), δοκιμάστε να δημιουργήσετε επαναλαμβανόμενα blocks (π.χ., πολλά As) και ψάξτε για επαναλήψεις.
CBC: Cipher Block Chaining
- CBC is malleable: flipping bits in
C[i-1]flips predictable bits inP[i]. - Αν το σύστημα αποκαλύπτει έγκυρο padding έναντι μη έγκυρου padding, μπορεί να έχετε έναν padding oracle.
CTR
CTR turns AES into a stream cipher: C = P XOR keystream.
If a nonce/IV is reused with the same key:
C1 XOR C2 = P1 XOR P2(classic keystream reuse)- Με γνωστό plaintext, μπορείτε να ανακτήσετε το keystream και να αποκρυπτογραφήσετε άλλα μηνύματα.
GCM
GCM επίσης σπάει άσχημα υπό nonce reuse. Αν το ίδιο key+nonce χρησιμοποιηθεί περισσότερες από μία φορές, συνήθως έχετε:
- Keystream reuse για κρυπτογράφηση (όπως CTR), επιτρέποντας ανάκτηση plaintext όταν οποιοδήποτε plaintext είναι γνωστό.
- Απώλεια εγγυήσεων ακεραιότητας. Ανάλογα με το τι αποκαλύπτεται (πολλαπλά message/tag ζεύγη με τον ίδιο nonce), επιτιθέμενοι μπορεί να καταφέρουν να forge tags.
Επιχειρησιακές οδηγίες:
- Θεωρήστε το “nonce reuse” σε AEAD ως κρίσιμη ευπάθεια.
- Αν έχετε πολλαπλά ciphertext υπό τον ίδιο nonce, ξεκινήστε ελέγχοντας σχέσεις του τύπου
C1 XOR C2 = P1 XOR P2.
Εργαλεία
- CyberChef για γρήγορα πειράματα: https://gchq.github.io/CyberChef/
- Python:
pycryptodomeγια scripting
Πρότυπα εκμετάλλευσης ECB
ECB (Electronic Code Book) κρυπτογραφεί κάθε block ανεξάρτητα:
- equal plaintext blocks → equal ciphertext blocks
- this leaks structure and enables cut-and-paste style attacks
![]()
Ιδέα ανίχνευσης: μοτίβο token/cookie
Αν συνδεθείτε πολλές φορές και πάντα λαμβάνετε το ίδιο cookie, το ciphertext μπορεί να είναι deterministic (ECB ή fixed IV).
Αν δημιουργήσετε δύο χρήστες με κυρίως ίδια plaintext διατάξεις (π.χ., μακριές επαναλαμβανόμενες χαρακτήρες) και δείτε επαναλαμβανόμενα ciphertext blocks στις ίδιες θέσεις, το ECB είναι κύριος ύποπτος.
Σχέδια εκμετάλλευσης
Αφαίρεση ολόκληρων blocks
Αν η μορφή token είναι κάτι σαν <username>|<password> και τα όρια των blocks ευθυγραμμίζονται, μερικές φορές μπορείτε να κατασκευάσετε έναν χρήστη ώστε το block που περιέχει admin να ευθυγραμμιστεί, και μετά να αφαιρέσετε τα προηγούμενα blocks για να αποκτήσετε ένα έγκυρο token για admin.
Μετακίνηση blocks
Αν το backend ανεχτεί padding/extra spaces (admin vs admin ), μπορείτε:
- Να ευθυγραμμίσετε ένα block που περιέχει
admin - Να ανταλλάξετε/επαναχρησιμοποιήσετε εκείνο το ciphertext block σε άλλο token
Padding Oracle
Τι είναι
Σε CBC mode, αν ο server αποκαλύπτει (απευθείας ή έμμεσα) αν το αποκρυπτογραφημένο plaintext έχει έγκυρο PKCS#7 padding, συχνά μπορείτε:
- Να αποκρυπτογραφήσετε ciphertext χωρίς το κλειδί
- Να κρυπτογραφήσετε επιλεγμένο plaintext (forge ciphertext)
Το oracle μπορεί να είναι:
- Ένα συγκεκριμένο μήνυμα σφάλματος
- Ένας διαφορετικός HTTP status / μέγεθος απάντησης
- Μια διαφορά στον χρόνο απόκρισης
Πρακτική εκμετάλλευση
PadBuster είναι το κλασικό εργαλείο:
GitHub - strozfriedberg/PadBuster: Automated script for performing Padding Oracle attacks
Παράδειγμα:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 16 \
-encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Σημειώσεις:
- Το μέγεθος block είναι συχνά
16για AES. -encoding 0σημαίνει Base64.- Χρησιμοποίησε
-errorαν το oracle είναι μια συγκεκριμένη συμβολοσειρά.
Γιατί λειτουργεί
Η αποκρυπτογράφηση CBC υπολογίζει P[i] = D(C[i]) XOR C[i-1]. Τροποποιώντας bytes στο C[i-1] και παρατηρώντας αν το padding είναι έγκυρο, μπορείς να ανακτήσεις το P[i] byte-προς-byte.
Bit-flipping in CBC
Ακόμα και χωρίς padding oracle, το CBC είναι αλλοιώσιμο. Αν μπορείς να τροποποιήσεις blocks του ciphertext και η εφαρμογή χρησιμοποιεί το αποκρυπτογραφημένο plaintext ως δομημένα δεδομένα (π.χ. role=user), μπορείς να αντιστρέψεις συγκεκριμένα bits για να αλλάξεις επιλεγμένα bytes του plaintext σε συγκεκριμένη θέση στο επόμενο block.
Τυπικό μοτίβο CTF:
- Token =
IV || C1 || C2 || ... - Ελέγχεις bytes στο
C[i] - Στοχεύεις bytes του plaintext σε
P[i+1]επειδήP[i+1] = D(C[i+1]) XOR C[i]
Αυτό από μόνο του δεν παραβιάζει την εμπιστευτικότητα, αλλά είναι ένα κοινό primitive για αύξηση προνομίων όταν λείπει η ακεραιότητα.
CBC-MAC
CBC-MAC είναι ασφαλές μόνο υπό συγκεκριμένες συνθήκες (ιδιαίτερα μηνύματα σταθερού μήκους και σωστή domain separation).
Κλασικό μοτίβο παραποίησης μεταβλητού μήκους
CBC-MAC συνήθως υπολογίζεται ως:
- IV = 0
tag = last_block( CBC_encrypt(key, message, IV=0) )
Αν μπορείς να λάβεις tags για επιλεγμένα μηνύματα, συχνά μπορείς να κατασκευάσεις ένα tag για μια συνένωση (ή σχετική κατασκευή) χωρίς να γνωρίζεις το κλειδί, εκμεταλλευόμενος τον τρόπο που το CBC αλυσιδώνει τα blocks.
Συχνά εμφανίζεται σε CTF cookies/tokens που κάνουν MAC το username ή το role με CBC-MAC.
Ασφαλέστερες εναλλακτικές
- Χρησιμοποίησε HMAC (SHA-256/512)
- Χρησιμοποίησε CMAC (AES-CMAC) σωστά
- Συμπερίλαβε το μήκος του μηνύματος / domain separation
Stream ciphers: XOR and RC4
Το νοητικό μοντέλο
Οι περισσότερες καταστάσεις με stream ciphers μειώνονται σε:
ciphertext = plaintext XOR keystream
Έτσι:
- Αν γνωρίζεις το plaintext, ανακτάς το keystream.
- Αν το keystream επαναχρησιμοποιηθεί (ίδιο key+nonce),
C1 XOR C2 = P1 XOR P2.
Κρυπτογράφηση βασισμένη σε XOR
Αν γνωρίζεις οποιοδήποτε τμήμα plaintext στη θέση i, μπορείς να ανακτήσεις τα bytes του keystream και να αποκρυπτογραφήσεις άλλα ciphertexts στις ίδιες θέσεις.
Αυτόματοι λύτες:
RC4
RC4 είναι stream cipher· η κρυπτογράφηση/αποκρυπτογράφηση είναι η ίδια λειτουργία.
Αν μπορείς να πάρεις RC4 κρυπτογράφηση γνωστού plaintext με το ίδιο κλειδί, μπορείς να ανακτήσεις το keystream και να αποκρυπτογραφήσεις άλλα μηνύματα του ίδιου μήκους/offset.
Reference writeup (HTB Kryptos):
Hack The Box - Kryptos - 0xRick\xe2\x80\x99s Blog
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.


