导语:第一篇文章说过,PowerShell对于渗透测试员来说是一个非常强大的工具。我们也介绍了一些PowerShell和Cmdlets的一些基本知识。本篇文章,我们来进一步学习PowerShell这门强大的语言。

介绍

第一篇文章说过,PowerShell对于渗透测试员来说是一个非常强大的工具。我们也介绍了一些PowerShell和Cmdlets的一些基本知识,这些只是你真正开始在渗透中思考如何使用PowerShell的入门必备知识。

本篇文章,我们来进一步学习PowerShell这门强大的语言。

运算符

PowerShell运算符跟其他语言非常类似,以下是一些最重要的运算符。

1.jpg

· Arithmetic Operators:算术运算符

· Assignment Operators:赋值运算符

· Comparasion Operators:比较运算符

· Redirection Operators:重定向运算符

更多关于运算符的详细信息,请参考官方文档:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/?view=powershell-6

现在我们来简单了解下运算符的用法。

首先来看下最基本的运算符比如‘+’和‘*’,用法非常简单,看看一下截图便一目了然:

2.jpg

算数运算符也可以结合字符串使用,比如‘+’号的作用就是连接字符串或字符串与数字;

‘*’与字符串相乘作用就是字符串的数量翻倍,这在fuzzing的时候是很有帮助的。

具体用法如下图,非常简单:

3.jpg

我们也可以用来与变量进行运算。

声明变量,需要在变量名字前加一个“$”符号,下面我们来举例创建一个变量,这里我们使用“$var”来创建一个var变量并且使用赋值运算符来操作,这种操作跟现在很多其他语言一样,看如下图片便知:

4.jpg

现在再来看看另外一个运算符,比较运算符。

· -eq:等于运算符(用法:$var1 –eq $var2,返回真或假)

· -gt:大于运算符(用法:$var1 –gt $var2,返回真或假)

· -match:匹配运算符,搜索字符串是否在文中出现(用法:$Text –match $string返回真或假)

· -replace:替换字符串(用法:$Text –replace 被替换的字符,替换的字符,返回真或假)

· -in:测试一个字符或数字是否出现在文本中或列表中,声明列表直接使用()

下图是比较运算符的例子,一看便清楚它们的用法:

5.jpg

更多信息请参考:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6

再来看看重定向运算符,十分有用

· >:将输出保存到指定文件中(用法:Get-Process>output.txt)

· >>:将脚本的输出追加到指定文件中(用法:test.ps1>>output.txt)

· 2>:将错误输出到指定文件中(Get-Porcess none 2>Errors.txt)

· 2>>:将错误追加到指定文件中(Get-Process none 2> logs-Errors.txt)

下图是重定向运算符的具体例子:

6.jpg

接下来再说一下渗透中特别有用的运算符:

7.jpg

先来看下几个逻辑运算符XOR(-xor)和and符(-and)还有or(-or):

8.jpg

再来看看分隔符split(-split)和连接符join(-join):

9.jpg

最后来看类型运算符比如“-is”,测试变量或值,返回真或假;“-as”转换对象的类型

不多说,上图片,一看便知:

10.jpg

关于所有运算符的信息和使用方法,请参考:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_operators?view=powershell-6

数组

在PowerShell中声明数组十分简单,只需要使用如下语句:

$Array = value1, value2, value3

在PowerShell中,值有两种类型,强类型和弱类型,我们可以通过使用GetType()来获取。

当我们创建数组时并且获取类型时,我们发现Object[]代表的就是数组。

数组也有一些特殊的方法来操作,比如获取长度的length()

11.jpg

条件语句

PowerShell中条件语句的使用也很简单,我们一起来学习一下。

首先我们来看下IF/ELSE语句,我们可以使用以下语法来使用:

If($var {comparison_statement} $var2) { What_To_Do)}
Else {what_to_do_if_not}

例子如下:

12.jpg

PowerShell中switch语句也很有用,它支持多种参数,比如通配符 –wildcard和正则-Regex,

甚至是-File参数,这个参数在日志文件中查找特殊信息非常有帮助。

Switch语句的语法如下:

Switch (condition_X) { conditionX {what to do} conditionY {what to do} default {default_action} }
Or using parameters
Switch -ParameterX -ParameterY <File/Value/…> {What_To_Do}

具体例子如图:

13.jpg

循环语句

我们来看看PowerShell中如何使用循环语句。循环语句也很easy,并且有很多实现循环的方式。

以下是PowerShell中的集中循环语句。

· While () {}

· Do {} While()

· For(;;;) {}

下图是使用循环语句的例子:

14.jpg

我们还可以使用循环语句来操作Cmdlets命令的结果,如图所示:

15.jpg

还有一种循环语句非常不错,我们可以使用循环CMDLETS命令比如where-object(帮助我们测试CMDLET命令关于特殊条件返回的所有对象),也可以使用ForEach-Object,如果有必要的话,这会帮助我们浏览和测试所有对象,这也是非常有帮助的。

关于循环CMDLET命令,你可以使用CMDLET的help命令来分析,也可以查看官方文档。

循环CMDLET命令如下:

16.jpg

总结

小结一下,如你所见,PowerShell是一门强大的语言,精彩内容下期奉上,敬请期待。

下篇文章,我们会讲解PowerShell的函数和脚本知识,然后我们就可以在不同的渗透实战环境中正确的利用PowerShell这个神器了。

源链接

Hacking more

...