evilrdp: The Ultimate Tool for Elevated RDP Command Control

EVILRDP – More control over RDP

The evil twin of aardwolfgui using the aardwolf RDP client library that gives you extended control over the target and additional scripting capabilities from the command line.


  • Control the mouse and keyboard in an automated way from the command line
  • Control the clipboard in an automated way from the command line
  • Spawn a SOCKS proxy from the client that channels network communication to the target via RDP
  • Execute arbitrary SHELL and PowerShell commands on the target without uploading files
  • Upload and download files to/from the target even when file transfers are disabled on the target


  • evilrdp – GUI + command line RDP client


git clone https://github.com/skelsec/evilrdp.git

pip3 install .


After installing this package, a new executable will be available called evilrdp. Upon making a successful connection to the target you’ll be presented with a GUI just like a normal RDP client as well as the command line from where you executed evilrdp will turn into an interactive shell. There will be two groups of commands available to you, as follows:

  • Commands that can be issued at any time. This includes commands like:
    • mousemove
    • rightclick
    • doubleclick
    • type
    • typefile
    • return/enter
    • invokerun
    • clipboardset
    • clipboardsetfile
    • clipboardget
    • powershell
    • screenshot
  • Commands that only work when the PSCMD channel is established
    • pscmdchannel – Changes the PSCMD channel name from the default. Use this when you change the channelname in agent script file
    • startpscmd – This tries to automatically start the remote agent which allows further commands to be used
    • pscmd – Executes a powershell command
    • getfile – Downloads remote file
    • shell – Executes a shell command
    • socksproxy – Starts a SOCKS4a/5 proxy

As it is with all things RDP, automatic command execution doesn’t always work mostly because of timing issues therefore the startpscmd might need to be used 2 times, OR you might need to start the PSCMD channel manually.
When PSCMD channel starts, you’ll get a notification in your client shell.

URL format

As usual, the scripts take the target/scredentials in URL format. Below some examples

  • rdp+kerberos-password://TEST\Administrator:Passw0rd!1@win2016ad.test.corp/?dc=
    CredSSP (aka HYBRID) auth using Kerberos auth + password via socks5 to win2016ad.test.corp, the domain controller (kerberos service) is at The socks proxy is on
  • rdp+ntlm-password://TEST\Administrator:Passw0rd!1@
    CredSSP (aka HYBRID) auth using NTLM auth + password connecting to RDP server
  • rdp+ntlm-password://TEST\Administrator:<NThash>@
    CredSSP (aka HYBRID) auth using Pass-the-Hash (NTLM) auth connecting to the RDP server
  • rdp+plain://Administrator:Passw0rd!1@
    Plain authentication (No SSL, encryption is RC4) using a password connecting to RDP server

Source: https://github.com/skelsec/