22 KiB
9200 - पेंटेस्टिंग एलास्टिकसर्च
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान देखें!
- आधिकारिक PEASS और HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह और हमें ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- हैकिंग ट्रिक्स साझा करें द्वारा PRs सबमिट करके HackTricks और HackTricks Cloud github repos में।
मूल जानकारी
एलास्टिकसर्च एक वितरित, ओपन सोर्स खोज और विश्लेषण इंजन है जो सभी प्रकार के डेटा के लिए है। यह अपनी गति, स्केलेबिलिटी, और सरल REST API के लिए प्रसिद्ध है। Apache Lucene पर निर्मित, यह 2010 में पहली बार Elasticsearch N.V. (अब Elastic के रूप में जाना जाता है) द्वारा जारी किया गया था। Elasticsearch Elastic Stack का मूल घटक है, डेटा इनजेक्शन, एनरिचमेंट, स्टोरेज, विश्लेषण, और विजुअलाइजेशन के लिए ओपन सोर्स उपकरणों का एक संग्रह है। यह स्टैक, जिसे आमतौर पर ELK स्टैक कहा जाता है, लॉगस्टैश और किबाना को भी शामिल करता है, और अब बीट्स नामक हल्के डेटा शिपिंग एजेंट्स हैं।
एलास्टिकसर्च इंडेक्स क्या है?
एक एलास्टिकसर्च इंडेक्स एक संबंधित दस्तावेज़ों का संग्रह है जो JSON के रूप में स्टोर किए जाते हैं। प्रत्येक दस्तावेज़ में कुंजी और उनके संबंधित मान (स्ट्रिंग, संख्या, बूलियन, तारीखें, एरे, भू-स्थान आदि) होते हैं।
एलास्टिकसर्च एक प्रभावी डेटा संरचना का उपयोग करता है जिसे उल्टा इंडेक्स कहा जाता है जो तेज फुल-टेक्स्ट खोज को सुविधाजनक बनाने में मदद करता है। यह इंडेक्स दस्तावेज़ों में हर अद्वितीय शब्द को सूचीबद्ध करता है और प्रत्येक शब्द में किस दस्तावेज़ में वह शब्द पाया जाता है, वह पहचानता है।
इंडेक्सिंग प्रक्रिया के दौरान, एलास्टिकसर्च दस्तावेज़ों को संग्रहित करता है और उल्टा इंडेक्स निर्माण करता है, जिससे नजदीकी वास्तविक समय में खोज की जा सकती है। इंडेक्स API का उपयोग किसी विशिष्ट इंडेक्स के भीतर JSON दस्तावेज़ जोड़ने या अपडेट करने के लिए किया जाता है।
डिफ़ॉल्ट पोर्ट: 9200/tcp
मैनुअल गणना
बैनर
एलास्टिकसर्च तक पहुंचने के लिए उपयोग किया जाने वाला प्रोटोकॉल HTTP है। जब आप इसे HTTP के माध्यम से एक्सेस करते हैं तो आपको कुछ दिलचस्प जानकारी मिलेगी: http://10.10.10.115:9200/
यदि आप /
तक पहुंचते समय उस प्रतिक्रिया को नहीं देखते हैं, तो निम्नलिखित खंड देखें।
प्रमाणीकरण
डिफ़ॉल्ट रूप से एलास्टिकसर्च में प्रमाणीकरण सक्षम नहीं है, इसलिए डेटाबेस के अंदर कुछ भी उपयोग करते हुए आप इसका एक्सेस कर सकते हैं बिना किसी प्रमाणों का उपयोग किए।
आप यह सत्यापित कर सकते हैं कि प्रमाणीकरण अक्षम है एक अनुरोध के साथ:
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}
यह यहाँ यह मतलब है कि प्रमाणीकरण कॉन्फ़िगर किया गया है और आपको मान्य क्रेडेंशियल्स की आवश्यकता है ताकि आप एलास्टिकसर्च से कोई भी जानकारी प्राप्त कर सकें। फिर, आप इसे ब्रूटफ़ोर्स करने की कोशिश कर सकते हैं (यह HTTP बेसिक ऑथ का उपयोग करता है, इसलिए कुछ भी जो बीएफ़ HTTP बेसिक ऑथ कर सकता है, उसका उपयोग किया जा सकता है)।
यहाँ आपके पास एक सूची डिफ़ॉल्ट उपयोगकर्ता नाम हैं: एलास्टिक (सुपरयूजर), रिमोट_मॉनिटरिंग_यूज़र, बीट्स_सिस्टम, लॉगस्टैश_सिस्टम, किबाना, किबाना_सिस्टम, एपीएम_सिस्टम, _एनोनिमस_।_ एलास्टिकसर्च के पुराने संस्करणों में इस उपयोगकर्ता के लिए डिफ़ॉल्ट पासवर्ड 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 Info
यहाँ कुछ 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
तक पहुंचते हैं तो प्रतिक्रिया में उस उदाहरण के /_cat/*
endpoints शामिल होंगे जिन्हें इंस्टेंस समर्थित करता है।
/_security/user
में (यदि प्रमाणीकरण सक्षम है) आप देख सकते हैं कि कौन सा उपयोगकर्ता भूमिका superuser
रखता है।
Indices
आप http://10.10.10.115:9200/_cat/indices?v
पहुंचकर सभी अनुक्रमों को एकत्र कर सकते हैं।
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 दस्तावेज हैं, तो आप सभी उन्हें डंप कर सकते हैं जिसे आप डंप करना चाहते हैं उसे इंडिकेट करते हुए साइज़
पैरामीटर में: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
नोट: यदि आप बड़ी संख्या इंडिकेट करते हैं तो सभी दस्तावेज फिर भी डंप हो जाएंगे, उदाहरण के लिए आप साइज़=9999
इंडिकेट कर सकते हैं और अगर अधिक दस्तावेज होते हैं तो यह अजीब होगा (लेकिन आपको जांचना चाहिए)।
सभी डंप
सभी डंप करने के लिए आप पिछले इंडेक्स के बिना जाने के लिए वही पथ चलेंhttp://host:9200/_search?pretty=true
जैसे कि http://10.10.10.115:9200/_search?pretty=true
ध्यान रखें कि इस मामले में डिफ़ॉल्ट सीमित 10 परिणाम लागू होगा। आप साइज़
पैरामीटर का उपयोग करके अधिक संख्या के परिणाम डंप कर सकते हैं। अधिक जानकारी के लिए पिछले खंड को पढ़ें।
खोज
यदि आप कुछ जानकारी खोज रहे हैं तो आप सभी इंडेक्स पर रॉ सर्च कर सकते हैं 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 जैसी कुछ भी उपयोग कर सकते हैं।
लेखन अनुमतियाँ
आप अपनी लेखन अनुमतियों की जांच कर सकते हैं एक नए इंडेक्स के अंदर एक नए दस्तावेज बनाने की कोशिश करके कुछ ऐसा चला सकते हैं:
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
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
शोडन
port:9200 एलास्टिकसर्च
जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- अगर आप चाहते हैं कि आपकी कंपनी HackTricks में विज्ञापित हो या HackTricks को PDF में डाउनलोड करें तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके HackTricks और HackTricks Cloud github रेपो में।