Herramientas, automatización y NSE para FTP y TFTP
El workflow de FTP y TFTP separa el canal de control, las conexiones de datos y el protocolo TFTP. La herramienta se elige después de identificar cuál de esas piezas debe observarse.
Cliente mínimo y TLS
Sección titulada «Cliente mínimo y TLS»Ncat permite conservar banner, códigos y comandos del canal de control. -C convierte los saltos de línea a CRLF:
ncat -nvC TARGET_IP 21Para FTPS explícito, OpenSSL envía AUTH TLS mediante -starttls ftp. -servername fija SNI:
openssl s_client -connect FQDN:21 \ -starttls ftp -servername FQDN -crlfUn handshake correcto no demuestra que el canal de datos esté protegido. Revisa PBSZ, PROT y una transferencia controlada.
Clientes para recorrer y transferir
Sección titulada «Clientes para recorrer y transferir»El cliente ftp resulta útil para una sesión interactiva básica. lftp muestra mejor FTPS, modos activo/pasivo y operaciones recursivas. cURL produce comandos reproducibles:
curl --user 'USERNAME:PASSWORD' \ --list-only ftp://FQDN/PATH/Para no dejar la contraseña en el historial, usa --netrc-file con permisos 0600 o una variable temporal que no se publique. --ftp-pasv fuerza modo pasivo. --ftp-port - usa una dirección derivada de la conexión para modo activo. Cambiar de modo ayuda a distinguir un fallo de permisos de un firewall sobre el canal de datos.
Para descargar un archivo conservando su nombre remoto, --remote-name escribe en el directorio actual. El nombre procede del servidor, así que ejecuta la descarga dentro de un directorio desechable y comprueba la ruta resultante:
curl --user USERNAME --remote-name ftp://FQDN/PATH/FILEUna operación automatizada necesita límites distintos para conexión y transferencia. --connect-timeout 5 permite cinco segundos para establecer la conexión. --max-time 30 limita la operación completa. --silent --show-error elimina el medidor sin ocultar fallos. --output FILE evita que el listado se mezcle con mensajes del cliente:
curl --silent --show-error \ --connect-timeout 5 \ --max-time 30 \ --sdoc-reqd \ --cacert CA_FILE \ --user USERNAME \ --ftp-pasv \ --list-only \ --output evidence/ftp-listing.txt \ ftp://FQDN/PATH/--sdoc-reqd exige TLS para la transferencia y --cacert fija la autoridad de confianza. El éxito del listado valida una conexión de datos concreta. No demuestra que el modo activo, otra ruta o una escritura funcionen. Si falla después del login, repite una operación pequeña cambiando únicamente --ftp-pasv por --ftp-port -.
NSE por capacidad
Sección titulada «NSE por capacidad»Consulta primero la instalación:
nmap --script-help 'ftp-*' 'tftp-*'ftp-anon prueba acceso anonymous y puede listar. ftp-syst solicita SYST y STAT. ftp-bounce comprueba si el servidor acepta una dirección de datos distinta. ftp-brute autentica repetidamente. Los scripts ftp-vuln-* dependen de producto, versión y configuración.
sudo nmap -sV -n -Pn -p 21 \ --script ftp-anon,ftp-syst TARGET_IPValida ftp-anon con el cliente nativo. Si aparece escritura, crea un archivo único y vacío, confirma que puede leerse y elimínalo.
Para TFTP, tftp-enum necesita una lista de rutas porque el protocolo no ofrece listado:
sudo nmap -sU -sV -n -Pn -p 69 \ --script tftp-enum \ --script-args tftp-enum.filelist=FILE_LIST \ TARGET_IPUna ausencia puede significar nombre incorrecto, timeout o retransmisión perdida. Confirma un archivo conocido con un cliente TFTP.
Diagnosticar resultados distintos
Sección titulada «Diagnosticar resultados distintos»Registra la IP anunciada en PASV/EPSV, los puertos de datos y el origen del cliente. Si el listado funciona pero la descarga no, repite una operación pequeña cambiando solo modo activo/pasivo. Para TFTP conserva opcode, nombre, modo y error. La captura separa un ERROR del servidor de un cliente que dejó de recibir bloques.