Powershell Remoting建立在windows WinRM服务之上,可以一对一或一对多远程控制,也可以建立HTTP 或 HTTPS的“listeners”,使用WS-MAM协议接收远程传递的命令。

Windows 远程管理(WinRM)是 WS-Management 协议的 Microsoft 实现,该协议为使用 Web 服务的本地计算机和远程计算机之间的通信提供了一种安全的方式。 也就是说在WS-MAN协议基础上,客户端运行环境可以多样化。 比如openwsman

图片来源:v3 Secrets of PowerShell Remoting

0x02 远程管理


Powershell Remoting在windows server 2008以前默认是不开启的,需要通过administrator用户执行Enable-PSRemoting命令开启。

在windows server 2012中,Powershell Remoting默认开启。

在windows下,powershell默认使用winrm进行远程管理,winrm版本不同默认的监听端口也不同。如下:

The default ports for winrm 1.1 are http port 80 and https port 443

The default ports for winrm 2.x are http port 5985 and https port 5986

可以在参考这里判断winrm版本。

通过Enable-PSRemoting命令打开PS远程,默认是启动了Kerberos认证。这个方法只适合两台电脑在相同域或信任域内的指定电脑(名字可以带后缀).但它不支持跨域、域外或IP地址。

如果要跨域、或指定IP地址执行时我们可以在客户端这里执行下面的代码,需要将所有或单一远程主机添加在信任表中。

Set-Item WSMan:\localhost\Client\TrustedHosts -Value * -Force

删除所有远程信任主机

Clear-Item WSMan:\localhost\Client\TrustedHosts

如果要删除单一远程主机,则可以执行:

$newvalue = ((Get-ChildItem WSMan:\localhost\Client\TrustedHosts).Value).Replace("computer01,","")
Set-Item WSMan:\localhost\Client\TrustedHosts $newvalue

更改computer01。

列出所有远程信任主机

Get-Item WSMan:\localhost\Client\TrustedHosts

在使用远程执行时如果只提供用户名,那么则会弹窗输入密码。此时我们可以建立PSCredential对象将用户名和密码保存在里面。然后再传递给-Credential参数。-ScriptBlock参数后跟要执行的代码。

$UserName = "admin3"
$serverpass = "admin123!@" $Password = ConvertTo-SecureString $serverpass -AsPlainText –Force
$cred = New-Object System.Management.Automation.PSCredential($UserName,$Password) invoke-command -ComputerName localhost -Credential $cred -ScriptBlock { ipconfig }

使用help * -Parameter computername命令可以列出所有默认可以远程使用的命令。并且认证过程都可以像上面的代码一样传递$cred。

之后写个for循环就可以一对多的执行了。

如果输出内容过于冗杂,还可以使用ConvertTo-Csv或者ConvertTo-Html将powershell对象的输出转换为html或者csv。

如果想一对一获取交互式powershell,可以像这样执行Enter-PSSession

Enter-PSSession -ComputerName 192.168.200.161 -Credential $cred

0x03 多任务分发


在使用invoke-command的时候,computername可为多个参数。在执行的时候可以使用-Asjob参数将执行过程放在后台。 接收回显的时候可以使用get-job查看job id,然后用receive-job接收全部回显结果。 但是如果我只是想查看某个远程主机的执行结果呢? 那么就可以像下面这样做:

Get-Job -Id 1 | select -ExpandProperty childjobs

得到child job id之后,再用receive-job接收回显结果。

0x04 域内信息搜集


基本的信息搜集(日志、进程、服务等)可以靠上面列出的命令来收集,但是远程执行invoke-command是需要凭证的,如果是在域内我们是不是可以先用nltest搜集下信任域?

在windows中有个System.DirectoryServices.ActiveDirectory命名空间,和windows域有关。 其下有个类Domain,其中GetAllTrustRelationships()方法可以获得信任域。

那么在powershell就可以这样执行:

([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).GetAllTrustRelationships()

获得域之前的信任关系。 如果需要自行开发脚本,也可以参考下面的文档。

除此之外,还记得之前metasploit笔记中那个local_admin_search模块吗?veil-powerview中也有通过相同的方式实现了这一过程。

两种不同的脚本都通过调用OpenSCManagerA API连接远程主机测试是否成功。

Local_admin_search.rb

Invoke-CheckLocalAdminAccess

veil-powerview作者博客中的测试截图:

0x05 参考


0x06 powershell pentest project 学习推荐


整理的过程发现了很多牛人的博客和项目,在这里分享一下。

Powershell HID attack toolkit :https://github.com/samratashok/Kautilya

post exploitation :https://github.com/samratashok/nishang

Remote DLL inject :https://github.com/clymb3r

aspx的Powershell webshell :https://github.com/samratashok/nishang/tree/master/Antak- WebShell

Veil Post exploitation :https://github.com/Veil-Framework/Veil-PowerView

A PowerShell Post-Exploitation Framework :https://github.com/mattifestation/PowerSploit

local privilege escalation : https://github.com/HarmJ0y/PowerUp

power shell remoting的更多相关文章

  1. Windows Power Shell

    Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能. 它引入了许多非常有用的新概念,从而进一步扩展了您在 W ...

  2. SQL Server自动化运维系列——监控性能指标脚本(Power Shell)

    需求描述 一般在生产环境中,有时候需要自动的检测指标值状态,如果发生异常,需要提前预警的,比如发邮件告知,本篇就介绍如果通过Power shell实现状态值监控 监控值范围 根据经验,作为DBA一般需 ...

  3. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  4. SQL Server自动化运维系列——监控跑批Job运行状态(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在上一篇文章中已经分析了SQL SERVER中关于邮 ...

  5. SQL Server自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  6. Windows Azure系列-- 配置Azure Power Shell

    1.下载Azure Power shell https://azure.microsoft.com/en-us/documentation/articles/powershell-install-co ...

  7. Power shell 重启IIS

    最近根据项目需要写了一段power shell的代码 ,主要功能是批量重启IIS 具体的 Power shell 服务如下: write-output 'Restarting IIS servers ...

  8. win7 升级Power Shell到4.0

    因为用到EntityFrameworkCore ,想使用scaffold 来生成models. 提示我power Shell 2.0不支持命令,然后需要升级PS. PS  win7 升级文件下载地址是 ...

  9. Windows Power Shell简介

    Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能. 它引入了许多非常有用的新概念,从而进一步扩展了您在 W ...

随机推荐

  1. sessionStorage对象

    sessStorage对象是一个会话形式的数据存储,当用户关闭浏览器的窗口后,数据就会被删除. 实例: <!DOCTYPE html><html><head> &l ...

  2. Shell脚本调用ftp上传文件

    Shell脚本调用ftp上传文件 1.脚本如下 ftp -n<<! open x.x.x.x ###x.x.x.x为ftp地址 user username password ###user ...

  3. 变量赋值理解--Pyton中让两个值互换的方法

    #Pyton中让两个值互换的方法 #方法一:可以理解为相当于是同时赋值 a = 5 b = 4 a,b = b,a print(a,b) #方法二:可以理解为拿箱子过程 c = 10 d = 20 e ...

  4. Docker自学纪实(一)Docker介绍

    先简单了解一下,做个记录,以便不时之需. Docker简介:Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依 ...

  5. paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 FSM Coding Goals

    1.the fsm coding style should be easily modifiable to change state encoding and FSM styles. FSM 的的 状 ...

  6. Python基础——模块与包

    在Python中,可以用import导入需要的模块.包.库.文件等. 把工作路径导入系统路径 import os#os是工作台 import sys#sys是系统 sys.path.append(os ...

  7. UVALive - 8292 (法里数列)

    参考博客:zro https://blog.csdn.net/alusang/article/details/81840944 orz 给你一个分母 m 和一个浮点数 x,让你求出一个分母不超过 m ...

  8. Linux学习-SELinux 初探

    什么是 SELinux 什么是 SELinux 呢?其实他是『 Security Enhanced Linux 』的缩写,字面上的意义就是安全强化的 Linux 之意! 当初设计的目标:避免资源的误用 ...

  9. Python虚拟机之while循环控制结构(三)

    Python虚拟机中的while循环控制结构 在Python虚拟机之if控制流(一)和Python虚拟机之for循环控制流(二)两个章节中,我们介绍了if和for两个控制结构在Python虚拟机中的实 ...

  10. webdriver高级应用- 启动FireFox的同时打开Firebug

    1. 首先本机Firefox浏览器需要安装一下firebug插件,具体怎么安装这里不赘述,网上教程很多. 2. 具体自动化实现的代码如下: #encoding=utf-8 from selenium ...