5984,6984 - Pentesting CouchDB
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
CouchDB एक बहुपरकारी और शक्तिशाली दस्तावेज़-उन्मुख डेटाबेस है जो डेटा को प्रत्येक दस्तावेज़ के भीतर की-मान मानचित्र संरचना का उपयोग करके व्यवस्थित करता है। दस्तावेज़ के भीतर के फ़ील्ड को की/मान जोड़े, सूचियों, या मानचित्रों के रूप में दर्शाया जा सकता है, जो डेटा संग्रहण और पुनर्प्राप्ति में लचीलापन प्रदान करता है।
CouchDB में संग्रहीत प्रत्येक दस्तावेज़ को दस्तावेज़ स्तर पर एक विशिष्ट पहचानकर्ता (_id
) सौंपा जाता है। इसके अतिरिक्त, डेटाबेस में किए गए और सहेजे गए प्रत्येक संशोधन को एक संशोधन संख्या (_rev
) सौंपा जाता है। यह संशोधन संख्या परिवर्तनों के कुशल ट्रैकिंग और प्रबंधन की अनुमति देती है, जिससे डेटाबेस के भीतर डेटा की आसान पुनर्प्राप्ति और समन्वय संभव होता है।
डिफ़ॉल्ट पोर्ट: 5984(http), 6984(https)
यह स्थापित CouchDB उदाहरण के लिए एक GET अनुरोध जारी करता है। उत्तर कुछ इस तरह दिखना चाहिए:
ध्यान दें कि यदि आप couchdb की रूट तक पहुँचते हैं और आपको 401 Unauthorized
मिलता है, जैसे कि: {"error":"unauthorized","reason":"Authentication required."}
आप बैनर या किसी अन्य एंडपॉइंट तक पहुँच नहीं पाएंगे।
ये वे एंडपॉइंट हैं जहाँ आप GET अनुरोध के साथ पहुँच सकते हैं और कुछ दिलचस्प जानकारी निकाल सकते हैं। आप couchdb दस्तावेज़ में अधिक एंडपॉइंट और अधिक विस्तृत विवरण पा सकते हैं।
/_active_tasks
चल रहे कार्यों की सूची, जिसमें कार्य का प्रकार, नाम, स्थिति और प्रक्रिया आईडी शामिल है।
/_all_dbs
CouchDB उदाहरण में सभी डेटाबेस की सूची लौटाता है।
**/_cluster_setup
** नोड या क्लस्टर की स्थिति लौटाता है, क्लस्टर सेटअप विज़ार्ड के अनुसार।
/_db_updates
CouchDB उदाहरण में सभी डेटाबेस घटनाओं की सूची लौटाता है। इस एंडपॉइंट का उपयोग करने के लिए _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}
एंडपॉइंट का उपयोग उस सर्वर के Erlang नोड नाम की पुष्टि करने के लिए किया जा सकता है जो अनुरोध को संसाधित करता है। यह /_node/_local
तक पहुँचने पर इस जानकारी को प्राप्त करने के लिए सबसे उपयोगी है।
/_node/{node-name}/_stats
_stats
संसाधन एक JSON ऑब्जेक्ट लौटाता है जिसमें चल रहे सर्वर के लिए सांख्यिकी होती है। शाब्दिक स्ट्रिंग _local
स्थानीय नोड नाम के लिए एक उपनाम के रूप में कार्य करती है, इसलिए सभी सांख्यिकी URL के लिए, {node-name}
को _local
से बदला जा सकता है, ताकि स्थानीय नोड की सांख्यिकी के साथ बातचीत की जा सके।
/_node/{node-name}/_system
_system संसाधन एक JSON ऑब्जेक्ट लौटाता है जिसमें चल रहे सर्वर के लिए विभिन्न सिस्टम-स्तरीय सांख्यिकी होती है। आप वर्तमान नोड जानकारी प्राप्त करने के लिए {node-name}
के रूप में _local
का उपयोग कर सकते हैं।
/_node/{node-name}/_restart
/_up
पुष्टि करता है कि सर्वर चालू है, चल रहा है, और अनुरोधों का उत्तर देने के लिए तैयार है। यदि maintenance_mode
true
या nolb
है, तो एंडपॉइंट 404 प्रतिक्रिया लौटाएगा।
**/_uuids
** CouchDB उदाहरण से एक या अधिक यूनिवर्सली यूनिक आइडेंटिफायर (UUIDs) का अनुरोध करता है।
**/_reshard
** पूर्ण, विफल, चल रहे, रुके हुए, और कुल कार्यों की संख्या लौटाता है, साथ ही क्लस्टर पर पुनःशार्दन की स्थिति।
यहाँ समझाया गया अधिक दिलचस्प जानकारी निकाली जा सकती है: https://lzone.de/cheat-sheet/CouchDB
यदि वह अनुरोध 401 अनधिकृत के साथ प्रतिक्रिया करता है, तो आपको डेटाबेस तक पहुँचने के लिए कुछ मान्य क्रेडेंशियल्स की आवश्यकता है:
Valid Credentials खोजने के लिए आप कोशिश कर सकते हैं सेवा को ब्रूटफोर्स करें.
यह एक उदाहरण है couchdb प्रतिक्रिया का जब आपके पास पर्याप्त विशेषाधिकार होते हैं डेटाबेस की सूची बनाने के लिए (यह केवल डेटाबेस की एक सूची है):
आप कुछ डेटाबेस जानकारी (जैसे फ़ाइलों की संख्या और आकार) डेटाबेस नाम तक पहुँचकर प्राप्त कर सकते हैं:
डेटाबेस के अंदर प्रत्येक प्रविष्टि की सूची बनाएं
एक डेटाबेस के अंदर एक दस्तावेज़ की सामग्री पढ़ें:
Erlang और JavaScript JSON पार्सर्स के बीच के अंतर के कारण आप निम्नलिखित अनुरोध के साथ एक व्यवस्थापक उपयोगकर्ता बना सकते हैं जिसकी क्रेडेंशियल्स hacktricks:hacktricks
हैं:
इस कमजोरियों के बारे में अधिक जानकारी यहाँ.
उदाहरण यहाँ से.
CouchDB दस्तावेज़ में, विशेष रूप से क्लस्टर सेट-अप से संबंधित अनुभाग में (लिंक), क्लस्टर मोड में CouchDB द्वारा पोर्ट के उपयोग पर चर्चा की गई है। यह उल्लेख किया गया है कि, स्टैंडअलोन मोड की तरह, पोर्ट 5984
का उपयोग किया जाता है। इसके अतिरिक्त, पोर्ट 5986
नोड-स्थानीय APIs के लिए है, और महत्वपूर्ण रूप से, Erlang को Erlang पोर्ट मैपर डेमन (EPMD) के लिए TCP पोर्ट 4369
की आवश्यकता होती है, जो Erlang क्लस्टर के भीतर नोड संचार को सुविधाजनक बनाता है। यह सेटअप एक नेटवर्क बनाता है जहाँ प्रत्येक नोड हर अन्य नोड के साथ इंटरलिंक होता है।
पोर्ट 4369
के बारे में एक महत्वपूर्ण सुरक्षा सलाह को उजागर किया गया है। यदि इस पोर्ट को इंटरनेट या किसी अविश्वसनीय नेटवर्क पर सुलभ बनाया जाता है, तो सिस्टम की सुरक्षा एक अद्वितीय पहचानकर्ता पर भारी निर्भर करती है जिसे "कुकी" कहा जाता है। यह कुकी एक सुरक्षा उपाय के रूप में कार्य करती है। उदाहरण के लिए, एक दिए गए प्रक्रिया सूची में, "monster" नामक कुकी देखी जा सकती है, जो सिस्टम की सुरक्षा ढांचे में इसकी संचालन भूमिका को इंगित करती है।
उन लोगों के लिए जो यह समझने में रुचि रखते हैं कि इस "कुकी" का उपयोग कैसे किया जा सकता है Remote Code Execution (RCE) के लिए Erlang सिस्टम के संदर्भ में, आगे पढ़ने के लिए एक समर्पित अनुभाग उपलब्ध है। यह अनधिकृत तरीकों से Erlang कुकीज़ का लाभ उठाने की विधियों का विवरण देता है ताकि सिस्टम पर नियंत्रण प्राप्त किया जा सके। आप यहां RCE के लिए Erlang कुकीज़ का दुरुपयोग करने पर विस्तृत मार्गदर्शिका का अन्वेषण कर सकते हैं।
उदाहरण यहां से।
हाल ही में प्रकट हुई एक भेद्यता, CVE-2018-8007, जो Apache CouchDB को प्रभावित करती है, का अन्वेषण किया गया, जिसमें यह पता चला कि शोषण के लिए local.ini
फ़ाइल पर लिखने की अनुमति की आवश्यकता होती है। हालांकि सुरक्षा प्रतिबंधों के कारण प्रारंभिक लक्षित प्रणाली पर सीधे लागू नहीं किया जा सकता, लेकिन अन्वेषण उद्देश्यों के लिए local.ini
फ़ाइल पर लिखने की अनुमति देने के लिए संशोधन किए गए। नीचे विस्तृत चरण और कोड उदाहरण प्रदान किए गए हैं, जो प्रक्रिया को प्रदर्शित करते हैं।
पहले, वातावरण को इस बात की पुष्टि करके तैयार किया जाता है कि local.ini
फ़ाइल लिखने योग्य है, जिसे अनुमतियों की सूची बनाकर सत्यापित किया जाता है:
इस कमजोरियों का लाभ उठाने के लिए, एक curl कमांड निष्पादित की जाती है, जो local.ini
में cors/origins
कॉन्फ़िगरेशन को लक्षित करती है। यह [os_daemons]
अनुभाग के तहत अतिरिक्त कमांड के साथ एक नया मूल जोड़ता है, जिसका उद्देश्य मनमाना कोड निष्पादित करना है:
पश्चात सत्यापन local.ini
में इंजेक्ट की गई कॉन्फ़िगरेशन को दिखाता है, बैकअप के साथ तुलना करते हुए परिवर्तनों को उजागर करता है:
शुरुआत में, अपेक्षित फ़ाइल (/tmp/0xdf
) मौजूद नहीं है, जो यह दर्शाता है कि इंजेक्ट किया गया कमांड अभी तक निष्पादित नहीं हुआ है। आगे की जांच से पता चलता है कि CouchDB से संबंधित प्रक्रियाएँ चल रही हैं, जिसमें एक ऐसा भी है जो संभावित रूप से इंजेक्ट किए गए कमांड को निष्पादित कर सकता है:
पहचाने गए CouchDB प्रक्रिया को समाप्त करके और सिस्टम को स्वचालित रूप से इसे पुनः प्रारंभ करने की अनुमति देकर, इंजेक्ट किए गए कमांड का निष्पादन ट्रिगर होता है, जिसे पहले गायब फ़ाइल की उपस्थिति से पुष्टि की जाती है:
यह अन्वेषण विशेष परिस्थितियों के तहत CVE-2018-8007 शोषण की व्यवहार्यता की पुष्टि करता है, विशेष रूप से local.ini
फ़ाइल के लिए लिखने योग्य पहुंच की आवश्यकता। प्रदान किए गए कोड उदाहरण और प्रक्रियात्मक चरण नियंत्रित वातावरण में शोषण को दोहराने के लिए एक स्पष्ट मार्गदर्शिका प्रदान करते हैं।
CVE-2018-8007 के बारे में अधिक जानकारी के लिए, mdsec द्वारा सलाहकार का संदर्भ लें: CVE-2018-8007।
उदाहरण यहां से।
CVE-2017-12636 के रूप में ज्ञात एक भेद्यता का अन्वेषण किया गया, जो CouchDB प्रक्रिया के माध्यम से कोड निष्पादन को सक्षम बनाती है, हालांकि विशिष्ट कॉन्फ़िगरेशन इसके शोषण को रोक सकते हैं। ऑनलाइन उपलब्ध कई प्रमाण-को-कॉन्सेप्ट (POC) संदर्भों के बावजूद, CouchDB संस्करण 2 पर भेद्यता का शोषण करने के लिए समायोजन आवश्यक हैं, जो सामान्यतः लक्षित संस्करण 1.x से भिन्न है। प्रारंभिक चरणों में CouchDB संस्करण की पुष्टि करना और अपेक्षित क्वेरी सर्वरों के पथ की अनुपस्थिति की पुष्टि करना शामिल है:
CouchDB संस्करण 2.0 के लिए, एक नया पथ उपयोग किया जाता है:
नए क्वेरी सर्वर को जोड़ने और सक्रिय करने के प्रयासों को अनुमति से संबंधित त्रुटियों का सामना करना पड़ा, जैसा कि निम्नलिखित आउटपुट द्वारा संकेतित है:
अधिक जांच से पता चला कि local.ini
फ़ाइल के साथ अनुमति की समस्याएँ थीं, जिसे लिखा नहीं जा सकता था। रूट या होमर एक्सेस के साथ फ़ाइल अनुमतियों को संशोधित करके, आगे बढ़ना संभव हो गया:
अगले प्रयासों में क्वेरी सर्वर जोड़ने में सफलता मिली, जैसा कि प्रतिक्रिया में त्रुटि संदेशों की अनुपस्थिति से स्पष्ट है। local.ini
फ़ाइल में सफल संशोधन की पुष्टि फ़ाइल तुलना के माध्यम से की गई:
प्रक्रिया एक डेटाबेस और एक दस्तावेज़ बनाने के साथ जारी रही, इसके बाद नए जोड़े गए क्वेरी सर्वर के लिए एक कस्टम दृश्य मैपिंग के माध्यम से कोड निष्पादित करने का प्रयास किया गया:
A सारांश जिसमें एक वैकल्पिक पेलोड है, विशेष परिस्थितियों के तहत CVE-2017-12636 का शोषण करने के बारे में और जानकारी प्रदान करता है। इस कमजोरियों का शोषण करने के लिए उपयोगी संसाधन में शामिल हैं:
port:5984 couchdb
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)