导语:对于渗透测试而言,PowerShell非常强大。本文是为渗透测试员准备的PowerShell系列的第一篇,我们将从使用PowerShell执行渗透测试任务时的基础知识讲起。

简介

对于渗透测试而言,PowerShell非常强大。

在这个系列文章中,我们会集中讲解它的强大之处。

本文是为渗透测试员准备的PowerShell系列的第一篇,我们将从使用PowerShell执行渗透测试任务时的基础知识讲起。

PowerShell能做什么?

微软对PowerShell的定义如下:

PowerShell是一种基于任务的命令行解释器和脚本环境,专为系统管理员而设计,以.NET框架为平台。Windows PowerShell帮助IT专业人员和超级用户控制和自动化管理Windows操作系统和运行在操作系统上的应用。

不过,对于我们渗透测试员来说,PowerShell给我们提供了一个非常强大的shell和脚本环境。现在我们的渗透目标上都已经默认安装了PowerShell(win7以后,PowerShell已经默认集成在操作系统上),这给我们提供了一个强大的后渗透利用工具,给予我们很高的权限和广阔的攻击面。

PowerShell成为渗透测试的神兵利器主要有以下优点:

· 易学

· 基于.NET框架

· 操作系统信任

· 提供win系列操作系统的几乎一切访问权限

· win7之后默认安装

· 面向对象

· ISE编程接口

这就是我们使用PowerShell的原因。

注意,我们使用的版本是PowerShell v2,因为现在几乎所有的Windows操作系统上都是这个版本。

PowerShell概览

你可以在win7以后的任何版本上,通过快速启动栏输入PowerShell.exe来打开PowerShell命令行,如图:

图片.png

你也可以在PowerShell所在的目录来直接启动,比如:

“C:\Windows\System32\WindowsPowerShell\vX.0\PowerShell.exe”

路径中的x代表的是版本号。

启动之后我们就能看到这个美观的PowerShell控制台了。

图片.png

首先我们输入“Get-Help”来看下帮助提示,如图:

图片.png

简短说明

这条命令显示Windows PowerShell的cmdlets及概念的帮助。

对于这第一篇文章,我们只讲cmdlets命令。

你也可以输入“Get-Help<关键词>”来搜索特定的命令,Get-Help命令是支持通配符的。

首先我们只输入“Get-Help”来获取所有帮助,这将返回一个超长的帮助清单,如图所示:

图片.png

图片.png

我们再试一下输入“Get-Help *alia*”,这样就只会返回关于“aliases”的相关命令和帮助文档(只是一个简单的例子):

图片.png

然后我们尝试输入“Get-Alias”来获取当前会话中的所有别名:

图片.png

你也可以通过输入“-Examples”来获取指定命令的使用例子,这里我们输入“Get-Help -Examples”:

图片.png

探索Cmdlets

Cmdlets是PowerShell的非常重要的内部命令集。

Cmdlet是以.NET类实例形式存在的命令。

它并不是简单的可执行文件,它有很多属性,这些属性用来指定输入参数或者使用管道来管理重定向。

Cmdlets可以用任何.NET语言来编写,也可以用PowerShell脚本语言来编写。我们可以通过输入“Get-Command”可以显示可用的Cmdlets命令。

现在我们输入“Get-Command”,这将返回所有可用的命令。

图片.png

另外,你也可以使用下面的命令只获取cmdlets命令集:

“Get-Command -CommandType cmdlet”

可以看到,cmdlets命令集其实就是很多的小脚本,命令的形式就是“动词-名词”,比如“Start-Process”或“Stop-Process”。我们可以看到所有的动词代表的就是不同的动作。cmdlets的命令结构图如下所示:

图片.png

你也可以输入以下命令来获取关于参数用法的帮助:

“Get-Help Get-Process -Parameter * | more”

图片.png

一个很有用的参数是 -verb,使用这个参数,我们可以搜索基于指定动作的所有命令。

(当然也有基于命令其他部分的过滤器)

上面这个例子的意思就是使用 -verb加参数来进行搜索,我们输入如下命令:

“Get-Command –Verb start”

结果如图:

图片.png

返回所有以start开头的命令。

我们也可以直接输入关键词或者使用通配符来获取信息(这个例子中我们使用通配符*rocess*来搜索),命令如下:

“Get-Command -CommandType cmdlet -Name *rocess*”

图片.png

渗透中有用的cmdlets命令

在我们渗透过程中,有一些cmdlets命令确实对我们大有帮助。不过,这并不是详尽的cmdlets命令清单,只是一些比较有意思的。

下篇文章中,我们将用例子来深度讲解所有用法,不过头两篇文章中只是介绍PowerShell的要点知识。

第一个例子中,我们可以找到cmdlets中很有用的命令,就是start-process,这在后渗透利用中非常重要,可以用来启动一个指定的进程。

查看start-process的帮助文档,Get-Help Start-Process,如图:

图片.png

图片.png

如图所示就是start-process的一个实例,输入start-process notepad.exe

这个例子中我们可以运行记事本,并且写入InfoSec Institue Rocks:)。

我们也可以使用Get-Process命令来获取指定的进程。

这个命令在后渗透中也很有用而且经常用到,可以用来获取进程的ID,比如获取资源管理器的ID,如图:

图片.png

还有一条命令是“Get-Content”,这条命令是获取文件内容,这在渗透中的作用极其有用,就不用多说了。

图片.png

图片展示的是获取Testit.txt里的内容

我们也能找到“Get-Location”这条命令,意思是返回当前目录:

图片.png

当然,我们也可以使用命令把结果以特殊的格式输出,比如CSV格式(也可以输出其他格式)。在这个例子中我们使用“Export-Csv”,可以使用管道来实现,如图所示:

图片.png

当然,这些并不是cmdlets的详细命令清单,只是我觉得比较有用的。

根据上下文情景,任何cmdlets命令都会有作用。

最后,献上几条很有用的cmdlets命令。

· Copy a file: Copy-Item source_file destination_file

· Move a file: Move-Item source_file destination_file

· Get Services: Get-Service

· Formatting output: Get-Process l Format-List –property name

· Get hash (SHA1) of a file: Get-FileHash –Algorithm SHA1 file

各位大大们放心,我将在本系列第三篇文章深度详细讲解PowerShell在渗透测试中的运用,并且会结合一些实例。

总结

PowerShell是渗透测试非常趁手也非常强大的工具。

在这个系列文章和实验里,我会尝试着讲解在渗透测试环境中PowerShell的所有基础知识,但是不要忘了,现在最重要的就是自己在实战中勤加练习所有常用的命令(除了我们会讲解的那些),俗话说,孰能生巧,只有反复不断的练习,你才能完美掌握PowerShell命令并且灵活运用。

源链接

Hacking more

...