DM_ · 2014/11/03 10:03

0x01 简介


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 参考


  • www.harmj0y.net/blog/redtea…
  • msdn.microsoft.com/en-us/libra…

  • www.blackhat.com/docs/us-14/…

  • www.blackhat.com/docs/us-14/…

  • v3 Secrets of PowerShell Remoting.pdf

0x06 powershell pentest project 学习推荐


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

Powershell HID attack toolkit :github.com/samratashok…

post exploitation :github.com/samratashok…

Remote DLL inject :github.com/clymb3r

aspx的Powershell webshell :github.com/samratashok…

Veil Post exploitation :github.com/Veil-Framew…

A PowerShell Post-Exploitation Framework :github.com/mattifestat…

local privilege escalation : github.com/HarmJ0y/Pow…

Powershell tricks::Powershell Remoting相关推荐

  1. 了解PowerShell命令——PowerShell三分钟(二)

    好了,之前我们讲过学习PowerShell的必要性,那么今天开始实际操作下PowerShell. PowerShell预装在Windows 7以上的系统中,无需额外下载,即可使用 你可以在开始菜单中找 ...

  2. powershell提取html字段,Windows PowerShell:PowerShell 中的 HTML 报告

    Windows PowerShell:PowerShell 中的 HTML 报告 08/17/2016 本文内容 事实上,您可以使用 Microsoft Windows PowerShell Cmdl ...

  3. bat运行exe 自动确认_无powershell运行powershell方法总结

    原创: lengyi 合天智汇 今天给大家带来的是,无powershell运行powershell的一些姿势的分享,由于powershell的特性,使得它很受渗透测试爱好者的喜爱,当然也催生了像ASM ...

  4. bat脚本交互输入_测评 | 不使用powershell运行 PowerShell 脚本的工具汇总

    不使用 powershell.exe 的情况下,可以运行 powershell 脚本和命令么? 可以的! 本文总结了6款可直接运行 powershell 脚本和命令的工具,献给所有的渗透测试人员和红队 ...

  5. 第一个PowerShell脚本——PowerShell三分钟(九)

    前面把基础知识讲了一遍,现在我们开始写一个最初级的脚本 写脚本的工具有很多,有文本文档,有PowerShell ISE,PowerShell Studio等,这里选用系统自带的PowerShell I ...

  6. Azure PowerShell (1) PowerShell整理

    <Windows Azure Platform 系列文章目录> 把之前Azure ASM的PowerShell都整理好了. https://github.com/leizhang1984/ ...

  7. PowerShell变量——PowerShell三分钟(七)

    有了前面的PowerShell基础,今天我们来学习一个可以极大提升PowerShell效率的用法--变量 简答来说呢,变量就是在内存中的一个带有名字的盒子~~~~~你可以把所有想存放的东西都放到这个& ...

  8. 从零开始学PowerShell(10)PowerShell中的子表达式

    在PowerShell中你或许看到过类似@(......), $(......),(......)这类使用圆括号将一系列语句包裹在一起的写法形式出现在脚本中.今天我们要说的就是这几种表达式,它们被称作 ...

  9. PowerShell: 在PowerShell窗口中设置自动补全和智能提示

    前言 随着PowerShell的兴起和不断完善,在Windows中的Shell体验不断的改进.但是之前有好多东西依然没有太大的改进.例如说之前我们在CMD或者PowerShell中要执行之前执行过的命 ...

最新文章

  1. 单相计量芯片RN8209D使用经验分享(转)
  2. android的窗口机制分析------ViewRoot类
  3. 共享内存 传一个类指针_C++指针
  4. QT的QProxyStyle类的使用
  5. Docker小白到实战之常用命令演示,通俗易懂
  6. 利用tabluea分析数据的案例_利用德温特分析Dartsip的案例检索结果
  7. [转] 64位windows下添加postgreSQL odbc数据源
  8. 系统架构设计师 - 23种设计模式(GOF)
  9. c#获取屏幕分辨率信息
  10. 《Python编程从入门到实践》第10章文件和异常动手试一试答案(附代码)
  11. Java的JDK以及maven环境变量配置
  12. .NET配置文件解析过程详解【转载】
  13. 字节跳动常见算法面试题top50整理
  14. jq ui-selectable中click单击事件,dblclick双击事件无效
  15. vue 动态添加组件
  16. kera中各种accuracy的介绍
  17. Web前端-HTML
  18. 【科普】第二章 SIS 系统简介
  19. 无线WiFi可以网络唤醒远程开机吗?WakeOnLan常见问题总结
  20. C++试卷(程序设计题)

热门文章

  1. java hql 参数_java – SQLQuery中的Hibernate命名参数
  2. C语言描述信息的结构体,(c语言)游戏中由人物各种信息组成的结构体
  3. java frame linux_JAVA环境(下) - Android框架简介_Linux编程_Linux公社-Linux系统门户网站...
  4. mysql.sys用户权限_MySQL用户及权限小结
  5. jQuery的$.each的使用(遍历数组、对象、li集合、选中的option)
  6. Linux系统关机重启,登录root用户,图形界面和字符界面,创建用户,删除用户,查看虚拟控制台用户,切换虚拟控制台
  7. 安装MYSQL的思考与分析_mysql安装和基本使用
  8. 嵌入式linux appace,嵌入式Linux攻略 ACE程序移植过程详细解析 — IT技术
  9. 在sqlserver中写脚本用到的关键字理解
  10. pageoffice提示网络连接意外错误