文章前言
在内部网络中,管理员经常使用远程桌面协议(RDP)来远程管理Windows环境。然而,RDP为攻击者提供了多种攻击机会,这些攻击可以在红队场景中用于横向移动。以下攻击方法可以让红队获取凭据,劫持其他用户的RDP会话,并在使用RDP作为身份验证机制的远程系统上执行任意代码。
RDP劫持通常通过中间人攻击实现凭据捕获,这种攻击可以针对RDP会话进行操作,从而使攻击者轻松获得用于横向移动的域账户明文密码。Seth是一个工具,它能够自动执行RDP中间人攻击,无论网络级身份验证(NLA)是否启用。要实施此攻击,需要提供四个参数:
以太网接口、攻击者IP、受害主机IP和目标RDP主机IP。
./seth.sh eth0 10.0.0.2 10.0.0.3 10.0.0.1
在执行时,该工具会在后台执行一系列步骤,以确保攻击成功:
通过ARP欺骗转发IPv4流量,将受害主机的流量重定向到攻击者计算机,再重定向到目标RDP服务器;配置iptables规则以拒绝SYN数据包,防止直接RDP身份验证;捕获目的主机的SYN数据包;克隆SSL证书;重新配置iptables规则,将流量从受害工作站路由到目标RDP主机;阻止到端口88的流量,以将Kerberos身份验证降级到NTLM。步骤1-3会在受害者认证前执行,试图通过RDP向目标服务器进行身份验证的用户将收到以下消息:
当用户建立连接时,凭据将以明文形式显示给攻击者。
注意:笔者在本地未能成功实验此方法,因为存在SSL强校验,建议在实战中谨慎使用。
RDP Inception技术由mdsec发现,允许攻击者在启动时执行任意代码并通过RDP连接传播,从而在网络内部进行横向移动。该思路大致如下:
在渗透测试中,如果我们控制了服务器C,而最终目标是PC X,但在高度安全的网络环境下,我们只能通过RDP Inception攻击方式进行攻击。通过控制接入服务器C的服务器B,再控制接入服务器B的服务器A,最终控制接入服务器A的PC X,攻击链如下:
PC X RDP ————> Server A Server A RDP ————> Server B Server B RDP ————> Server C
为了促进这种攻击,mdsec开发了一个批处理脚本(https://www.php.cn/link/84846ca9435252790f0e076d7d5d29df。
之后,攻击者可以在已获得访问权限的主机上执行批处理脚本以获得一个shell。
脚本执行后,将在已获得访问权限的Windows 7主机上和远程连接的主机上同时创建启动项:
之后,当远程连接受感染主机的Windows Server 2008重新启动时,将会执行恶意载荷:
同时打开一个新的Meterpreter会话:
从而成功获取到Windows Server 2008的权限。由于这是启动项,因此也实现了权限维持。该技巧的另一个好处是,如果我们初始获得的权限较低,可以先运行脚本run.bat,当有域管理员用户或管理员通过RDP登录目标主机时,我们可以获得一个高权限的会话,从而间接实现权限提升。
如果在目标系统上获得了本地管理员访问权限,攻击者可以劫持另一个用户的RDP会话,从而无需发现该用户的凭据。这项技术最初由Alexander Korznikov发现。
在命令提示符中输入“taskmg”后,可以从Windows任务管理器的“Users”选项卡中检索可用会话列表。
可以从命令提示符中获得相同的信息。
query user
之后,我们可以创建一个以系统级权限执行tscon的服务来劫持ID为2的会话。
sc create sesshijack binpath= "cmd.exe /k tscon 1 /dest:rdp-tcp#0" net start sesshijack
当服务启动时,我们可以明显感觉到当前远程登录的操作界面已经发生了变化,之后我们打开CMD发现当前用户已经变为“Administrator”,即用户“Al1ex”在不知道密码的情况下使用Administrator的会话:
Mimikatz也支持这种技术,我们使用Mimikatz从administrator切换为Al1ex用户:
第一步是检索终端服务会话列表。
ts::sessions
如果是低权限用户,直接使用会话2将失败,因为Mimikatz尚未以系统权限执行。因此,以下命令将令牌从本地管理员提升到系统,在不需要知道用户密码的情况下使用另一个会话:
privilege::debug token::elevate ts::remote /id:2
再次执行以下命令,又回到了熟悉的“Al1ex”用户的会话界面。
ts::remote /id:2
Windows允许多个用户在同一时间登录操作系统,但在某一时间段内只能由一个用户操作。如果其他用户想要使用同一主机,当前用户必须退出登录(log out)会话或使用“Switch user”功能切换到另一用户,同时保持他们原有的会话在后端运行。当新用户登录后,我们可以在任务管理模块看到先前用户的Session会话信息依旧存在,例如:
该会话信息会等待先前的用户再次使用,我们也可以通过在命令行中执行以下命令来查看当前的会话信息:
quser
RDP也允许通过远程方式进行连接,当用户由于网络问题断开连接时,用户的会话信息依旧会被保存,之后用户可以通过重新连接使用。Session对于用户来说非常友好,但正如我们上图中看到的,当用户会话被断开时,依旧保存之前的记录信息。如果先前登录的用户具备高权限,攻击者可以通过会话劫持的方式获得高权限,具体如下所示:
之后键入回车后直接切换会话信息且不用输入前一个用户的登录认证密码:
之后成功劫持Alex用户的Session会话,你可以在此基础上进行各项操作:
参考链接
https://www.php.cn/link/2b21de16a5c3b0913227003411b15196
以上就是横向移动之RDP&Desktop Session Hijack的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号