
レッドチーミング目的でC#により再構築されたPowerShell
NoPowerShellはC#で実装されたツールで、PowerShellに似たコマンドを実行しながら、PowerShellのあらゆるログ記録メカニズムに対して不可視のまま動作します。この.NET Framework 2互換のバイナリは、Cobalt Strikeにロードしてメモリ内でコマンドを実行できます。System.Management.Automation.dllは使用されず、ネイティブの.NETライブラリのみが使用されます。NoPowerShellの別のユースケースとしては、制限された環境でrundll32.exeを介してDLLとして起動する方法があります: rundll32 NoPowerShell.dll,main。
このプロジェクトは、数行のC#コードだけで誰でも簡単に機能を拡張できるようにしています。詳細については、CONTRIBUTING.mdを参照してください。
最新のバイナリはReleasesページから入手できます。MASTERブランチはあまり頻繁には更新されません。最新のコードとコマンドレットはDEVブランチにあります。NoPowerShellのスキルを身につけるには、コマンドレットのCheatsheetもぜひ確認してください。



NoPowerShellは、Cobalt Strikeのexecute-assemblyコマンドで使用するか、rundll32.exeを使用して制限された環境で使用するために開発されました。
NoPowerShellを使用する理由:
Test-NetConnectionの代わりにping)powerpickやpowershell経由ではコマンドレットが利用できない場合でも、npsでは利用できる(例: ActiveDirectoryモジュールのコマンドレット)CHEATSHEET.mdを参照してください。
Cobalt Strikeのexecute-assemblyコマンドを使用してNoPowerShell.exeを起動します。例: execute-assembly /path/to/NoPowerShell.exe Get-Command。
必要に応じて、NoPowerShell.cnaを使用してnpsエイリアスをCobalt Strikeに追加できます。
bofnet_initbofnet_load /path/to/NoPowerShell.dllbofnet_execute NoPowerShell.Program Get-Commandこのフォークでは、通常の.NET実行可能ファイルを実行できます
bofnet_initbofnet_load /path/to/NoPowerShell.exebofnet_executeassembly NoPowerShell Get-CommandNoPowerShell.dllファイルへの新しいショートカットを作成します(右クリックでドラッグ -> ここにショートカットを作成)rundll32を付け、末尾に,mainを追加してショートカットを更新しますrundll32 C:\Path\to\NoPowerShell.dll,maincmd.exeまたはPowerShellからNoPowerShellを使用する場合、パイプ文字(|)をそれぞれキャレット(^)またはバッククォート(`)でエスケープする必要があります。例:
ls ^| select Namels `| select Name[System.Security.Principal.WindowsIdentity]::GetCurrent().Name追加のNoPowerShellコマンドレットの作者は以下の表に追加されます。さらに、この表にはコミュニティから追加がリクエストされたコマンドも一覧表示されます。一緒に強力なNoPowerShellツールキットを開発しましょう!
| Cmdlet | Contributed by | GitHub | Description | |
|---|---|---|---|---|
これらのコマンドレットの使用例については、Cheatsheetもぜひ確認してください。
さまざまなNoPowerShellコマンドレットとNoPowerShell DLLには、他の開発者によって作成されたコードが含まれています。
作者: Arris Huijgen (@bitsadmin - https://github.com/bitsadmin/)
| Cmdlet | Description |
|---|
| Invoke-Command | PSRemotingを使用してリモートマシン上でコマンドを実行します(その場合、もちろんログに記録されます) |
| * | その他の*-Item*コマンド |
| Search-ADAccount | |
| Get-ADPrincipalGroupMembership | |
| Get-ADOrganizationalUnits | |
| * | ActiveDirectory PowerShellモジュールのその他のコマンド |
| * | pipelistやsdeleteなどのSysinternalsユーティリティ |
| Cmdlet | Module | Notes |
|---|
| 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 | Requires .NET 4.5+ |
| Expand-Archive | Archive | Requires .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 | No support for IPv6 yet |
| 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 |
| Who | Website | Notes |
|---|
| Contributors of pinvoke.net | https://www.pinvoke.net/ | Various cmdlets use snippets from pinvoke |
| Michael Conrad | https://github.com/MichaCo/ | Parts of the Resolve-Dns cmdlet are based on the code of the DnsClient.Net project |
| Rex Logan | https://stackoverflow.com/a/1148861 | Most code of the Get-NetNeighbor cmdlet originates from his StackOverflow post |
| PowerShell developers | https://github.com/PowerShell/ | Code of NoPowerShell DLL is largely based on the code handling the console input of PowerShell |
| Benjamin Delpy | https://github.com/gentilkiwi/ | Code of Get-WinStation is inspired by the code of Mimikatz' ts::sessions command |
| Dan Ports | https://github.com/danports/ | Marshalling code of Get-Winstation is partially copied from the Cassia project |
| Mazdak | https://www.codeproject.com/Articles/2937/Getting-local-groups-and-member-names-in-C | Native function calls for the Get-LocalGroupMember cmdlet |
| Rex Logan | https://stackoverflow.com/a/1148861 | Code of Get-NetNeighbor cmdlet |