hacktricks/crypto-and-stego/electronic-code-book-ecb.md

81 lines
8.7 KiB
Markdown
Raw Normal View History

{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2024-04-06 18:31:47 +00:00
<details>
2024-04-06 18:31:47 +00:00
<summary>Υποστηρίξτε το HackTricks</summary>
2024-04-06 18:31:47 +00:00
* Ελέγξτε τα [**σχέδια συνδρομής**](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.
2024-04-06 18:31:47 +00:00
</details>
{% endhint %}
2024-04-06 18:31:47 +00:00
# ECB
(ECB) Ηλεκτρονικό Βιβλίο Κωδικοποίησης - συμμετρικό σχήμα κρυπτογράφησης που **αντικαθιστά κάθε μπλοκ του καθαρού κειμένου** με το **μπλοκ του κρυπτοκειμένου**. Είναι το **απλούστερο** σχήμα κρυπτογράφησης. Η βασική ιδέα είναι να **διαιρέσετε** το καθαρό κείμενο σε **μπλοκ των N bits** (εξαρτάται από το μέγεθος του μπλοκ των δεδομένων εισόδου, αλγόριθμο κρυπτογράφησης) και στη συνέχεια να κρυπτογραφήσετε (αποκρυπτογραφήσετε) κάθε μπλοκ καθαρού κειμένου χρησιμοποιώντας το μόνο κλειδί.
2024-04-06 18:31:47 +00:00
![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png)
Η χρήση του ECB έχει πολλές επιπτώσεις στην ασφάλεια:
2024-04-06 18:31:47 +00:00
* **Μπορούν να αφαιρεθούν μπλοκ από το κρυπτογραφημένο μήνυμα**
* **Μπλοκ από το κρυπτογραφημένο μήνυμα μπορούν να μετακινηθούν**
2024-04-06 18:31:47 +00:00
# Ανίχνευση της ευπάθειας
Φανταστείτε ότι συνδέεστε σε μια εφαρμογή αρκετές φορές και πάντα λαμβάνετε το ίδιο cookie. Αυτό συμβαίνει επειδή το cookie της εφαρμογής είναι **`<username>|<password>`**.\
Στη συνέχεια, δημιουργείτε δύο νέους χρήστες, οι οποίοι και οι δύο έχουν το **ίδιο μεγάλο κωδικό πρόσβασης** και **σχεδόν** το **ίδιο** **όνομα χρήστη**.\
Ανακαλύπτετε ότι τα **μπλοκ των 8B** όπου η **πληροφορία και των δύο χρηστών** είναι ίδια είναι **ίδια**. Σκέφτεστε ότι αυτό μπορεί να συμβαίνει επειδή χρησιμοποιείται **ECB**.
2024-04-06 18:31:47 +00:00
Όπως στο ακόλουθο παράδειγμα. Παρατηρήστε πώς αυτά τα **2 αποκωδικοποιημένα cookies** έχουν αρκετές φορές το μπλοκ **`\x23U\xE45K\xCB\x21\xC8`**
2024-04-06 18:31:47 +00:00
```
\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 διαφορετικό χαρακτήρα** (ίσως το διαχωριστικό "|" ή κάποια απαραίτητη διαφορά στο όνομα χρήστη).
2024-04-06 18:31:47 +00:00
Τώρα, ο επιτιθέμενος χρειάζεται απλώς να ανακαλύψει αν η μορφή είναι `<όνομα χρήστη><διαχωριστικό><κωδικός>` ή `<κωδικός><διαχωριστικό><όνομα χρήστη>`. Για να το κάνει αυτό, μπορεί απλά να **δημιουργήσει αρκετά ονόματα χρηστών** με **παρόμοια και μεγάλα ονόματα χρηστών και κωδικούς μέχρι να βρει τη μορφή και το μήκος του διαχωριστικού:**
2024-04-06 18:31:47 +00:00
| Μήκος Ονόματος Χρήστη: | Μήκος Κωδικού: | Συνολικό Μήκος Ονόματος Χρήστη+Κωδικού: | Μήκος Cookie (μετά την αποκωδικοποίηση): |
2024-04-06 18:31:47 +00:00
| ---------------- | ---------------- | ------------------------- | --------------------------------- |
| 2 | 2 | 4 | 8 |
| 3 | 3 | 6 | 8 |
| 3 | 4 | 7 | 8 |
| 4 | 4 | 8 | 16 |
| 7 | 7 | 14 | 16 |
# Εκμετάλλευση της ευπάθειας
## Αφαίρεση ολόκληρων τμημάτων
Γνωρίζοντας τη μορφή του cookie (`<όνομα χρήστη>|<κωδικός>`), προκειμένου να παριστάνει το όνομα χρήστη `admin` δημιουργήστε ένα νέο χρήστη με το όνομα `aaaaaaaaadmin` και αποκτήστε το cookie και αποκωδικοποιήστε το:
2024-04-06 18:31:47 +00:00
```
\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
```
Μπορούμε να δούμε το πρότυπο `\x23U\xE45K\xCB\x21\xC8` που δημιουργήθηκε προηγουμένως με το όνομα χρήστη που περιείχε μόνο το `a`.\
Στη συνέχεια, μπορείτε να αφαιρέσετε τον πρώτο τετράγωνο 8B και θα λάβετε ένα έγκυρο cookie για το όνομα χρήστη `admin`:
2024-04-06 18:31:47 +00:00
```
\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
```
## Μετακίνηση των τμημάτων
2024-04-06 18:31:47 +00:00
Σε πολλές βάσεις δεδομένων είναι το ίδιο να αναζητάτε `WHERE username='admin';` ή `WHERE username='admin ';` _(Σημειώστε τα επιπλέον κενά)_
2024-04-06 18:31:47 +00:00
Έτσι, ένας άλλος τρόπος να υποκαταστήσετε τον χρήστη `admin` θα ήταν:
2024-04-06 18:31:47 +00:00
* Δημιουργήστε ένα όνομα χρήστη που: `len(<username>) + len(<delimiter) % len(block)`. Με μέγεθος block `8B` μπορείτε να δημιουργήσετε ένα όνομα χρήστη που ονομάζεται: `username `, με τον διαχωριστικό `|` το τμήμα `<username><delimiter>` θα δημιουργήσει 2 blocks των 8Bs.
* Στη συνέχεια, δημιουργήστε έναν κωδικό πρόσβασης που θα γεμίσει έναν ακριβή αριθμό blocks που περιέχουν το όνομα χρήστη που θέλουμε να υποκαταστήσουμε και κενά, όπως: `admin `
2024-04-06 18:31:47 +00:00
Το cookie αυτού του χρήστη θα αποτελείται από 3 blocks: τα πρώτα 2 είναι τα blocks του ονόματος χρήστη + διαχωριστικό και το τρίτο είναι του κωδικού πρόσβασης (που προσποιείται το όνομα χρήστη): `username |admin `
2024-04-06 18:31:47 +00:00
**Στη συνέχεια, απλά αντικαταστήστε το πρώτο block με το τελευταίο και θα υποκαθιστάτε τον χρήστη `admin`: `admin |username`**
2024-04-06 18:31:47 +00:00
## Αναφορές
* [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](http://cryptowiki.net/index.php?title=Electronic_Code_Book_\(ECB\))