← Todas las guías
ExplotaciónLaboratorio multiplataformaIntermedio40 min

Cómo transferir archivos entre tu máquina y el objetivo

Aprende a elegir y verificar un canal autorizado para mover un archivo de prueba entre Linux, macOS y Windows, con alternativas seguras y un método de diagnóstico cuando HTTP, SCP o SMB no funcionan.

1. Elige por dirección, confianza y requisitos

Una transferencia tiene cinco piezas: origen, destino, iniciador, transporte y verificación. En un pull, el objetivo solicita un archivo a tu máquina; en un push, el origen lo envía a un servicio autorizado. Antes de copiar, decide qué lado puede escuchar, qué puerto permite la red y qué autenticación exige la política.

HTTP temporal

Útil para un archivo pequeño y no sensible dentro de una red aislada. Python http.server no aporta autenticación ni TLS.

SCP

Preferible si ya existe SSH autorizado: cifra, autentica y funciona en ambos sentidos sin abrir otro servicio.

SMB

Adecuado cuando existe un recurso administrado y auditado. Usa cuenta individual, firma o cifrado según política.

PowerShell y BITS

Alternativas nativas de Windows para HTTP(S); BITS aporta gestión del trabajo, pero depende del servicio y del servidor.

  • Origen y destino son 192.168.56.10 y 192.168.56.20 dentro de una red host-only propia
  • Solo se moverán muestra.txt y resultado-lab.txt, ambos creados para el ejercicio
  • El archivo final no reemplazará uno existente: primero se guarda con sufijo .part
  • El hash SHA-256 de origen se conoce antes de iniciar la copia
  • Existe una hora de cierre y un responsable para autorizar cambios de firewall o servicios

2. Prepara un archivo inocuo y una verificación independiente

La máquina del analista usa 192.168.56.10 y el objetivo de laboratorio192.168.56.20. Sustituye estas direcciones únicamente por las de tu red privada autorizada. Crea el archivo fuera de cualquier carpeta con datos reales y calcula su hash antes de iniciar un servidor.

Analista Linux · preparar origen
mkdir -p "$HOME/cubix-transfer-lab/salida" "$HOME/cubix-transfer-lab/entrada"printf 'Cubix transfer lab\n' > "$HOME/cubix-transfer-lab/salida/muestra.txt"stat -c '%A %U:%G %s bytes %n' "$HOME/cubix-transfer-lab/salida/muestra.txt"sha256sum "$HOME/cubix-transfer-lab/salida/muestra.txt"
Analista macOS · preparar origen
mkdir -p "$HOME/cubix-transfer-lab/salida" "$HOME/cubix-transfer-lab/entrada"printf 'Cubix transfer lab\n' > "$HOME/cubix-transfer-lab/salida/muestra.txt"stat -f '%Sp %Su:%Sg %z bytes %N' "$HOME/cubix-transfer-lab/salida/muestra.txt"shasum -a 256 "$HOME/cubix-transfer-lab/salida/muestra.txt"
Analista Windows PowerShell · preparar origen
$Lab = Join-Path $env:USERPROFILE 'cubix-transfer-lab'New-Item -ItemType Directory -Force -Path (Join-Path $Lab 'salida'),(Join-Path $Lab 'entrada') | Out-NullSet-Content -LiteralPath (Join-Path $Lab 'salida\muestra.txt') -Value 'Cubix transfer lab' -Encoding utf8Get-Item -LiteralPath (Join-Path $Lab 'salida\muestra.txt') | Select-Object FullName,Length,LastWriteTimeGet-FileHash -LiteralPath (Join-Path $Lab 'salida\muestra.txt') -Algorithm SHA256

Los archivos creados por PowerShell y por printf pueden tener bytes distintos por codificación o final de línea; no compares hashes entre recetas. Compara siempre el hash del archivo concreto servido con el recibido. Un nombre igual no demuestra integridad.

3. HTTP temporal: Python, curl y wget

python -m http.server sirve el directorio indicado y, si no especificas --bind, puede escuchar en todas las interfaces. En este laboratorio se vincula solo a la interfaz host-only del analista. No lo uses para archivos sensibles ni redes compartidas: no tiene autenticación ni TLS. Déjalo en primer plano para ver solicitudes y detenlo con Ctrl+C al terminar.

Analista Linux o macOS · Python 3
python3 --versionpython3 -m http.server 8000 --bind 192.168.56.10 --directory "$HOME/cubix-transfer-lab/salida"
Analista Windows · Python Launcher
py --versionpy -m http.server 8000 --bind 192.168.56.10 --directory "$env:USERPROFILE\cubix-transfer-lab\salida"

En el objetivo Linux, descarga primero a .part. curl --fail devuelve error ante códigos HTTP 400 o superiores y --show-error conserva el diagnóstico. Wget es una alternativa; su opción-O crea o trunca el destino al comenzar, por lo que también usa un nombre parcial. Renombra solo después de que el hash coincida con el origen.

Objetivo Linux · opción A: curl
curl --fail --show-error --location --max-time 30 --output /tmp/muestra.txt.part http://192.168.56.10:8000/muestra.txtsha256sum /tmp/muestra.txt.partmv /tmp/muestra.txt.part /tmp/muestra.txt
Objetivo Linux · opción B: wget
wget --tries=1 --timeout=10 --output-document=/tmp/muestra.txt.part http://192.168.56.10:8000/muestra.txtsha256sum /tmp/muestra.txt.partmv /tmp/muestra.txt.part /tmp/muestra.txt
Objetivo Windows · curl.exe
$Part = Join-Path $env:TEMP 'muestra.txt.part'curl.exe --fail --show-error --location --max-time 30 --output $Part http://192.168.56.10:8000/muestra.txtGet-FileHash -LiteralPath $Part -Algorithm SHA256Move-Item -LiteralPath $Part -Destination (Join-Path $env:TEMP 'muestra.txt')

4. SCP sobre SSH: cifrado, autenticación y ambos sentidos

SCP requiere un servidor SSH ya autorizado en el lado remoto y una cuenta válida. Desde OpenSSH 9.0,scp usa SFTP por defecto. En el primer contacto, compara la huella de la clave del host por un canal independiente; no uses StrictHostKeyChecking=no ni aceptes una clave cambiada sin investigación. La opción -p conserva fechas y modos, así que omítela si la política exige permisos nuevos del destino.

Analista Linux o macOS → objetivo Linux
ssh -Vscp "$HOME/cubix-transfer-lab/salida/muestra.txt" labuser@192.168.56.20:/tmp/muestra.txt.partssh labuser@192.168.56.20 'sha256sum /tmp/muestra.txt.part'
Analista Windows → objetivo Linux
Get-Command scp.exe,ssh.exescp.exe "$env:USERPROFILE\cubix-transfer-lab\salida\muestra.txt" labuser@192.168.56.20:/tmp/muestra.txt.partssh.exe labuser@192.168.56.20 'sha256sum /tmp/muestra.txt.part'

Para comprobar el sentido inverso, crea en el objetivo un archivo ficticio y envíalo a la carpeta de entrada del analista. Este paso requiere que el analista tenga un servidor SSH autorizado; si solo dispone de cliente, inicia el scp desde el analista y usa la sintaxis remota como origen.

Objetivo Linux · crear resultado ficticio
printf 'Resultado ficticio del laboratorio\n' > /tmp/resultado-lab.txtsha256sum /tmp/resultado-lab.txt
Analista Linux o macOS · pull desde el objetivo
scp labuser@192.168.56.20:/tmp/resultado-lab.txt "$HOME/cubix-transfer-lab/entrada/resultado-lab.txt.part"sha256sum "$HOME/cubix-transfer-lab/entrada/resultado-lab.txt.part"mv "$HOME/cubix-transfer-lab/entrada/resultado-lab.txt.part" "$HOME/cubix-transfer-lab/entrada/resultado-lab.txt"

5. SMB: usa un recurso administrado, no uno improvisado

SMB permite leer y escribir mediante una ruta UNC como \\192.168.56.10\CubixLab. Esta guía asume que un administrador ya creó el recurso con carpetas salida e entrada, una cuenta individual, auditoría y permisos mínimos. No habilites SMB1, acceso guest ni una regla global de firewall para completar el ejercicio. Introduce la credencial de forma interactiva; nunca la pongas en la línea de comandos, una URL, un script o el historial.

Objetivo Windows · SMB con credencial interactiva
Test-NetConnection 192.168.56.10 -Port 445$Credential = Get-Credential -Message 'Cuenta individual del laboratorio SMB'New-PSDrive -Name X -PSProvider FileSystem -Root '\\192.168.56.10\CubixLab' -Credential $CredentialCopy-Item -LiteralPath 'X:\salida\muestra.txt' -Destination "$env:TEMP\muestra.txt.part"Get-FileHash -LiteralPath "$env:TEMP\muestra.txt.part" -Algorithm SHA256Copy-Item -LiteralPath "$env:TEMP\resultado-lab.txt" -Destination 'X:\entrada\resultado-lab.txt'Remove-PSDrive XRemove-Variable Credential

En Linux, smbclient ofrece una interfaz de cliente sin montar el recurso. -U recibe el usuario y solicita la contraseña; no añadas %contraseña. Verifica el hash y limita las operaciones a los dos archivos de laboratorio.

Objetivo Linux · cliente Samba
smbclient //192.168.56.10/CubixLab -U 'LAB/auditor' -c 'get salida/muestra.txt /tmp/muestra.txt.part'sha256sum /tmp/muestra.txt.partsmbclient //192.168.56.10/CubixLab -U 'LAB/auditor' -c 'put /tmp/resultado-lab.txt entrada/resultado-lab.txt'

6. Alternativas nativas cuando Windows no tiene la primera herramienta

Comprueba disponibilidad antes de cambiar de técnica. curl.exe evita la ambigüedad del aliascurl en Windows PowerShell antiguo. Invoke-WebRequest existe desde PowerShell 3 y-OutFile guarda la respuesta. BITS es apropiado para un endpoint HTTP(S) o SMB administrado y puede ofrecer diagnóstico del trabajo, pero depende del servicio BITS y de las políticas del equipo.

Windows PowerShell · detectar opciones
Get-Command curl.exe,Invoke-WebRequest,Start-BitsTransfer,scp.exe -ErrorAction SilentlyContinue | Select-Object Name,Source$PSVersionTable.PSVersion
Windows PowerShell · Invoke-WebRequest
$Part = Join-Path $env:TEMP 'muestra.txt.part'Invoke-WebRequest -UseBasicParsing -Uri 'http://192.168.56.10:8000/muestra.txt' -OutFile $Part -TimeoutSec 30Get-FileHash -LiteralPath $Part -Algorithm SHA256
Windows PowerShell · BITS contra un servidor aprobado
Import-Module BitsTransfer$Part = Join-Path $env:TEMP 'muestra.txt.part'Start-BitsTransfer -Source 'http://192.168.56.10:8000/muestra.txt' -Destination $Part -DisplayName 'Cubix lab transfer'Get-FileHash -LiteralPath $Part -Algorithm SHA256

Si BITS entra en estado de error, consulta Get-BitsTransfer -AllUsers solo con autorización administrativa; desde una cuenta normal usa Get-BitsTransfer para tus propios trabajos. No fuerces credenciales almacenadas ni relajes validación TLS para hacerlo funcionar.

7. Cuando falla: diagnostica de abajo arriba

Cambiar de herramienta sin localizar la capa suele repetir el mismo fallo. Empieza por el nombre o la IP, continúa con ruta y puerto, confirma el servicio, revisa la respuesta del protocolo y termina en permisos e integridad. Ejecuta una sola prueba por vez y conserva el mensaje completo.

Connection refused

La ruta llega al host, pero nada acepta ese puerto o el servicio escucha en otra interfaz. Revisa el bind y el proceso del servidor.

Timeout

Puede existir ruta incorrecta, firewall, NAT, VPN o proxy. No abras puertos sin ventana de cambio; verifica la topología.

404 Not Found

El servidor respondió: el problema es el nombre o el directorio servido. Comprueba mayúsculas y ruta relativa.

401, 403 o access denied

El servicio exige identidad o niega el objeto. Confirma cuenta, ACL y alcance; no pruebes credenciales ajenas.

Host key changed

Detén SCP. Confirma reconstrucción o rotación con el propietario antes de modificar known_hosts.

Hash distinto

No renombres ni uses el archivo. Repite desde el origen conocido y compara tamaño, codificación y transferencia completa.

Linux · diagnóstico mínimo
ip route get 192.168.56.10curl --verbose --max-time 10 http://192.168.56.10:8000/muestra.txt --output /dev/nullssh -vv -o BatchMode=yes -o ConnectTimeout=10 labuser@192.168.56.20 truestat -c '%A %U:%G %s %n' /tmp /tmp/muestra.txt.part
Windows PowerShell · diagnóstico mínimo
Test-NetConnection 192.168.56.10 -Port 8000 -InformationLevel DetailedTest-NetConnection 192.168.56.20 -Port 22 -InformationLevel DetailedTest-NetConnection 192.168.56.10 -Port 445 -InformationLevel Detailednetsh winhttp show proxyGet-Acl -LiteralPath $env:TEMP | Format-List Owner,Access

Un error TLS se corrige usando el nombre esperado y una CA confiable, no con -k,--no-check-certificate o -SkipCertificateCheck. Si EDR, AppLocker, firewall o proxy bloquean la transferencia, registra producto, regla, hora y operación; solicita el canal corporativo aprobado. Ese bloqueo es una señal defensiva válida, no un obstáculo que esta guía deba sortear.

8. Ejercicio verificable y limpieza

Completa dos recorridos: muestra.txt del analista al objetivo yresultado-lab.txt del objetivo al analista. Usa HTTP para el primero y SCP o el recurso SMB administrado para el segundo. Registra método, iniciador, origen, destino, tamaño, hash, hora y resultado. El ejercicio termina cuando ambos hashes coinciden y los servicios temporales están detenidos.

  • Los únicos archivos transferidos fueron muestra.txt y resultado-lab.txt
  • Cada descarga usó un nombre .part hasta verificar SHA-256
  • Python escuchó solo en 192.168.56.10 y terminó con Ctrl+C
  • SCP verificó la clave del host y no desactivó StrictHostKeyChecking
  • SMB usó cuenta individual, recurso autorizado y credencial interactiva
  • No se desactivó EDR, firewall, proxy, TLS, firma SMB ni otro control
  • Los fallos se clasificaron por capa antes de elegir una alternativa
  • La bitácora conserva hashes y mensajes, pero no credenciales ni contenido sensible
Linux · inventario antes de limpiar
find "$HOME/cubix-transfer-lab" -maxdepth 2 -type f -printsha256sum "$HOME/cubix-transfer-lab/salida/muestra.txt" "$HOME/cubix-transfer-lab/entrada/resultado-lab.txt"
macOS · inventario antes de limpiar
find "$HOME/cubix-transfer-lab" -maxdepth 2 -type f -printshasum -a 256 "$HOME/cubix-transfer-lab/salida/muestra.txt" "$HOME/cubix-transfer-lab/entrada/resultado-lab.txt"
Windows PowerShell · inventario antes de limpiar
Get-ChildItem -LiteralPath "$env:USERPROFILE\cubix-transfer-lab" -File -Recurse | Select-Object FullName,LengthGet-FileHash -LiteralPath "$env:USERPROFILE\cubix-transfer-lab\salida\muestra.txt" -Algorithm SHA256

Glosario

Transferencia pull

Flujo en el que el sistema de destino inicia la descarga desde un servidor conocido.

Transferencia push

Flujo en el que el sistema de origen inicia el envío hacia un destino autorizado.

Bind

Asociación de un servicio a una dirección local y un puerto concretos para recibir conexiones.

HTTP temporal

Servidor web de vida corta usado para entregar archivos no sensibles dentro de un laboratorio aislado.

SCP

Utilidad de copia de OpenSSH que transfiere archivos sobre una conexión SSH autenticada y cifrada.

SFTP

Protocolo de transferencia de archivos que funciona sobre SSH y que OpenSSH usa actualmente como base predeterminada de scp.

SMB

Protocolo de compartición de archivos usado por Windows y Samba para acceder a recursos remotos.

Ruta UNC

Ruta de red de Windows con la forma doble barra inversa, servidor y recurso compartido.

Archivo parcial

Destino temporal, normalmente con sufijo .part, que evita confundir una descarga incompleta con el archivo final.

Hash SHA-256

Huella criptográfica usada aquí para comprobar que origen y destino contienen exactamente los mismos bytes.

Proxy

Intermediario que recibe y reenvía solicitudes y que puede cambiar autenticación, rutas o políticas de una transferencia.

Ver más guías
Cómo transferir archivos entre tu máquina y el objetivo | Cubix Academia