FTP (File Transfer Protocol)
🌐 Introduction
Le FTP (File Transfer Protocol) est l'un des protocoles les plus anciens d'Internet, permettant le transfert de fichiers entre un client et un serveur. Il fonctionne sur la couche application du modèle TCP/IP, aux côtés de HTTP ou POP. Son fonctionnement repose sur deux canaux :
🔌 Port 21 (canal de commande) : où le client envoie des instructions et reçoit des réponses.
🔊 Port 20 (canal de données) : utilisé exclusivement pour le transfert de fichiers.
🔑 Modes Actif ⚪ et Passif 🔷
Actif : Le client informe le serveur sur quel port il peut envoyer la réponse. Problème : les pare-feux bloquent souvent ces connexions entrantes.
Passif : Le serveur fournit un port au client pour l'échange de données. Adapté aux environnements protégés.
✅ Authentification & Anonymat
Par défaut, FTP exige des identifiants. Cependant, certains serveurs offrent un accès anonyme (✉️ anonymous
) permettant de télécharger (et parfois uploader) sans mot de passe. ❌ Attention : FTP transmet les données en clair, ce qui le rend vulnérable au sniffing.
📂 TFTP : Une version allégée de FTP
Le TFTP (Trivial FTP) est une version simplifiée du FTP :
⚡ Utilise UDP (et non TCP).
❌ Pas d'authentification.
🏡 Ne fonctionne que sur des réseaux locaux sûris.
❎ Pas de navigation dans les répertoires.
Commandes utiles :
connect
,get
,put
,quit
,status
,verbose
🔧 Configuration de vsFTPd
Sur Linux, le serveur vsFTPd est l'un des plus répandus. On peut l'installer avec :
sudo apt install vsftpd
Quelques options clés du fichier /etc/vsftpd.conf
:
anonymous_enable=NO
Désactiver l'accès anonyme
local_enable=YES
Autoriser les utilisateurs locaux
write_enable=YES
Autoriser les écritures
chroot_local_user=YES
Isoler les utilisateurs dans leur HOME
hide_ids=YES
Masquer les UID/GID des fichiers
Fichier à surveiller ✉️ : /etc/ftpusers
(liste noire d'utilisateurs).
🚀 Exploitation d'un serveur FTP
👤 Connexion anonyme
ftp <IP_CIBLE>
Name: anonymous
Password: (vide ou email)
📂 Listing des fichiers
ftp> ls
ftp> ls -R # Liste récursive
📄 Téléchargement de fichiers
ftp> get fichier.txt
↑ Upload de fichiers
touch fichier.txt
ftp> put fichier.txt
🚕 Téléchargement massif
wget -m --no-passive ftp://anonymous:anonymous@<IP_CIBLE>
🤖 Scan & Footprinting
🔮 Nmap avec scripts NSE
sudo nmap -sV -sC -A -p21 <IP_CIBLE>
Scripts utiles :
ftp-anon.nse
: détecte l'accès anonymeftp-syst.nse
: récupère les infos du serveurftp-vsftpd-backdoor.nse
: cherche une backdoor présente dans certaines versions
Pour voir les paquets envoyés :
sudo nmap -sV -sC -A -p21 <IP_CIBLE> --script-trace
🧰 Bonus : TLS & Interactions manuelles
🛡️ Connexion SSL avec OpenSSL
openssl s_client -connect <IP_CIBLE>:21 -starttls ftp
Cela permet de :
Vérifier le certificat SSL
Identifier l'organisation
Récupérer des métadonnées utiles
🔈 Interaction directe
nc -nv <IP_CIBLE> 21
# ou
telnet <IP_CIBLE> 21
✨ Conclusion
Le protocole FTP peut sembler ancien, mais il reste largement utilisé et souvent mal configuré. Sa simplicité en fait une porte d'entrée très utile lors de tests d'intrusion.
📚 Ressources utiles
Nmap FTP scripts :
/usr/share/nmap/scripts/
Which version of the FTP server is running on the target system? Submit the entire banner as the answer.
Nous effectuons un scan de notre cible sur le port 21 afin d'obtenir la bannière associée :
$ nmap -sCV -p21 10.xx.xx.xx --disable-arp-ping -D RND:5
Starting Nmap 7.93 ( https://nmap.org ) at 2025-06-19 11:31 CEST
Nmap scan report for 10.xx.xx.xx
Host is up (0.029s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp
| fingerprint-strings:
| GenericLines:
| 220 InFreight FTP v1.1
| Invalid command: try being more creative
|_ Invalid command: try being more creative
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 65.87 seconds
La bannière associé à notre cible est InFreight FTP v1.1
.
Enumerate the FTP server and find the flag.txt file. Submit the contents of it as the answer.
Nous effectuons un scan d'énumération du serveur FTP :
$ sudo nmap -sV -p21 -sC -A 10.xx.xx.xx
Starting Nmap 7.93 ( https://nmap.org ) at 2025-06-19 11:48 CEST
Nmap scan report for 10.xx.xx.xx
Host is up (0.025s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r-- 1 ftpuser ftpuser 39 Nov 8 2021 flag.txt
| fingerprint-strings:
| GenericLines:
| 220 InFreight FTP v1.1
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 5.4 (95%), Linux 4.15 - 5.6 (94%), Linux 3.1 (94%), Linux 3.2 (94%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), Linux 5.0 (94%), Linux 5.0 - 5.3 (94%), Linux 5.0 - 5.4 (93%), Linux 5.3 - 5.4 (93%), Linux 2.6.32 (93%)
TRACEROUTE (using port 21/tcp)
HOP RTT ADDRESS
1 25.26 ms 10.xx.xx.xx
2 25.26 ms 10.xx.xx.xx
Nmap done: 1 IP address (1 host up) scanned in 68.83 seconds
Nous observons ainsi la présence du fichier flag.txt
dans le serveur FTP, maintenant, nous nous connectons à ce dernier en tant que anonymous
et récupérons en local le fichier :
$ ftp anonymous@10.xx.xx.xx
Connected to 10.xx.xx.xx.
220 InFreight FTP v1.1
331 Anonymous login ok, send your complete email address as your password
Password:
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||31740|)
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 ftpuser ftpuser 39 Nov 8 2021 flag.txt
226 Transfer complete
ftp> get flag.txt
local: flag.txt remote: flag.txt
229 Entering Extended Passive Mode (|||6653|)
150 Opening BINARY mode data connection for flag.txt (39 bytes)
39 84.07 KiB/s
226 Transfer complete
39 bytes received in 00:00 (1.38 KiB/s)
Nous analysons donc le contenu en local du fichier flag.txt afin d'en récupérer le contenu :
$ cat flag.txt
HTB{b7skjr4c76zhsds7fzhd4k3ujg7nhdjre}
Voici le flag remonté :
HTB{b7skjr4c76zhsds7fzhd4k3ujg7nhdjre}
Mis à jour