<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)</strong></a><strong>!</strong></summary>
*Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στα 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)**.**
Αν σας ενδιαφέρει η **καριέρα στο χάκινγκ** και να χακεύετε το αχακέυτο - **σας προσλαμβάνουμε!** (_απαιτείται άριστη γνώση γραπτού και προφορικού Πολωνικού_).
**Μέρος αυτής της ανάρτησης βασίζεται στην εξαιρετική ανάρτηση:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
Στη συνέχεια, μπορείτε να αναζητήσετε το αίτημα στον proxy σας ή να ανακτήσετε το χρησιμοποιούμενο JWT για αυτό το αίτημα χρησιμοποιώντας το εργαλείο jwt_tool:
Μπορείτε απλά να αλλοιώσετε τα δεδομένα αφήνοντας την υπογραφή ως έχει και να ελέγξετε ανο διακομιστής ελέγχει την υπογραφή. Δοκιμάστε να αλλάξετε το όνομα χρήστη σε "admin" για παράδειγμα.
*Τα τοκέν που εμφανίζονται πρώτη φορά από την πλευρά του πελάτη υποδηλώνουν ότι η κλειδί μπορεί να είναι εκτεθειμένο στον κώδικα της πλευράς του πελάτη, απαιτώντας περαιτέρω έρευνα.
*Τα τοκέν που προέρχονται από την πλευρά του διακομιστή υποδηλώνουν ένα ασφαλές διαδικασία.
Ελέγξτε αν το τοκέν διαρκεί περισσότερο από 24 ώρες... ίσως να μην λήγει ποτέ. Αν υπάρχει πεδίο "exp", ελέγξτε ανο διακομιστής χειρίζεται σωστά αυτό το πεδίο.
Χρησιμοποιήστε την επέκταση Burp με τίτλο "JSON Web Token" γιανα δοκιμάσετε αυτήν την ευπάθεια και να αλλάξετε διαφορετικές τιμές μέσα στο JWT (στείλτε το αίτημα στο Repeater και στην καρτέλα "JSON Web Token" μπορείτε να τροποποιήσετε τις τιμές του τοκέν. Μπορείτε επίσης να επιλέξετε να τοποθετήσετε την τιμή του πεδίου "Alg" σε "None").
Αν αλλάξετε τον αλγόριθμο από RS256 σε HS256, ο κώδικας πίσω από τον κώδικα χρησιμοποιεί το δημόσιο κλειδί ως μυστικό κλειδί και στη συνέχεια χρησιμοποιεί τον αλγόριθμο HS256 γιανα επαληθεύσει την υπογραφή.
Στη συνέχεια, χρησιμοποιώντας το δημόσιο κλειδί και αλλάζοντας το RS256 σε HS256 θα μπορούσαμε να δημιουργήσουμε μια έγκυρη υπογραφή. Μπορείτε να ανακτήσετε το πιστοποιητικό του διακομιστή του ιστότοπου εκτελώντας αυτό:
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.
Ένας επιτιθέμενος ενσωματώνει ένα νέο κλειδί στην κεφαλίδα του τοκεν και ο διακομιστής χρησιμοποιεί αυτό το νέο κλειδί γιανα επαληθεύσει την υπογραφή (CVE-2018-0114).
Οδηγίες λεπτομερώς περιγράφουν έναν τρόπο γιανα αξιολογήσετε την ασφάλεια των JWT τοκεν, ειδικά αυτών που χρησιμοποιούν έναν ισχυρισμό κεφαλίδας "jku". Αυτός ο ισχυρισμός θα πρέπει να συνδέεται με ένα αρχείο JWKS (JSON Web Key Set) που περιέχει το δημόσιο κλειδί που απαιτείται για την επαλήθευση του τοκεν.
* Τροποποιήστε την τιμή "jku" του τοκεν γιανα κατευθύνετε προς ένα ελεγχόμενο web service, επιτρέποντας την παρατήρηση της κίνησης.
* **Παρακολούθηση για HTTP Αλληλεπίδραση**:
*Η παρακολούθηση των HTTP αιτημάτων προς το συγκεκριμένο URL υποδηλώνει τις προσπάθειες του διακομιστή να ανακτήσει κλειδιά από το παρεχόμενο σας σύνδεσμο.
* Κατά τη χρήση του `jwt_tool`για αυτήν τη διαδικασία, είναι ζωτικής σημασίας να ενημερώσετε το αρχείο `jwtconf.ini` με την τοποθεσία του προσωπικού σας JWKS γιανα διευκολύνετε τον έλεγχο.
Ένας προαιρετικός ισχυρισμός κεφαλίδας γνωστός ως `kid` χρησιμοποιείται για την αναγνώριση ενός συγκεκριμένου κλειδιού, το οποίο γίνεται ιδιαίτερα σημαντικό σε περιβάλλοντα όπου υπάρχουν πολλά κλειδιά για την επαλήθευση της υπογραφής του τοκεν. Αυτός ο ισχυρισμός βοηθά στην επιλογή του κατάλληλου κλειδιού για την επαλήθευση της υπογραφής ενός τοκεν.
Όταν ο ισχυρισμός `kid` είναι παρών στην κεφαλίδα, συνιστάται να αναζητηθεί στον κατάλογο του web το αντίστοιχο αρχείο ή τις παραλλαγές του. Για παράδειγμα, εάν ορίζεται `"kid":"key/12345"`, τα αρχεία _/key/12345_ και _/key/12345.pem_ θα πρέπει να αναζητηθούν στη ρίζα του web.
Ο ισχυρισμός `kid` ενδέχεται επίσης να εκμεταλλευτείται για την πλοήγηση μέσω του συστήματος αρχείων, επιτρέποντας πιθανώς την επιλογή ενός αυθαίρετου αρχείου. Είναι εφικτό να δοκιμάσετε τη συνδεσιμότητα ή να εκτελέσετε επιθέσεις Server-Side Request Forgery (SSRF) αλλάζοντας την τιμή του `kid`γιανα στοχεύσετε συγκεκριμένα αρχεία ή υπηρεσίες. Η παραβίαση του JWT για την αλλαγή της τιμής του `kid` διατηρώντας την αρχική υπογραφή μπορεί να επιτευχθεί χρησιμοποιώντας τη σημαία `-T` στο jwt\_tool, όπως παρουσιάζεται παρακάτω:
Στοχεύοντας σε αρχεία με προβλέψιμο περιεχόμενο, είναι δυνατόν να πλασιάσετε ένα έγκυρο JWT. Για παράδειγμα, το αρχείο `/proc/sys/kernel/randomize_va_space` σε συστήματα Linux, γνωστό ότι περιέχει την τιμή **2**, μπορεί να χρησιμοποιηθεί στην παράμετρο `kid` με **2** ως το συμμετρικό κλειδί για τη δημιουργία JWT.
Εάν το περιεχόμενο του διεκδικούμενου `kid` χρησιμοποιείται για τη λήψη ενός κωδικού πρόσβασης από μια βάση δεδομένων, μια ενσωμάτωση SQL μπορεί να διευκολυνθεί με την τροποποίηση του φορτίου του `kid`. Ένα παράδειγμα φορτίου που χρησιμοποιεί ενσωμάτωση SQL γιανα τροποποιήσει τη διαδικασία υπογραφής JWT περιλαμβάνει:
Σε ένα σενάριο όπου η παράμετρος `kid` καθορίζει ένα διαδρομή αρχείου που χρησιμοποιείται σε ένα πλαίσιο εκτέλεσης εντολών, μπορεί να οδηγήσει σε ευπάθειες Απομακρυσμένης Εκτέλεσης Κώδικα (RCE). Με την ενσωμάτωση εντολών στην παράμετρο `kid`, είναι δυνατόν να αποκαλυφθούν ιδιωτικά κλειδιά. Ένα παράδειγμα φορτίου για την επίτευξη RCE και αποκάλυψη κλειδιών είναι:
Εάν το τοκέν χρησιμοποιεί μια δήλωση κεφαλίδας “**jku**” τότε **ελέγξτε την παρεχόμενη διεύθυνση URL**. Αυτό θα πρέπει να δείχνει σε μια διεύθυνση URL που περιέχει το αρχείο JWKS που κρατά το Δημόσιο Κλειδί για τον έλεγχο του τοκέν. Αλλάξτε το τοκέν γιανα δείχνει η τιμή jku σε έναν ιστότοπο υπηρεσίας ιστού που μπορείτε να παρακολουθείτε την κίνηση.
Έπειτα, μπορείτε να χρησιμοποιήσετε για παράδειγμα το [**jwt.io**](https://jwt.io) γιανα δημιουργήσετε το νέο JWT με τα **δημιουργημένα δημόσια και ιδιωτικά κλειδιά και να δείχνετε την παράμετρο jku στο πιστοποιητικό που δημιουργήθηκε.** Για να δημιουργήσετε ένα έγκυρο πιστοποιητικό jku, μπορείτε να κατεβάσετε το αρχικό και να αλλάξετε τις απαραίτητες παραμέτρους.
X.509 URL. Ένα URI που δείχνει σε ένα σύνολο δημόσιων πιστοποιητικών X.509 (ένα πρότυπο μορφοποίησης πιστοποιητικών) που κωδικοποιούνται σε μορφή PEM. Το πρώτο πιστοποιητικό στο σύνολο πρέπει να είναι αυτό που χρησιμοποιήθηκε γιανα υπογράψει αυτό το JWT. Τα επόμενα πιστοποιητικά υπογράφουν το προηγούμενο, ολοκληρώνοντας έτσι την αλυσίδα πιστοποιητικών. Το X.509 ορίζεται στο RFC 52807. Απαιτείται μεταφορά με ασφάλεια για τη μεταφορά των πιστοποιητικών.
Προσπαθήστε να**αλλάξετε αυτήν την κεφαλίδα σε ένα URL υπό τον έλεγχό σας** και ελέγξτε εάν λαμβάνεται οποιοδήποτε αίτημα. Σε αυτήν την περίπτωση **θα μπορούσατε να παρεμβάλετε το JWT**.
Για να πλασάρετε ένα νέο τοκεν χρησιμοποιώντας ένα πιστοποιητικό που ελέγχετε εσείς, πρέπει να δημιουργήσετε το πιστοποιητικό και να εξάγετε τα δημόσια και ιδιωτικά κλειδιά:
Τότε μπορείτε να χρησιμοποιήσετε για παράδειγμα το [**jwt.io**](https://jwt.io) γιανα δημιουργήσετε το νέο JWT με τα **δημιουργημένα δημόσια και ιδιωτικά κλειδιά και να δείχνετε την παράμετρο x5u στο πιστοποιητικό .crt που δημιουργήθηκε.**
Ανο επιτιθέμενος **δημιουργήσει ένα αυτο-υπογεγραμμένο πιστοποιητικό** και δημιουργήσει ένα πλαστό τοκέν χρησιμοποιώντας το αντίστοιχο ιδιωτικό κλειδί και αντικαταστήσει την τιμή της παραμέτρου "x5c" με το νεοδημιουργημένο πιστοποιητικό και τροποποιήσει τις άλλες παραμέτρους, δηλαδή n, e και x5t τότε ουσιαστικά το πλαστό τοκέν θα γίνει αποδεκτό από τον διακομιστή.
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');
Είναι δυνατόν να δημιουργηθεί ένα νέο ιδιωτικό/δημόσιο κλειδί, να ενσωματωθεί το νέο δημόσιο κλειδί μέσα στο τοκέν και να χρησιμοποιηθεί για τη δημιουργία ενός νέου υπογραφή:
Η αξία JTI (JWT ID) παρέχει ένα μοναδικό αναγνωριστικό για ένα JWT Token. Μπορεί να χρησιμοποιηθεί γιανα αποτρέψει το token από επανάληψη.\
Ωστόσο, φανταστείτε μια κατάσταση όπου το μέγιστο μήκος του ID είναι 4 (0001-9999). Το αίτημα 0001 και 10001 θα χρησιμοποιήσουν το ίδιο ID. Έτσι, αν το backend αυξάνει το ID σε κάθε αίτημα, μπορείτε να εκμεταλλευτείτε αυτό για**επανάληψη ενός αιτήματος** (χρειάζεται να στείλετε 10000 αιτήματα μεταξύ κάθε επιτυχούς επανάληψης).
Έχει παρατηρηθεί ότι μερικές web εφαρμογές βασίζονται σε μια αξιόπιστη υπηρεσία JWT για τη δημιουργία και διαχείριση των tokens τους. Έχουν καταγραφεί περιστατικά όπου ένα token, που δημιουργήθηκε για έναν πελάτη από την υπηρεσία JWT, έγινε δεκτό από έναν άλλο πελάτη της ίδιας υπηρεσίας JWT. Εάν παρατηρηθεί η έκδοση ή ανανέωση ενός JWT μέσω μιας υπηρεσίας τρίτου, πρέπει να εξεταστεί η πιθανότητα εγγραφής σε έναν λογαριασμό σε έναν άλλο πελάτη της υπηρεσίας χρησιμοποιώντας το ίδιο όνομα χρήστη/email. Στη συνέχεια, πρέπει να γίνει μια προσπάθεια επανάληψης του ληφθέντος token σε ένα αίτημα προς τον στόχο γιανα δούμε αν γίνεται δεκτό.
*Η αποδοχή του token σας μπορεί να υποδεικνύει ένα κρίσιμο ζήτημα, ενδεχομένως επιτρέποντας την πλαστογράφηση του λογαριασμού οποιουδήποτε χρήστη. Ωστόσο, πρέπει να σημειωθεί ότι ενδέχεται να απαιτηθεί άδεια για ευρύτερη δοκιμή εάν εγγραφείτε σε μια εφαρμογή τρίτου, καθώς αυτό μπορεί να εισέλθει σε μια νομική γκρίζα ζώνη.
Η λήξη του token ελέγχεται χρησιμοποιώντας την αξία "exp" Payload claim. Δεδομένου ότι τα JWT συχνά χρησιμοποιούνται χωρίς πληροφορίες συνεδρίας, απαιτείται προσεκτική χειρισμός. Σε πολλές περιπτώσεις, η καταγραφή και επανάληψη του JWT ενός άλλου χρήστη θα μπορούσε να επιτρέψει την υποκατάσταση αυτού του χρήστη. Το RFC του JWT συνιστά τη μείωση των επιθέσεων επανάληψης JWT χρησιμοποιώντας την αξία "exp" γιανα ορίσετε μια χρονική λήξη για το token. Επιπλέον, η υλοποίηση σχετικών ελέγχων από την εφαρμογή γιανα διασφαλίσει την επεξεργασία αυτής της τιμής και την απόρριψη των ληγμένων tokens είναι κρίσιμη. Εάν το token περιλαμβάνει μια αξία "exp" και οι χρονικοί περιορισμοί επιτρέπουν, συνιστάται να αποθηκεύσετε το token και να το επαναλάβετε μετά τη λήξη του χρόνου. Το περιεχόμενο του token, συμπεριλαμβανομένης της ανάλυσης της χρονικής σήμανσης και του ελέγχου λήξης (χρονική σήμανση σε UTC), μπορεί να διαβαστεί χρησιμοποιώντας τη σημαία -R του εργαλείου jwt\_tool.
* Ένας κίνδυνος ασφαλείας μπορεί να υπάρχει εάν η εφαρμογή εξακολουθεί να επικυρώνει το token, καθώς αυτό μπορεί να σημαίνει ότι το token δεν μπορεί ποτέ να λήξει.
Αν σας ενδιαφέρει η **επαγγελματική χρονιά** και το χάκινγκ του αδύνατου - **προσλαμβάνουμε!** (_απαιτείται άριστη γραπτή και προφορική γνώση της πολωνικής γλώσσας_).
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
*Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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)**.**