Regular expression Denial of Service - ReDoS
Αρνητική Επίθεση Καθυστέρησης Κανονικών Εκφράσεων - ReDoS
Αρνητική Επίθεση Καθυστέρησης Κανονικών Εκφράσεων (ReDoS)
Μια Αρνητική Επίθεση Καθυστέρησης Κανονικών Εκφράσεων (ReDoS) συμβαίνει όταν κάποιος εκμεταλλεύεται τις αδυναμίες στον τρόπο λειτουργίας των κανονικών εκφράσεων (ένας τρόπος αναζήτησης και αντιστοίχισης προτύπων σε κείμενο). Μερικές φορές, όταν χρησιμοποιούνται κανονικές εκφράσεις, μπορεί να γίνουν πολύ αργές, ειδικά αν το κομμάτι κειμένου με το οποίο δουλεύουν γίνεται μεγαλύτερο. Αυτή η αργή απόκριση μπορεί να γίνει τόσο άσχημη που αυξάνεται πολύ γρήγορα με ακόμα και μικρές αυξήσεις στο μέγεθος του κειμένου. Οι επιτιθέμενοι μπορούν να χρησιμοποιήσουν αυτό το πρόβλημα για να καταστήσουν ένα πρόγραμμα που χρησιμοποιεί κανονικές εκφράσεις να μην λειτουργεί σωστά για μεγάλο χρονικό διάστημα.
Ο Προβληματικός Αλγόριθμος Κανονικών Εκφράσεων
Ελέγξτε τις λεπτομέρειες στο https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Κακόβουλες Κανονικές Εκφράσεις
Μια κακόβουλη κανονική έκφραση είναι αυτή που μπορεί να μείνει αναπόδραστη σε συγκεκριμένη είσοδο προκαλώντας DoS. Οι κακόβουλες κανονικές εκφράσεις συνήθως περιλαμβάνουν ομαδοποίηση με επανάληψη και επανάληψη ή εναλλαγή με επικάλυψη μέσα στην επαναλαμβανόμενη ομάδα. Ορισμένα παραδείγματα κακόβουλων προτύπων περιλαμβάνουν:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} για x > 10
Όλα αυτά είναι ευάλωτα στην είσοδο aaaaaaaaaaaaaaaaaaaaaaaa!
.
Πληροφορίες Εξαγωγής μέσω ReDoS
Σε ένα CTF (ή bug bounty) ίσως έχετε έλεγχο στην Κανονική Έκφραση με την οποία ταιριάζεται μια ευαίσθητη πληροφορία (η σημαία). Στη συνέχεια, εάν είναι χρήσιμο, μπορείτε να κάνετε τη σελίδα να παγώσει (timeout ή μεγαλύτερος χρόνος επεξεργασίας) εάν η Κανονική Έκφραση ταιριάξει και όχι αν δεν ταιριάξει. Με αυτόν τον τρόπο θα μπορείτε να εξαγάγετε τον χαρακτήρα του συμβολοσειρά χαρακτήρα προς χαρακτήρα:
Στο αυτό το άρθρο μπορείτε να βρείτε αυτόν τον κανόνα ReDoS:
^(?=<flag>)((.*)*)*salt$
Παράδειγμα:
^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
Στο αυτό το writeup μπορείτε να βρείτε αυτόν:
<flag>(((((((.*)*)*)*)*)*)*)!
Στο αυτό το writeup χρησιμοποίησε:
^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
Έλεγχος Εισόδου και Κανονικής Έκφρασης ReDoS
Τα παρακάτω είναι παραδείγματα ReDoS όπου έχετε έλεγχο τόσο στην είσοδο όσο και στην κανονική έκφραση:
Εργαλεία
Αναφορές
Last updated