
PowerShell ricostruito in C# per scopi di Red Teaming
NoPowerShell è uno strumento implementato in C# che supporta l'esecuzione di comandi simili a quelli di PowerShell rimanendo invisibile a qualsiasi meccanismo di logging di PowerShell. Questo binario compatibile con .NET Framework 2 può essere caricato in Cobalt Strike per eseguire comandi in memoria. Non viene utilizzato System.Management.Automation.dll; solo librerie .NET native. Un caso d'uso alternativo per NoPowerShell è avviarlo come DLL tramite rundll32.exe in un ambiente ristretto: rundll32 NoPowerShell.dll,main.
Questo progetto rende facile per chiunque estendere le sue funzionalità usando solo poche righe di codice C#. Per maggiori informazioni, vedere CONTRIBUTING.md.
Gli ultimi binari sono disponibili nella pagina Releases. Il branch MASTER non viene aggiornato molto regolarmente; il codice e i cmdlet più recenti sono disponibili nel branch DEV. Per iniziare subito con NoPowerShell, assicurati di dare un'occhiata anche al Cheatsheet dei cmdlet.



NoPowerShell è sviluppato per essere utilizzato con il comando execute-assembly di Cobalt Strike o in un ambiente ristretto tramite rundll32.exe.
Motivi per usare NoPowerShell:
ping invece di Test-NetConnection)powerpick o powershell i cmdlet non siano disponibili, lo sono in nps (ad es. cmdlet del modulo ActiveDirectory)Vedi CHEATSHEET.md.
Usa il comando execute-assembly di Cobalt Strike per avviare NoPowerShell.exe. Ad esempio execute-assembly /path/to/NoPowerShell.exe Get-Command.
Opzionalmente, NoPowerShell.cna può essere usato per aggiungere l'alias nps a Cobalt Strike.
bofnet_initbofnet_load /path/to/NoPowerShell.dllbofnet_execute NoPowerShell.Program Get-CommandQuesto fork consente di eseguire eseguibili .NET normali.
bofnet_initbofnet_load /path/to/NoPowerShell.exebofnet_executeassembly NoPowerShell Get-CommandNoPowerShell.dll (trascina con il tasto destro -> Crea collegamenti qui)rundll32 e aggiungendo ,mainrundll32 C:\Path\to\NoPowerShell.dll,mainQuando si usa NoPowerShell da cmd.exe o PowerShell, è necessario eseguire l'escaping del carattere pipe (|) rispettivamente con un accento circonflesso (^) o un backtick (`), ad esempio:
ls ^| select Namels `| select Name[System.Security.Principal.WindowsIdentity]::GetCurrent().Name| Cmdlet | Descrizione |
|---|---|
| Invoke-Command | Utilizza PSRemoting per eseguire un comando su una macchina remota (che in tal caso verrà ovviamente registrato nei log) |
| * | Altri comandi *-Item* |
| Search-ADAccount | |
| Get-ADPrincipalGroupMembership | |
| Get-ADOrganizationalUnits | |
| * | Altri comandi dal modulo PowerShell ActiveDirectory |
| * | Utility Sysinternals come pipelist e sdelete |
Gli autori di ulteriori cmdlet NoPowerShell vengono aggiunti alla tabella seguente. Inoltre, la tabella elenca i comandi che la comunità ha richiesto di aggiungere. Insieme possiamo sviluppare un potente toolkit NoPowerShell!
| Cmdlet | Contributo di | GitHub | Descrizione | |
|---|---|---|---|---|
| Cmdlet | Module | Note |
|---|---|---|
| Get-ADUser | ActiveDirectory | |
| Get-ADObject | ActiveDirectory | |
| Get-ADReplicationSubnet | ActiveDirectory | |
| Get-ADGroup | ActiveDirectory | |
| Get-ADGroupMember | ActiveDirectory | |
| Get-ADComputer | ActiveDirectory | |
| Get-ADDomainController | ActiveDirectory | |
| Get-ADTrust | ActiveDirectory | |
| Copy-Acl | Additional | |
| Get-RemoteSmbShare | Additional | |
| Resolve-AdiDnsName | Additional | |
| Get-Whoami | Additional | |
| Get-WinStation | Additional | |
| Compress-Archive | Archive | Richiede .NET 4.5+ |
| Expand-Archive | Archive | Richiede .NET 4.5+ |
| Get-Help | Core | |
| Get-Command | Core | |
| Where-Object | Core | |
| Resolve-DnsName | DnsClient | |
| Get-LocalGroupMember | LocalAccounts | |
| Get-LocalGroup | LocalAccounts | |
| Set-Clipboard | Management | |
| Get-PSDrive | Management | |
| Get-HotFix | Management | |
| Stop-Process | Management | |
| Get-ChildItem | Management | |
| Copy-Item | Management | |
| Invoke-WmiMethod | Management | |
| Remove-Item | Management | |
| Get-ItemPropertyValue | Management | |
| Get-ItemProperty | Management | |
| Get-ComputerInfo | Management | |
| Get-DnsClientCache | Management | |
| Get-Process | Management | |
| Get-WmiObject | Management | |
| Get-Clipboard | Management | |
| Get-Content | Management | |
| Test-NetConnection | NetTCPIP | |
| Get-NetTCPConnection | NetTCPIP | |
| Get-NetNeighbor | NetTCPIP | Non supporta ancora IPv6 |
| Get-NetRoute | NetTCPIP | |
| Get-NetIPAddress | NetTCPIP | |
| Get-Service | NoPowerShell.Commands | |
| Get-LocalUser | NoPowerShell.Commands | |
| Get-WinEvent | NoPowerShell.Commands | |
| New-Shortcut | NoPowerShell.Commands | |
| Get-Acl | Security | |
| Get-SmbMapping | SmbShare | |
| Get-SmbShare | SmbShare | |
| Invoke-Sqlcmd | SQLPS | |
| Get-FileHash | Utility | |
| ConvertFrom-SddlString | Utility | |
| Sort-Object | Utility | |
| Measure-Object | Utility | |
| Invoke-WebRequest | Utility | |
| Select-Object | Utility | |
| Out-File | Utility | |
| Format-Table | Utility | |
| Format-List | Utility | |
| Export-Csv | Utility | |
| ConvertTo-Csv | Utility | |
| Write-Output | Utility |