文章总结: 本文介绍impacket-tstool工具通过MSRPC协议远程操控Windows终端服务会话,实现会话枚举、进程控制、RDP会话劫持、断开注销、重启及消息发送等功能,并支持哈希传递、密钥传递和票据传递等无密码认证方式。文章详细演示了各命令的攻击用途,并提出了最小权限、限制RDP登录等缓解策略,对红队渗透测试具有较高参考价值。
综合评分: 78
文章分类: 红队,渗透测试,内网渗透,安全工具,应急响应
红队必备:用 tstool 悄无声息地接管远程桌面会话
原创
raj
raj
潇湘信安
2026年9月24日 08:45
湖南
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
| Ima知识库名称 | 加入条件 |
| — | — |
| 潇湘信安协同知识库(更新~ing!) | 限时免费 |
| 潇湘信安学习资料库(更新~ing!) | ≥3年粉丝 |
| 潇湘信安内部知识库(更新~ing!) | 星球成员 |
现在只对常读和星标公众号才展示大图推送,建议大家把“潇湘信安”设为星标,否则可能看不到了!
概述
终端服务(Terminal Services),如今更广为人知的名称是远程桌面服务(Remote Desktop Services),掌管着 Windows 主机上的每一个交互式和远程会话。impacket-tstool 让操作者完全通过 MSRPC 协议查询和控制这些会话——既不需要 RDP 客户端,也无需在目标机器上投放任何二进制文件。本文将逐一讲解会话枚举、远程进程控制、实时 RDP 会话劫持、会话断开、用户消息发送,以及针对域控制器的无密码身份认证,并将每个内置的终端服务命令与其攻击用途一一对应。
目录
- tstool 简介
- 使用 qwinsta 枚举会话
- 使用 tasklist 列出远程进程
- 使用 taskkill 终止进程
- 使用 tscon 劫持 RDP 会话
- 使用 tsdiscon 断开会话
- 使用 logoff 注销会话
- 使用 shutdown 重启目标
- 使用 msg 向会话发送消息
- 无密码身份认证
- 总结
- 缓解策略
tstool 简介
impacket-tstool 是 Fortra 公司 Impacket 工具套件中附带的一款终端服务操控工具。它复刻了 Windows 原生命令 qwinsta、tasklist、taskkill、tscon、tsdiscon、logoff、shutdown 和 msg 的功能,但却是通过 DCE/RPC 协议远程驱动远程桌面与会话管理器接口来实现的。
由于该工具直接使用 RPC 通信,它只需要有效的凭据和网络可达性即可运行;它不会安装任何服务,不需要代理程序,也从不创建交互式登录。这种特性组合使它在后渗透信息收集、横向移动和 Active Directory 环境中的会话劫持方面极具价值。
在本教程中,目标主机是域名为 ignite.local 的域控制器 DC1,IP 地址为 192.168.1.13。
使用 qwinsta 枚举会话
qwinsta 操作会列出主机上的每一个终端服务会话,并显示每个会话的 ID、登录用户、会话状态、锁定状态以及连接时间。当以域管理员身份运行时,该工具会揭示两个值得关注的交互式会话:
- 控制台会话 ID 1:用户
IGNITE\administrator,状态为 Active(活动) - RDP 会话 ID 2:用户
IGNITE\krishna,状态为 Locked(锁定)
仅凭这一条命令,就能摸清谁登录了系统,并标记出值得攻击的会话目标。
impacket-tstool ignite/administrator:Ignite@[email protected] qwinsta
使用 tasklist 列出远程进程
tasklist 操作会枚举所有正在运行的进程,以及对应的 PID、会话编号、所属 SID 和内存占用。会话 0 承载着系统和服务进程,包括 System、lsass.exe、services.exe 以及所有 svchost.exe 进程,为操作者提供了目标机器上完整的执行清单。
impacket-tstool ignite/administrator:Ignite@[email protected] tasklist
滚动查看会话 1 的进程,可以看到 IGNITE\Administrator 拥有的交互式工作负载,其中包括多个 firefox.exe 实例。操作者将 PID 为 6232 的 firefox.exe 进程标记为下一步的终止目标。
使用 taskkill 终止进程
taskkill 操作可以通过 PID 或镜像名称远程终止进程。在用 qwinsta 再次确认会话表之后,操作者终止了之前识别的 firefox.exe 实例。工具返回 “Terminating PID: 6232 … OK”,证明了对目标主机的完全远程进程控制能力。
impacket-tstool ignite/administrator:Ignite@[email protected] taskkill -pid 6232
使用 tscon 劫持 RDP 会话
为了演示劫持,IGNITE\krishna 在目标主机上保持着一个活动的交互式会话。RDP 窗口通过 whoami(返回 ignite\krishna)和 hostname(返回 DC1)确认了身份。这个普通用户会话就是操作者打算夺取的目标。
这次以 krishna 的身份进行认证,通过 qwinsta 枚举会话并定位受害者:RDP-Tcp#14 会话的 ID 为 3,处于 Active 状态。这个会话 ID 将成为劫持的源会话。
impacket-tstool ignite/krishna:Password@[email protected] qwinsta
会话重定向需要在会话主机上拥有 Connect 或 Full Control 权限,通常管理员或 SYSTEM 上下文才能满足这一要求。通过提升权限的 PowerShell 可以确认,操作者已经在目标上掌控了一个 ignite\administrator 会话,满足了 tscon 将一个会话附加到另一个会话所需的权限。
tscon 操作执行劫持。传入 -source 3(krishna 的会话)和 -dest 1(管理员控制台),将 krishna 的会话重定向到操作者的终端。工具确认 “Connecting SessionID 3 to 1 … OK”,操作者现在拥有了 krishna 的桌面,而且从未获知 krishna 的密码。
impacket-tstool ignite/krishna:Password@[email protected] tscon -source 3 -dest 1
在 krishna 的终端上,RDP 客户端立即断开,并显示消息:“您已断开连接,因为另一台计算机连接到了远程计算机。” 这种被踢出的现象是 tscon 的可见副作用:原会话所有者在会话被重新附加到其他位置的瞬间就失去了会话。
回到操作者的控制台,重新附加的会话现在显示的是 krishna 的桌面。命令提示符确认了被盗用的上下文:在主机 DC1 上 whoami 返回 ignite\krishna。操作者在没有窃取任何凭据的情况下,拥有了对受害者会话的完全交互式访问权限。
使用 tsdiscon 断开会话
tsdiscon 操作会强制断开会话,但会让会话中的程序在后台继续运行。针对会话 1 执行断开操作后,后续的 qwinsta 确认其状态已变为 Disconnected。攻击者可以用此功能将用户从会话中踢除,或者在劫持之后清理痕迹。
impacket-tstool ignite/krishna:Password@[email protected] tsdiscon -session 1
使用 logoff 注销会话
logoff 操作会彻底终止会话,并关闭用户正在运行的所有进程。此处注销了会话 3,工具返回 “Signing-out SessionID: 3 … OK”。与 tsdiscon 不同,此操作会破坏会话中所有未保存的工作。
impacket-tstool ignite/krishna:Password@[email protected] logoff -session 3
使用 shutdown 重启目标
shutdown 操作向主机发送电源事件。-reboot 标志会触发重启,工具确认 “Sending shutdown (reboot) event … OK”。在域控制器上执行此操作影响极大,在渗透测试过程中需要格外谨慎。
impacket-tstool ignite/krishna:Password@[email protected] shutdown -reboot
使用 msg 向会话发送消息
msg 操作会向指定会话推送一个消息框。本例向会话 1 发送了字符串 “Welcome to Hacking Articles”,工具返回 “Sending message to SessionID: 1 … OK”。
impacket-tstool ignite/krishna:Password@[email protected] msg -session 1 -message 'Welcome to Hacking Articles'
在目标桌面上,消息以原生弹窗对话框的形式呈现。除了新奇感之外,这证明了攻击者能够以任意且可溯源的方式与活动用户会话进行交互。
无密码身份认证
由于 tstool 继承了 Impacket 的身份认证栈,它支持的认证方式远不止明文密码。NTLM 哈希、Kerberos AES 密钥以及缓存票据都可以使用,这使得该工具在已沦陷的域内部(凭据往往是获取而非猜测得到的)依然能有效发挥作用。
Pass-the-Hash(哈希传递)
通过 -hashes 参数提供管理员的 NTLM 哈希,无需明文密码即可完成认证。qwinsta 正常返回输出,确认了针对目标的哈希传递攻击成功。
impacket-tstool -hashes :32196B56FFE6F45E294117B91A83BF38 ignite.local/[email protected] qwinsta
Pass-the-Key(密钥传递)
-aesKey 参数使用账户的 Kerberos AES256 密钥进行认证。尽管会出现 “CCache file is not found. Skipping” 的提示,但工具会回退到基于密钥的 Kerberos 认证并返回会话表,演示了密钥传递攻击。
impacket-tstool ignite.local/[email protected] -aesKey \
e1182a9a34827cabac57a635ae47ce2b2945b4e9397d369b07d4d714c6c525b7 qwinsta
Pass-the-Ticket(票据传递)
将 Kerberos ccache 文件导出到 KRB5CCNAME 环境变量,并使用 -k 和 -no-pass 参数运行,即可完全通过缓存票据进行认证。成功的 qwinsta 输出确认了一次干净的票据传递攻击,完成了对域控制器的无凭据访问闭环。
export KRB5CCNAME=Administrator.ccache
impacket-tstool -k -no-pass ignite.local/[email protected] qwinsta
总结
impacket-tstool 将 Windows 自身的终端服务管理面转化为一套紧凑的攻击工具集。仅凭一个经过认证的立足点,操作者就可以枚举会话、控制进程、在不窃取密码的情况下劫持活动 RDP 会话、踢出或注销用户、重启主机、向桌面发送消息,而且所有这些操作都可以通过哈希传递(Pass-the-Hash)、密钥传递(Pass-the-Key)或票据传递(Pass-the-Ticket)来完成。
它的隐蔽性来自于滥用合法的、经过签名的功能,而非投放恶意软件——这也正是防御者必须密切关注这一攻击面的原因。
缓解策略
- 实施最小权限和分层管理原则。 通过 tscon 进行会话劫持的关键在于拥有一个高权限的目标会话,因此严格限制本地管理员和 SYSTEM 权限可以削弱此技术的效果。
- 将”允许通过远程桌面服务登录”限制为必要账户,并通过组策略限制远程控制行为——禁用远程控制或要求明确的用户同意。
- 为 RDP 启用 RestrictedAdmin 模式和远程凭据防护(Remote Credential Guard),并在操作可行的情况下,移除域控制器上的交互式和 RDP 登录权限。
- 使用 Protected Users 组来遏制哈希传递、密钥传递和票据传递攻击…
原文地址:
https://www.hackingarticles.in/impacket-for-pentester-tstool/
关注我们
还在等什么?赶紧点击下方名片开始学习吧
知 识 星 球
星球已过800人,暂不再发放优惠券,如还有需要的师傅可加我VX:S_3had0w,等你一起来学习…!
| Ima知识库名称 | 加入条件 |
| — | — |
| 潇湘信安协同知识库(更新~ing!) | 限时免费 |
| 潇湘信安学习资料库(更新~ing!) | ≥3年粉丝 |
| 潇湘信安内部知识库(更新~ing!) | 星球成员 |
| | |
| — | — |
| | |
推 荐 阅 读
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:潇湘信安 raj
raj《红队必备:用 tstool 悄无声息地接管远程桌面会话》