
PowerSploit - Un framework de post-exploitation PowerShell
Exécuter du code sur une machine cible.
Invoke-DllInjectionInjecte une DLL dans l'ID de processus de votre choix.
Invoke-ReflectivePEInjectionCharge de manière réflexive un fichier PE Windows (DLL/EXE) dans le processus PowerShell, ou injecte de manière réflexive une DLL dans un processus distant.
Invoke-ShellcodeInjecte du shellcode dans l'ID de processus de votre choix ou localement dans PowerShell.
Invoke-WmiCommandExécute un ScriptBlock PowerShell sur un ordinateur cible et renvoie sa sortie formatée en utilisant WMI comme canal C2.
Modifier et/ou préparer des scripts pour exécution sur une machine compromise.
Out-EncodedCommandCompresse, encode en Base64 et génère une sortie en ligne de commande pour un script de charge utile PowerShell.
Out-CompressedDllCompresse, encode en Base64 et génère le code nécessaire pour charger une DLL managée en mémoire.
Out-EncryptedScriptChiffre des fichiers texte/scripts.
Remove-CommentSupprime les commentaires et les espaces superflus d'un script.
Ajouter des capacités de persistance à un script PowerShell
New-UserPersistenceOptionConfigure les options de persistance au niveau utilisateur pour la fonction Add-Persistence.
New-ElevatedPersistenceOptionConfigure les options de persistance élevée pour la fonction Add-Persistence.
Add-PersistenceAjoute des capacités de persistance à un script.
Install-SSPInstalle une DLL de fournisseur de support de sécurité (SSP).
Get-SecurityPackagesÉnumère tous les packages de sécurité (SSP) chargés.
L'antivirus n'a aucune chance face à PowerShell !
Find-AVSignatureLocalise les signatures AV d'un seul octet en utilisant la même méthode que DSplit de « class101 ».
Toutes vos données m'appartiennent !
Invoke-TokenManipulationListe les jetons de connexion disponibles. Crée des processus avec les jetons de connexion d'autres utilisateurs et usurpe les jetons de connexion dans le thread actuel.
Invoke-CredentialInjectionCrée des connexions avec des identifiants en clair sans déclencher l'ID d'événement suspect 4648 (Connexion avec identifiants explicites).
Invoke-NinjaCopyCopie un fichier depuis un volume partitionné en NTFS en lisant le volume brut et en analysant les structures NTFS.
Invoke-MimikatzCharge de manière réflexive Mimikatz 2.0 en mémoire en utilisant PowerShell. Peut être utilisé pour extraire des identifiants sans rien écrire sur le disque. Peut être utilisé pour toute fonctionnalité fournie par Mimikatz.
Get-KeystrokesEnregistre les touches pressées, l'heure et la fenêtre active.
Get-GPPPasswordRécupère le mot de passe en clair et d'autres informations pour les comptes poussés via les préférences de stratégie de groupe (Group Policy Preferences).
Get-GPPAutologonRécupère le nom d'utilisateur et le mot de passe de connexion automatique à partir de registry.xml s'ils sont poussés via les préférences de stratégie de groupe.
Get-TimedScreenshotUne fonction qui prend des captures d'écran à intervalles réguliers et les sauvegarde dans un dossier.
New-VolumeShadowCopyCrée une nouvelle copie fantôme de volume.
Get-VolumeShadowCopyListe les chemins d'accès de toutes les copies fantômes de volume locales.
Mount-VolumeShadowCopyMonte une copie fantôme de volume.
Remove-VolumeShadowCopySupprime une copie fantôme de volume.
Get-VaultCredentialAffiche les objets d'identifiants du coffre Windows, y compris les identifiants web en clair.
Out-MinidumpGénère un minidump complet de la mémoire d'un processus.
Get-MicrophoneAudioEnregistre l'audio depuis le microphone du système et le sauvegarde sur le disque.
Provoquer le chaos général avec PowerShell.
Set-MasterBootRecordCode de preuve de concept qui écrase le enregistrement de démarrage principal avec le message de votre choix.
Set-CriticalProcessProvoque un écran bleu sur votre machine à la sortie de PowerShell.
Outils pour aider à l'élévation des privilèges sur une cible.
PowerUpEnsemble de vérifications courantes d'élévation de privilèges, avec quelques vecteurs d'armement.
Outils pour aider à la phase de reconnaissance d'un test d'intrusion.
Invoke-PortscanEffectue un simple scan de ports en utilisant des sockets classiques, basé (assez) librement sur nmap.
Get-HttpStatusRenvoie les codes d'état HTTP et l'URL complète pour des chemins spécifiés lorsqu'un fichier dictionnaire est fourni.
Invoke-ReverseDnsLookupScanne une plage d'adresses IP pour les enregistrements DNS PTR.
PowerViewPowerView est une série de fonctions qui effectuent l'énumération du réseau et du domaine Windows ainsi que l'exploitation.
Une collection de dictionnaires utilisés pour aider à la phase de reconnaissance d'un test d'intrusion. Les dictionnaires proviennent des sources suivantes.
Le projet PowerSploit et tous les scripts individuels sont sous licence BSD 3-Clause sauf indication contraire explicite.
Reportez-vous à l'aide basée sur les commentaires dans chaque script individuel pour des informations d'utilisation détaillées.
Pour installer ce module, placez l'ensemble du dossier PowerSploit dans l'un de vos répertoires de modules. Les chemins de modules PowerShell par défaut sont listés dans la variable d'environnement $Env:PSModulePath.
Le chemin de module par défaut par utilisateur est : "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" Le chemin de module par défaut au niveau de l'ordinateur est : "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
Pour utiliser le module, tapez Import-Module PowerSploit
Pour voir les commandes importées, tapez Get-Command -Module PowerSploit
Si vous utilisez PowerShell v3 et que vous souhaitez supprimer l'avertissement ennuyeux « Voulez-vous vraiment exécuter des scripts téléchargés depuis Internet ? », une fois que vous avez placé PowerSploit dans votre chemin de modules, exécutez la ligne suivante :
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
Pour de l'aide sur chaque commande individuelle, Get-Help est votre ami.
Remarque : Les outils contenus dans ce module ont tous été conçus pour pouvoir être exécutés individuellement. Les inclure dans un module ne fait qu'augmenter la portabilité.
Nous avons besoin de contributions ! Si vous avez une excellente idée pour PowerSploit, nous aimerions l'ajouter. Les nouvelles additions devront respecter les conditions suivantes :
Pour tous les contributeurs et futurs contributeurs de PowerSploit, je vous demande de suivre ce guide de style lors de l'écriture de vos scripts/modules.
Évitez Write-Host à tout prix. Les fonctions/cmdlets PowerShell ne sont pas des utilitaires en ligne de commande ! Les pull requests contenant du code utilisant Write-Host ne seront pas prises en compte. Vous devez plutôt produire des objets personnalisés. Pour plus d'informations sur la création d'objets personnalisés, lisez ces articles :
Si vous souhaitez afficher des informations de débogage pertinentes à l'écran, utilisez Write-Verbose. L'utilisateur peut toujours ajouter '-Verbose'.
Fournissez toujours une aide descriptive basée sur les commentaires pour chaque script. Assurez-vous également d'inclure votre nom et une licence BSD 3-Clause (sauf circonstances particulières empêchant l'application de la licence BSD).
Assurez-vous que toutes les fonctions respectent la règle verbe-nom appropriée de PowerShell. Utilisez Get-Verb pour lister les verbes par défaut utilisés par PowerShell. Les exceptions aux verbes pris en charge seront examinées au cas par cas.
Je préfère que les noms de variables soient en majuscules et aussi descriptifs que possible.
Fournissez un espacement logique entre votre code. Indentez votre code pour le rendre plus lisible.
Si vous vous retrouvez à répéter du code, écrivez une fonction.
Capturez toutes les erreurs anticipées et fournissez une sortie significative. Si vous avez une erreur qui doit arrêter l'exécution du script, utilisez 'Throw'. Si vous avez une erreur qui ne nécessite pas d'arrêter l'exécution, utilisez Write-Error.
Si vous écrivez un script qui interagit avec l'API Win32, essayez d'éviter de compiler du C# en ligne avec Add-Type. Essayez d'utiliser le module PSReflect, si possible.
N'utilisez pas de chemins codés en dur. Un script doit être utilisable dès sa sortie de la boîte. Personne ne devrait avoir à modifier le code sauf s'il le souhaite.
La compatibilité avec PowerShell v2 est hautement souhaitée.
Utilisez des paramètres positionnels et rendez les paramètres obligatoires lorsque cela a du sens. Par exemple, je recherche quelque chose comme ceci :
[Parameter(Position = 0, Mandatory = $True)]N'utilisez pas d'alias sauf si cela a du sens pour recevoir une entrée par pipeline. Ils rendent le code plus difficile à lire pour les personnes qui ne connaissent pas un alias particulier.
Essayez de ne pas laisser les commandes s'étendre trop longtemps. Par exemple, un pipeline est un endroit naturel pour un saut de ligne.
N'en faites pas trop avec les commentaires en ligne. Utilisez-les seulement lorsque certains aspects du code pourraient être confus pour un lecteur.
Plutôt que d'utiliser Out-Null pour supprimer la sortie indésirable/non pertinente, enregistrez la sortie indésirable dans $null. Cela offre une légère amélioration des performances.
Utilisez des valeurs par défaut pour vos paramètres lorsque cela a du sens. Idéalement, vous voulez un script qui fonctionne sans nécessiter de paramètres.
Si un script crée des objets personnalisés complexes, incluez un fichier ps1xml qui formatera correctement la sortie de l'objet.