PowerShell
PowerShell Session File Transfer
Ya hablamos de realizar transferencias de archivos con PowerShell, pero puede haber escenarios en los que HTTP, HTTPS o SMB no estén disponibles. Si ese es el caso, podemos usar PowerShell Remoting, también conocido como WinRM, para realizar operaciones de transferencia de archivos.
PowerShell Remoting nos permite ejecutar scripts o comandos en una computadora remota mediante sesiones de PowerShell. Los administradores suelen usar PowerShell Remoting para administrar computadoras remotas en una red, y también podemos usarlo para operaciones de transferencia de archivos. De manera predeterminada, al habilitar PowerShell Remoting se crean un receptor HTTP y un receptor HTTPS. Los receptores se ejecutan en los puertos predeterminados TCP/5985 para HTTP y TCP/5986 para HTTPS.
Para crear una sesión de PowerShell Remoting en una computadora remota, necesitaremos acceso administrativo, ser miembro del grupo Remote Management Users o tener permisos explícitos para PowerShell Remoting en la configuración de la sesión. Creemos un ejemplo y transfiramos un archivo de DC01 a DATABASE01 y viceversa.
Tenemos una sesión como Administrador en DC01, el usuario tiene derechos administrativos en DATABASE01 y PowerShell Remoting está habilitado. Usemos Test-NetConnection para confirmar que podemos conectarnos a WinRM.
From DC01 - Confirm WinRM port TCP 5985 is Open on DATABASE01.
PS C:\htb> whoami
htb\administrator
PS C:\htb> hostname
DC01PS C:\htb> Test-NetConnection -ComputerName DATABASE01 -Port 5985
ComputerName : DATABASE01
RemoteAddress : 192.168.1.101
RemotePort : 5985
InterfaceAlias : Ethernet0
SourceAddress : 192.168.1.100
TcpTestSucceeded : TrueComo esta sesión ya tiene privilegios sobre DATABASE01, no necesitamos especificar credenciales. En el ejemplo siguiente, se crea una sesión en la computadora remota denominada DATABASE01 y se almacenan los resultados en la variable denominada $Session.
Create a PowerShell Remoting Session to DATABASE01
Podemos usar el cmdlet Copy-Item para copiar un archivo de nuestra máquina local DC01 a la sesión DATABASE01 que tenemos $Session o viceversa.
Copy samplefile.txt from our Localhost to the DATABASE01 Session
Copy DATABASE.txt from DATABASE01 Session to our Localhost
Download Operations
PowerShell File Download
DownloadFile --> Descarga datos de un recurso a un archivo local.
DownloadFileAsync --> Descarga datos de un recurso a un archivo local sin bloquear el hilo que lo llama.
PowerShell Invoke-WebRequest
PowerShell DownloadString - Fileless Method
Ejecutar directamente en memoria el script a través de IEX.
PowerShell Base64 Transfer
Common Errors with PowerShell
Internet Explorer 11 Not Completed
Puede haber casos en los que la configuración inicial de Internet Explorer no se haya completado, lo que impide la descarga.

Esto se puede evitar utilizando el parámetro -UseBasicParsing.
Secure Channel SSL/TLS is not trusted
Otro error en las descargas de PowerShell está relacionado con el canal seguro SSL/TLS si el certificado no es de confianza. Podemos evitar ese error con el siguiente comando:
Upload Operations
PowerShell Base64
PowerShell Web Uploads
PowerShell no tiene una función integrada para operaciones de carga de archivos, pero podemos usar Invoke-WebRequest o Invoke-RestMethod para construir nuestra propia función de carga. También necesitaremos un servidor web que acepte cargas de archivos, ya que esta no es una opción predeterminada en la mayoría de los servidores web comunes.
Para nuestro servidor web, podemos usar uploadserver, un módulo extendido de Python HTTP.server, que incluye una página para la carga de archivos. Vamos a instalarlo y a iniciar el servidor web.
Installing a Configured WebServer with Upload
Ahora podemos usar un script de PowerShell llamado PSUpload.ps1, que utiliza Invoke-RestMethod para realizar las operaciones de carga. El script acepta dos parámetros:
-File, que usamos para especificar la ruta del archivo.-Uri, que es la URL del servidor donde subiremos nuestro archivo.
Vamos a intentar subir el archivo hosts desde nuestro sistema Windows.
PowerShell Base64 Web Upload
Otra forma de usar PowerShell y archivos codificados en Base64 para cargas es combinando Invoke-WebRequest o Invoke-RestMethod con Netcat.
Usamos Netcat para escuchar en un puerto específico y recibir la solicitud POST con el archivo.
Luego, copiamos la salida y utilizamos la función de decodificación Base64 para convertir la cadena en un archivo.
Capturamos los datos en Base64 con Netcat y luego usamos la aplicación base64 con la opción de decodificación para convertir la cadena en un archivo.
Última actualización
¿Te fue útil?