Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
nopowershell — 使用 C# 重新构建、用于红队行动的 PowerShell | Kitploit
工具/GitHubGitHub/bitsadmin/nopowershell
侦察信息收集后渗透利用命令与控制红队
GitHubbitsadmin/nopowershell

nopowershell

使用 C# 重新构建、用于红队行动的 PowerShell

查看仓库
1.1k1449个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

NoPowerShell

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。

截图

在 Cobalt Strike 中运行

NoPowerShell supported commands

命令执行示例

NoPowerShell sample commands

Rundll32 版本

NoPowerShellDll via rundll32

为什么选择 NoPowerShell

NoPowerShell 是为配合 Cobalt Strike 的 execute-assembly 命令或在受限环境中使用 rundll32.exe 而开发的。

使用 NoPowerShell 的理由:

  • 执行过程相当隐蔽
  • 功能强大
  • 提供你在 PowerShell 中已经熟悉的 cmdlet,无需再学习另一个工具
  • 如果你还不太熟悉 PowerShell,同样可以使用 cmd.exe 别名(例如用 ping 代替 Test-NetConnection)
  • 如果通过 powerpick 或 powershell 无法使用某些 cmdlet,那么它们在 nps 中_确实_可用(例如来自 ActiveDirectory 模块的 cmdlet)
  • 仅需几行 C# 即可轻松扩展

使用方法

示例

参见 CHEATSHEET.md。

通过 execute-assembly 在 Cobalt Strike 中使用

使用 Cobalt Strike 的 execute-assembly 命令启动 NoPowerShell.exe。例如 execute-assembly /path/to/NoPowerShell.exe Get-Command。

可选地,可以使用 NoPowerShell.cna 将 nps 别名添加到 Cobalt Strike。

通过 BOF.NET 在 Cobalt Strike 中使用

  1. 从 https://github.com/CCob/BOF.NET 安装 BOF.NET BOF
  2. 加载 BOF.NET 运行时:bofnet_init
  3. 加载 NoPowerShell 模块:bofnet_load /path/to/NoPowerShell.dll
  4. 执行 NoPowerShell cmdlet:bofnet_execute NoPowerShell.Program Get-Command

使用 @williamknows 的 BOF.NET 分支在 Cobalt Strike 中使用

该分支允许运行常规的 .NET 可执行文件

  1. 从 https://github.com/williamknows/BOF.NET 获取并编译 @williamknows 的 BOF.NET 分支
  2. 加载 BOF.NET 运行时:bofnet_init
  3. 加载 NoPowerShell 模块:bofnet_load /path/to/NoPowerShell.exe
  4. 执行 NoPowerShell cmdlet:bofnet_executeassembly NoPowerShell Get-Command

通过 rundll32 启动

  1. 为 NoPowerShell.dll 文件创建一个新的快捷方式(使用右键拖拽 -> 在此处创建快捷方式)
  2. 更新快捷方式,在文件名前加上 rundll32 并在末尾追加 ,main
  3. 快捷方式现在看起来像 rundll32 C:\Path\to\NoPowerShell.dll,main
  4. 双击该快捷方式

注意

当从 cmd.exe 或 PowerShell 中使用 NoPowerShell 时,你需要分别使用脱字符(^)或反引号(`)来转义管道字符(|),例如:

  • cmd.exe: ls ^| select Name
  • PowerShell: ls `| select Name

已知问题

  • 管道字符两侧需要留有空格
  • .NET Framework 2 不支持 TLS 1.1+,因此任何强制使用该协议的网站都会导致连接错误

改进计划

  • 修复上述问题
  • 支持参数组
  • 在命令行中增加对 .NET 代码的支持,例如:[System.Security.Principal.WindowsIdentity]::GetCurrent().Name

社区请求的 NoPowerShell cmdlet

社区贡献的 NoPowerShell cmdlet

其他 NoPowerShell cmdlet 的作者会添加到下表中。此外,该表还列出了社区请求添加的命令。让我们一起打造一个强大的 NoPowerShell 工具包!

Cmdlet贡献者GitHubTwitter描述

内置的 NoPowerShell cmdlet

另外,请务必查看 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-ADUserActiveDirectory
Get-ADObjectActiveDirectory
Get-ADReplicationSubnetActiveDirectory
Get-ADGroupActiveDirectory
Get-ADGroupMemberActiveDirectory
Get-ADComputerActiveDirectory
Get-ADDomainControllerActiveDirectory
Get-ADTrustActiveDirectory
Copy-AclAdditional
Get-RemoteSmbShareAdditional
Resolve-AdiDnsNameAdditional
Get-WhoamiAdditional
Get-WinStationAdditional
Compress-ArchiveArchive需要 .NET 4.5+
Expand-ArchiveArchive需要 .NET 4.5+
Get-HelpCore
Get-CommandCore
Where-ObjectCore
Resolve-DnsNameDnsClient
Get-LocalGroupMemberLocalAccounts
Get-LocalGroupLocalAccounts
Set-ClipboardManagement
Get-PSDriveManagement
Get-HotFixManagement
Stop-ProcessManagement
Get-ChildItemManagement
Copy-ItemManagement
Invoke-WmiMethodManagement
Remove-ItemManagement
Get-ItemPropertyValueManagement
Get-ItemPropertyManagement
Get-ComputerInfoManagement
Get-DnsClientCacheManagement
Get-ProcessManagement
Get-WmiObjectManagement
Get-ClipboardManagement
Get-ContentManagement
Test-NetConnectionNetTCPIP
Get-NetTCPConnectionNetTCPIP
Get-NetNeighborNetTCPIP尚不支持 IPv6
Get-NetRouteNetTCPIP
Get-NetIPAddressNetTCPIP
Get-ServiceNoPowerShell.Commands
Get-LocalUserNoPowerShell.Commands
Get-WinEventNoPowerShell.Commands
New-ShortcutNoPowerShell.Commands
Get-AclSecurity
Get-SmbMappingSmbShare
Get-SmbShareSmbShare
Invoke-SqlcmdSQLPS
Get-FileHashUtility
ConvertFrom-SddlStringUtility
Sort-ObjectUtility
Measure-ObjectUtility
Invoke-WebRequestUtility
Select-ObjectUtility
Out-FileUtility
Format-TableUtility
Format-ListUtility
Export-CsvUtility
ConvertTo-CsvUtility
Write-OutputUtility
贡献者网站备注
pinvoke.net 的贡献者https://www.pinvoke.net/多个 cmdlet 使用了来自 pinvoke 的代码片段
Michael Conradhttps://github.com/MichaCo/Resolve-Dns cmdlet 的部分代码基于 DnsClient.Net 项目的代码
Rex Loganhttps://stackoverflow.com/a/1148861Get-NetNeighbor cmdlet 的大部分代码源自他在 StackOverflow 上的帖子
PowerShell 开发者https://github.com/PowerShell/NoPowerShell DLL 的代码主要基于 PowerShell 处理控制台输入的代码
Benjamin Delpyhttps://github.com/gentilkiwi/Get-WinStation 的代码灵感来自 Mimikatz 的 ts::sessions 命令的代码
Dan Portshttps://github.com/danports/Get-Winstation 的编组(Marshalling)代码部分复制自 Cassia 项目
Mazdakhttps://www.codeproject.com/Articles/2937/Getting-local-groups-and-member-names-in-CGet-LocalGroupMember cmdlet 使用的原生函数调用
Rex Loganhttps://stackoverflow.com/a/1148861Get-NetNeighbor cmdlet 的代码