写点什么

Powershell 基础之脚本执行

作者:喀拉峻
  • 2022 年 3 月 04 日
  • 本文字数:1331 字

    阅读完需:约 4 分钟


阅读目录(Content)

  • Powershell

  • powershell 的脚本调用方法:

Bat

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

VBscript

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

一个小例子通过vbs操作WMISet wmi = GetObject("winmgmts:")Set collection = wmi.ExecQuery("select * from Win32_Process")For Each process in collectionWScript.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 | -? | /?
复制代码



 
复制代码

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

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

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

powershell -EncodedCommand dwBoAG8AYQBtAGkACgA=
复制代码



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

用户头像

喀拉峻

关注

左手Java右手Python,中间纹个C++ 2021.06.26 加入

还未添加个人简介

评论

发布
暂无评论
Powershell基础之脚本执行_网络安全_喀拉峻_InfoQ写作平台