# 9200 - Elasticsearch पेंटेस्टिंग
AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) का संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) या **Twitter** पर मुझे 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) **का अनुसरण करें**.
* **अपनी हैकिंग ट्रिक्स साझा करें, HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके.
## मूल जानकारी
[मुख्य पृष्ठ](https://www.elastic.co/what-is/elasticsearch) से आप कुछ उपयोगी विवरण पा सकते हैं:
> 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/`
![](<../.gitbook/assets/image (264).png>)
यदि आप `/` एक्सेस करते समय वह प्रतिक्रिया नहीं देखते हैं तो निम्नलिखित अनुभाग देखें।
### प्रमाणीकरण
**डिफ़ॉल्ट रूप से Elasticsearch में प्रमाणीकरण सक्षम नहीं होता है**, इसलिए डिफ़ॉल्ट रूप से आप डेटाबेस के अंदर की सभी चीजों तक किसी भी क्रेडेंशियल्स का उपयोग किए बिना पहुंच सकते हैं।
आप निम्नलिखित अनुरोध के साथ प्रमाणीकरण की अक्षमता की पुष्टि कर सकते हैं:
```bash
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}
```
**हालांकि**, यदि आप `/` पर एक अनुरोध भेजते हैं और निम्नलिखित जैसा प्रतिसाद प्राप्त करते हैं:
```bash
{"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 से कोई भी जानकारी प्राप्त की जा सके। फिर, आप [**इसे ब्रूटफोर्स करने की कोशिश कर सकते हैं**](../generic-methodologies-and-resources/brute-force.md#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/
```
### मूल उपयोगकर्ता सूचीकरण
```bash
#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/"
```
### 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 [**दस्तावेज़ीकरण से लिए गए हैं**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) जहाँ आप **और अधिक जानकारी पा सकते हैं**।\
साथ ही, यदि आप `/_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/` उदाहरण के लिए इस मामले में `http://10.10.10.115:9200/bank`
![](<../.gitbook/assets/image (265).png>)
### इंडेक्स डंप करें
यदि आप **एक इंडेक्स की सभी सामग्री को डंप करना चाहते हैं**, तो आप इस पते पर जा सकते हैं: `http://host:9200//_search?pretty=true` जैसे `http://10.10.10.115:9200/bank/_search?pretty=true`
![](<../.gitbook/assets/image (266).png>)
_इस बिंदु पर थोड़ा समय लें और बैंक इंडेक्स के अंदर प्रत्येक दस्तावेज़ (प्रविष्टि) की सामग्री की तुलना करें और इस इंडेक्स के क्षेत्रों से जो हमने पिछले अनुभाग में देखा था।_
इसलिए, इस बिंदु पर आप देख सकते हैं कि **"हिट्स" के अंदर "टोटल" नामक एक क्षेत्र है** जो दर्शाता है कि **इस इंडेक्स के अंदर 1000 दस्तावेज़ पाए गए** लेकिन केवल 10 को पुनः प्राप्त किया गया। यह इसलिए है क्योंकि **डिफ़ॉल्ट रूप से 10 दस्तावेज़ों की सीमा होती है**।\
लेकिन, अब जब आप जानते हैं कि **इस इंडेक्स में 1000 दस्तावेज़ हैं**, आप **उन सभी को डंप कर सकते हैं** **`size`** पैरामीटर में आप जितनी प्रविष्टियों को डंप करना चाहते हैं उस संख्या को इंगित करके: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
_नोट: यदि आप बड़ी संख्या इंगित करते हैं तो सभी प्रविष्टियाँ वैसे भी डंप हो जाएंगी, उदाहरण के लिए आप `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=` जैसे `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
![](<../.gitbook/assets/image (267).png>)
यदि आप केवल **एक इंडेक्स पर खोज करना चाहते हैं** तो आप **पथ पर इसे निर्दिष्ट** कर सकते हैं: `http://host:9200//_search?pretty=true&q=`
_नोट करें कि q पैरामीटर जो सामग्री खोजने के लिए उपयोग होता है **नियमित अभिव्यक्तियों का समर्थन करता है**_
आप [https://github.com/misalabs/horuz](https://github.com/misalabs/horuz) जैसी किसी चीज़ का उपयोग करके एक elasticsearch सेवा को fuzz कर सकते हैं।
### लिखने की अनुमतियां
आप एक नए इंडेक्स के अंदर एक नया दस्तावेज़ बनाने की कोशिश करके अपनी लिखने की अनुमतियों की जांच कर सकते हैं, निम्नलिखित जैसा कुछ चलाकर:
```bash
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_" गुण होंगे।
ध्यान दें कि कैसे **नया इंडेक्स अब सूची में दिखाई देता है**:
![](<../.gitbook/assets/image (268).png>)
और **स्वचालित रूप से बनाई गई संपत्तियों** का ध्यान दें:
![](<../.gitbook/assets/image (269).png>)
## स्वचालित सूचीबद्धता
कुछ उपकरण पहले प्रस्तुत किए गए कुछ डेटा प्राप्त करेंगे:
```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum
```
## Shodan
* `port:9200 elasticsearch`
शून्य से नायक तक AWS हैकिंग सीखें htARTE (HackTricks AWS रेड टीम एक्सपर्ट) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) का संग्रह
* 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram समूह**](https://t.me/peass) में या **Twitter** पर 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) को **फॉलो करें**.
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स शेयर करें.