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 分支更新并不频繁;最新代码和 cmdlet 位于 DEV 分支。要快速上手 NoPowerShell,请务必同时查看 cmdlet Cheatsheet。



NoPowerShell 是为配合 Cobalt Strike 的 execute-assembly 命令或在受限环境中使用 rundll32.exe 而开发的。
使用 NoPowerShell 的理由:
ping 代替 Test-NetConnection)powerpick 或 powershell 无法使用某些 cmdlet,那么它们在 nps 中_确实_可用(例如来自 ActiveDirectory 模块的 cmdlet)参见 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 并在末尾追加 ,mainrundll32 C:\Path\to\NoPowerShell.dll,main当从 cmd.exe 或 PowerShell 中使用 NoPowerShell 时,你需要分别使用脱字符(^)或反引号(`)来转义管道字符(|),例如:
ls ^| select Namels `| select Name[System.Security.Principal.WindowsIdentity]::GetCurrent().Name其他 NoPowerShell cmdlet 的作者会添加到下表中。此外,该表还列出了社区请求添加的命令。让我们一起打造一个强大的 NoPowerShell 工具包!
| Cmdlet | 贡献者 | GitHub | 描述 | |
|---|---|---|---|---|
另外,请务必查看 Cheatsheet,了解如何使用这些 cmdlet 的示例。
多个 NoPowerShell cmdlet 和 NoPowerShell DLL 包含由其他开发者编写的代码。
作者:Arris Huijgen (@bitsadmin - https://github.com/bitsadmin/)
| Cmdlet | 描述 |
|---|
| Invoke-Command | 使用 PSRemoting 在远程机器上执行命令(在这种情况下当然会被记录) |
| * | 更多 *-Item* 命令 |
| Search-ADAccount | |
| Get-ADPrincipalGroupMembership | |
| Get-ADOrganizationalUnits | |
| * | 更多来自 ActiveDirectory PowerShell 模块的命令 |
| * | Sysinternals 实用工具,如 pipelist 和 sdelete |
| Cmdlet | 模块 | 备注 |
|---|
| 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 | 需要 .NET 4.5+ |
| Expand-Archive | Archive | 需要 .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 | 尚不支持 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 |
| 贡献者 | 网站 | 备注 |
|---|
| pinvoke.net 的贡献者 | https://www.pinvoke.net/ | 多个 cmdlet 使用了来自 pinvoke 的代码片段 |
| Michael Conrad | https://github.com/MichaCo/ | Resolve-Dns cmdlet 的部分代码基于 DnsClient.Net 项目的代码 |
| Rex Logan | https://stackoverflow.com/a/1148861 | Get-NetNeighbor cmdlet 的大部分代码源自他在 StackOverflow 上的帖子 |
| PowerShell 开发者 | https://github.com/PowerShell/ | NoPowerShell DLL 的代码主要基于 PowerShell 处理控制台输入的代码 |
| Benjamin Delpy | https://github.com/gentilkiwi/ | Get-WinStation 的代码灵感来自 Mimikatz 的 ts::sessions 命令的代码 |
| Dan Ports | https://github.com/danports/ | Get-Winstation 的编组(Marshalling)代码部分复制自 Cassia 项目 |
| Mazdak | https://www.codeproject.com/Articles/2937/Getting-local-groups-and-member-names-in-C | Get-LocalGroupMember cmdlet 使用的原生函数调用 |
| Rex Logan | https://stackoverflow.com/a/1148861 | Get-NetNeighbor cmdlet 的代码 |