# 9200 - Elasticsearch 펜테스팅
htARTE (HackTricks AWS Red Team Expert)를 통해 **제로**부터 **히어로**까지 AWS 해킹을 배우세요!
HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고**되길 원하거나 **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하고 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 참여하세요.
## 기본 정보
Elasticsearch는 **분산**, **오픈 소스** 검색 및 분석 엔진으로 **모든 유형의 데이터**에 대해 사용됩니다. **속도**, **확장성**, **간단한 REST API**로 유명합니다. Apache Lucene 위에 구축되어 2010년에 Elasticsearch N.V. (현재 Elastic으로 알려짐)에 의해 처음 출시되었습니다. Elasticsearch는 데이터 수집, 풍부화, 저장, 분석 및 시각화를 위한 오픈 소스 도구 모음인 Elastic Stack의 핵심 구성 요소입니다. 이 스택은 ELK 스택으로도 알려져 있으며 Logstash와 Kibana를 포함하며 이제 가벼운 데이터 전송 에이전트인 Beats도 포함하고 있습니다.
### Elasticsearch 인덱스란 무엇인가요?
Elasticsearch **인덱스**는 **JSON**으로 저장된 **관련 문서**의 컬렉션입니다. 각 문서는 **키**와 해당 **값** (문자열, 숫자, 부울, 날짜, 배열, 지리 위치 등)으로 구성됩니다.
Elasticsearch는 빠른 전체 텍스트 검색을 용이하게 하는 **역색인**이라는 효율적인 데이터 구조를 사용합니다. 이 인덱스는 문서에 있는 모든 고유한 단어를 나열하고 각 단어가 나타나는 문서를 식별합니다.
색인화 프로세스 중에 Elasticsearch는 문서를 저장하고 역색인을 구성하여 거의 실시간 검색이 가능하게 합니다. **인덱스 API**는 특정 인덱스 내에서 JSON 문서를 추가하거나 업데이트하는 데 사용됩니다.
**기본 포트**: 9200/tcp
## 수동 열거
### 배너
Elasticsearch에 액세스하는 데 사용되는 프로토콜은 **HTTP**입니다. HTTP를 통해 액세스하면 몇 가지 흥미로운 정보를 찾을 수 있습니다: `http://10.10.10.115:9200/`
![](<../.gitbook/assets/image (294).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}
```
이것은 인증이 구성되어 있고 **유효한 자격 증명**이 필요하므로 elasticserach에서 정보를 얻으려면 유효한 자격 증명이 필요합니다. 그런 다음 [**브루트포스를 시도**](../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 정보
다음은 Elasticsearch에 대한 일부 정보를 얻기 위해 **GET을 통해 액세스**할 수 있는 몇 가지 엔드포인트입니다:
| \_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 | | |
이러한 엔드포인트는 [**문서에서 가져온 것**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html)이며, 여기에서 **더 많은 정보를** 찾을 수 있습니다.\
또한, `/_cat`에 액세스하면 응답에 인스턴스에서 지원하는 `/_cat/*` 엔드포인트가 포함됩니다.
`/_security/user`에서 (인증이 활성화된 경우) `superuser` 역할을 가진 사용자를 볼 수 있습니다.
### 인덱스
`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/` 예를 들어 이 경우 `http://10.10.10.115:9200/bank`
![](<../.gitbook/assets/image (342).png>)
### 인덱스 덤프
인덱스의 **모든 내용을 덤프**하려면 다음을 액세스할 수 있습니다: `http://host:9200//_search?pretty=true`와 같이 `http://10.10.10.115:9200/bank/_search?pretty=true`
![](<../.gitbook/assets/image (914).png>)
_은행 인덱스 내의 각 문서(항목)의 내용과 이전 섹션에서 본 이 인덱스의 필드를 비교해 보세요._
따라서 이 시점에서 **"hits" 내부에 있는 "total"이라는 필드**가 있음을 알 수 있습니다. 이 필드는 이 인덱스 내에서 **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 (335).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"
}'
```
해당 명령어는 `bookindex`라는 **새 인덱스**를 생성하며, "_bookId_", "_author_", "_publisher_", "_name_" 속성을 가진 `books` 유형의 문서를 만듭니다.
**새 인덱스가 목록에 나타나는 모습**을 확인하세요:
![](<../.gitbook/assets/image (130).png>)
그리고 **자동으로 생성된 속성**을 확인하세요:
![](<../.gitbook/assets/image (434).png>)
## 자동 열거
일부 도구는 이전에 제시된 데이터 중 일부를 획득할 것입니다:
```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum
```
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
## Shodan
* `포트: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 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 요령을 공유하세요.