Fawn - HackTheBox Starting Point
Informations générales
| Propriété | Valeur |
|---|---|
| Difficulté | ⭐ Très facile |
| OS | Unix/Linux |
| Catégorie | Starting Point - Tier 0 |
| Compétences | FTP, Transfert de fichiers, Accès anonyme |
| Auteur | 0ne-nine9 |
Vue d'ensemble
Fawn est le deuxième challenge du Starting Point et introduit le protocole FTP (File Transfer Protocol). Ce challenge enseigne :
- Les fondamentaux du protocole FTP et son architecture client-serveur
- L'énumération de services FTP avec Nmap
- L'exploitation de connexions FTP anonymes mal configurées
- Les commandes de base pour naviguer et télécharger des fichiers via FTP
Introduction au FTP
Qu'est-ce que le FTP ?
FTP (File Transfer Protocol) est un protocole de communication standard utilisé pour transférer des fichiers entre un client et un serveur sur un réseau informatique.
Caractéristiques principales
| Caractéristique | Description |
|---|---|
| Port par défaut | 21/TCP (contrôle), 20/TCP (données) |
| Architecture | Client-Serveur |
| Usage | Transfert de fichiers, backup, logs |
| Authentification | Username/Password ou Anonymous |
| Sécurité | ⚠️ Non chiffré par défaut |
| Alternatives sécurisées | FTPS (FTP over SSL/TLS), SFTP (SSH File Transfer Protocol) |
Architecture Client-Serveur
┌─────────┐ ┌─────────┐
│ Client │ ──── Commandes FTP ────────────> │ Serveur │
│ FTP │ (Port 21) │ FTP │
│ │ <─── Réponses ────────────────── │ │
│ │ │ │
│ │ ──── Transfert de données ──────> │ │
│ │ (Port 20) │ │
└─────────┘ └─────────┘
│ │
├── Download (GET) ├── Stockage fichiers
├── Upload (PUT) ├── Gestion utilisateurs
└── Navigation (LS, CD) └── Permissions
Modes de connexion FTP
1. Mode Actif (Active Mode)
- Le client ouvre un port et attend la connexion du serveur
- Problématique avec les firewalls modernes
2. Mode Passif (Passive Mode)
- Le serveur ouvre un port et attend la connexion du client
- Plus compatible avec les firewalls (mode recommandé)
Cas d'usage courants
Le FTP est (ou était) largement utilisé pour :
- Transfert de logs : Envoi de fichiers de logs d'un équipement réseau vers un serveur centralisé
- Sauvegarde de configurations : Backup de configurations de routeurs, switches
- Partage de fichiers : Distribution de fichiers au sein d'une entreprise
- Déploiement web : Upload de sites web (remplacé aujourd'hui par Git/CI-CD)
Problématiques de sécurité
Vulnérabilités du FTP
| Problème | Description | Impact |
|---|---|---|
| Transmission en clair | Identifiants et données non chiffrés | Interception MitM possible |
| Anonymous login | Connexion sans authentification | Accès non autorisé aux fichiers |
| Bounce attack | Utilisation du serveur pour scanner d'autres hôtes | Pivoting |
| Brute-force | Tentatives de connexion massives | Compromission de comptes |
Mauvaises configurations typiques
Les administrateurs peuvent commettre des erreurs comme :
- ✅ Activer l'accès anonyme sur des répertoires sensibles
- ✅ Utiliser des mots de passe faibles ou par défaut
- ✅ Exposer FTP directement sur Internet sans VPN
- ✅ Ne pas auditer les permissions des répertoires FTP
Scénario réel
Imaginez un employé souhaitant contourner les contrôles de sécurité pour transférer rapidement un fichier à un collègue. Il configure un serveur FTP temporaire avec accès anonymous "juste pour ce transfert"... et oublie de le désactiver. Un attaqueur découvre ce serveur et exfiltre des données sensibles.
Phase 1 : Énumération
Vérification de connectivité
Commençons par vérifier que nous pouvons atteindre la cible :
ping <TARGET_IP>
Résultat attendu :
PING <TARGET_IP> (<TARGET_IP>) 56(84) bytes of data.
64 bytes from <TARGET_IP>: icmp_seq=1 ttl=63 time=49.2 ms
64 bytes from <TARGET_IP>: icmp_seq=2 ttl=63 time=47.1 ms
Stoppez avec CTRL+C après quelques paquets reçus.
Scan Nmap avec détection de version
Scannons les ports ouverts avec détection de services :
sudo nmap -sV <TARGET_IP>
| Flag | Description |
|---|---|
sudo | Privilèges root requis pour certains scans |
-sV | Détection de version des services |
Résultat du scan :
Starting Nmap 7.92 at 2021-09-24 22:31 BST
Nmap scan report for <TARGET_IP>
Host is up (0.050s latency).
Not shown: 999 closed tcp ports (reset)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
Service Info: OS: Unix
Analyse des résultats
| Information | Valeur | Signification |
|---|---|---|
| Port | 21/tcp | Port standard FTP |
| État | open | Service accessible |
| Service | ftp | Protocole FTP détecté |
| Version | vsftpd 3.0.3 | Very Secure FTP Daemon v3.0.3 |
| OS | Unix | Système d'exploitation |
À propos de vsftpd
vsftpd (Very Secure FTP Daemon) est un serveur FTP populaire sur Linux/Unix, réputé pour :
- Sa sécurité relative (d'où le nom)
- Sa performance
- Sa simplicité de configuration
Cependant, une mauvaise configuration reste possible !
Phase 2 : Exploitation de l'accès FTP
Installation du client FTP
Vérifions que le client FTP est installé :
sudo apt install ftp -y
Sortie si déjà installé :
Reading package lists... Done
Building dependency tree... Done
ftp is already the newest version (0.17-34.1.1).
Aide du client FTP
Consultons les options disponibles :
ftp -h
Usage :
Usage: { ftp | pftp } [-46pinegvtd] [hostname]
-4: use IPv4 addresses only
-6: use IPv6, nothing else
-p: enable passive mode (default for pftp)
-i: turn off prompting during mget
-n: inhibit auto-login
-e: disable readline support, if present
-g: disable filename globbing
-v: verbose mode
-t: enable packet tracing [nonfunctional]
-d: enable debugging
Connexion au serveur FTP
Tentons de nous connecter :
ftp <TARGET_IP>
Prompt de connexion :
Connected to <TARGET_IP>.
220 (vsFTPd 3.0.3)
Name (<TARGET_IP>:{username}):
⚠️ Note importante : Si vous ne spécifiez pas de nom d'utilisateur, FTP utilisera votre nom d'utilisateur local par défaut.
Tentative de connexion anonyme
Le protocole FTP permet une authentification anonyme si elle est activée sur le serveur. Essayons :
Username : anonymous
Password : Laissez vide ou tapez n'importe quoi (ex: anon123)
Name (<TARGET_IP>:{username}): anonymous
331 Please specify the password.
Password: anon123
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
✅ Succès ! Nous sommes connectés avec un accès anonyme. Le prompt change en ftp>, indiquant que nous sommes maintenant dans un shell FTP interactif.
Informations de connexion
Message d'analyse :
230 Login successful: Authentification réussieRemote system type is UNIX: Système cible identifiéUsing binary mode to transfer files: Mode binaire activé (recommandé pour tous types de fichiers)
Phase 3 : Navigation et Exfiltration
Commandes FTP essentielles
Une fois dans le shell FTP, tapez help pour voir les commandes disponibles :
ftp> help
Commandes principales :
| Commande | Description | Équivalent Linux |
|---|---|---|
ls ou dir | Liste les fichiers et répertoires | ls |
cd <directory> | Change de répertoire | cd |
pwd | Affiche le répertoire courant | pwd |
get <file> | Télécharge un fichier | cp (download) |
put <file> | Upload un fichier | cp (upload) |
mget <pattern> | Télécharge plusieurs fichiers | cp *.txt |
binary | Mode binaire (par défaut) | - |
ascii | Mode ASCII (texte) | - |
bye ou exit | Quitte le shell FTP | exit |
Codes de statut FTP
Les serveurs FTP répondent avec des codes numériques :
| Code | Signification |
|---|---|
200 | Commande OK |
150 | Début du transfert de fichier |
226 | Transfert complet |
230 | Login réussi |
331 | Username OK, mot de passe requis |
530 | Login incorrect |
Exploration du répertoire
Listons le contenu du répertoire courant :
ftp> ls
Résultat :
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 32 Jun 04 03:25 flag.txt
226 Directory send OK.
Analyse de la sortie :
200 PORT command successful: Connexion de données établie150 Here comes the directory listing: Début de l'envoi de la liste-rw-r--r--: Permissions Unix du fichier-: Fichier régulierrw-: Propriétaire peut lire/écrirer--: Groupe peut lirer--: Autres peuvent lire
1 0 0: Liens, UID, GID32: Taille en octetsflag.txt: Notre cible ! 🎯
Téléchargement du flag
Utilisons la commande get pour télécharger le fichier :
ftp> get flag.txt
Résultat :
local: flag.txt remote: flag.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for flag.txt (32 bytes).
226 Transfer complete.
32 bytes received in 0.00 secs (33.7838 kB/s)
Analyse :
local: flag.txt: Nom du fichier local (téléchargé)remote: flag.txt: Nom du fichier distant (source)BINARY mode: Transfert en mode binaire32 bytes received: Taille téléchargée226 Transfer complete: Succès !
✅ Le fichier est maintenant dans le répertoire où vous avez lancé la commande ftp.
Sortie du shell FTP
Quittons le serveur FTP :
ftp> bye
ou
ftp> exit
Résultat :
421 Timeout.
Le serveur ferme la connexion.
Phase 4 : Lecture du flag
Le fichier flag.txt a été téléchargé dans votre répertoire de travail actuel.
Vérification de la présence du fichier
ls
Résultat :
flag.txt Starting-Point
Lecture du flag
cat flag.txt
Résultat :
035db21c881520061c53e0536e44f815
🎉 Flag capturé ! Soumettez ce hash sur la page HackTheBox pour valider le challenge.
Concepts clés appris
1. Protocole FTP
Architecture :
- Client-serveur pour transfert de fichiers
- Deux canaux : Contrôle (21) + Données (20/passif)
- Modes actif et passif
Problématiques :
- Transmission en clair (credentials + données)
- Vulnérable aux attaques MitM
- Obsolète, remplacé par SFTP/FTPS
2. Authentification anonyme
Fonctionnement :
- Username :
anonymous - Password : n'importe quoi ou vide
- Permet accès sans compte réel
Risques :
- Accès non autorisé aux fichiers
- Exfiltration de données sensibles
- Point d'entrée pour pivoting
3. Commandes FTP de base
| Catégorie | Commandes |
|---|---|
| Navigation | ls, cd, pwd |
| Téléchargement | get, mget |
| Upload | put, mput |
| Système | help, bye, status |
4. Codes de statut FTP
| Code | Catégorie | Exemple |
|---|---|---|
1xx | Information préliminaire | 150 (transfert commence) |
2xx | Succès | 226 (transfert OK), 230 (login OK) |
3xx | Attente d'information | 331 (password requis) |
4xx | Erreur temporaire | 421 (timeout) |
5xx | Erreur permanente | 530 (login incorrect) |
Commandes récapitulatives
# Vérifier la connectivité
ping <TARGET_IP>
# Scanner les ports avec détection de services
sudo nmap -sV <TARGET_IP>
# Se connecter en FTP
ftp <TARGET_IP>
# Commandes dans le shell FTP
ls # Lister les fichiers
pwd # Répertoire courant
get <filename> # Télécharger un fichier
bye # Quitter
# Lire le fichier téléchargé
cat flag.txt
Bonnes pratiques de sécurité
Ce qu'il NE faut PAS faire
❌ Activer l'accès anonyme sur des répertoires contenant des données sensibles ❌ Utiliser FTP en clair pour transférer des credentials ou données confidentielles ❌ Exposer FTP directement sur Internet sans VPN ou restriction IP ❌ Utiliser des comptes avec mots de passe faibles ❌ Laisser FTP actif "temporairement" puis l'oublier
Recommandations
✅ Désactiver l'accès anonyme par défaut ✅ Utiliser SFTP (SSH File Transfer Protocol) au lieu de FTP ✅ Utiliser FTPS (FTP over SSL/TLS) si FTP est nécessaire ✅ Implémenter des restrictions IP (whitelist) ✅ Auditer régulièrement les logs FTP ✅ Utiliser des comptes dédiés avec permissions minimales ✅ Chiffrer les données avant transfert FTP si nécessaire
Configuration sécurisée vsftpd
Exemple de configuration /etc/vsftpd.conf sécurisée :
# Désactiver l'accès anonyme
anonymous_enable=NO
# Activer les utilisateurs locaux
local_enable=YES
write_enable=YES
# Chrooter les utilisateurs dans leur home
chroot_local_user=YES
allow_writeable_chroot=YES
# Limiter les connexions
max_clients=10
max_per_ip=2
# Logging
xferlog_enable=YES
log_ftp_protocol=YES
Pour aller plus loin
Ressources recommandées
- HTB Academy - File Transfer Methods : Techniques de transfert de fichiers
- HTB Academy - Network Services : Énumération de services réseau
- vsftpd Documentation : Configuration sécurisée vsftpd
- RFC 959 - FTP Protocol : Spécifications officielles FTP
Outils complémentaires
Clients FTP :
ftp: Client en ligne de commande (basique)lftp: Client avancé avec scriptingncftp: Client avec auto-reconnexion- FileZilla : Client FTP/SFTP avec GUI
Énumération FTP :
nmap --script ftp-*: Scripts NSE pour FTPhydra: Brute-force FTPMetasploit: Modules FTP (scan, brute-force, exploits)
Commandes avancées FTP
# Mode passif (recommandé pour firewalls)
ftp> passive
# Télécharger plusieurs fichiers
ftp> mget *.txt
# Statut de la connexion
ftp> status
# Afficher le système distant
ftp> system
# Mode de transfert
ftp> binary # Pour fichiers binaires
ftp> ascii # Pour fichiers texte
Prochaines étapes
Continuez avec les autres challenges Tier 0 :
- Meow : Telnet et credentials par défaut (complété ✅)
- Dancing : Partages SMB mal configurés (complété ✅)
- Redeemer : Base de données Redis (à venir)
Puis passez au Tier 1 pour des challenges plus avancés !
Questions de révision
- Quel est le port par défaut du service FTP ?
- Quelle est la différence entre FTP, FTPS et SFTP ?
- Quel username utilise-t-on pour une connexion anonyme ?
- Pourquoi FTP est-il considéré comme non sécurisé ?
- Quelle commande FTP permet de télécharger un fichier ?
- Qu'est-ce que le mode passif FTP ?
Félicitations ! Vous maîtrisez maintenant les bases du protocole FTP et savez exploiter une configuration anonyme mal sécurisée. Ce protocole, bien qu'obsolète, est encore rencontré dans certains environnements legacy. 🎯
Write-up rédigé à des fins éducatives. Pratique autorisée uniquement sur des systèmes dont vous avez l'autorisation.