
PowerShell reconstruit en C# à des fins de Red Teaming
NoPowerShell est un outil implémenté en C# qui permet d'exécuter des commandes de type PowerShell tout en restant invisible pour les mécanismes de journalisation de PowerShell. Ce binaire compatible .NET Framework 2 peut être chargé dans Cobalt Strike pour exécuter des commandes en mémoire. Aucune System.Management.Automation.dll n'est utilisée ; seules les bibliothèques .NET natives. Une autre utilisation de NoPowerShell est de le lancer en tant que DLL via rundll32.exe dans un environnement restreint : rundll32 NoPowerShell.dll,main.
Ce projet permet à chacun d'étendre facilement ses fonctionnalités en utilisant seulement quelques lignes de code C#. Pour plus d'informations, consultez CONTRIBUTING.md.
Les derniers binaires sont disponibles sur la page Releases. La branche MASTER n'est pas mise à jour très régulièrement ; le code et les cmdlets les plus récents sont disponibles dans la branche DEV. Pour démarrer avec NoPowerShell, assurez-vous également de consulter l'Aide-mémoire des cmdlets.



NoPowerShell est développé pour être utilisé avec la commande execute-assembly de Cobalt Strike ou dans un environnement restreint à l'aide de rundll32.exe.
Raisons d'utiliser NoPowerShell :
ping au lieu de Test-NetConnection)powerpick ou powershell, elles le sont dans nps (par exemple les cmdlets du module ActiveDirectory)Voir CHEATSHEET.md.
Utilisez la commande execute-assembly de Cobalt Strike pour lancer NoPowerShell.exe. Par exemple execute-assembly /path/to/NoPowerShell.exe Get-Command.
Optionnellement, NoPowerShell.cna peut être utilisé pour ajouter l'alias nps à Cobalt Strike.
bofnet_initbofnet_load /path/to/NoPowerShell.dllbofnet_execute NoPowerShell.Program Get-CommandCe fork permet d'exécuter des exécutables .NET standard
bofnet_initbofnet_load /path/to/NoPowerShell.exebofnet_executeassembly NoPowerShell Get-CommandNoPowerShell.dll (glissez avec le clic droit -> Créer des raccourcis ici)rundll32 et en ajoutant ,mainrundll32 C:\Path\to\NoPowerShell.dll,mainLorsque vous utilisez NoPowerShell depuis cmd.exe ou PowerShell, vous devez échapper le caractère pipe (|) respectivement avec un accent circonflexe (^) ou un backtick (`), par exemple :
ls ^| select Namels `| select Name[System.Security.Principal.WindowsIdentity]::GetCurrent().Name| Cmdlet | Description |
|---|---|
| Invoke-Command | Exécuter une commande sur une machine distante via PSRemoting (ce qui sera bien sûr journalisé dans ce cas) |
| * | D'autres commandes *-Item* |
| Search-ADAccount | |
| Get-ADPrincipalGroupMembership | |
| Get-ADOrganizationalUnits | |
| * | D'autres commandes du module PowerShell ActiveDirectory |
| * | Des utilitaires Sysinternals comme pipelist et sdelete |
Les auteurs de cmdlets NoPowerShell supplémentaires sont ajoutés au tableau ci-dessous. De plus, le tableau liste les commandes que la communauté demande d'ajouter. Ensemble, nous pouvons développer une boîte à outils NoPowerShell puissante !
| Cmdlet | Contribué par | GitHub | Description | |
|---|---|---|---|---|