
ब्लैक-बॉक्स रेगेक्स फ़ज़िंग टूल जो इनपुट वैधीकरण को बायपास करने के लिए पेलोड उत्पन्न करता है, सामान्यीकरण की खोज करता है, और वेब अनुप्रयोगों में WAF को चकमा देता है।
REcollapse वेब अनुप्रयोगों में मान्यताओं को बायपास करने और सामान्यीकरण खोजने के लिए ब्लैक-बॉक्स regex फ़ज़िंग हेतु एक सहायक उपकरण है।
यह WAF और कमजोर कमजोरियों के शमन को बायपास करने में भी सहायक हो सकता है। अधिक जानकारी के लिए, REcollapse ब्लॉग पोस्ट देखें।
इस उपकरण का लक्ष्य परीक्षण के लिए पेलोड उत्पन्न करना है। वास्तविक फ़ज़िंग अन्य उपकरणों जैसे Burp (intruder), Caido (automate), ffuf, या समान के साथ की जानी चाहिए।
आवश्यकताएँ: Python 3
pip3 install recollapse या python3 setup.py install या pip3 install .
Docker
docker build -t recollapse . या docker pull 0xacb/recollapse
$ recollapse -h
usage: recollapse [-h] [-m MODES] [-e {1,2,3,4}] [-r RANGE] [-s SIZE] [-f FILE] [-an] [-mn MAXNORM] [-mt MAXTRUNC] [-nt] [-tt] [-ct]
[--html] [--version]
[input]
REcollapse is a helper tool for black-box regex fuzzing to bypass validations and discover normalizations in web applications
positional arguments:
input original input
options:
-h, --help show this help message and exit
-m, --modes, -p, --positions MODES
variation modes. Example: 1,2,3,4,5,6,7 (default). 1: starting, 2: separator, 3: normalization, 4:
termination, 5: regex metacharacters, 6: case folding/upper/lower, 7: byte truncation
-e, --encoding {1,2,3,4}
1: URL-encoded format (default), 2: Unicode format, 3: Raw format, 4: Double URL-encoded format
-r, --range RANGE range of bytes for fuzzing. Example: 0,0xff (default)
-s, --size SIZE number of fuzzing bytes (default: 1)
-f, --file FILE read input from file
-an, --alphanum include alphanumeric bytes in fuzzing range
-mn, --maxnorm MAXNORM
maximum number of normalizations (default: 3)
-mt, --maxtrunc MAXTRUNC
maximum number of truncations (default: 3)
-nt, --normtable print normalization table
-tt, --trunctable print truncation table
-ct, --casetable print case table
--html output tables in HTML format
--version show recollapse version
आइए this_is.an_example को इनपुट मानें।
मोड
$this_is.an_examplethis$_$is$.$an$_$examplethis_is.an_example$.^$*+-?()[]{}\|एन्कोडिंग
application/x-www-form-urlencoded या क्वेरी/बॉडी पैरामीटर के साथ उपयोग के लिए: %22this_is.an_exampleapplication/json के साथ उपयोग के लिए: \u0022this_is.an_examplemultipart/form-data के साथ उपयोग के लिए: "this_is.an_exampleसीमा
फ़ज़िंग के लिए बाइट्स की एक सीमा निर्दिष्ट करें: -r 1-127. यह अल्फ़ान्यूमेरिक वर्णों को बाहर करेगा जब तक कि -an विकल्प प्रदान न किया जाए।
आकार
मोड 1, 2 और 4 के लिए फ़ज़िंग का आकार निर्दिष्ट करें। डिफ़ॉल्ट दृष्टिकोण एक बाइट के लिए सभी संभावित मानों को फ़ज़ करना है। आकार बढ़ाने से अधिक संसाधनों की खपत होगी और बहुत अधिक इनपुट उत्पन्न होंगे, लेकिन इससे नए बायपास खोजने में मदद मिल सकती है।
फ़ाइल
इनपुट को एक स्थितीय तर्क, stdin, या -f विकल्प के माध्यम से फ़ाइल के रूप में प्रदान किया जा सकता है।
अल्फ़ान्यूमेरिक
डिफ़ॉल्ट रूप से, अल्फ़ान्यूमेरिक वर्णों को आउटपुट जनरेशन से बाहर रखा जाएगा, जो आमतौर पर प्रतिक्रियाओं के संदर्भ में दिलचस्प नहीं होता है। आप -an विकल्प के साथ इसकी अनुमति दे सकते हैं।
सामान्यीकरणों की अधिकतम संख्या
सभी सामान्यीकरण लाइब्रेरीज़ का व्यवहार समान नहीं होता। डिफ़ॉल्ट रूप से, प्रत्येक इनपुट इंडेक्स के लिए तीन सामान्यीकरण संभावनाएं उत्पन्न की जाती हैं, जो आमतौर पर पर्याप्त होती हैं। आगे जाने के लिए -mn विकल्प का उपयोग करें।
तालिकाएँ
सामान्यीकरण तालिका दिखाने के लिए -nt विकल्प, केस तालिका दिखाने के लिए -ct विकल्प, और ट्रंकेशन तालिका दिखाने के लिए -tt विकल्प का उपयोग करें। आप तालिकाओं को HTML प्रारूप में आउटपुट करने के लिए --html विकल्प का भी उपयोग कर सकते हैं।
$ recollapse -nt --html > normalization_table.html
$ recollapse -tt --html > truncation_table.html
$ recollapse -ct --html > case_table.html
कमांड-लाइन टूल के रूप में Recollapse का उपयोग करना:
$ recollapse -e 1 -m 1,2,4 -r 10-11 https://legit.example.com
%0ahttps://legit.example.com
%0bhttps://legit.example.com
https%0a://legit.example.com
https%0b://legit.example.com
...
$ echo "[email protected]" | recollapse
%[email protected]
%[email protected]
...
$ echo "<svg/onload=alert(1)>" | recollapse | ffuf -w - -u "https://example.com/?param=FUZZ" -mc 200,403,500
लाइब्रेरी के रूप में Recollapse का उपयोग करना:
from recollapse import Recollapse
recollapse = Recollapse(modes=Recollapse.DEFAULT_MODES,
encoding=Recollapse.ENCODING_RAW)
variants = recollapse.generate("<script")
for variant in variants:
print(variant)
यह तकनीक मूल रूप से BSidesLisbon 2022 में प्रस्तुत की गई थी।
ब्लॉग पोस्ट: https://0xacb.com/2022/11/21/recollapse/
स्लाइड्स:
वीडियोज़:
तालिकाएँ:
धन्यवाद
और
यह परियोजना केवल शैक्षिक और नैतिक परीक्षण उद्देश्यों के लिए बनाई गई है। पूर्व आपसी सहमति के बिना लक्ष्यों पर हमला करने के लिए इस उपकरण का उपयोग अवैध है। डेवलपर्स कोई देयता नहीं लेते हैं और इस उपकरण के किसी भी दुरुपयोग या हानि के लिए जिम्मेदार नहीं हैं।