了解一下,PowerShell的内网渗透之旅(一)

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语句进行封装,实现全新的功能需求函数结构:函数名,参数,函数体:

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框架并实现简单的内网渗透实例。

原文发布于微信公众号 - 漏斗社区(newdooneSec)

原文发表时间:2018-05-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

XSS学习笔记【二】

过滤,顾名思义,就是将提交上来的数据中的敏感词汇直接过滤掉。例如对"<script>"、"<a>"、"<img>"等标签进行过滤,有的是直接删除这类标签中的内容...

15600
来自专栏程序员的知识天地

这4个Python实战项目,让你瞬间读懂Python!

Python当下真的很火。Python实战项目,也一直尤为关注,接下来,和大家介绍下十个Python练手的实战项目

16130
来自专栏沈唁志

浅谈PHP中的设计模式

18430
来自专栏丑胖侠

《Drools 7 规则引擎教程》番外篇-规则条件匹配机制

问题场景 QQ技术群(593177274)中有同学遇到这一个问题场景:在多条规则(比如3条)的when中使用了一个相同的静态方法,并在静态方法中打印相关的日志信...

26780
来自专栏C/C++基础

腾讯2016春季校园实习招聘技术岗初试(一面)问题汇总(CC++后台)

2016.4.11日广州参加了腾讯的CC++后台技术一面,安全技术类的面试。面试官人很温和,经历了大概70分钟的问答,特将遇到的面试问题汇总如下,自己总结学习,...

9110
来自专栏小曾

通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐...

36320
来自专栏大数据和云计算技术

MongoDB系列8:MongoDB集合的增量更新

在关系型数据库中,经常会遇到这样的场景:用某张表或是多张表的关联产生的结果集,然后持续地更新另外一张表的数据,有时为了方便,只更新变化的数据,即增量更新。那么在...

21230
来自专栏Python入门

这4个Python实战项目,让你瞬间读懂Python!

Python当下真的很火。Python实战项目,也一直尤为关注,接下来,和大家介绍下十个Python练手的实战项目

20040
来自专栏技术博客

编写高质量代码改善C#程序的157个建议[用抛异常替代返回错误、不要在不恰当的场合下引发异常、重新引发异常时使用inner Exception]

  自从.NET出现后,关于CLR异常机制的讨论就几乎从未停止过。迄今为止,CLR异常机制让人关注最多的一点就是“效率”问题。其实,这里存在认识上的误区,因为正...

12520
来自专栏杨建荣的学习笔记

从sysbench中学习Lua

我做事喜欢结果导向,喜欢快速迭代,能10分钟搞定,绝对不愿意花15分钟。但是技术行当,还是得耐得住寂寞,因为很多事情10分钟搞不定,可能100分钟,100...

32650

扫码关注云+社区

领取腾讯云代金券