0x00 简介

Power Remote Desktop是一个功能齐全的远程桌面应用程序,完全用 PowerShell 编码。
它不依赖任何现有的远程桌面应用程序或协议来运行。此应用程序的一个重要优势是其性质 (PowerShell) 以及易于使用和安装。意思它不通过windwos 3389 RDP服务来远程登录,所以当然在日志上也不会留下4624等日志。
此项目完全使用powershell编码,分服务端Server和连接端Viewer,只需要两个powershell文件就能实现远程登录功能,操作简单。

0x01 项目地址

https://github.com/DarkCoderSc/PowerRemoteDesktop

0x02 测试版本

时间:2022年1月13日 项目版本:github2022年1月13日版本 服务端版本:Windows 10、Powershell 5.1 连接端版本:Windows 10、Powershell 5.1

0x03 使用场景

在获取服务器权限之后想要远程桌面登录服务器,但是3389端口和RDP服务被杀软限制,可以使用PowerRemoteDesktop远程登录服务器。

0x04 环境配置

1、下载项目文件

主要有两个文件夹,服务端PowerRemoteDesktop_Server和连接端PowerRemoteDesktop_Viewer,里面分别有两个powershell文件构成服务端和连接端。服务端和连接端都要通过下面操作将代码模块导入到powershell中。

2、设置powershell权限

执行以下命令赋予powershell执行脚本的权限,服务端和连接端都要操作

Get-ExecutionPolicy #查看powershell权限 Set-ExecutionPolicy unrestricted #设置powershell权限为无限制,需要管理员权限

image.png

3、复制脚本到已注册的模块路径

项目要可用,需要把项目文件复制到已注册的模块路径中,执行以下命令查看已注册的模块路径,一共有三个路径,我这里选择的是C:\Program Files\WindowsPowerShell\Modules

Write-Output $env:PSModulePath

image.png
将PowerRemoteDesktop_Server和PowerRemoteDesktop_Viewer两个文件夹复制到该路径下,服务端和连接端都要操作
image.png

4、查看PowerRemoteDesktop是否可用

复制好文件后,在服务端和连接端都输入以下命令查看导入的PowerRemoteDesktop_Server和PowerRemoteDesktop_Viewer是否可用

Get-Module -ListAvailable

image.png

0x05 使用方法

1、服务端

服务端打开powershell执行以下命令开启服务端,此处服务端开启监听2801端口

Import-Module PowerRemoteDesktop_Server Import-Module PowerRemoteDesktop_Viewer Invoke-RemoteDesktopServer -ListenAddress “0.0.0.0” -ListenPort 2801 -Password “Test!#666777”

需要根据window密码策略设置复杂密码,这个密码并不是windwos账户的密码,可随意设置

image.png
image.png

2、连接端

连接端为你的本地机器,在同样复制文件到PowerRemoteDesktop_Server和PowerRemoteDesktop_Viewer完成后,执行以下命令连接远程桌面

Import-Module PowerRemoteDesktop_Server Import-Module PowerRemoteDesktop_Viewer Invoke-RemoteDesktopViewer -ServerAddress “192.168.254.129” -ServerPort 2801 -Password “Test@!#666777”

服务端IP是192.168.254.129

image.png
连接成功会弹出一个powershell窗口,功能和远程登录类似
image.png

3、参数分析

ListenAddress: 定义在哪个界面监听新的查看器。
ListenPort: 定义在哪个端口监听新的查看器。
Password: 定义认证过程中使用的密码。
CertificateFile:有效的 X509 证书(带私钥)文件。如果设置,此参数优先。
在kali使用openssl生成证书

openssl req -x509 -sha512 -nodes -days 365 -newkey rsa:4096 -keyout phrozen.key -out phrozen.crt openssl pkcs12 -export -out phrozen.p12 -inkey phrozen.key -in phrozen.crt

image.png
把证书phrozen.p12复制到服务端,然后使用以下命令启动服务端,将证书文件传递给参数CertificateFile

Invoke-RemoteDesktopServer -ListenAddress “0.0.0.0” -ListenPort 2801 -Password “Jade” -CertificateFile “c:\phrozen.p12”

连接端还是和之前一样命令,登录成功
image.png
此时连接应该是加密的,可以抓包看看
EncodedCertificate:编码为 Base64 字符串的有效 X509 证书(带私钥)。

将证书文件base64编码之后给服务端使用 base64 -i phrozen.p12 然后将编码后的字符串传递给参数EncodedCertificate

TransportMode: (Raw or Base64) 告诉服务器如何将桌面图像发送到远程查看器。最好的方法是原始字节,但我决定保留 Base64 传输方法作为替代方法。
TLSv1_3:定义是否必须使用 TLS v1.3 与 Viewer 进行通信。
DisableVerbosity:禁用冗长(不推荐)
ImageQuality:JPEG 压缩级别从 0 到 100。0 = 最低质量,100 = 最高质量。

0x06 总结

远程登录有多了一种方法,不用从3389登录,也不会留下日志。