9200 - Pentesting Elasticsearch
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ ์ ๋ณด
Elasticsearch๋ ๋ถ์ฐํ, ์คํ ์์ค ๊ฒ์ ๋ฐ ๋ถ์ ์์ง์ผ๋ก ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์๋, ํ์ฅ์ฑ, ๊ฐ๋จํ REST API๋ก ์ ์๋ ค์ ธ ์์ต๋๋ค. Apache Lucene์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ 2010๋ ์ Elasticsearch N.V. (ํ์ฌ Elastic๋ก ์๋ ค์ง)์์ ์ฒ์ ์ถ์๋์์ต๋๋ค. Elasticsearch๋ ๋ฐ์ดํฐ ์์ง, ๋ณด๊ฐ, ์ ์ฅ, ๋ถ์ ๋ฐ ์๊ฐํ๋ฅผ ์ํ ์คํ ์์ค ๋๊ตฌ ๋ชจ์์ธ Elastic Stack์ ํต์ฌ ๊ตฌ์ฑ ์์์ ๋๋ค. ์ด ์คํ์ ์ผ๋ฐ์ ์ผ๋ก ELK Stack์ด๋ผ๊ณ ํ๋ฉฐ, Logstash์ Kibana๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ํ์ฌ Beats๋ผ๋ ๊ฒฝ๋ ๋ฐ์ดํฐ ์ ์ก ์์ด์ ํธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
Elasticsearch ์ธ๋ฑ์ค๋ ๋ฌด์์ธ๊ฐ?
Elasticsearch ์ธ๋ฑ์ค๋ ๊ด๋ จ ๋ฌธ์์ ๋ชจ์์ผ๋ก JSON ํ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ๊ฐ ๋ฌธ์๋ ํค์ ํด๋น ๊ฐ(๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ, ๋ ์ง, ๋ฐฐ์ด, ์ง๋ฆฌ์ ์์น ๋ฑ)์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Elasticsearch๋ ๋น ๋ฅธ ์ ์ฒด ํ ์คํธ ๊ฒ์์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ์ญ ์ธ๋ฑ์ค๋ผ๋ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ์ธ๋ฑ์ค๋ ๋ฌธ์ ๋ด์ ๋ชจ๋ ๊ณ ์ ๋จ์ด๋ฅผ ๋์ดํ๊ณ ๊ฐ ๋จ์ด๊ฐ ๋ํ๋๋ ๋ฌธ์๋ฅผ ์๋ณํฉ๋๋ค.
์ธ๋ฑ์ฑ ๊ณผ์ ์์ Elasticsearch๋ ๋ฌธ์๋ฅผ ์ ์ฅํ๊ณ ์ญ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ์ฌ ๊ฑฐ์ ์ค์๊ฐ ๊ฒ์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ธ๋ฑ์ค API๋ ํน์ ์ธ๋ฑ์ค ๋ด์์ JSON ๋ฌธ์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๊ธฐ๋ณธ ํฌํธ: 9200/tcp
์๋ ์ด๊ฑฐ
๋ฐฐ๋
Elasticsearch์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ HTTP์
๋๋ค. HTTP๋ฅผ ํตํด ์ ๊ทผํ๋ฉด ํฅ๋ฏธ๋ก์ด ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: http://10.10.10.115:9200/
.png)
/์ ์ ๊ทผํ ๋ ํด๋น ์๋ต์ด ๋ณด์ด์ง ์์ผ๋ฉด ๋ค์ ์น์
์ ์ฐธ์กฐํ์ญ์์ค.
์ธ์ฆ
๊ธฐ๋ณธ์ ์ผ๋ก 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}
์ธ์ฆ์ด ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ ์ ํจํ ์๊ฒฉ ์ฆ๋ช
์ด ํ์ํ๋ค๋ ์๋ฏธ์
๋๋ค. ๊ทธ๋ฐ ๋ค์, ๋ธ๋ฃจํธํฌ์ค๋ฅผ ์๋ํ ์ ์์ต๋๋ค (HTTP ๊ธฐ๋ณธ ์ธ์ฆ์ ์ฌ์ฉํ๋ฏ๋ก, HTTP ๊ธฐ๋ณธ ์ธ์ฆ์ BFํ ์ ์๋ ๋ชจ๋ ๊ฒ์ด ์ฌ์ฉ๋ ์ ์์ต๋๋ค).
์ฌ๊ธฐ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ด๋ฆ ๋ชฉ๋ก์ด ์์ต๋๋ค: 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 Info
๋ค์์ 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 |
์ด ์๋ํฌ์ธํธ๋ ๋ฌธ์์์ ๊ฐ์ ธ์จ ๊ฒ์
๋๋ค ์ฌ๊ธฐ์์ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๋ํ, /_cat์ ์ ๊ทผํ๋ฉด ์๋ต์๋ ์ธ์คํด์ค์์ ์ง์ํ๋ /_cat/* ์๋ํฌ์ธํธ๊ฐ ํฌํจ๋ฉ๋๋ค.
/_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๋ฅผ ์ฌ์ฉํฉ๋๋ค.
.png)
์ธ๋ฑ์ค ๋คํ
์ธ๋ฑ์ค์ ๋ชจ๋ ๋ด์ฉ์ ๋คํํ๋ ค๋ฉด http://host:9200/<index>/_search?pretty=true์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด http://10.10.10.115:9200/bank/_search?pretty=true์ ๊ฐ์ต๋๋ค.
.png)
์ํ ์ธ๋ฑ์ค ๋ด ๊ฐ ๋ฌธ์(ํญ๋ชฉ)์ ๋ด์ฉ๊ณผ ์ด์ ์น์ ์์ ๋ณธ ์ด ์ธ๋ฑ์ค์ ํ๋๋ฅผ ๋น๊ตํด ๋ณด์ธ์.
์ด ์์ ์์ โhitsโ ์์ โtotalโ์ด๋ผ๋ ํ๋๊ฐ ์์ด ์ด ์ธ๋ฑ์ค ๋ด์ 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์ ๊ฐ์ต๋๋ค.
.png)
ํน์ ์ธ๋ฑ์ค์์๋ง ๊ฒ์ํ๋ ค๋ฉด ๊ฒฝ๋ก์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ฉด ๋ฉ๋๋ค: http://host:9200/<index>/_search?pretty=true&q=<search_term>
q ๋งค๊ฐ๋ณ์๋ ์ฝํ ์ธ ๊ฒ์์ ์ ๊ท ํํ์์ ์ง์ํฉ๋๋ค.
Elasticsearch ์๋น์ค๋ฅผ ํผ์งํ๊ธฐ ์ํด 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๋ books ์ ํ์ ๋ฌธ์์ ํจ๊ป ์ ์ธ๋ฑ์ค bookindex๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๋ฌธ์๋ โbookIdโ, โauthorโ, โpublisherโ ๋ฐ โnameโ ์์ฑ์ ๊ฐ์ง๋๋ค.
์ ์ธ๋ฑ์ค๊ฐ ๋ชฉ๋ก์ ๋ํ๋๋ ๋ฐฉ์์ ์ฃผ๋ชฉํ์ธ์:
.png)
๊ทธ๋ฆฌ๊ณ ์๋์ผ๋ก ์์ฑ๋ ์์ฑ์ ์ฃผ๋ชฉํ์ธ์:
.png)
์๋ ์ด๊ฑฐ
์ผ๋ถ ๋๊ตฌ๋ ์ด์ ์ ์ ์๋ ๋ฐ์ดํฐ ์ค ์ผ๋ถ๋ฅผ ์ป์ต๋๋ค:
msf > use auxiliary/scanner/elasticsearch/indices_enum
Shodan
port:9200 elasticsearch
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


