导语:第一篇文章说过,PowerShell对于渗透测试员来说是一个非常强大的工具。我们也介绍了一些PowerShell和Cmdlets的一些基本知识。本篇文章,我们来进一步学习PowerShell这门强大的语言。
介绍
第一篇文章说过,PowerShell对于渗透测试员来说是一个非常强大的工具。我们也介绍了一些PowerShell和Cmdlets的一些基本知识,这些只是你真正开始在渗透中思考如何使用PowerShell的入门必备知识。
本篇文章,我们来进一步学习PowerShell这门强大的语言。
运算符
PowerShell运算符跟其他语言非常类似,以下是一些最重要的运算符。
· Arithmetic Operators:算术运算符
· Assignment Operators:赋值运算符
· Comparasion Operators:比较运算符
· Redirection Operators:重定向运算符
更多关于运算符的详细信息,请参考官方文档:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/?view=powershell-6
现在我们来简单了解下运算符的用法。
首先来看下最基本的运算符比如‘+’和‘*’,用法非常简单,看看一下截图便一目了然:
算数运算符也可以结合字符串使用,比如‘+’号的作用就是连接字符串或字符串与数字;
‘*’与字符串相乘作用就是字符串的数量翻倍,这在fuzzing的时候是很有帮助的。
具体用法如下图,非常简单:
我们也可以用来与变量进行运算。
声明变量,需要在变量名字前加一个“$”符号,下面我们来举例创建一个变量,这里我们使用“$var”来创建一个var变量并且使用赋值运算符来操作,这种操作跟现在很多其他语言一样,看如下图片便知:
现在再来看看另外一个运算符,比较运算符。
· -eq:等于运算符(用法:$var1 –eq $var2,返回真或假)
· -gt:大于运算符(用法:$var1 –gt $var2,返回真或假)
· -match:匹配运算符,搜索字符串是否在文中出现(用法:$Text –match $string返回真或假)
· -replace:替换字符串(用法:$Text –replace 被替换的字符,替换的字符,返回真或假)
· -in:测试一个字符或数字是否出现在文本中或列表中,声明列表直接使用()
下图是比较运算符的例子,一看便清楚它们的用法:
更多信息请参考:
再来看看重定向运算符,十分有用
· >:将输出保存到指定文件中(用法:Get-Process>output.txt)
· >>:将脚本的输出追加到指定文件中(用法:test.ps1>>output.txt)
· 2>:将错误输出到指定文件中(Get-Porcess none 2>Errors.txt)
· 2>>:将错误追加到指定文件中(Get-Process none 2> logs-Errors.txt)
下图是重定向运算符的具体例子:
接下来再说一下渗透中特别有用的运算符:
先来看下几个逻辑运算符XOR(-xor)和and符(-and)还有or(-or):
再来看看分隔符split(-split)和连接符join(-join):
最后来看类型运算符比如“-is”,测试变量或值,返回真或假;“-as”转换对象的类型
不多说,上图片,一看便知:
关于所有运算符的信息和使用方法,请参考:
数组
在PowerShell中声明数组十分简单,只需要使用如下语句:
$Array = value1, value2, value3
在PowerShell中,值有两种类型,强类型和弱类型,我们可以通过使用GetType()来获取。
当我们创建数组时并且获取类型时,我们发现Object[]代表的就是数组。
数组也有一些特殊的方法来操作,比如获取长度的length()
条件语句
PowerShell中条件语句的使用也很简单,我们一起来学习一下。
首先我们来看下IF/ELSE语句,我们可以使用以下语法来使用:
If($var {comparison_statement} $var2) { What_To_Do)} Else {what_to_do_if_not}
例子如下:
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}
具体例子如图:
循环语句
我们来看看PowerShell中如何使用循环语句。循环语句也很easy,并且有很多实现循环的方式。
以下是PowerShell中的集中循环语句。
· While () {}
· Do {} While()
· For(;;;) {}
下图是使用循环语句的例子:
我们还可以使用循环语句来操作Cmdlets命令的结果,如图所示:
还有一种循环语句非常不错,我们可以使用循环CMDLETS命令比如where-object(帮助我们测试CMDLET命令关于特殊条件返回的所有对象),也可以使用ForEach-Object,如果有必要的话,这会帮助我们浏览和测试所有对象,这也是非常有帮助的。
关于循环CMDLET命令,你可以使用CMDLET的help命令来分析,也可以查看官方文档。
循环CMDLET命令如下:
总结
小结一下,如你所见,PowerShell是一门强大的语言,精彩内容下期奉上,敬请期待。
下篇文章,我们会讲解PowerShell的函数和脚本知识,然后我们就可以在不同的渗透实战环境中正确的利用PowerShell这个神器了。