Regular expression Denial of Service - ReDoS
Regular expression Denial of Service - ReDoS
Regular Expression Denial of Service (ReDoS)
एक Regular Expression Denial of Service (ReDoS) तब होता है जब कोई नियमित अभिव्यक्तियों (पाठ में पैटर्न खोजने और मेल करने का एक तरीका) में कमजोरियों का लाभ उठाता है। कभी-कभी, जब नियमित अभिव्यक्तियों का उपयोग किया जाता है, तो वे बहुत धीमी हो सकती हैं, विशेष रूप से यदि वे जिस पाठ के साथ काम कर रही हैं वह बड़ा हो जाता है। यह धीमापन इतना बुरा हो सकता है कि यह पाठ के आकार में छोटे-छोटे बढ़ोतरी के साथ तेजी से बढ़ता है। हमलावर इस समस्या का उपयोग करके एक ऐसा प्रोग्राम बना सकते हैं जो नियमित अभिव्यक्तियों का उपयोग करता है और लंबे समय तक सही तरीके से काम करना बंद कर देता है।
The Problematic Regex Naïve Algorithm
Check the details in https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Evil Regexes
एक बुरी नियमित अभिव्यक्ति पैटर्न वह है जो निर्मित इनपुट पर अटक सकता है जिससे DoS होता है। बुरी regex पैटर्न आमतौर पर समूह के साथ पुनरावृत्ति और पुनरावृत्ति या वैकल्पिकता के साथ ओवरलैपिंग के साथ होती हैं। बुरी पैटर्न के कुछ उदाहरण हैं:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} for x > 10
ये सभी इनपुट aaaaaaaaaaaaaaaaaaaaaaaa!
के प्रति संवेदनशील हैं।
ReDoS Payloads
String Exfiltration via ReDoS
एक CTF (या बग बाउंटी) में, शायद आप Regex को नियंत्रित करते हैं जिससे संवेदनशील जानकारी (ध्वज) मेल खाती है। फिर, यदि एक Regex मेल खाता है और यदि यह मेल नहीं खाता है तो नहीं तो पृष्ठ को फ्रीज (टाइमआउट या लंबे प्रोसेसिंग समय) करना उपयोगी हो सकता है। इस तरह आप एक-एक करके स्ट्रिंग निकाल सकते हैं:
In this post you can find this ReDoS rule:
^(?=<flag>)((.*)*)*salt$
Example:
^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
In this writeup you can find this one:
<flag>(((((((.*)*)*)*)*)*)*)!
In this writeup he used:
^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
ReDoS Controlling Input and Regex
निम्नलिखित ReDoS उदाहरण हैं जहाँ आप इनपुट और regex दोनों को नियंत्रित करते हैं:
Tools
References
Last updated