Powershell tricks::Powershell Remoting
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相关推荐
- 了解PowerShell命令——PowerShell三分钟(二)
好了,之前我们讲过学习PowerShell的必要性,那么今天开始实际操作下PowerShell. PowerShell预装在Windows 7以上的系统中,无需额外下载,即可使用 你可以在开始菜单中找 ...
- powershell提取html字段,Windows PowerShell:PowerShell 中的 HTML 报告
Windows PowerShell:PowerShell 中的 HTML 报告 08/17/2016 本文内容 事实上,您可以使用 Microsoft Windows PowerShell Cmdl ...
- bat运行exe 自动确认_无powershell运行powershell方法总结
原创: lengyi 合天智汇 今天给大家带来的是,无powershell运行powershell的一些姿势的分享,由于powershell的特性,使得它很受渗透测试爱好者的喜爱,当然也催生了像ASM ...
- bat脚本交互输入_测评 | 不使用powershell运行 PowerShell 脚本的工具汇总
不使用 powershell.exe 的情况下,可以运行 powershell 脚本和命令么? 可以的! 本文总结了6款可直接运行 powershell 脚本和命令的工具,献给所有的渗透测试人员和红队 ...
- 第一个PowerShell脚本——PowerShell三分钟(九)
前面把基础知识讲了一遍,现在我们开始写一个最初级的脚本 写脚本的工具有很多,有文本文档,有PowerShell ISE,PowerShell Studio等,这里选用系统自带的PowerShell I ...
- Azure PowerShell (1) PowerShell整理
<Windows Azure Platform 系列文章目录> 把之前Azure ASM的PowerShell都整理好了. https://github.com/leizhang1984/ ...
- PowerShell变量——PowerShell三分钟(七)
有了前面的PowerShell基础,今天我们来学习一个可以极大提升PowerShell效率的用法--变量 简答来说呢,变量就是在内存中的一个带有名字的盒子~~~~~你可以把所有想存放的东西都放到这个& ...
- 从零开始学PowerShell(10)PowerShell中的子表达式
在PowerShell中你或许看到过类似@(......), $(......),(......)这类使用圆括号将一系列语句包裹在一起的写法形式出现在脚本中.今天我们要说的就是这几种表达式,它们被称作 ...
- PowerShell: 在PowerShell窗口中设置自动补全和智能提示
前言 随着PowerShell的兴起和不断完善,在Windows中的Shell体验不断的改进.但是之前有好多东西依然没有太大的改进.例如说之前我们在CMD或者PowerShell中要执行之前执行过的命 ...
最新文章
- 单相计量芯片RN8209D使用经验分享(转)
- android的窗口机制分析------ViewRoot类
- 共享内存 传一个类指针_C++指针
- QT的QProxyStyle类的使用
- Docker小白到实战之常用命令演示,通俗易懂
- 利用tabluea分析数据的案例_利用德温特分析Dartsip的案例检索结果
- [转] 64位windows下添加postgreSQL odbc数据源
- 系统架构设计师 - 23种设计模式(GOF)
- c#获取屏幕分辨率信息
- 《Python编程从入门到实践》第10章文件和异常动手试一试答案(附代码)
- Java的JDK以及maven环境变量配置
- .NET配置文件解析过程详解【转载】
- 字节跳动常见算法面试题top50整理
- jq ui-selectable中click单击事件,dblclick双击事件无效
- vue 动态添加组件
- kera中各种accuracy的介绍
- Web前端-HTML
- 【科普】第二章 SIS 系统简介
- 无线WiFi可以网络唤醒远程开机吗?WakeOnLan常见问题总结
- C++试卷(程序设计题)
热门文章
- java hql 参数_java – SQLQuery中的Hibernate命名参数
- C语言描述信息的结构体,(c语言)游戏中由人物各种信息组成的结构体
- java frame linux_JAVA环境(下) - Android框架简介_Linux编程_Linux公社-Linux系统门户网站...
- mysql.sys用户权限_MySQL用户及权限小结
- jQuery的$.each的使用(遍历数组、对象、li集合、选中的option)
- Linux系统关机重启,登录root用户,图形界面和字符界面,创建用户,删除用户,查看虚拟控制台用户,切换虚拟控制台
- 安装MYSQL的思考与分析_mysql安装和基本使用
- 嵌入式linux appace,嵌入式Linux攻略 ACE程序移植过程详细解析 — IT技术
- 在sqlserver中写脚本用到的关键字理解
- pageoffice提示网络连接意外错误