Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2018-7747 — CalderaForms 1.5.9.1 XSS (WordPress plugin) - ट्यूटोरियल | Kitploit
उपकरण/GitHubGitHub/mindpr00f/cve-2018-7747
भेद्यता विश्लेषणवेब एप्लिकेशन शोषणवेब सुरक्षाCTFपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षा
GitHubmindpr00f/cve-2018-7747

CVE-2018-7747

CalderaForms 1.5.9.1 XSS (WordPress plugin) - ट्यूटोरियल

रिपॉजिटरी देखें
8 साल पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

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

CVE-2018-7747

CalderaForms 1.5.9.1 XSS (WordPress प्लगइन) - ट्यूटोरियल


CalderaForm एक WordPress प्लगइन है जो ड्रैग और ड्रॉप के माध्यम से आसानी से फॉर्म बनाने की अनुमति देता है। हाल ही में एक गतिविधि के दौरान मुझे कुछ पोर्टलों का परीक्षण करने का अवसर मिला, जिनमें से एक इस प्लगइन के माध्यम से बनाए गए एक संपर्क फॉर्म को होस्ट कर रहा था। संबंधित इंस्टेंस के अनुकूलित कॉन्फ़िगरेशन ने मुझे एक कमजोरी खोजने की अनुमति दी: इसकी सरल, पाठ्यपुस्तक जैसी प्रकृति को देखते हुए, मुझे लगता है कि यह शुरुआती लोगों को कुछ तंत्र समझाने का एक अच्छा बहाना है।

केवल शैक्षणिक उद्देश्य - स्पष्ट अनुमति के बिना लक्ष्यों का परीक्षण करने या अवैध उद्देश्यों के लिए इस जानकारी का उपयोग न करें - पाचन के दौरान ठंडे पानी में न कूदें - गर्मी में प्याज की तरह कपड़े पहनें

पूर्ण exploit के लिए:
https://www.exploit-db.com/exploits/44489/
CVE के लिए:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7747


कॉन्फ़िगरेशन

विश्लेषण के दौरान कॉन्फ़िगरेशन में, फॉर्म को उपयोगकर्ता को धन्यवाद संदेश के साथ जवाब देने के लिए सेट किया गया था, जो उसे अभी दर्ज किए गए नाम से बुलाता था।

परीक्षण वातावरण को दोहराने के लिए, स्थानीय रूप से WordPress का एक इंस्टेंस स्थापित करें और CalderaForms संस्करण 1.5.9.1 प्लगइन स्थापित करें (यहाँ उपलब्ध या यहाँ उपलब्ध).

एक बार स्थापित होने के बाद, WordPress प्रशासन कंसोल > बायाँ कॉलम > "Caldera Forms" > शीर्ष बटन > "New Form" > Contact Form चुनें, नाम बदलें और "Create Form" पर क्लिक करें

alt text

एक बार बनाने के बाद, इसके कॉन्फ़िगरेशन को संशोधित करना संभव है: शीर्ष बटन > "Form Settings" > Success Message को इस प्रकार संशोधित करें कि वह उपयोगकर्ता द्वारा दर्ज किए गए डेटा में से एक को शामिल करे। बॉक्स पर क्लिक करें और सुझावों की एक ड्रॉप-डाउन दिखाई देती है। %first_name% जोड़ें

alt text

शीर्ष बटन > "Save Form"

फॉर्म को किसी पेज में डालने के लिए: बायाँ कॉलम > "Pages" > "Sample Page" > "Edit" > "Caldera Form" > अभी बनाए गए फॉर्म का चयन करें > "Insert Form" > दायाँ कॉलम > "Update"

alt text

हो गया।


पहचान और वेक्टर का पता लगाना

आइए हम एक-एक करके उन चरणों से निपटें जो इस प्रकार के हमले के निर्माण के लिए आवश्यक हैं, विभाजित करो और शासन करो के प्रतिमान के अनुसार।

परीक्षण चरण में, जब किसी घटक के साथ बातचीत की जाती है, तो हमेशा दिए गए उत्तेजनाओं के प्रति उसकी प्रतिक्रियाओं पर ध्यान देना चाहिए; विशेष रूप से, हम अपने द्वारा दर्ज किए गए डेटा के "पथ" और उनमें होने वाले किसी भी परिवर्तन पर ध्यान केंद्रित करते हैं।

हमारे मामले के लिए एक विशिष्ट उदाहरण निम्नलिखित है:

  1. फॉर्म वाले पेज पर जाएँ: http://127.0.0.1/wordpress/sample-page/

  2. फॉर्म को निम्नलिखित डेटा से भरें
    "First Name": myName
    "Last Name": myLast
    "Email Address": my@e.mail
    "Comments": myComm

  3. प्लगइन के तर्क के अनुसार डेटा संसाधित किया जाता है

  4. प्राप्त धन्यवाद संदेश में हमारे द्वारा First Name फ़ील्ड में दर्ज स्ट्रिंग शामिल है
    "Thank you myName, form has been successfully submitted."

alt text

हमारे द्वारा "First Name" फ़ील्ड में दर्ज स्ट्रिंग हमें धन्यवाद संदेश में वापस दे दी जाती है।
विशेष रूप से, स्ट्रिंग एक HTML div टैग के अंदर समाहित है।
हमारा इनपुट पृष्ठ के HTML में समाप्त होता है।
विचार: "हमें यह पसंद है। हमारे पास एक संपर्क बिंदु है।"

चलो एक कदम आगे बढ़ते हैं। हमारे इनपुट को उस चरण के दौरान कैसे संसाधित किया जाता है जिसे हमने "प्रसंस्करण" (बिंदु 2) कहा है? विशेष रूप से, हम जानना चाहते हैं: क्या हमारे द्वारा उपयोग किए जा सकने वाले वर्णों (और उनके संयोजनों) पर कोई सीमाएँ हैं? स्पष्ट रूप से लक्ष्य "सामान" इंजेक्ट करने में सक्षम होना है। जब एक इंजेक्शन करने का प्रयास किया जाता है, तो यह ध्यान रखना चाहिए कि हमारा इनपुट कहाँ समाप्त होता है और उपयुक्त "भाषा" का उपयोग करना चाहिए।

क्या हमारे इनपुट को किसी SQL इंटरप्रेटर द्वारा संसाधित किया जाता है? हमें उसकी भाषा बोलनी होगी
क्या हमारे इनपुट को किसी PHP स्क्रिप्ट द्वारा संसाधित किया जाता है? हमें उसकी भाषा बोलनी होगी
क्या हमारा इनपुट किसी HTML पेज पर समाप्त होता है? ...

इसलिए हम जो जानना चाहते हैं वह यह है कि क्या हम HTML के विशिष्ट वर्णों और निर्माणों का उपयोग कर सकते हैं और विशेष रूप से, इस भाषा की जावास्क्रिप्ट कोड को शामिल/व्याख्या करने की क्षमता को देखते हुए, यह पता लगाना कि क्या हम अपने कोड को "लैंडिंग ज़ोन" में डालने की कोई रणनीति पाते हैं, यानी पहले देखा गया div टैग।

ऐसा करने के लिए हम "First Name" फ़ील्ड में एक साधारण HTML टैग डालते हैं और देखते हैं कि क्या यह "sanitized" (सैनिटाइज़्ड) होता है, यानी क्या इसे इस प्रकार संशोधित किया जाता है कि यह हानिरहित/अन-इंटरप्रेटेबल हो जाए, या क्या यह हमें ज्यों का त्यों वापस मिलता है। इस उद्देश्य के लिए हम एक <br> टैग का उपयोग करते हैं, जिसका उपयोग पाठ में लाइन ब्रेक डालने के लिए किया जाता है।

पिछली संख्या का अनुसरण करते हुए:

  1. फॉर्म को निम्नलिखित डेटा से भरें
    "First Name": m<br>yName
    "Last Name": myLast
    "Email Address": my@e.mail
    "Comments": myComm

  2. धन्यवाद संदेश में हमारा HTML टैग शामिल है, जिसे संशोधित नहीं किया गया है, और इसे सही ढंग से व्याख्यायित किया जाता है, संदेश के बीच में एक लाइन ब्रेक डालते हुए

root@kitploit:~
"Thank you m  
yName, form has been successfully submitted."

alt text

विचार: "हमें यह पसंद है। हम कम-से-और से-अधिक चिह्नों का उपयोग कर सकते हैं, हम HTML टैग सम्मिलित कर सकते हैं जो सैनिटाइज़ नहीं होते और व्याख्यायित होते हैं।"

कदम आगे। फ़ॉर्मेटिंग टैग को किसी अधिक उपयोगी चीज़ से बदलें, जैसे कि <script> टैग, जो हमें पृष्ठ के अंदर जावास्क्रिप्ट कोड डालने और निष्पादित करने की अनुमति देता है।

  1. फॉर्म को निम्नलिखित डेटा से भरें
    "First Name": m<script>alert(1);</script>yName
    "Last Name": myLast
    "Email Address": my@e.mail
    "Comments": myComm

  2. धन्यवाद संदेश में हमारा HTML टैग शामिल है, जिसे संशोधित नहीं किया गया है, और इसे सही ढंग से व्याख्यायित किया जाता है, हमें एक alert बॉक्स दिखाते हुए

alt text

विचार 1: "हमें यह पसंद है। हम उपयोगकर्ता के ब्राउज़र के संदर्भ में मनमाना जावास्क्रिप्ट कोड निष्पादित कर सकते हैं।"
विचार 2: "हमें यह पसंद नहीं है। जावास्क्रिप्ट को निष्पादित करने वाला उपयोगकर्ता हम स्वयं हैं"


स्टोर और रिकॉल

स्थिति यह है: हम एक ऐसी साइट के माध्यम से जावास्क्रिप्ट निष्पादित कर सकते हैं जिसे हम नियंत्रित नहीं करते, उपयोगकर्ता के ब्राउज़र के संदर्भ में, लेकिन यह उपयोगकर्ता, अभी, वही है जो फॉर्म में मान दर्ज करता है। यह काफी बेकार है।
विचार यह है: क्या हमारे निष्पादित किए जाने वाले कोड वाले धन्यवाद संदेश को पुनः प्राप्त करने का कोई तरीका है?

आइए अपने पहले सबमिट पर वापस जाएँ, जो "टोही" था (या पहले चरणों को फिर से निष्पादित करें)।

नेटवर्क ट्रैफ़िक या पृष्ठ के स्रोत का विश्लेषण करके, हम समझते हैं कि फॉर्म पते पर एक POST अनुरोध करता है

http://127.0.0.1/wordpress/cf-api/CF5ad9b3176c0f4

(अंतिम भाग भिन्न हो सकता है, इसे निम्नलिखित सभी उदाहरणों में उपयुक्त रूप से संशोधित करें)
अर्थात पते पर

http://<target>/cf-api/<form-id>

और इस अनुरोध का उत्तर एक JSON है जिसमें कुछ डेटा होता है, जिसमें धन्यवाद संदेश शामिल है, और इसकी निम्नलिखित संरचना है:

root@kitploit:~
{
      "data":
          {"cf_id":"48"},
      "html":"<div class=\" alert alert-success\">Thank you myName, form has been successfully submitted.<\/div>",
      "type":"complete",
      "form_id":"CF5ad9b3176c0f4",
      "form_name":"MyContactForm",
      "status":"complete"
}

इस जानकारी को अलग रखें, हम जल्द ही इस पर वापस आएंगे; विशेष रूप से "form_id" और "cf_id" फ़ील्ड पर ध्यान दें।

POST किस पते पर निष्पादित किया जाता है? बहुत अधिक अनुमान लगाए बिना, देखते हैं कि यदि हम GET निष्पादित करते हैं, यानी http://127.0.0.1/wordpress/cf-api/CF5ad9b3176c0f4 पते पर पृष्ठ पर जाते हैं, तो क्या होता है, और हमें, कमोबेश, संबंधित फॉर्म का HTML मिलता है।

  1. फॉर्म को निम्नलिखित डेटा से भरें
    "First Name": myRedirectedName
    "Last Name": myLast
    "Email Address": my@e.mail
    "Comments": myComm

और सबमिट से उत्पन्न नेटवर्क ट्रैफ़िक की जाँच करें

alt text

इस बार हमें स्थान /wordpress/cf-api/CF5ad9b3176c0f4/?cf_su=1&cf_id=49 की ओर एक HTTP 302 कोड (रीडायरेक्ट) प्राप्त होता है, जो हमें, कमोबेश, धन्यवाद संदेश के div टैग वाला HTML लौटाता है।

इस पते के प्रारूप पर ध्यान दें:

http://<target>/cf-api/<form-id>/?cf_su=1&cf_id=<cf-id>

जहाँ <form-id> और <cf-id> के मान बिल्कुल वही हैं जो पहले विश्लेषित JSON में क्रमशः "form_id" और "cf_id" हैं।

क्या हमने प्रारंभिक प्रश्न का उत्तर दे दिया है? हाँ। हमें धन्यवाद संदेश की सामग्री को पुनः प्राप्त करने का एक तरीका मिल गया है।
विचार: "हमें यह पसंद है। हम आवश्यकतानुसार अपने डेटा वाले संदेश को पुनः प्राप्त कर सकते हैं।"


इसे बनाएँ

आइए सभी सूत्रों को एक साथ जोड़ें, अब तक हमने जो भी जानकारी एकत्र की है उसे मिलाएँ और एक हमला तैयार करें।
1) अपने दुर्भावनापूर्ण कोड को लक्ष्य पर सहेजें
2) उस कोड को पुनः प्राप्त करने के लिए आवश्यक डेटा एकत्र करें
3) अपने हमले को "ट्रिगर" करने के लिए उपयुक्त URL बनाएँ

  1. फॉर्म को (दोनों पृष्ठों में से किसी एक से, इससे कोई फर्क नहीं पड़ता) निम्नलिखित डेटा से भरें
    "First Name": m<script>document.body.innerHTML=String.fromCodePoint(128046);</script>yName
    "Last Name": myLast
    "Email Address": my@e.mail
    "Comments": myComm

  2. उत्पन्न ट्रैफ़िक के विश्लेषण के माध्यम से, चाहे sample-page पेज के मामले में प्राप्त JSON को पढ़ना हो या केवल फॉर्म वाले पेज के मामले में रीडायरेक्ट को पढ़ना हो, हम form_id और cf_id पहचानकर्ता प्राप्त करते हैं

root@kitploit:~
{  
      "data":  
          {"cf_id":"69"},  
      "html":"...",  
      "type":"...",  
      "form_id":"CF5ad9b3176c0f4",  
      "form_name":"...",  
      "status":"..."  
}
  1. हमला करने के लिए URL बनाएँ और उपयोग करें

http://127.0.0.1/wordpress/cf-api/CF5ad9b3176c0f4/?cf_su=1&cf_id=69

alt text


कुछ विचार:

  • ध्यान दें कि अंतिम देखे गए पृष्ठ की सामग्री (या अधिक सामान्यतः व्यवहार) हमारे द्वारा नियंत्रित है; अपनी कल्पना का उपयोग करें
  • इस तथ्य पर विचार करें कि हमारे जावास्क्रिप्ट कोड के माध्यम से पृष्ठ का संशोधन उपयोगकर्ता के ब्राउज़र के अंदर होता है: XSS एक क्लाइंट-साइड हमला है
  • स्क्रिप्ट को पुनः प्राप्त करने का तरीका खोजना क्यों आवश्यक था?
    क्योंकि XSS हमले के पीछे का विचार पीड़ित के ब्राउज़र के संदर्भ में कोड निष्पादित करना है; प्रारंभिक परीक्षणों के दौरान, हमने JS कोड निष्पादित किया, लेकिन अस्थायी रूप से और अपने स्वयं के ब्राउज़र के संदर्भ में।
  • एक गाय का उपयोग क्यों किया गया? क्योंकि वह प्यारी है
  • GET अनुरोध का पैरामीटर "cf_id" फॉर्म में दर्ज डेटा सेट का एक (क्रमिक) पहचानकर्ता है; इसलिए उस मान को घटाकर "समय में पीछे जाना" और दूसरों द्वारा पहले भेजी गई जानकारी को पुनः प्राप्त करना संभव है। यदि बृहस्पति वृश्चिक राशि में हो, शुक्र शनि के विपरीत न हो और फॉर्म धन्यवाद संदेश में उपयोगकर्ता का ईमेल पता भी शामिल करने के लिए सेट हो, तो काल्पनिक रूप से पिछले आगंतुकों के पते पुनः प्राप्त करना संभव होगा।

पाठक को, यदि रुचि हो, तो निम्नलिखित का प्रस्ताव है:

  • हमले को दोहराएँ और एक उपयुक्त बफर बनाएँ ताकि पीड़ित को "MUCCA" स्ट्रिंग वाला एक अलर्ट दिखे
  • पिछले अभ्यास को ' (एपॉस्ट्रॉफ़ी, सिंगल कोट), " (उद्धरण चिह्न, डबल कोट्स) या ` (ग्रेव ऐक्सेंट, बैकटिक या बैककोट या ग्रेव ऐक्सेंट) वर्णों का उपयोग किए बिना दोहराएँ, जो इतालवी कीबोर्ड लेआउट में अनुपस्थित है
  • अपनी पसंद की भाषा में एक स्क्रिप्ट विकसित करें, जो अपने पोर्टल पर फॉर्म वाले पृष्ठ का पता दिए जाने पर, निम्नलिखित संचालन करे:
    • फॉर्म भरना और सबमिट करना
    • दर्ज किए गए कुछ फ़ील्ड की वापसी की जाँच करना
    • उपयोगी फ़ील्ड के अंदर एक दुर्भावनापूर्ण बफर का निर्माण और सबमिट करना
    • हमले को पुनः प्राप्त करने के लिए पृष्ठ का पता वापस करना
  • फॉर्म की शुरुआत में किए गए कॉन्फ़िगरेशन को बदलें (धन्यवाद संदेश संशोधित करें) और पिछले बिंदु की स्क्रिप्ट का पुनः परीक्षण करें
टूल डाउनलोड करें