# 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

```bash
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 :

```nginx
server {
    listen 9001;
    
    location /SecretUploadDirectory/ {
        root    /var/www/uploads;
        dav_methods PUT;
    }
}
```

#### ➔ Activation du site

```bash
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 :

```bash
tail -2 /var/log/nginx/error.log
```

#### ❌ Problème fréquent : port 80 déjà utilisé

```bash
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 :

```bash
sudo rm /etc/nginx/sites-enabled/default
```

***

### 🚀 Test de téléversement avec cURL

#### 🔄 Envoi d'un fichier

```bash
curl -T /etc/passwd http://localhost:9001/SecretUploadDirectory/users.txt
```

#### 🔍 Vérification du résultat

```bash
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

* [Documentation officielle de Nginx](https://nginx.org/en/docs/)
* [WebDAV support in Nginx](https://nginx.org/en/docs/http/ngx_http_dav_module.html)
* [cURL PUT example](https://curl.se/docs/manpage.html#-T)

***
