我是靠谱客的博主 刻苦蜡烛,最近开发中收集的这篇文章主要介绍Powershell基础之脚本执行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

阅读目录(Content)

  • Powershell
  • powershell的脚本调用方法:

Bat

这就是我们常用的Bat脚本,全名为批处理文件,脚本中就是我们在CMD中使用到的命令,这里提一个小问题:CMD的命令行执行命令的优先级是.bat > .exe,那么假如我放一个cmd.bat在system32目录下,那么优先执行的是cmd.bat,这里面的内容就变得不可描述起来了

VBscript

执行vbs就是常说的vbscript,是微软为了方便自动化管理windows而推出的脚本语言,这里了解一下即可,不是文章重点。

一个小例子通过vbs操作WMI
Set wmi = GetObject("winmgmts:")
Set collection = wmi.ExecQuery("select * from Win32_Process")
For Each process in collection
WScript.Echo process.getObjectText_
Next

回到顶部(go to top)

Powershell

这就是我们的主角,在现在和未来一定是powershell占据主要地位(对于这一点搞Win多一点的朋友一定不会怀疑),首先我们来看一个简单的例子

script.ps1:
# 脚本内容
function test-conn { Test-Connection  -Count 2 -ComputerName $args}
​
# 载入脚本文件
.script.ps1
​
# 调用函数
test-conn localhost

Powershell执行策略

那么你可能会在调用脚本的时候出现报错,这是powershell的安全执行策略,下面我们来了解一下执行策略:PowerShell 提供了 Restricted、AllSigned、RemoteSigned、Unrestricted、Bypass、Undefined 六种类型的执行策略简单介绍各种策略如下:

 

那么我们如何绕过这些安全策略呢?下面提供几种方法,网上还有很多的绕过方法,大家可以自行研究:

 

回到顶部(go to top)

powershell的脚本调用方法:


如果脚本是直接写的代码而不是只定义了函数那么直接执行脚本.script.ps1即可powershell的脚本调用方法:

  1. 但是如果是载入里面的函数需要.+空格+.script.ps1

  2. 或者使用Import-Module .script.ps1, 这样才能直接使用脚本的函数

通过控制台执行Powershell

对于我们安全测试人员通常获取到的一个Shell是CMD的, 那么我们想要尽可能少的操作就可以直接通过控制台来执行powershell的命令, 那么先来看一个简单的例子

可以看到我们通过CMD界面执行了Powershell的代码, 那么其实这样的执行方式在真实的安全测试环境中利用更多, 下面是一个Powershell通过这种方式执行的所有可选的参数:

PowerShell[.exe]
       [-PSConsoleFile <file> | -Version <version>]
       [-EncodedCommand <Base64EncodedCommand>]
       [-ExecutionPolicy <ExecutionPolicy>]
       [-File <filePath> <args>]
       [-InputFormat {Text | XML}] 
       [-NoExit]
       [-NoLogo]
       [-NonInteractive] 
       [-NoProfile] 
       [-OutputFormat {Text | XML}] 
       [-Sta]
       [-WindowStyle <style>]
       [-Command { - | <script-block> [-args <arg-array>]
                     | <string> [<CommandParameters>] } ]
​
PowerShell[.exe] -Help | -? | /?


名称解释
-Command需要执行的代码
-ExecutionPolicy设置默认的执行策略,一般使用Bypass
-EncodedCommand执行Base64代码
-File这是需要执行的脚本名
-NoExit执行完成命令之后不会立即退出,比如我们执行powerhsell whoami 执行完成之后会推出我们的PS会话,如果我们加上这个参数,运行完之后还是会继续停留在PS的界面
-NoLogo不输出PS的Banner信息
-Noninteractive不开启交互式的会话
-NoProfile不使用当前用户使用的配置文件
-Sta以单线程模式启动ps
-Version设置用什么版本去执行代码
-WindowStyle设置Powershell的执行窗口,有下面的参数Normal, Minimized, Maximized, or Hidden
 
 

最后举一个执行Base64代码的例子:

  1. 我们先试用上面一个表格提到的编码代码编码命令whoami, 得到字符串:dwBoAG8AYQBtAGkACgA=

  2. 通过下面的命令来执行代码

powershell -EncodedCommand dwBoAG8AYQBtAGkACgA=

 

那么这种需求在什么地方呢? 比如我们的代码特别长或者会引起一起歧义的时候就需要我们使用这种方式去执行, 同时也是一个混淆的方式。

最后

以上就是刻苦蜡烛为你收集整理的Powershell基础之脚本执行的全部内容,希望文章能够帮你解决Powershell基础之脚本执行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部