Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
domato — DOM फ़ज़र | Kitploit
उपकरण/GitHubGitHub/googleprojectzero/domato
भेद्यता विश्लेषणवेब सुरक्षाफज़िंगफज़िंग में शीर्ष #7
GitHubgoogleprojectzero/domato

domato

DOM फ़ज़र

रिपॉजिटरी देखें
1.8k285251 साल पहलेKitploit द्वारा समीक्षित
वेबसाइट

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Domato 🍅

एक DOM फज़र

इवान फ्रैट्रिक द्वारा लिखित और अनुरक्षित, [email protected]

कॉपीराइट 2017 Google Inc. सर्वाधिकार सुरक्षित।

Apache लाइसेंस, संस्करण 2.0 ("लाइसेंस") के अंतर्गत लाइसेंस प्राप्त; आप इस फ़ाइल का उपयोग केवल लाइसेंस के अनुपालन में कर सकते हैं। आप लाइसेंस की एक प्रति यहाँ प्राप्त कर सकते हैं:

http://www.apache.org/licenses/LICENSE-2.0

जब तक लागू कानून द्वारा आवश्यक न हो या लिखित रूप में सहमति न दी गई हो, लाइसेंस के अंतर्गत वितरित सॉफ़्टवेयर बिना किसी प्रकार की वारंटी या शर्तों के, स्पष्ट या निहित, "जैसा है" ("AS IS") आधार पर वितरित किया जाता है। लाइसेंस के अंतर्गत लागू होने वाली विशिष्ट अनुमतियों और सीमाओं के लिए लाइसेंस देखें।

उपयोग

उपयोग संबंधी जानकारी देखने के लिए निम्नलिखित कमांड चलाएँ:

python3 generator.py --help

एकल .html नमूना उत्पन्न करने के लिए चलाएँ:

python generator.py --file <output file>

अपने द्वारा लिखे गए टेम्पलेट का उपयोग करके एकल .html नमूना उत्पन्न करने के लिए चलाएँ:

python generator.py --file <output file> --template <your custom template file>

एक ही कॉल से कई नमूने उत्पन्न करने के लिए चलाएँ:

python generator.py --output_dir <output directory> --no_of_files <number of output files>

उत्पन्न नमूने निर्दिष्ट निर्देशिका में रखे जाएँगे और उनका नाम fuzz-<number>.html होगा, जैसे fuzz-00001.html, fuzz-00002.html आदि। कई नमूने उत्पन्न करना अधिक तेज़ है क्योंकि इनपुट व्याकरण फ़ाइलों को केवल एक बार लोड और पार्स करने की आवश्यकता होती है।

कोड संगठन

generator.py मुख्य स्क्रिप्ट शामिल करता है। यह grammar.py को एक लाइब्रेरी के रूप में उपयोग करता है और DOM फ़ज़िंग के लिए अतिरिक्त सहायक कोड शामिल करता है।

grammar.py में जनरेशन इंजन शामिल है जो अधिकतर एप्लिकेशन-एग्नॉस्टिक है और इस प्रकार अन्य (यानी गैर-DOM) जनरेशन-आधारित फ़ज़र में उपयोग किया जा सकता है। चूँकि इसे एक लाइब्रेरी के रूप में उपयोग किया जा सकता है, इसका उपयोग नीचे एक अलग अनुभाग में वर्णित है।

.txt फ़ाइलों में व्याकरण परिभाषाएँ होती हैं। 3 मुख्य फ़ाइलें हैं, html.txt, css.txt और js.txt जिनमें क्रमशः HTML, CSS और JavaScript व्याकरण होते हैं। ये रूट व्याकरण फ़ाइलें अन्य फ़ाइलों की सामग्री शामिल कर सकती हैं।

जनरेशन इंजन का उपयोग और व्याकरण लिखना

कस्टम व्याकरण के साथ जनरेशन इंजन का उपयोग करने के लिए, आप निम्नलिखित python कोड का उपयोग कर सकते हैं:

from grammar import Grammar

my_grammar = Grammar()
my_grammar.parse_from_file('input_file.txt')
result_string = my_grammar.generate_symbol('symbol_name')

निम्नलिखित अनुभाग व्याकरण फ़ाइलों की सिंटैक्स का वर्णन करते हैं।

मूल सिंटैक्स

Domato एक ऐसे इंजन पर आधारित है जो, नीचे निर्दिष्ट सरल प्रारूप में एक संदर्भ-मुक्त व्याकरण दिए जाने पर, उस व्याकरण से नमूने उत्पन्न करता है।

एक व्याकरण निम्नलिखित मूल प्रारूप में नियमों के एक समूह के रूप में वर्णित है:

<symbol> = a mix of constants and <other_symbol>s

प्रत्येक व्याकरण नियम में एक बायाँ पक्ष और दायाँ पक्ष होता है जो बराबर (equal) वर्ण द्वारा अलग किए जाते हैं। बायाँ पक्ष एक प्रतीक शामिल करता है, जबकि दायाँ पक्ष इस बात का विवरण शामिल करता है कि उस प्रतीक का विस्तार कैसे किया जा सकता है। किसी प्रतीक का विस्तार करते समय, दाईं ओर के सभी प्रतीकों का पुनरावर्ती रूप से विस्तार किया जाता है जबकि जो कुछ भी प्रतीक नहीं है उसे बस आउटपुट में कॉपी कर दिया जाता है। ध्यान दें कि एक एकल नियम इनपुट फ़ाइल की कई पंक्तियों में विस्तारित नहीं हो सकता।

CSS व्याकरण के एक भाग के निम्नलिखित सरलीकृत उदाहरण पर विचार करें:

<cssrule> = <selector> { <declaration> }
<selector> = a
<selector> = b
<declaration> = width:100%

यदि हम व्याकरण इंजन को उस व्याकरण को पार्स करने और 'cssrule' उत्पन्न करने का निर्देश देते हैं, तो हमारे पास निम्न में से कोई एक परिणाम हो सकता है:

a { width:100% }

या

b { width:100% }

ध्यान दें कि 'selector' प्रतीक के लिए दो नियम हैं। ऐसे मामलों में, जब जनरेटर से 'selector' उत्पन्न करने के लिए कहा जाता है, तो यह उपयोग के लिए नियम को यादृच्छिक रूप से चुनेगा। 'p' गुण का उपयोग करके नियम की संभावना निर्दिष्ट करना भी संभव है, उदाहरण के लिए:

<selector p=0.9> = a
<selector p=0.1> = b

इस मामले में, स्ट्रिंग 'a' 'b' की तुलना में अधिक बार आउटपुट होगी।

संभावना के अतिरिक्त प्रतीकों पर अन्य गुण भी लागू किए जा सकते हैं। वे एक अलग अनुभाग में सूचीबद्ध हैं।

html नमूने उत्पन्न करने के लिए एक और उदाहरण पर विचार करें:

<html> = <lt>html<gt><head><body><lt>/html<gt>
<head> = <lt>head<gt>...<lt>/head<gt>
<body> = <lt>body<gt>...<lt>/body<gt>

ध्यान दें कि चूँकि '<' और '>' का व्याकरण सिंटैक्स में विशेष अर्थ है, इसलिए यहाँ हम इसके बजाय <lt> और <gt> का उपयोग कर रहे हैं। ये प्रतीक बिल्ट-इन हैं और उपयोगकर्ता द्वारा परिभाषित करने की आवश्यकता नहीं है। सभी बिल्ट-इन प्रतीकों की सूची एक अलग अनुभाग में दी गई है।

प्रोग्रामिंग भाषा कोड उत्पन्न करना

प्रोग्रामिंग भाषा कोड उत्पन्न करने के लिए, समान सिंटैक्स का उपयोग किया जा सकता है, लेकिन कुछ अंतर हैं। प्रोग्रामिंग भाषा व्याकरण की प्रत्येक पंक्ति आउटपुट की पंक्ति के अनुरूप होगी। इस कारण से, व्याकरण सिंटैक्स अधिक मुक्त-रूप (free-form) होगा ताकि विभिन्न प्रोग्रामिंग भाषाओं में निर्माणों (constructs) को व्यक्त किया जा सके। दूसरे, जब एक पंक्ति उत्पन्न होती है, तो पंक्ति को आउटपुट करने के अतिरिक्त, एक या अधिक चर बनाए जा सकते हैं और अन्य पंक्तियों को उत्पन्न करते समय उन चरों का पुनः उपयोग किया जा सकता है। फिर से, आइए सरलीकृत उदाहरण पर एक नज़र डालें:

!varformat fuzzvar%05d
!lineguard try { <line> } catch(e) {}

!begin lines
<new element> = document.getElementById("<string min=97 max=122>");
<element>.doSomething();
!end lines

यदि हम इंजन को 5 पंक्तियाँ उत्पन्न करने का निर्देश देते हैं, तो हमारे पास कुछ इस प्रकार का परिणाम हो सकता है:

try { var00001 = document.getElementById("hw"); } catch(e) {}
try { var00001.doSomething(); } catch(e) {}
try { var00002 = document.getElementById("feezcqbndf"); } catch(e) {}
try { var00002.doSomething(); } catch(e) {}
try { var00001.doSomething(); } catch(e) {}

ध्यान दें कि

  • प्रोग्रामिंग भाषा पंक्तियाँ '!begin lines' और '!end lines' कथन में संलग्न होती हैं। यह व्याकरण पार्सर को आवश्यक जानकारी देता है कि बीच की पंक्तियाँ प्रोग्रामिंग भाषा पंक्तियाँ हैं और इस प्रकार उन्हें अलग तरीके से पार्स किया जाता है।
  • हमने <element> के बजाय <new element> का उपयोग किया। यह जनरेटर को 'element' प्रतीक उत्पन्न करने के बजाय 'element' प्रकार का एक नया चर बनाने का निर्देश देता है।
  • <string> बिल्ट-इन प्रतीकों में से एक है इसलिए इसे परिभाषित करने की आवश्यकता नहीं है।
  • [वैकल्पिक] आप उन चरों का प्रारूप परिभाषित करने के लिए !varformat कथन का उपयोग कर सकते हैं जिन्हें आप उपयोग करना चाहते हैं।
  • [वैकल्पिक] आप अपवादों (exceptions) को पकड़ने या अन्य कार्य करने के लिए प्रत्येक पंक्ति के चारों ओर डाले जाने वाले अतिरिक्त कोड को परिभाषित करने के लिए !lineguard कथन का उपयोग कर सकते हैं। ऐसा इसलिए है ताकि आपको इसे प्रत्येक पंक्ति के लिए अलग से लिखने की आवश्यकता न हो।
  • '!begin lines' और '!end lines' के अतिरिक्त आप '!begin helperlines' और '!end helperlines' का उपयोग भी कर सकते हैं ताकि कोड की ऐसी पंक्तियाँ परिभाषित की जा सकें जिनका उपयोग केवल तभी किया जाएगा जब अन्य पंक्तियों को उत्पन्न करते समय आवश्यक हो (उदाहरण के लिए, सहायक पंक्तियाँ 'मुख्य' कोड के लिए आवश्यक चर उत्पन्न कर सकती हैं, लेकिन आप कभी नहीं चाहेंगे कि जब उनकी आवश्यकता न हो तो वे सहायक पंक्तियाँ आउटपुट में समाप्त हों)।
टिप्पणियाँ

पंक्ति में पहले '#' वर्ण के बाद सब कुछ एक टिप्पणी माना जाता है, इसलिए उदाहरण के लिए:

#This is a comment
अनंत पुनरावृत्तियों को रोकना

व्याकरण सिंटैक्स में फ़ज़र को यह बताने का एक तरीका है कि कौन से नियम गैर-पुनरावर्ती हैं और अधिकतम पुनरावृत्ति स्तर तक पहुँचने पर भी उपयोग करने के लिए सुरक्षित हो सकते हैं। यह ‘nonrecursive’ गुण के साथ किया जाता है। एक उदाहरण नीचे दिया गया है।

!max_recursion 10
<test root=true> = <foobar>
<foobar> = foo<foobar>
<foobar nonrecursive> = bar

सबसे पहले, एक वैकल्पिक ‘!max_recursion’ कथन अधिकतम पुनरावृत्ति गहराई स्तर (डिफ़ॉल्ट रूप से 50) परिभाषित करता है। ध्यान दें कि ‘foobar’ के लिए दूसरा उत्पादन नियम गैर-पुनरावर्ती के रूप में चिह्नित है। यदि कभी अधिकतम पुनरावृत्ति स्तर तक पहुँच जाता है तो जनरेटर ‘foobar’ प्रतीक के लिए गैर-पुनरावर्ती नियम का उपयोग करने के लिए बाध्य करेगा, इस प्रकार अनंत पुनरावृत्ति को रोकेगा।

अन्य व्याकरण फ़ाइलों को शामिल करना और आयात करना
टूल डाउनलोड करें