hacktricks/network-services-pentesting/9200-pentesting-elasticsearch.md

23 KiB

9200 - Elasticsearch पेंटेस्टिंग

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

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

मूल जानकारी

मुख्य पृष्ठ से आप कुछ उपयोगी विवरण पा सकते हैं:

Elasticsearch एक वितरित, ओपन सोर्स सर्च और एनालिटिक्स इंजन है जो सभी प्रकार के डेटा के लिए है, जिसमें टेक्स्टुअल, न्यूमेरिकल, जियोस्पेशियल, स्ट्रक्चर्ड, और अनस्ट्रक्चर्ड शामिल हैं। Elasticsearch Apache Lucene पर आधारित है और पहली बार 2010 में Elasticsearch N.V. (अब Elastic के नाम से जाना जाता है) द्वारा जारी किया गया था। इसके सरल REST APIs, वितरित प्रकृति, गति, और स्केलेबिलिटी के लिए जाना जाता है, Elasticsearch Elastic Stack का केंद्रीय घटक है, जो डेटा इंजेस्शन, समृद्धि, संग्रहण, विश्लेषण, और दृश्यीकरण के लिए ओपन सोर्स टूल्स का एक सेट है। आमतौर पर ELK Stack (Elasticsearch, Logstash, और Kibana के बाद) के रूप में जाना जाता है, Elastic Stack अब Beats का एक समृद्ध संग्रह शामिल करता है, जो हल्के शिपिंग एजेंट्स हैं जो डेटा को Elasticsearch में भेजने के लिए जाने जाते हैं।

Elasticsearch इंडेक्स क्या है?

Elasticsearch इंडेक्स दस्तावेजों का एक संग्रह है जो एक-दूसरे से संबंधित होते हैं। Elasticsearch डेटा को JSON दस्तावेजों के रूप में संग्रहीत करता है। प्रत्येक दस्तावेज़ कुंजियों (फील्ड्स या प्रॉपर्टीज़ के नाम) को उनके संबंधित मूल्यों (स्ट्रिंग्स, नंबर्स, बूलियन्स, तिथियां, मूल्यों के ऐरे, जियोलोकेशन्स, या अन्य प्रकार के डेटा) के साथ जोड़ता है।

Elasticsearch एक डेटा संरचना का उपयोग करता है जिसे इन्वर्टेड इंडेक्स कहा जाता है, जो बहुत तेज़ फुल-टेक्स्ट सर्चेस की अनुमति देने के लिए डिज़ाइन किया गया है। एक इन्वर्टेड इंडेक्स में हर अनोखे शब्द की सूची होती है जो किसी भी दस्तावेज़ में प्रकट होता है और उन सभी दस्तावेजों की पहचान करता है जिनमें प्रत्येक शब्द होता है।

इंडेक्सिंग प्रक्रिया के दौरान, Elasticsearch दस्तावेजों को संग्रहीत करता है और लगभग वास्तविक समय में दस्तावेज़ डेटा को खोजने योग्य बनाने के लिए एक इन्वर्टेड इंडेक्स बनाता है। इंडेक्सिंग को इंडेक्स API के साथ प्रारंभ किया जाता है, जिसके माध्यम से आप एक विशिष्ट इंडेक्स में एक JSON दस्तावेज़ जोड़ सकते हैं या अपडेट कर सकते हैं।

डिफ़ॉल्ट पोर्ट: 9200/tcp

मैनुअल एन्यूमरेशन

बैनर

Elasticsearch तक पहुंचने के लिए उपयोग किया गया प्रोटोकॉल HTTP है। जब आप इसे HTTP के माध्यम से एक्सेस करते हैं तो आपको कुछ दिलचस्प जानकारी मिलेगी: http://10.10.10.115:9200/

यदि आप / एक्सेस करते समय वह प्रतिक्रिया नहीं देखते हैं तो निम्नलिखित अनुभाग देखें।

प्रमाणीकरण

डिफ़ॉल्ट रूप से Elasticsearch में प्रमाणीकरण सक्षम नहीं होता है, इसलिए डिफ़ॉल्ट रूप से आप डेटाबेस के अंदर की सभी चीजों तक किसी भी क्रेडेंशियल्स का उपयोग किए बिना पहुंच सकते हैं।

आप निम्नलिखित अनुरोध के साथ प्रमाणीकरण की अक्षमता की पुष्टि कर सकते हैं:

curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
{"error":{"root_cause":[{"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."}],"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."},"status":500}

हालांकि, यदि आप / पर एक अनुरोध भेजते हैं और निम्नलिखित जैसा प्रतिसाद प्राप्त करते हैं:

{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}

इसका मतलब है कि प्रमाणीकरण कॉन्फ़िगर किया गया है और आपको मान्य क्रेडेंशियल्स की आवश्यकता है ताकि Elasticsearch से कोई भी जानकारी प्राप्त की जा सके। फिर, आप इसे ब्रूटफोर्स करने की कोशिश कर सकते हैं (यह HTTP बेसिक ऑथ का उपयोग करता है, इसलिए कुछ भी जो HTTP बेसिक ऑथ को ब्रूटफोर्स कर सकता है, उसका उपयोग किया जा सकता है)।
यहाँ आपके पास डिफ़ॉल्ट यूज़रनेम्स की सूची है: elastic (सुपरयूज़र), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_._ Elasticsearch के पुराने संस्करणों में इस यूज़र के लिए डिफ़ॉल्ट पासवर्ड changeme होता है

curl -X GET http://user:password@IP:9200/

मूल उपयोगकर्ता सूचीकरण

#List all roles on the system:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/role"

#List all users on the system:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user"

#Get more information about the rights of an user:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/<USERNAME>"

Elastic जानकारी

यहाँ कुछ endpoints हैं जिन्हें आप GET के माध्यम से एक्सेस कर सकते हैं ताकि elasticsearch के बारे में कुछ जानकारी प्राप्त कर सकें:

_cat /_cluster /_security
/_cat/segments /_cluster/allocation/explain /_security/user
/_cat/shards /_cluster/settings /_security/privilege
/_cat/repositories /_cluster/health /_security/role_mapping
/_cat/recovery /_cluster/state /_security/role
/_cat/plugins /_cluster/stats /_security/api_key
/_cat/pending_tasks /_cluster/pending_tasks
/_cat/nodes /_nodes
/_cat/tasks /_nodes/usage
/_cat/templates /_nodes/hot_threads
/_cat/thread_pool /_nodes/stats
/_cat/ml/trained_models /_tasks
/_cat/transforms/_all /_remote/info
/_cat/aliases
/_cat/allocation
/_cat/ml/anomaly_detectors
/_cat/count
/_cat/ml/data_frame/analytics
/_cat/ml/datafeeds
/_cat/fielddata
/_cat/health
/_cat/indices
/_cat/master
/_cat/nodeattrs
/_cat/nodes

ये endpoints दस्तावेज़ीकरण से लिए गए हैं जहाँ आप और अधिक जानकारी पा सकते हैं
साथ ही, यदि आप /_cat एक्सेस करते हैं तो प्रतिक्रिया में उस instance द्वारा समर्थित /_cat/* endpoints शामिल होंगे।

/_security/user में (यदि auth सक्षम है) आप देख सकते हैं कि कौन सा उपयोगकर्ता superuser भूमिका के साथ है।

Indices

आप http://10.10.10.115:9200/_cat/indices?v एक्सेस करके सभी indices एकत्रित कर सकते हैं

health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana 6tjAYZrgQ5CwwR0g6VOoRg   1   0          1            0        4kb            4kb
yellow open   quotes  ZG2D1IqkQNiNZmi2HRImnQ   5   1        253            0    262.7kb        262.7kb
yellow open   bank    eSVpNfCfREyYoVigNWcrMw   5   1       1000            0    483.2kb        483.2kb

इंडेक्स की जानकारी

किस प्रकार का डेटा एक इंडेक्स के अंदर सेव है, इसकी जानकारी प्राप्त करने के लिए आप इस पते पर जा सकते हैं: http://host:9200/<index> उदाहरण के लिए इस मामले में http://10.10.10.115:9200/bank

इंडेक्स डंप करें

यदि आप एक इंडेक्स की सभी सामग्री को डंप करना चाहते हैं, तो आप इस पते पर जा सकते हैं: http://host:9200/<index>/_search?pretty=true जैसे http://10.10.10.115:9200/bank/_search?pretty=true

इस बिंदु पर थोड़ा समय लें और बैंक इंडेक्स के अंदर प्रत्येक दस्तावेज़ (प्रविष्टि) की सामग्री की तुलना करें और इस इंडेक्स के क्षेत्रों से जो हमने पिछले अनुभाग में देखा था।

इसलिए, इस बिंदु पर आप देख सकते हैं कि "हिट्स" के अंदर "टोटल" नामक एक क्षेत्र है जो दर्शाता है कि इस इंडेक्स के अंदर 1000 दस्तावेज़ पाए गए लेकिन केवल 10 को पुनः प्राप्त किया गया। यह इसलिए है क्योंकि डिफ़ॉल्ट रूप से 10 दस्तावेज़ों की सीमा होती है
लेकिन, अब जब आप जानते हैं कि इस इंडेक्स में 1000 दस्तावेज़ हैं, आप उन सभी को डंप कर सकते हैं size पैरामीटर में आप जितनी प्रविष्टियों को डंप करना चाहते हैं उस संख्या को इंगित करके: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000asd
नोट: यदि आप बड़ी संख्या इंगित करते हैं तो सभी प्रविष्टियाँ वैसे भी डंप हो जाएंगी, उदाहरण के लिए आप size=9999 इंगित कर सकते हैं और यह अजीब होगा यदि अधिक प्रविष्टियाँ होतीं (लेकिन आपको जांच करनी चाहिए)।

सभी डंप करें

सभी को डंप करने के लिए आप पहले की तरह ही पथ पर जा सकते हैं लेकिन किसी भी इंडेक्स को इंगित किए बिना http://host:9200/_search?pretty=true जैसे http://10.10.10.115:9200/_search?pretty=true
याद रखें कि इस मामले में 10 परिणामों की डिफ़ॉल्ट सीमा लागू होगी। आप size पैरामीटर का उपयोग करके अधिक मात्रा में परिणामों को डंप कर सकते हैं। अधिक जानकारी के लिए पिछला अनुभाग पढ़ें।

खोज

यदि आप कुछ जानकारी की खोज कर रहे हैं तो आप सभी इंडेक्स पर एक कच्ची खोज कर सकते हैं http://host:9200/_search?pretty=true&q=<search_term> जैसे http://10.10.10.115:9200/_search?pretty=true&q=Rockwell

यदि आप केवल एक इंडेक्स पर खोज करना चाहते हैं तो आप पथ पर इसे निर्दिष्ट कर सकते हैं: http://host:9200/<index>/_search?pretty=true&q=<search_term>

नोट करें कि q पैरामीटर जो सामग्री खोजने के लिए उपयोग होता है नियमित अभिव्यक्तियों का समर्थन करता है

आप https://github.com/misalabs/horuz जैसी किसी चीज़ का उपयोग करके एक elasticsearch सेवा को fuzz कर सकते हैं।

लिखने की अनुमतियां

आप एक नए इंडेक्स के अंदर एक नया दस्तावेज़ बनाने की कोशिश करके अपनी लिखने की अनुमतियों की जांच कर सकते हैं, निम्नलिखित जैसा कुछ चलाकर:

curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d'
{
"bookId" : "A00-3",
"author" : "Sankaran",
"publisher" : "Mcgrahill",
"name" : "how to get a job"
}'

यह cmd एक नया इंडेक्स बनाएगा जिसे bookindex कहा जाता है जिसमें books प्रकार का एक दस्तावेज़ होगा जिसमें "bookId", "author", "publisher" और "name" गुण होंगे।

ध्यान दें कि कैसे नया इंडेक्स अब सूची में दिखाई देता है:

और स्वचालित रूप से बनाई गई संपत्तियों का ध्यान दें:

स्वचालित सूचीबद्धता

कुछ उपकरण पहले प्रस्तुत किए गए कुछ डेटा प्राप्त करेंगे:

msf > use auxiliary/scanner/elasticsearch/indices_enum

Shodan

  • port:9200 elasticsearch
शून्य से नायक तक AWS हैकिंग सीखें htARTE (HackTricks AWS रेड टीम एक्सपर्ट) के साथ!

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