Catching Files over HTTP/S
🔗 Protocole HTTP/S pour les transferts
Le transfert de fichiers via HTTP ou HTTPS est l'une des méthodes les plus répandues, notamment car ces protocoles sont généralement autorisés à travers les pare-feux. HTTPS apporte un avantage supplémentaire important : le chiffrement des données en transit, ce qui est essentiel pour éviter que des systèmes de détection d'intrusion (IDS) ne repèrent des fichiers sensibles circulant en clair.
L'utilisation d'un serveur web pour le transfert est donc particulièrement adaptée lors de tests d'intrusion. Nous avons déjà abordé l'utilisation du module uploadserver
en Python3 pour créer un serveur avec des capacités de téléversement. Dans cette section, nous nous concentrerons sur la mise en place d'un serveur sécurisé pour le téléversement de fichiers avec Nginx.
🤖 Mise en place d'un serveur Nginx avec support PUT
🔧 Pourquoi choisir Nginx ?
Nginx est une bonne alternative à Apache, notamment parce que :
Sa configuration est plus simple.
Son système de modules est plus minimaliste, limitant les risques d'exécution involontaire de fichiers (ex. : les fichiers PHP avec Apache).
📂 Création du répertoire de téléversement
sudo mkdir -p /var/www/uploads/SecretUploadDirectory
sudo chown -R www-data:www-data /var/www/uploads/SecretUploadDirectory
📁 Configuration Nginx pour le téléversement
Créer le fichier /etc/nginx/sites-available/upload.conf
avec le contenu suivant :
server {
listen 9001;
location /SecretUploadDirectory/ {
root /var/www/uploads;
dav_methods PUT;
}
}
➔ Activation du site
sudo ln -s /etc/nginx/sites-available/upload.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx.service
Si une erreur se produit, consulter les logs :
tail -2 /var/log/nginx/error.log
❌ Problème fréquent : port 80 déjà utilisé
ss -lnpt | grep 80
ps -ef | grep <PID>
Si Nginx entre en conflit avec un processus écoutant sur le port 80 (comme un serveur Python), supprimer la configuration par défaut :
sudo rm /etc/nginx/sites-enabled/default
🚀 Test de téléversement avec cURL
🔄 Envoi d'un fichier
curl -T /etc/passwd http://localhost:9001/SecretUploadDirectory/users.txt
🔍 Vérification du résultat
tail -1 /var/www/uploads/SecretUploadDirectory/users.txt
⚠️ Empêcher l'indexation des répertoires
Avec Apache, les répertoires sans fichier index.html
listent leur contenu, ce qui pose un risque pour la discrétion. Nginx, en revanche, n'active pas cette fonctionnalité par défaut, ce qui constitue un avantage.
📚 Ressources utiles
Mis à jour