0x00 PowerShell的内网渗透之旅
内网渗透一直以来都是一个热门话题,试想在一个大型的内网环境下,当我们拿到了内网windows机器后,该如何通过他们去获取更多的所需资源,这就需要进行内网渗透了。然而在内网渗透中,除了kali、metasploit等高能的存在以外,还有一款神器也常常容易遭到忽略----PowerShell,因此本次学习将从PowerShell基础语法切入以及利用PowerShell脚本实现的PowerSploit框架演示内网渗透实例。
0x01 PowerShell简介及特性
Windows Powershell是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用.NET Framework的强大功能(因此也支持.NET对象)。
Windows Powershell具备以下特性:
●操作便捷----可识别单位(如GB、MB、KB等)Cmdlet命令结构简单(动名词形式)。
●面向对象----同面向过程相比,更容易描述现实事物。
●结合.NET Framework环境----借助.NET Framework平台的强大的库。
●兼容性强----完全兼容windows平台上其他调用,如exe文件执行、bat脚本执行等。
●基于平台的可扩展性----powershell俨然已形成一个平台,并且向各类平台管理提供对应管理组件。
接下来开始简单过一下基础语法(推荐学习网站https://www.pstips.net/)
0x02 PowerShell基础语法
交互式:
a.命令:cmdlet命令—动词 名词(通过get-command –commandtype cmdlet可查看)
b.别名机制:如常见的powershell命令----Get-ChildItem,windows的CMD命令----dir和linux的shell命令----ls,他们的功能都是列出当前文件或目录的命令,三个不同平台的命令,在powershell中均可使用,即别名机制。同样地,别名机制也适用于函数。(可通过Get-Alias –name 命令名)
c.惯用帮助文档:通过Get-Help(别名:Help)-Name 命令名,如查询IEX的使用方法。
变量:
a.定义变量:Powershell不需要声明变量,可自动创建变量,变量值可以是字符也可以是命令,但是变量名前必须有$。
注意:输出多个变量时需要使用双引号,单引号是不会取变量中的值的。
也可使用New-Variable定义变量,此时可以指定变量的一些属性,如访问权限:
以下给num变量添加只读属性。
数组:
a.创建数组:常规数组可以使用逗号,连续数字数组可以使用。
其中有以下两个特例:
空数组:
一个元素数组:
b.数组的操作:数组访问同python类似,从0开始;数组的判断:$str –is [array];数组的追加:$books =”需要添加的值”。
c.哈希表的使用:之前创建空数组是使用@(),而创建哈希表用到的是@{},此处的哈希表同python中的字典类型类似:
管道:
a.Powershell管道:传统的CMD管道是基于文本,而powershell管道则是基于对象:
对象(对象=属性 方法)
a.创建对象:
b.增加属性(直接添加、通过管道添加):
c.增加方法(直接添加、通过管道添加):
条件判断以及循环:
a).比较运算符:
●-eq:等于
●-ne:不等于
●-gt:大于
●-ge:大于等于
●-lt:小于
●-le:小于等于
●-contains:包含
● -notcontains:不包含
布尔运算:
●-and:和
●-or:或
●-xor:异或
●-not:逆
b).If-elseif-else:
c).Switch:
d).Foreach:
e). While:
f). For:
函数:
a).函数是自定义的powershell代码,有三个原则:
●简短:函数名简短,并且显而易见
●聚合:函数可以完成多个操作
●封装和扩展:将一批powershell语句进行封装,实现全新的功能需求函数结构:函数名,参数,函数体:
代码语言:javascript复制Function FuncName (args[])
{
code;
}
如:
脚本:
a).创建脚本(以.ps1为后缀)
●通过重定向创建脚本:
●通过编辑器创建脚本:
通过txt来编写
●通过powershell自带的ISE或者其他编写工具:
b).脚本执行策略:并不是每个.ps1后缀的powershell脚本都可以被执行,在powershell中有策略进行严格把控:
●Unrestricted: 权限最高,可以不受限制执行任何脚本。
●Restricted: 为Powershell默认的策略,不允许任何脚本执行。
●AllSigned:所有脚本都必须经过签名才能在运行。
●RemoteSigned:本地脚本无限制,但是对来自网络的脚本必须经过签名。
若需要修改脚本执行策略,只有在管理员权限下才可进行更改,否则会报错:
若想在默认策略下执行脚本,可以通过以下两种方法进行绕过:
●本地权限绕过执行
IEX下载远程PS1脚本权限绕过执行(后续Powersploit框架中会用到):
0x03 Powershell值得学习的理由
众所周知,Linux的shell相比windows的cmd好用程度不止一点,无论是命令、正则表达式还是管道都挺人性化,不仅可以完成复杂的问题,而且效率还很高。对此,微软平台也发布了“cmd升级版”----windows powershell。
Windows Powershell为什么强大好用,通过以下几个例子:
●轻松比较GB、MB、KB
通过命令直接算出距离明年的今天有多少天。
通过命令获取当前PC中跑了多少进程。
查看Windows目录下所有文本文件txt的大小。
可将数据输出为HTML格式、CSV格式等。
打开文件:
相比之下,原先的cmd并未有如此便捷的功能命令,在以上powershell不仅可以利用管道,正则表达式。它不仅是一个强大的shell,同时是内网渗透的利器,后续会继续推出Powersploit框架介绍,介绍Powersploit框架并实现简单的内网渗透实例。