5984,6984 - Pentesting CouchDB
मूल जानकारी
CouchDB एक बहुमुखी और शक्तिशाली दस्तावेज-अभिव्यक्त डेटाबेस है जो प्रत्येक दस्तावेज में कुंजी-मान मानचित्र संरचित करता है। दस्तावेज के भीतर क्षेत्र कुंजी/मान जोड़े, सूची या मानचित्र के रूप में प्रस्तुत किए जा सकते हैं, जो डेटा भंडारण और पुनर्प्राप्ति में लचीलाई प्रदान करता है।
CouchDB में संग्रहित प्रत्येक दस्तावेज को दस्तावेज स्तर पर एक अद्वितीय पहचानकर्ता (_id
) सौंपा जाता है। इसके अतिरिक्त, डेटाबेस में की गई प्रत्येक संशोधन को एक संशोधन संख्या (_rev
) सौंपी जाती है। यह संशोधन संख्या परिवर्तनों का ट्रैकिंग और प्रबंधन करने की अनुमति देती है, जिससे डेटाबेस में डेटा को आसानी से पुनर्प्राप्ति और समक्रमण किया जा सकता है।
डिफ़ॉल्ट पोर्ट: 5984(http), 6984(https)
स्वचालित गणना
मैनुअल जांच
बैनर
यह एक GET अनुरोध को स्थापित CouchDB इंस्टेंस पर जारी करता है। जवाब कुछ इस प्रकार का दिखना चाहिए:
कृपया ध्यान दें कि यदि काउचडीबी के रूट तक पहुंचने पर आपको 401 अनधिकृत
मिलता है और कुछ इस प्रकार का संदेश दिखाई देता है: {"error":"unauthorized","reason":"Authentication required."}
तो आपको बैनर या किसी अन्य एंडप्वाइंट तक पहुंचने की अनुमति नहीं होगी।
सूचना गणना
ये एंडप्वाइंट्स हैं जहाँ आप GET अनुरोध के साथ पहुंच सकते हैं और कुछ दिलचस्प जानकारी निकाल सकते हैं। आप काउचडीबी दस्तावेज़ीकरण में अधिक एंडप्वाइंट्स और विस्तृत विवरण पा सकते हैं।
/_active_tasks
चल रहे कार्यों की सूची, जिसमें कार्य का प्रकार, नाम, स्थिति और प्रक्रिया आईडी शामिल है।/_all_dbs
काउचडीबी उदाहरण में सभी डेटाबेस की सूची लौटाता है।/_cluster_setup
नोड या क्लस्टर की स्थिति, क्लस्टर सेटअप विज़ार्ड के अनुसार लौटाता है।/_db_updates
काउचडीबी उदाहरण में सभी डेटाबेस घटनाओं की सूची लौटाता है। इस एंडप्वाइंट का उपयोग करने के लिए_global_changes
डेटाबेस की मौजूदगी आवश्यक है।/_membership
cluster_nodes
के रूप में क्लस्टर का हिस्सा बने नोड दिखाता है।all_nodes
फ़ील्ड उन सभी नोड्स को दिखाता है जिनके बारे में यह नोड जानता है, जिसमें क्लस्टर का हिस्सा है।/_scheduler/jobs
प्रतिलिपि कार्यों की सूची। प्रत्येक कार्य विवरण में स्रोत और लक्ष्य सूचना, प्रतिलिपि आईडी, हाल की घटना का इतिहास, और कुछ अन्य चीज़ें शामिल होंगी।/_scheduler/docs
प्रतिलिपि दस्तावेज़ स्थितियों की सूची।completed
औरfailed
स्थितियों में भी सभी दस्तावेज़ों के बारे में जानकारी शामिल है। प्रत्येक दस्तावेज़ के लिए यह दस्तावेज़ आईडी, डेटाबेस, प्रतिलिपि आईडी, स्रोत और लक्ष्य, और अन्य जानकारी लौटाता है।/_scheduler/docs/{replicator_db}
/_scheduler/docs/{replicator_db}/{docid}
/_node/{node-name}
/_node/{node-name}
एंडप्वाइंट का उपयोग करके आप अनुरोध प्रसंस्करण करने वाले सर्वर के एरलैंग नोड नाम की पुष्टि करने के लिए किया जा सकता है। यह सबसे उपयोगी होता है जब/_node/_local
तक पहुंचने के लिए इस जानकारी को पुनः प्राप्त करना हो।/_node/{node-name}/_stats
_stats
संसाधन एक चल रहे सर्वर के लिए आँकड़े समेत एक JSON ऑब्जेक्ट लौटाता है। शब्दकोशीय स्ट्रिंग_local
स्थानीय नोड नाम के लिए एक उपनाम के रूप में काम करता है, इसलिए सभी आँकड़े URL के लिए,{node-name}
को_local
से बदला जा सकता है, स्थानीय नोड के आँकड़ों के साथ संवाद करने के लिए।/_node/{node-name}/_system
_system संसाधन एक चल रहे सर्वर के लिए विभिन्न सिस्टम स्तरीय आँकड़े समेत एक JSON ऑब्जेक्ट लौटाता है। आप ___local
का उपयोग कर सकते हैं जैसे {node-name} वर्तमान नोड जानकारी प्राप्त करने के लिए।/_node/{node-name}/_restart
/_up
सत्यापित करता है कि सर्वर चालू है, चल रहा है, और अनुरोधों का जवाब देने के लिए तैयार है। यदिmaintenance_mode
true
याnolb
है, तो एंडप्वाइंट एक 404 प्रतिक्रिया लौटाएगा।/_uuids
काउचडीबी उदाहरण से एक या एक से अधिक यूनिवर्सली अद्वितीय पहचानकर्ता (UUIDs) का अनुरोध करता है।/_reshard
क्लस्टर पर पूर्ण, विफल, चल रहे, रोके गए, और कुल कार्यों की गणना के साथ रीशार्डिंग की स्थिति लौटाता है।
यहाँ विस्तार से समझाया गया है कि और भी दिलचस्प जानकारी निकाली जा सकती है: https://lzone.de/cheat-sheet/CouchDB
डेटाबेस सूची
यदि उस अनुरोध का 401 अनधिकृत जवाब देता है, तो आपको डेटाबेस तक पहुंचने के लिए कुछ वैध प्रमाण पत्र की आवश्यकता है:
वैध क्रेडेंशियल्स खोजने के लिए आप सेवा को ब्रूटफोर्स करने की कोशिश कर सकते हैं।
यह एक couchdb प्रतिक्रिया का उदाहरण है जब आपके पास पर्याप्त विशेषाधिकार होते हैं ताकि आप डेटाबेसों की सूची बना सकें (यह केवल डेटाबेसों की एक सूची है):
डेटाबेस जानकारी
आप डेटाबेस नाम का उपयोग करके कुछ डेटाबेस जानकारी (जैसे फ़ाइलों की संख्या और आकार) प्राप्त कर सकते हैं:
दस्तावेज़ सूची
डेटाबेस के भीतर प्रत्येक प्रविष्टि की सूची बनाएं
दस्तावेज़ पढ़ें
एक डेटाबेस के अंदर एक दस्तावेज़ की सामग्री पढ़ें:
CouchDB विशेषाधिकार उन्नति CVE-2017-12635
एरलैंग और जावास्क्रिप्ट JSON पार्सर्स के बीच अंतर के कारण आप निम्नलिखित अनुरोध के साथ क्रेडेंशियल hacktricks:hacktricks
के साथ एक एडमिन उपयोगकर्ता बना सकते थे:
इस vuln के बारे में अधिक जानकारी यहाँ.
CouchDB RCE
Erlang कुकी सुरक्षा अवलोकन
उदाहरण यहाँ से.
काउचडीबी दस्तावेज़ीकरण में, विशेष रूप से क्लस्टर सेट-अप से संबंधित खंड में (लिंक), काउचडीबी द्वारा क्लस्टर मोड में पोर्ट का उपयोग किया जाता है। यह उल्लेख किया गया है कि, स्थानिक मोड की तरह, पोर्ट 5984
का उपयोग किया जाता है। इसके अतिरिक्त, पोर्ट 5986
नोड-स्थानिक API के लिए है, और महत्वपूर्ण रूप से, Erlang के लिए TCP पोर्ट 4369
की आवश्यकता है जो Erlang क्लस्टर के भीतर नोड संचार को सुविधा प्रदान करने वाला Erlang Port Mapper Daemon (EPMD) है। यह सेटअप एक नेटवर्क बनाता है जहां प्रत्येक नोड हर अन्य नोड से जुड़ा होता है।
पोर्ट 4369
के संबंध में एक महत्वपूर्ण सुरक्षा सलाह दी गई है। यदि यह पोर्ट इंटरनेट या किसी भी अविश्वसनीय नेटवर्क पर पहुंचने योग्य है, तो सिस्टम की सुरक्षा एक अद्वितीय पहचानकर्ता जिसे "कुकी" के रूप में जाना जाता है पर भारित होती है। यह कुकी एक सुरक्षा रक्षा के रूप में काम करती है। उदाहरण के लिए, एक दिया गया प्रक्रिया सूची में, "मॉन्स्टर" नामक कुकी देखी जा सकती है, जिससे सिस्टम की सुरक्षा ढांचे में इसकी परिचालन भूमिका का पता चलता है।
उन लोगों के लिए जो इस "कुकी" को दूरस्थ कोड निष्पादन (RCE) के लिए कैसे उपयोग किया जा सकता है जिसे एरलैंग सिस्टम के संदर्भ में, एक विशेष खंड उपलब्ध है और आगे पढ़ने के लिए। यह विवरण उन विधियों को विस्तार से वर्णित करता है जिनका उपयोग अनधिकृत तरीकों से एरलैंग कुकी का उपयोग करके सिस्टम पर नियंत्रण प्राप्त करने के लिए किया जा सकता है। आप यहाँ एरलैंग कुकी का दुरुपयोग करने के लिए विस्तृत मार्गदर्शिका का अन्वेषण कर सकते हैं।
लोकल.ini का संशोधन करके CVE-2018-8007 का शोधन
उदाहरण यहाँ से।
हाल ही में खुलासा हुआ एक सुरक्षा दोष, CVE-2018-8007, जो एपाची काउचडीबी को प्रभावित करता है, उसे जांचा गया, जिससे पता चला कि उत्पीड़न के लिए local.ini
फ़ाइल में लेखन अनुमतियाँ आवश्यक हैं। यद्यपि प्रारंभिक लक्ष्य सिस्टम पर सीधे लागू नहीं होता है क्योंकि सुरक्षा प्रतिबंधों के कारण, अन्वेषण के उद्देश्यों के लिए local.ini
फ़ाइल को लेखन अधिकार प्रदान करने के लिए संशोधन किए गए। विस्तृत चरण और कोड उदाहरण नीचे प्रदान किए गए हैं, प्रक्रिया को प्रदर्शित करते हुए।
सबसे पहले, पर्यावरण को तैयार किया जाता है जिसमें सुनिश्चित किया जाता है कि local.ini
फ़ाइल लिखने योग्य है, जिज्ञासा करके सत्यापित किया जाता है:
कमजोरी का शोधन करने के लिए, एक curl कमांड को निषेधित किया जाता है, local.ini
में cors/origins
विन्यास को लक्षित करते हुए। इसमें एक नया मूल सम्मिलित किया जाता है साथ ही [os_daemons]
खंड के तहत अतिरिक्त कमांड, अर्बिट्रे कोड को निष्पादित करने का उद्देश्य है:
आगे की पुष्टि local.ini
में डाली गई विन्यास को दिखाती है, जिसे एक बैकअप के साथ तुलना करके परिवर्तनों पर ध्यान दिया गया है:
आरंभ में, अपेक्षित फ़ाइल (/tmp/0xdf
) मौजूद नहीं है, जिससे स्पष्ट होता है कि इंजेक्ट किया गया कमांड अभी तक नहीं चलाया गया है। और जांच में पता चलता है कि CouchDB से संबंधित प्रक्रियाएँ चल रही हैं, जिसमें से एक ऐसी है जो इंजेक्ट किए गए कमांड को क्रियान्वित कर सकती है:
कोचडीबी प्रक्रिया को पहचानने के बाद समाप्त करके सिस्टम को स्वचालित रूप से पुनः आरंभ करने द्वारा, उभरे हुए कमांड का निष्पादन प्रेरित होता है, जिसे पहले गायब फ़ाइल की मौजूदगी द्वारा पुष्टि की जाती है:
यह अन्वेषण विशेष परिस्थितियों के तहत CVE-2018-8007 शोषण की संभावना की पुष्टि करता है, विशेष रूप से local.ini
फ़ाइल के लिखने योग्य एक्सेस की आवश्यकता को ध्यान में रखते हुए। प्रदत्त कोड उदाहरण और प्रक्रियात्मक चरण एक नियंत्रित वातावरण में शोषण की प्रतिलिपि के लिए एक स्पष्ट मार्गदर्शिका प्रदान करते हैं।
अधिक विवरण के लिए CVE-2018-8007 पर, mdsec द्वारा सूचना के लिए देखें: CVE-2018-8007.
लोकल.ini पर लेखन अनुमतियों के साथ CVE-2017-12636 का अन्वेषण
उदाहरण यहाँ से।
एक भेद्यता जिसे CVE-2017-12636 के रूप में जाना जाता है, उसे अन्वेषित किया गया था, जो काउचडीबी प्रक्रिया के माध्यम से कोड निष्पादन को संभव बनाता है, हालांकि विशेष विन्यासों से इसका शोषण रोक सकता है। ऑनलाइन उपलब्ध कई प्रमाण का (POC) संदर्भ होने के बावजूद, काउचडीबी संस्करण 2 पर भेद्यता का शोषण करने के लिए संशोधन आवश्यक है, जो सामान्य रूप से लक्षित संस्करण 1.x से भिन्न है। प्रारंभिक कदम काउचडीबी संस्करण की पुष्टि करने और अपेक्षित क्वेरी सर्वर पथ की अनुपस्थिति की पुष्टि करने में सम्मिलित हैं:
CouchDB संस्करण 2.0 को समायोजित करने के लिए एक नया पथ का उपयोग किया जाता है:
कोशिशें नए क्वेरी सर्वर जोड़ने और आमंत्रित करने के लिए अनुमति संबंधित त्रुटियों से भेंट कराई गईं, जैसा कि निम्नलिखित आउटपुट द्वारा सूचित किया गया है:
और जांच में पता चला कि local.ini
फ़ाइल में अनुमति समस्याएँ थीं, जिसे लिखने की अनुमति नहीं थी। रूट या होमर एक्सेस के साथ फ़ाइल अनुमतियों को संशोधित करके, आगे बढ़ना संभव हुआ:
जांच करने पर पाया गया कि क्वेरी सर्वर जोड़ने की प्रयासों में उत्तर में कोई त्रुटि संदेश नहीं था, जिससे सफलतापूर्वक local.ini
फ़ाइल का संशोधन हुआ था:
प्रक्रिया जारी रही डेटाबेस और एक दस्तावेज़ का निर्माण करने के साथ, जिसके बाद नए जोड़े गए क्वेरी सर्वर को मैप करने वाले कस्टम व्यू के माध्यम से कोड को निष्पादित करने का प्रयास किया गया:
एक सारांश एक वैकल्पिक payload के साथ CVE-2017-12636 का शोध करने के और अधिक अंदर देता है विशेष परिस्थितियों के तहत इसका शोध करने के उपयोगी संसाधन शामिल हैं:
Shodan
port:5984 couchdb
संदर्भ
Last updated