
PowerShell in C# für Red-Teaming-Zwecke neu aufgebaut
NoPowerShell ist ein in C# implementiertes Tool, das die Ausführung PowerShell-ähnlicher Befehle unterstützt, während es für sämtliche PowerShell-Protokollierungsmechanismen unsichtbar bleibt. Diese mit .NET Framework 2 kompatible Binärdatei kann in Cobalt Strike geladen werden, um Befehle im Speicher auszuführen. Es wird keine System.Management.Automation.dll verwendet; nur native .NET-Bibliotheken. Ein alternativer Anwendungsfall für NoPowerShell besteht darin, es als DLL über rundll32.exe in einer eingeschränkten Umgebung zu starten: rundll32 NoPowerShell.dll,main.
Dieses Projekt ermöglicht es jedem, seine Funktionalität mit nur wenigen Zeilen C#-Code zu erweitern. Weitere Informationen findest du in CONTRIBUTING.md.
Die neuesten Binärdateien sind auf der Releases-Seite verfügbar. Der MASTER-Zweig wird nicht sehr regelmäßig aktualisiert; der neueste Code und die neuesten Cmdlets sind im DEV-Zweig verfügbar. Um schnell mit NoPowerShell durchzustarten, schau dir auch unbedingt den Cmdlet-Cheatsheet an.



NoPowerShell wurde für die Verwendung mit dem execute-assembly-Befehl von Cobalt Strike oder in einer eingeschränkten Umgebung mit rundll32.exe entwickelt.
Gründe für die Verwendung von NoPowerShell:
ping anstelle von Test-NetConnection)powerpick oder powershell nicht verfügbar sind, sind sie in nps doch verfügbar (z. B. Cmdlets aus dem ActiveDirectory-Modul)Siehe CHEATSHEET.md.
Verwende den execute-assembly-Befehl von Cobalt Strike, um die NoPowerShell.exe zu starten. Zum Beispiel execute-assembly /path/to/NoPowerShell.exe Get-Command.
Optional kann NoPowerShell.cna verwendet werden, um den nps-Alias zu Cobalt Strike hinzuzufügen.
bofnet_initbofnet_load /path/to/NoPowerShell.dllbofnet_execute NoPowerShell.Program Get-CommandDieser Fork ermöglicht die Ausführung regulärer .NET-Executables
bofnet_initbofnet_load /path/to/NoPowerShell.exebofnet_executeassembly NoPowerShell Get-CommandNoPowerShell.dll (Ziehen mit Rechtsklick -> Hier Verknüpfungen erstellen)rundll32 präfixierst und ,main anhängstrundll32 C:\Path\to\NoPowerShell.dll,mainBei Verwendung von NoPowerShell über cmd.exe oder PowerShell musst du das Pipe-Zeichen (|) entsprechend mit einem Caret (^) oder einem Backtick (`) escapen, z. B.:
ls ^| select Namels `| select Name[System.Security.Principal.WindowsIdentity]::GetCurrent().NameAutoren zusätzlicher NoPowerShell-Cmdlets werden in der folgenden Tabelle aufgeführt. Darüber hinaus listet die Tabelle Befehle auf, die von der Community zum Hinzufügen angefragt wurden. Gemeinsam können wir ein leistungsstarkes NoPowerShell-Toolkit entwickeln!
| Cmdlet | Beigetragen von | GitHub | Beschreibung | |
|---|---|---|---|---|
Schau dir auch unbedingt den Cheatsheet an, um Beispiele für die Verwendung dieser Cmdlets zu finden.
Verschiedene NoPowerShell-Cmdlets und die NoPowerShell-DLL enthalten Code, der von anderen Entwicklern erstellt wurde.
Verfasst von Arris Huijgen (@bitsadmin - https://github.com/bitsadmin/)
| Cmdlet | Beschreibung |
|---|
| Invoke-Command | Führt über PSRemoting einen Befehl auf einem entfernten Computer aus (wobei der Befehl in diesem Fall natürlich protokolliert wird) |
| * | Weitere *-Item*-Befehle |
| Search-ADAccount | |
| Get-ADPrincipalGroupMembership | |
| Get-ADOrganizationalUnits | |
| * | Weitere Befehle aus dem PowerShell-Modul ActiveDirectory |
| * | Sysinternals-Dienstprogramme wie pipelist und sdelete |
| Cmdlet | Modul | Anmerkungen |
|---|
| 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 | Erfordert .NET 4.5+ |
| Expand-Archive | Archive | Erfordert .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 | Noch keine IPv6-Unterstützung |
| 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 |
| Wer | Website | Anmerkungen |
|---|
| Mitwirkende von pinvoke.net | https://www.pinvoke.net/ | Verschiedene Cmdlets verwenden Codeausschnitte von pinvoke |
| Michael Conrad | https://github.com/MichaCo/ | Teile des Resolve-Dns-Cmdlets basieren auf dem Code des DnsClient.Net-Projekts |
| Rex Logan | https://stackoverflow.com/a/1148861 | Der meiste Code des Get-NetNeighbor-Cmdlets stammt aus seinem StackOverflow-Beitrag |
| PowerShell-Entwickler | https://github.com/PowerShell/ | Der Code der NoPowerShell-DLL basiert weitgehend auf dem Code, der die Konsoleneingabe von PowerShell verarbeitet |
| Benjamin Delpy | https://github.com/gentilkiwi/ | Der Code von Get-WinStation ist vom Code des Mimikatz-Befehls ts::sessions inspiriert |
| Dan Ports | https://github.com/danports/ | Der Marshalling-Code von Get-Winstation wurde teilweise aus dem Cassia-Projekt kopiert |
| Mazdak | https://www.codeproject.com/Articles/2937/Getting-local-groups-and-member-names-in-C | Native Funktionsaufrufe für das Get-LocalGroupMember-Cmdlet |
| Rex Logan | https://stackoverflow.com/a/1148861 | Code des Get-NetNeighbor-Cmdlets |