HackTheBox Writeup

Fawn

Très facileLinuxftpfile-transferanonymous-loginenumeration

Introduction au protocole FTP et exploitation d'accès anonymes

Fawn - HackTheBox Starting Point

Informations générales

PropriétéValeur
Difficulté⭐ Très facile
OSUnix/Linux
CatégorieStarting Point - Tier 0
CompétencesFTP, Transfert de fichiers, Accès anonyme
Auteur0ne-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éristiqueDescription
Port par défaut21/TCP (contrôle), 20/TCP (données)
ArchitectureClient-Serveur
UsageTransfert de fichiers, backup, logs
AuthentificationUsername/Password ou Anonymous
Sécurité⚠️ Non chiffré par défaut
Alternatives sécuriséesFTPS (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 :

  1. Transfert de logs : Envoi de fichiers de logs d'un équipement réseau vers un serveur centralisé
  2. Sauvegarde de configurations : Backup de configurations de routeurs, switches
  3. Partage de fichiers : Distribution de fichiers au sein d'une entreprise
  4. 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èmeDescriptionImpact
Transmission en clairIdentifiants et données non chiffrésInterception MitM possible
Anonymous loginConnexion sans authentificationAccès non autorisé aux fichiers
Bounce attackUtilisation du serveur pour scanner d'autres hôtesPivoting
Brute-forceTentatives de connexion massivesCompromission 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>
FlagDescription
sudoPrivilèges root requis pour certains scans
-sVDé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

InformationValeurSignification
Port21/tcpPort standard FTP
ÉtatopenService accessible
ServiceftpProtocole FTP détecté
Versionvsftpd 3.0.3Very Secure FTP Daemon v3.0.3
OSUnixSystè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éussie
  • Remote 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 :

CommandeDescriptionÉquivalent Linux
ls ou dirListe les fichiers et répertoiresls
cd <directory>Change de répertoirecd
pwdAffiche le répertoire courantpwd
get <file>Télécharge un fichiercp (download)
put <file>Upload un fichiercp (upload)
mget <pattern>Télécharge plusieurs fichierscp *.txt
binaryMode binaire (par défaut)-
asciiMode ASCII (texte)-
bye ou exitQuitte le shell FTPexit

Codes de statut FTP

Les serveurs FTP répondent avec des codes numériques :

CodeSignification
200Commande OK
150Début du transfert de fichier
226Transfert complet
230Login réussi
331Username OK, mot de passe requis
530Login 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 établie
  • 150 Here comes the directory listing : Début de l'envoi de la liste
  • -rw-r--r-- : Permissions Unix du fichier
    • - : Fichier régulier
    • rw- : Propriétaire peut lire/écrire
    • r-- : Groupe peut lire
    • r-- : Autres peuvent lire
  • 1 0 0 : Liens, UID, GID
  • 32 : Taille en octets
  • flag.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 binaire
  • 32 bytes received : Taille téléchargée
  • 226 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égorieCommandes
Navigationls, cd, pwd
Téléchargementget, mget
Uploadput, mput
Systèmehelp, bye, status

4. Codes de statut FTP

CodeCatégorieExemple
1xxInformation préliminaire150 (transfert commence)
2xxSuccès226 (transfert OK), 230 (login OK)
3xxAttente d'information331 (password requis)
4xxErreur temporaire421 (timeout)
5xxErreur permanente530 (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 faiblesLaisser 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

Outils complémentaires

Clients FTP :

  • ftp : Client en ligne de commande (basique)
  • lftp : Client avancé avec scripting
  • ncftp : Client avec auto-reconnexion
  • FileZilla : Client FTP/SFTP avec GUI

Énumération FTP :

  • nmap --script ftp-* : Scripts NSE pour FTP
  • hydra : Brute-force FTP
  • Metasploit : 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

  1. Quel est le port par défaut du service FTP ?
  2. Quelle est la différence entre FTP, FTPS et SFTP ?
  3. Quel username utilise-t-on pour une connexion anonyme ?
  4. Pourquoi FTP est-il considéré comme non sécurisé ?
  5. Quelle commande FTP permet de télécharger un fichier ?
  6. 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.