WimRM (PowerShell Remoting)
#powershell #winrs
Ports: 5985/TCP (WinRM HTTP) or 5986/TCP (WinRM HTTPS)
Group Required: Remote Management Users
PsExec on steroids
If Admin creds are used, we get a elevated shell on the remote machine (No UAC issues), because the remoting process runs a a High Integrity Process.
PSRemoting uses WinRM which is MS's implementation of WS-Management
Enabled by default since Server 2012
Need to manually enable in Windows Desktop (Requires Adminitrative Privs)
Some disadvantages:
Supports systemwide transcript and deep script logging
One-to-One
Interactive login to one machine
Runs in a new process (wsmprovhost)
State-full (persistent variables and state) using
New-PSSession
Commands:
Enter-PSSession
: Enter interactive prompt on the target machineNew-PSSession
: Returns sessions to create persistent environment.
# Create interactive session using the current credentials
Enter-PSSession -ComputerName mymachine.domain.local
# Create session
$sess = New-PSSession -ComputerName mymachine.domain.local
$sess # holds the credentails and ohter information
# Enter-PSSession can be used to connnec to this session
Enter-PSSession -Session $sess
# Use Credentails to connect to the remote machine
# Creat PScredentails object that holds username and password
$username = 'Administrator';
$password = 'Mypass123';
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;
# Connect to the machine
Enter-PSSession -Computername TARGET -Credential $credential
One-to-Many
Also knows as fan-out remoting.
Non Interactive
Executes commands parallely.
Commands:
Invoke-Command
: Executes command on one more machine parallely.
Run commands/scripts on:
one more more computers
disconnected session
as a background job
Required administrative access on the target machine.
# Execute Command
Invoke-Command -ComputerName mycomputer.mydomain.local -ScriptBlock {whoami}
# Execute a fiile
Invoke-Command -ComputerName mycomputer.mydomain.local -FilePath .\Temp.ps1
# Can also run local functions on the target machine
Invoke-Command -ComputerName mycomputer.mydomain.local -ScriptBlock ${function:mylocalfunction}
# Can also use already created session from New-PSSession
Invoke-Command -FilePath C:\script.ps1 -Session $session
# Specify Multiple Servers
Invoke-Command -Scriptblock {whoami} -Computername (Get-Content servers.txt)
We can also get host process information for the running PS Remoting session
Get-PSHostProcessInfo
winrs
Evades powershell based logging
Uses WinRM ports - 5985 and 5986
winrs.exe -u:<username> -p:<password> -r:<server> cmd
Last updated