{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Μάθετε & εξασκηθείτε στο GCP Hacking: [**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Υποστηρίξτε το HackTricks
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ κάνοντας υποβολή PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
{% endhint %}
# ECB
(ECB) Ηλεκτρονικό Βιβλίο Κωδικοποίησης - συμμετρικό σχήμα κρυπτογράφησης που **αντικαθιστά κάθε μπλοκ του καθαρού κειμένου** με το **μπλοκ του κρυπτοκειμένου**. Είναι το **απλούστερο** σχήμα κρυπτογράφησης. Η βασική ιδέα είναι να **διαιρέσετε** το καθαρό κείμενο σε **μπλοκ των N bits** (εξαρτάται από το μέγεθος του μπλοκ των δεδομένων εισόδου, αλγόριθμο κρυπτογράφησης) και στη συνέχεια να κρυπτογραφήσετε (αποκρυπτογραφήσετε) κάθε μπλοκ καθαρού κειμένου χρησιμοποιώντας το μόνο κλειδί.
![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png)
Η χρήση του ECB έχει πολλές επιπτώσεις στην ασφάλεια:
* **Μπορούν να αφαιρεθούν μπλοκ από το κρυπτογραφημένο μήνυμα**
* **Μπλοκ από το κρυπτογραφημένο μήνυμα μπορούν να μετακινηθούν**
# Εντοπισμός της ευπάθειας
Φανταστείτε ότι συνδέεστε σε μια εφαρμογή αρκετές φορές και πάντα λαμβάνετε το ίδιο cookie. Αυτό συμβαίνει επειδή το cookie της εφαρμογής είναι **`|`**.\
Στη συνέχεια, δημιουργείτε δύο νέους χρήστες, οι οποίοι και οι δύο έχουν το **ίδιο μεγάλο password** και **σχεδόν** το **ίδιο** **username**.\
Ανακαλύπτετε ότι τα **μπλοκ των 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 περιείχαν αρκετές φορές το γράμμα "α"** (για παράδειγμα). Τα **τμήματα** που είναι **διαφορετικά** είναι τμήματα που περιείχαν **τουλάχιστον 1 διαφορετικό χαρακτήρα** (ίσως το διαχωριστικό "|" ή κάποια απαραίτητη διαφορά στο όνομα χρήστη).
Τώρα, ο επιτιθέμενος χρειάζεται απλώς να ανακαλύψει αν η μορφή είναι `<όνομα χρήστη><διαχωριστικό><κωδικός>` ή `<κωδικός><διαχωριστικό><όνομα χρήστη>`. Για να το κάνει αυτό, μπορεί απλά να **δημιουργήσει αρκετά ονόματα χρηστών** με **παρόμοια και μεγάλα ονόματα χρηστών και κωδικούς μέχρι να βρει τη μορφή και το μήκος του διαχωριστικού:**
| Μήκος Ονόματος Χρήστη: | Μήκος Κωδικού: | Συνολικό Μήκος Ονόματος Χρήστη+Κωδικού: | Μήκος Cookie (μετά την αποκωδικοποίηση): |
| ---------------- | ---------------- | ------------------------- | --------------------------------- |
| 2 | 2 | 4 | 8 |
| 3 | 3 | 6 | 8 |
| 3 | 4 | 7 | 8 |
| 4 | 4 | 8 | 16 |
| 7 | 7 | 14 | 16 |
# Εκμετάλλευση της ευπάθειας
## Αφαίρεση ολόκληρων τμημάτων
Γνωρίζοντας τη μορφή του cookie (`<όνομα χρήστη>|<κωδικός>`), προκειμένου να παριστάνει το όνομα χρήστη `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() + len(` θα δημιουργήσει 2 blocks των 8Bs.
* Στη συνέχεια, δημιουργήστε έναν κωδικό πρόσβασης που θα γεμίσει έναν ακριβή αριθμό blocks που περιέχουν το όνομα χρήστη που θέλουμε να υποκριθούμε και κενά, όπως: `admin `
Το cookie αυτού του χρήστη θα αποτελείται από 3 blocks: τα πρώτα 2 είναι τα blocks του ονόματος χρήστη + διαχωριστικό και το τρίτο είναι του κωδικού πρόσβασης (που προσποιείται το όνομα χρήστη): `username |admin `
**Στη συνέχεια, απλά αντικαταστήστε το πρώτο block με το τελευταίο και θα υποκριθείτε τον χρήστη `admin`: `admin |username`**
## Αναφορές
* [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](http://cryptowiki.net/index.php?title=Electronic_Code_Book_\(ECB\))