hacktricks/src/network-services-pentesting/8086-pentesting-influxdb.md

107 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 8086 - Pentesting InfluxDB
{{#include ../banners/hacktricks-training.md}}
## Podstawowe informacje
**InfluxDB** to otwartoźródłowa **baza danych szeregów czasowych (TSDB)** opracowana przez InfluxData. TSDB są zoptymalizowane do przechowywania i serwowania danych szeregów czasowych, które składają się z par znaczników czasowych i wartości. W porównaniu do baz danych ogólnego przeznaczenia, TSDB oferują znaczące ulepszenia w **przestrzeni dyskowej** i **wydajności** dla zbiorów danych szeregów czasowych. Wykorzystują specjalistyczne algorytmy kompresji i mogą być skonfigurowane do automatycznego usuwania starych danych. Specjalistyczne indeksy bazy danych również poprawiają wydajność zapytań.
**Domyślny port**: 8086
```
PORT STATE SERVICE VERSION
8086/tcp open http InfluxDB http admin 1.7.5
```
## Enumeracja
Z punktu widzenia pentestera to kolejna baza danych, która może przechowywać wrażliwe informacje, więc interesujące jest, aby wiedzieć, jak zrzucić wszystkie dane.
### Uwierzytelnianie
InfluxDB może wymagać uwierzytelnienia lub nie.
```bash
# Try unauthenticated
influx -host 'host name' -port 'port #'
> 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 ominięcie uwierzytelniania: [**CVE-2019-20933**](https://github.com/LorenzoTullini/InfluxDB-Exploit-CVE-2019-20933)
### Ręczna enumeracja
Informacje w tym przykładzie zostały zaczerpnięte z [**tutaj**](https://oznetnerd.com/2017/06/11/getting-know-influxdb/).
#### Pokaż bazy danych
Znalezione bazy danych to `telegraf` i `internal` (tę drugą znajdziesz wszędzie)
```bash
> show databases
name: databases
name
----
telegraf
_internal
```
#### Pokaż tabele/pomiar
Dokumentacja [**InfluxDB**](https://docs.influxdata.com/influxdb/v1.2/introduction/getting_started/) wyjaśnia, że **pomiar** w InfluxDB można porównać z tabelami SQL. Nomenklatura tych **pomiarów** wskazuje na ich odpowiednią zawartość, każdy zawiera dane związane z określoną jednostką.
```bash
> show measurements
name: measurements
name
----
cpu
disk
diskio
kernel
mem
processes
swap
system
```
#### Pokaż klucze kolumn/pól
Klucze pól są jak **kolumny** bazy danych
```bash
> 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
A na koniec możesz **zrzucić tabelę** wykonując coś takiego
```bash
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
```
> [!WARNING]
> W niektórych testach z obejściem uwierzytelniania zauważono, że nazwa tabeli musi być w podwójnych cudzysłowach, jak: `select * from "cpu"`
### Zautomatyzowane Uwierzytelnianie
```bash
msf6 > use auxiliary/scanner/http/influxdb_enum
```
{{#include ../banners/hacktricks-training.md}}