安全矩阵

 找回密码
 立即注册
搜索
查看: 2406|回复: 0

内网渗透测试:初探远程桌面的安全问题(上)

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-6-15 09:40:49 | 显示全部楼层 |阅读模式
原文链接:内网渗透测试:初探远程桌面的安全问题(上)
前言
远程桌面对了解内网渗透的人来说可能再熟悉不过了。在渗透测试中,拿下一台主机后有时候会选择开 3389 进远程桌面查看一下对方主机内有无一些有价值的东西可以利用。但是远程桌面的利用不仅如此,本节我们便来初步汇总一下远程桌面在内网渗透中的各种利用姿势。
文中若有不当之处还请各位大佬多多点评
我的博客:https://whoamianony.top/
RDP 协议RDP,Remote Desktop Protocol,远程桌面协议,该协议是对国际电信联盟发布的一个国际标准的多通道会议协议T.120 的一个扩展。远程桌面协议让用户(客户端或称“本地电脑”)连上提供微软终端机服务的电脑(服务器端或称“远程电脑”)。大部分的 Windows、Linux、FreeBSD、Mac OS X 都有相应的客户端。远程桌面协议在服务端默认监听 TCP 3389 端口的数据。远程桌面协议为用户提供了通过网络连接远程登录到另一台计算机的图形界面。
RDP 服务的确定和启动RDP 服务的确定注册表查询
通过以下命令查询注册表来查看 RDP 服务是否开启:

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections    # 查看RDP服务是否开启: 1关闭, 0开启 REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\ WinStations\RDP-Tcp" /v PortNumber    # 查看 RDP 服务的端口

进程查看
通过以下命令来查看是否有 RDP 服务的进程:

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections    # 查看RDP服务是否开启: 1关闭, 0开启 REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\ WinStations\RDP-Tcp" /v PortNumber    # 查看 RDP 服务的端口

端口扫描
攻击者可以借助 Nmap 扫描来验证端口 3389 是否被打开:

nmap -sV -sC -p 3389 192.168.93.30

RDP 服务的启动如果发现 3389 并没有开启,我们使用以下方式开启它。
修改注册表启动
先通过修改注册表来设置一下允许远程桌面连接:

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
然后可以再配置一下防火墙,设置为允许远程桌面连接,命令:

netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
通过 Metasploit 模块启动
拿到目标主机的 meterpreter 后,如果我们想登陆目标主机的远程桌面,我们可以使用 post/windows/manage/enable_rdp 模块对目标主机快速完成上述配置:

use post/windows/manage/enable_rdpset session 1exploit

RDP 服务的连接开启目标主机的远程桌面后,我们便可以对目标主机进行连接了:
Linux 系统上的可以使用 rdesktop:

redesktop 192.168.93.30# redesktop IP
Windows系统上可以使用 mstsc.exe
特别要注意一下,有时候,仅开启了远程桌面还不行,在连接时可能出现以下报错:


这就需要关闭鉴权模式,我们采用如下命令,这里0代表关闭,1代表开启:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0
即取消 “仅允许运行使用网络界别身份验证的远程桌面的计算机连接” 这一安全设置。

此时就可以正常连接了:


对 RDP 口令进行暴力破解在实战中,攻击者可以借助 Nmap 来扫描目标主机 3389 端口是否开启,如果目标主机开启了 3389 端口,那我们便可以对目标主机的远程桌面登录口令进行暴力猜解。
下面我们通过 Hydra 工具来展示对 RDP 进行爆破:

Hydra -v -f -l whoamianony\administrator -P /root/wordlists.txt rdp://192.168.93.30

如上图所示,成功获取到目标主机 administrator 的登录口令,使用此凭据攻击者可以登录远程桌面服务:

RDP 劫持实现未授权登录对于开启远程桌面服务的 Windows 系统,当有多个用户登录该系统时,会产生多个会话,如下图:

其中,管理员用户 Administrator 为本地登录,用户 bunny 为通过远程桌面服务(RDP)连接 3389 端口的远程桌面登录。接下来,如果用户 Administrator 想要切换至用户 bunny 的远程桌面,可通过右键—> 连接(Connect)进行连接,接着输入密码即可切换到 bunny 用户:


点击确定后,如下图所示,成功切换到了 bunny 用户的远程桌面:

而且,在 Windows 中有一个 tscon 命令,是命令行下使用的工具,也可以实现与上述相同的功能。
首先执行如下命令获取用户对应的会话 ID:

query user

可以看到用户 bunny 对应的会话 ID 为 2,然后通过执行 tscon 命令即可成功切换至用户 bunny 的远程桌面,命令如下:

tscon 2 /PASSWORD:Bunny2021
/PASSWORD:bunny 用户的密码

可见,tscon 命令提供了一个切换用户会话的功能,并且,在正常情况下,切换会话时需要提供目标用户的登录密码。但这并不能完全确保会话安全,攻击者通过特殊的利用方法完全能够绕过验证,不输入密码即可切换到目标会话,从而实现目标用户的未授权登录。
而这里所讲的特殊的利用方法便是在 SYSTEM 权限下直接执行 tscon 会话切换命令:

tscon ID
此时攻击者可以在不提供其他用户登录凭据的情况下自由切换会话桌面,实现劫持其他用户的 RDP 会话。
RDP 会话劫持在特定情况下可以大显身手,比如对于较新的 Windows 系统,默认情况下是无法通过 Mimikatz 导出用户明文口令的,此时我们通过常规方法无法切换至另一用户的桌面,那么我们便可以借助上文提到的方法,先提权至 SYSTEM 权限,再劫持目标用户的 RDP 并切换过去。
特别注意的是,即使远程连接的用户关闭了远程连接窗口,也不会劫持该回话,只是在后台显示 “已断开连接”(Disconnected):

此时,仍能在 SYSTEM 权限下通过tscon实现未授权连接。
高权限用户劫持低权限用户的 RDP高权限用户劫持低权限用户的 RDP 会话利用起来比较简单,由于具有管理员权限,可以直接通过创建服务等方式获取 SYSTEM 权限。
创建劫持用户会话的服务:

sc create rdp binpath= "cmd.exe /k tscon 2 /dest:console"sc start rdp

执行sc start rdp后,我们创建的劫持会话的服务将会启动,由于 Windows 是以 SYSTEM 权限运行服务的,所以我们tscon 2命令也会以 SYSTEM 权限运行,此时便可以在不提供目标用户密码的情况下成功劫持目标用户的会话:

其实也可以使用 Psexec 来获得一个 SYSTEM 权限的 cmd(Psexec 获得的 shell 是 SYSTEM 权限的),然后再这个 SYSTEM 权限的 cmd 中直接执行tscon 2劫持命令:

psexec -s -i cmd    # 获得一个 SYSTEM 权限的 cmdquser user    # 在新获得的 SYSTEM 权限的 cmd 中执行劫持命令tscon 2 /dest:console
低权限用户劫持高权限用户的 RDP低权限用户劫持高权限用户的 RDP 会话利用起来没有前者那么简单,因为权限太低,所以无法执行创建服务,执行 Psexec 等高权限的命令。所以如果低权限用户想要劫持高权限用户的 RDP 的话需要想办法提权,即将自己的权限提升至 SYSTEM。
实验环境如下:

假设有这么一种情况,有一台 Windows Server 2012 系统的服务器,其本地登录着一个普通域用户 bunny:

我们通过某种方式获得了这个 bunny 用户的登录密码,并使用这个 bunny 用户成功进行远程登录:

此时,登录后查看任务管理器发现后台还存在管理员用户 Administrator 的会话:

并且使用query user命令查看其会话 ID 为 1。接下来我们尝试劫持这个管理员用户的远程会话。
首先使目标主机上线一个 bunny 用户权限的 MSF,然后通过各种系统漏洞获得了目标机的 System 权限:

然后进入 shell 中执行 tscon 命令进行劫持即可:

如上图所示,成功劫持并切换到了 Administrator 用户的远程桌面。
利用哈希传递登录 RDP 远程桌面Windows Server 2012 R2 采用了新版的 RDP 远程桌面协议,在这个新版协议中有一个 ”受限管理员” (Restricted Admin)的特性。相信渗透测试人员和系统管理员都会对这个特性有足够的兴趣,因为通过这个特性,我们可以实现哈希传递攻击并成功登录远程桌面。
在抓取到的 Hash 无法破解的情况下,如果目标主机开启了 “Restricted Admin Mode” 也行,那么我们便可以使用 Hash 来直接实现 RDP 远程登录。Restricted Admin Mode 在 Windows 8.1 和 Windows Server 2012 R2 上默认开启。
我们在渗透过程中可以通过修改注册表的方式开启目标主机的 Restricted Admin Mode,值为 0 代表开启,值为 1 代表关闭:

REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /fREG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"    # 查看是否成功开启

如上图所示,成功在目标主机开启了 Restricted Admin Mode。
然后再攻击机上使用 Mimikatz 进行哈希传递,大致原理就是哈希传递成功后执行mstsc.exe /restrictedadmin来打开:

privilege::debugsekurlsa::pth /user:administrator /domain:whoamianony.org /ntlm:ab89b1295e69d353dd7614c7a3a80cec "/run:mstsc.exe /restrictedadmin"

报错了,说 CredSSP 加密数据库错误,大概是因为 Windows 10 家庭版的原因吧。然后俺有换了另一个版本的 Windows 成功了:


注意,这里的受限管理员模式顾名思义只对管理员组有效。所以如果你获取到的用户属于远程桌面用户组,那么是无法通过 Hash 登录的。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 07:47 , Processed in 0.013624 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表