Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=race-condition) γιανα δημιουργήσετε εύκολα και να**αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της παγκόσμιας κοινότητας.\
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</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)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
Για να αποκτήσετε μια βαθιά κατανόηση αυτής της τεχνικής, ελέγξτε την αρχική αναφορά στο [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
Ο κύριος εμπόδιο στο να εκμεταλλευτείτε ανταγωνιστικές καταστάσεις είναι να βεβαιωθείτε ότι πολλαπλά αιτήματα χειρίζονται ταυτόχρονα, με **πολύ μικρή διαφορά στους χρόνους επεξεργασίας τους - ιδανικά, λιγότερο από 1ms**.
* **HTTP/2**: Υποστηρίζει την αποστολή δύο αιτημάτων μέσω μιας μόνο σύνδεσης TCP, μειώνοντας τον αντίκτυπο της διακύμανσης του δικτύου. Ωστόσο, λόγω ποικιλίας στην πλευρά του διακομιστή, δύο αιτήματα ενδέχεται να μην είναι αρκετά για μια συνεπή εκμετάλλευση ανταγωνιστικής κατάστασης.
* **HTTP/1.1 'Συγχρονισμός Τελευταίου Byte'**: Επιτρέπει την προ-αποστολή των περισσότερων τμημάτων 20-30 αιτημάτων, κρατώντας ένα μικρό κομμάτι, το οποίο στη συνέχεια στέλνεται μαζί, επιτυγχάνοντας την ταυτόχρονη άφιξη στο διακομιστή.
Η επόμενη αποστολή των κρατούμενων πλαισίων θα πρέπει να οδηγήσει στην άφιξή τους σε ένα μόνο πακέτο, το οποίο μπορεί να επαληθευτεί μέσω του Wireshark. Αυτή η μέθοδος δεν ισχύει για στατικά αρχεία, τα οποία συνήθως δεν συμμετέχουν σε επιθέσεις RC.
Η κατανόηση της αρχιτεκτονικής του στόχου είναι κρίσιμη. Οι διακομιστές μπορεί να δρομολογούν αιτήματα διαφορετικά, επηρεάζοντας το χρονισμό. Η προεκτιμητική ζέστανση της σύνδεσης στην πλευρά του διακομιστή, μέσω ασήμαντων αιτημάτων, μπορεί να κανονικοποιήσει το χρονισμό των αιτημάτων.
Τα πλαίσια όπως ο χειριστής συνεδριών του PHP σειριοποιούν τα αιτήματα ανά συνεδρία, πιθανώς αποκρύπτοντας ευπαθείς σημεία. Η χρήση διαφορετικών διακριτικών συνεδρίας για κάθε αίτημα μπορεί να παρακάμψει αυτό το ζήτημα.
Αν η προεκτιμητική ζέστανση της σύνδεσης είναι αναποτελεσματική, η πρόκληση εσκεμμένως καθυστερήσεων ρυθμού ή περιορισμών πόρων στους διακομιστές ιστού μέσω μιας πλημμύρας ψεύτικων αιτημάτων μπορεί να διευκολύνει την επίθεση με ένα μόνο πακέτο, προκαλώντας μια καθυστέρηση στην πλευρά του διακομιστή που ευνοεί τις ανταγωνιστικές καταστάσεις.
* **Tubo Intruder - Επίθεση ενός πακέτου HTTP2 (1 σημείο άκρης)**: Μπορείτε να στείλετε το αίτημα στο **Turbo intruder** (`Επεκτάσεις` -> `Turbo Intruder` -> `Αποστολή στο Turbo Intruder`), μπορείτε να αλλάξετε στο αίτημα την τιμή που θέλετε να δοκιμάσετε με βία **`%s`** όπως στο `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` και στη συνέχεια να επιλέξετε το **`examples/race-single-packer-attack.py`** από την αναπτυσσόμενη λίστα:
* **Tubo Intruder - Επίθεση με ενιαίο πακέτο HTTP2 (Πολλαπλά endpoints)**: Σε περίπτωση που χρειάζεστε να στείλετε ένα αίτημα σε 1 endpoint και στη συνέχεια πολλαπλά σε άλλα endpoints γιανα ενεργοποιήσετε το RCE, μπορείτε να αλλάξετε το σενάριο `race-single-packet-attack.py` με κάτι παρόμοιο:
* Για το **connection warming**, θα μπορούσατε να**προσθέσετε** στην **αρχή** της **ομάδας** μερικά **αιτήματα** προς κάποιο μη στατικό μέρος του διακομιστή web.
* Για τη **καθυστέρηση** της διαδικασίας **μεταξύ** της επεξεργασίας **ενός αιτήματος και ενός άλλου** σε 2 υποκαταστάσεις, θα μπορούσατε να**προσθέσετε επιπλέον αιτήματα μεταξύ** των δύο αιτημάτων.
* Για ένα **πολυ-τελικό σημείο** RC θα μπορούσατε να ξεκινήσετε την αποστολή του **αιτήματος** που **πηγαίνει στην κρυφή κατάσταση** και στη συνέχεια **50 αιτήματα** αμέσως μετά που **εκμεταλλεύονται την κρυφή κατάσταση**.
* **Αυτοματοποιημένο σενάριο python**: Ο στόχος αυτού του σεναρίου είναι να αλλάξει το email ενός χρήστη ενώ συνεχίζει να το επαληθεύει μέχρι να φτάσει το τελευταίο email το διακριτικό επαλήθευσης του νέου email (αυτό συμβαίνει επειδή στον κώδικα είδε ένα RC όπου ήταν δυνατή η τροποποίηση ενός email αλλά η επαλήθευση στάλθηκε στο παλιό επειδή η μεταβλητή που υποδεικνύει το email ήταν ήδη γεμάτη με το πρώτο).\
Όταν βρεθεί η λέξη "objetivo" στα ληφθέντα emails γνωρίζουμε ότι λάβαμε το διακριτικό επαλήθευσης του αλλαγμένου email και τερματίζουμε την επίθεση.
Πριν από την προηγούμενη έρευνα, αυτά ήταν μερικά φορτία που χρησιμοποιήθηκαν που απλώς προσπάθησαν να στείλουν τα πακέτα τόσο γρήγορα όσο γίνεται γιανα προκαλέσουν έναν RC.
* **Intruder**: Στείλτε το **αίτημα** στο **Intruder**, ορίστε τον **αριθμό των νημάτων** σε **30** μέσα στο μενού **Επιλογές** και, επιλέξτε ως φορτίο **Κενά φορτία** και δημιουργήστε **30.**
Αυτός είναι ο πιο βασικός τύπος race condition όπου **ευπαθείες** που **εμφανίζονται** σε σημεία που **περιορίζουν τον αριθμό των φορών που μπορείτε να εκτελέσετε μια ενέργεια**. Όπως η χρήση του ίδιου κωδικού έκπτωσης σε ένα κατάστημα στο διαδίκτυο πολλές φορές. Ένα πολύ εύκολο παράδειγμα μπορεί να βρεθεί σε [**αυτήν την αναφορά**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) ή σε [**αυτό το σφάλμα**](https://hackerone.com/reports/759247)**.**
Η εκμετάλλευση πολύπλοκων race conditions συχνά περιλαμβάνει την εκμετάλλευση σύντομων ευκαιριών για αλληλεπίδραση με κρυφές ή **μη προσδιορισμένες υποκαταστάσεις μηχανών**. Εδώ είναι πώς να προσεγγίσετε αυτό:
* Ξεκινήστε εντοπίζοντας σημεία που τροποποιούν ή αλληλεπιδρούν με κρίσιμα δεδομένα, όπως προφίλ χρηστών ή διαδικασίες επαναφοράς κωδικού πρόσβασης. Εστιάστε σε:
* **Ενέργεια**: Αναζητήστε λειτουργίες που τροποποιούν υπάρχοντα δεδομένα, τα οποία είναι πιο πιθανό να δημιουργήσουν εκμεταλλεύσιμες συνθήκες σε σύγκριση με αυτές που προσθέτουν νέα δεδομένα.
* **Κλειδώματα**: Οι επιτυχημένες επιθέσεις συνήθως περιλαμβάνουν λειτουργίες που βασίζονται στο ίδιο αναγνωριστικό, π.χ., όνομα χρήστη ή διακριτικό επαναφοράς.
* Δοκιμάστε τα εντοπισμένα σημεία με επιθέσεις race condition, παρατηρώντας για οποιεσδήποτε αποκλίσεις από τα αναμενόμενα αποτελέσματα. Απροσδόκητες απαντήσεις ή αλλαγές στη συμπεριφορά της εφαρμογής μπορούν να υποδείξουν μια ευπάθεια.
* Περιορίστε την επίθεση στον ελάχιστο αριθμό αιτημάτων που απαιτούνται γιανα εκμεταλλευτείτε την ευπάθεια, συνήθως μόνο δύο. Αυτό το βήμα μπορεί να απαιτήσει πολλαπλές προσπάθειες ή αυτοματοποίηση λόγω του ακριβούς χρονισμού που απαιτείται.
Η ακρίβεια στο χρονισμό των αιτημάτων μπορεί να αποκαλύψει ευπάθειες, ειδικά όταν χρησιμοποιούνται προβλέψιμες μεθόδους όπως οι σημάνσεις χρόνου για τα ασφαλείας διακριτικά. Για παράδειγμα, η δημιουργία διακριτικών επαναφοράς κωδικού βάσει σημάνσεων χρόνου θα μπορούσε να επιτρέψει ταυτόσημα διακριτικά για ταυτόχρονα αιτήματα.
* Χρησιμοποιήστε ακριβή χρονισμό, όπως μια επίθεση με ένα πακέτο, γιανα κάνετε ταυτόχρονα αιτήματα επαναφοράς κωδικού. Ταυτόσημα διακριτικά υποδεικνύουν μια ευπάθεια.
Ελέγξτε αυτό το [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) γιανα δείτε πώς να**πληρώσετε** σε ένα κατάστημα και να**προσθέσετε ένα επιπλέον** αντικείμενο που **δεν θα χρειαστεί να πληρώσετε γι' αυτό**.
Η ιδέα είναι να**επιβεβαιώσετε μια διεύθυνση email και να την αλλάξετε σε μια διαφορετική ταυτόχρονα**γιανα διαπιστώσετε αν η πλατφόρμα επιβεβαιώνει τη νέα που άλλαξε.
Σύμφωνα με [**αυτή την έρευνα**](https://portswigger.net/research/smashing-the-state-machine) το Gitlab ήταν ευάλωτο σε μια επίθεση με αυτόν τον τρόπο επειδή θα μπορούσε **να στείλει το διακριτικό επαλήθευσης email μιας διεύθυνσης email στην άλλη διεύθυνση email**.
Αν**χρησιμοποιούνται 2 διαφορετικές εγγραφές**γιανα**προσθέσουν****πληροφορίες** μέσα σε μια **βάση δεδομένων**, υπάρχει ένα μικρό χρονικό διάστημα όπου **μόνο η πρώτη δεδομένη έχει γραφτεί** μέσα στη βάση δεδομένων. Για παράδειγμα, κατά τη δημιουργία ενός χρήστη το **όνομα χρήστη** και ο**κωδικός πρόσβασης** μπορεί να**γραφτούν** και **στη συνέχεια το διακριτικό**γιανα επιβεβαιώσει τον νεοδημιουργημένο λογαριασμό γράφεται. Αυτό σημαίνει ότι για ένα μικρό χρονικό διάστημα το **διακριτικό για την επιβεβαίωση ενός λογαριασμού είναι κενό**.
Επομένως, **η εγγραφή ενός λογαριασμού και η αποστολή αρκετών αιτημάτων με ένα κενό διακριτικό** (`token=` ή `token[]=` ή οποιαδήποτε άλλη παραλλαγή) γιανα επιβεβαιώσετε αμέσως τον λογαριασμό θα μπορούσε να επιτρέψει
Υπάρχουν αρκετοί [**παροχείς OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Αυτές οι υπηρεσίες θα σας επιτρέψουν να δημιουργήσετε μια εφαρμογή και να πιστοποιήσετε χρήστες που έχει εγγράψει ο πάροχος. Για να το κάνετε αυτό, ο**πελάτης** θα χρειαστεί να**επιτρέψει στην εφαρμογή σας**να έχει πρόσβαση σε μερικά από τα δεδομένα τους μέσα στον **πάροχο OAuth**.\
Έτσι, μέχρι εδώ απλώς μια κοινή σύνδεση με google/linkedin/github... όπου σας ζητείται να επιτρέψετε σε μια σελίδα να αποκτήσει πρόσβαση στα δεδομένα σας: "_Η εφαρμογή \<InsertCoolName> θέλει να έχει πρόσβαση στα δεδομένα σας, θέλετε να το επιτρέψετε;_"
Το**πρόβλημα** εμφανίζεται όταν το **αποδέχεστε** και αυτόματα στέλνει ένα **`authorization_code`** στην κακόβουλη εφαρμογή. Στη συνέχεια, αυτή η **εφαρμογή εκμεταλλεύεται μια Ανταγωνιστική Κατάσταση στον πάροχο υπηρεσιών OAuth γιανα δημιουργήσει περισσότερα από ένα AT/RT** (_Authentication Token/Refresh Token_) από το **`authorization_code`** για το λογαριασμό σας. Βασικά, θα εκμεταλλευτεί το γεγονός ότι έχετε αποδεχτεί την εφαρμογή γιανα έχει πρόσβαση στα δεδομένα σας γιανα**δημιουργήσει πολλούς λογαριασμούς**. Στη συνέχεια, αν**σταματήσετε να επιτρέπετε στην εφαρμογή να έχει πρόσβαση στα δεδομένα σας, ένα ζεύγος AT/RT θα διαγραφεί, αλλά τα υπόλοιπα θα παραμείνουν έγκυρα**.
Αφού έχετε **λάβει ένα έγκυρο RT** μπορείτε να προσπαθήσετε να το **εκμεταλλευτείτε γιανα δημιουργήσετε πολλά AT/RT** και **ακόμα κι ανο χρήστης ακυρώσει τις άδειες**για την κακόβουλη εφαρμογή να έχει πρόσβαση στα δεδομένα του, **πολλά RT θα παραμείνουν έγκυρα**.
Στο [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) μπορείτε να βρείτε ένα PoC σε Java γιανα στείλετε μηνύματα websocket **παράλληλα**γιανα εκμεταλλευτείτε **Ανταγωνιστικές Καταστάσεις επίσης στα Web Sockets**.
<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**](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)**.**
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=race-condition) γιανα δημιουργήσετε και να**αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία κοινότητας στον κόσμο.\