
PowerSploit - A PowerShell Post-Exploitation Framework
Forké pour ajouter quelques fonctionnalités à PowerView.ps1 que j'effectue couramment manuellement
Exécute du code sur une machine cible.
Invoke-DllInjectionInjecte une DLL dans l'ID de processus de votre choix.
Invoke-ReflectivePEInjectionCharge par réflexion un fichier PE Windows (DLL/EXE) dans le processus PowerShell, ou injecte par réflexion 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 retourne sa sortie formatée en utilisant WMI comme canal C2.
Modifie et/ou prépare des scripts pour exécution sur une machine compromise.
Out-EncodedCommandCompresse, encode en Base-64 et génère une sortie en ligne de commande pour un script de charge utile PowerShell.
Out-CompressedDllCompresse, encode en Base-64 et génère du code 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.
Ajoute 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 avec élévation de privilèges 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é chargés (SSP).
L'antivirus n'a aucune chance face à PowerShell !
Find-AVSignatureLocalise les signatures antivirus 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 d'ouverture de session disponibles. Crée des processus avec les jetons d'ouverture de session d'autres utilisateurs et impersonne les jetons d'ouverture de session dans le thread courant.
Invoke-CredentialInjectionCrée des ouvertures de session avec des identifiants en clair sans déclencher l'ID d'événement 4648 suspect (ouverture de session avec identifiants explicites).
Invoke-NinjaCopyCopie un fichier depuis un volume partitionné NTFS en lisant le volume brut et en analysant les structures NTFS.
Invoke-MimikatzCharge Mimikatz 2.0 par réflexion en mémoire à l'aide de PowerShell. Peut être utilisé pour extraire des identifiants sans rien écrire sur le disque. Peut être utilisé pour toutes les fonctionnalités fournies 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 déployés via les préférences de stratégie de groupe.
Get-GPPAutologonRécupère le nom d'utilisateur et le mot de passe d'ouverture automatique depuis registry.xml s'ils sont déployés via les préférences de stratégie de groupe.
Get-TimedScreenshotUne fonction qui prend des captures d'écran à intervalle régulier et les enregistre dans un dossier.
New-VolumeShadowCopyCrée une nouvelle copie fantôme de volume.
Get-VolumeShadowCopyListe les chemins d'appareil 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 du microphone système et le sauvegarde sur le disque.
Provoque le chaos général avec PowerShell.
Set-MasterBootRecordPreuve de concept qui écrase le secteur d'amorçage principal avec le message de votre choix.
Set-CriticalProcessProvoque un écran bleu sur votre machine à la sortie de PowerShell.
Outils pour aider à élever les privilèges sur une cible.
PowerUpRéférence des vérifications courantes d'élévation de privilèges, accompagnée de certains vecteurs de weaponisation.
Outils pour faciliter la phase de reconnaissance d'un test d'intrusion.
Invoke-PortscanEffectue un simple scan de ports à l'aide de sockets classiques, basé (assez) librement sur nmap.
Get-HttpStatusRetourne les codes de statut HTTP et l'URL complète pour les chemins spécifiés lorsqu'un fichier de dictionnaire est fourni.
Invoke-ReverseDnsLookupScanne une plage d'adresses IP pour trouver des enregistrements DNS PTR.
PowerViewPowerView est une série de fonctions qui effectue l'énumération et l'exploitation du réseau et des domaines Windows.
Une collection de dictionnaires utilisée pour faciliter 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 mention explicite contraire.
Reportez-vous à l'aide basée sur les commentaires de chaque script pour des informations d'utilisation détaillées.
Pour installer ce module, déposez le dossier PowerSploit entier dans l'un de vos répertoires de modules. Les chemins de modules PowerShell par défaut sont répertoriés dans la variable d'environnement $Env:PSModulePath.
Le chemin de module par défaut pour l'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 souhaitez supprimer l'avertissement ennuyeux 'Do you really want to run scripts downloaded from the Internet', une fois que vous avez placé PowerSploit dans votre chemin de modules, exécutez la commande d'une 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 que favoriser une portabilité accrue.
Nous avons besoin de contributions ! Si vous avez une excellente idée pour PowerSploit, nous serions ravis de l'ajouter. Les nouvelles additions devront répondre aux exigences suivantes :
Pour tous les contributeurs et futurs contributeurs de PowerSploit, je 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 qui utilise Write-Host ne seront pas prises en compte. Vous devez plutôt générer 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 simplement 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 s'il existe des circonstances atténuantes empêchant l'application de la licence BSD).
Assurez-vous que toutes les fonctions respectent la convention verbe-nom PowerShell appropriée. 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.
Prévoyez un espacement logique dans votre code. Indentez votre code pour le rendre plus lisible.
Si vous vous surprenez à répéter du code, écrivez une fonction.
Interceptez toutes les erreurs prévisibles et fournissez une sortie pertinente. Si vous avez une erreur qui doit arrêter l'exécution du script, utilisez 'Throw'. Si vous avez une erreur qui ne doit pas 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 immédiatement. Personne ne devrait avoir à modifier le code, sauf s'il le souhaite.
La compatibilité 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 la réception d'une entrée de 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'abusez pas des commentaires en ligne. Utilisez-les uniquement lorsque certains aspects du code pourraient prêter à confusion pour un lecteur.
Plutôt que d'utiliser Out-Null pour supprimer une 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.