导语:Impacket 套件里有个叫 tstool 的小工具,不登 RDP 就能远程管 Windows 终端会话——列会话、看进程、杀进程、劫持 RDP、踢人下线、弹消息、远程重启都能干。它走的是 MSRPC(微软远程过程调用),目标上不用装东西、不留代理,连登录事件都不会触发。下面把这十个动作逐一拆一遍,再串上 PtH/PtK/PtT 三种免密认证。
一、tstool 是个什么工具
tstool 是 Impacket 套件里专门对付 Windows 终端服务(Terminal Services,现在叫 Remote Desktop Services 远程桌面服务)的一个子命令。它能干的事跟 Windows 自带的 qwinsta、tasklist、taskkill、tscon、tsdiscon、logoff、shutdown、msg 这八个本地命令差不多,只不过它跑在攻击者机器上,远程打过去。
怎么打?用的是 DCE/RPC(分布式计算环境远程过程调用),直接跟目标主机上的 RDP 和会话管理器接口对话。所以只要你手里有一组有效凭据、目标能网络可达,就能远程枚举、控制、劫持 Windows 上的交互式会话。
整篇文章用的靶子是一台域控:DC1,IP 192.168.1.13,ignite.local 域里的。
二、qwinsta:先看看会话里都有谁
跑 qwinsta 这个动作,目标主机上每条终端服务会话的会话 ID、登录用户、状态(Active 还是 Disconnected)、锁屏情况、连接时间全都列出来。
用域管理员跑一遍,看到两条值得关注的交互会话:
- IGNITEadministrator 在控制台,Session ID 1,状态 Active
- IGNITEkrishna 通过 RDP 登录,Session ID 2,状态 Locked
一行命令搞清楚”现在谁在线、谁值得打”。
impacket-tstool ignite/administrator:Ignite@987@192.168.1.13 qwinsta

三、tasklist:把目标进程全摸一遍
tasklist 列出目标上每个进程的 PID、属于哪个会话号、关联的 SID(安全标识符)、占了多少内存。
Session 0 那一堆都是系统和服务进程——System、lsass.exe、services.exe,还有十几个 svchost.exe。看完 Session 0 再往下滚 Session 1,能看到 IGNITEAdministrator 桌面上跑的交互式进程,几个 firefox.exe 全在里头。这里挑 PID 6232 当下一步的击杀目标。
impacket-tstool ignite/administrator:Ignite@987@192.168.1.13 tasklist

四、taskkill:远程杀进程
taskkill 按 PID 或映像名远程干掉一个进程。重新跑了一遍 qwinsta 确认会话表之后,对着刚才标好的 firefox.exe 实例下手,工具回 Terminating PID: 6232 … OK。远程进程控制权稳了。
impacket-tstool ignite/administrator:Ignite@987@192.168.1.13 taskkill -pid 6232
五、tscon:把别人的 RDP 会话接管过来
劫持的前提是目标上有活着的交互会话。krishna 正好在目标上挂着一条 RDP,会话窗口里 whoami 出来是 ignitekrishna,hostname 出来是 DC1。这条普通用户的会话就是接下来要抢的。

换 krishna 自己的凭据再跑一次 qwinsta,找准受害者那条:RDP-Tcp#14 会话,ID 是 3,状态 Active。这就是劫持的源会话。
impacket-tstool ignite/krishna:Password@1@192.168.1.13 qwinsta

会话重定向有个前置条件:对目标会话主机得有 Connect 或 Full Control 权限,Administrator 或者 SYSTEM 身份天然就有。下面这条高权限 PowerShell 验证了这一点——攻击者在目标上已经有一条 igniteadministrator 会话,刚好满足 tscon 把一个会话贴到另一个会话上需要的权限。

tscon 这个动作完成劫持。-source 3 是 krishna 的会话,-dest 1 是管理员的控制台会话。krishna 的桌面被重定向到攻击者终端,工具回 Connecting SessionID 3 to 1 … OK。攻击者从头到尾没碰过 krishna 的密码,但桌面已经到手了。
impacket-tstool ignite/krishna:Password@1@192.168.1.13 tscon -source 3 -dest 1

krishna 那一侧立刻被踢下来,弹一句 You have been disconnected because another connection was made to the remote computer.,会话已经被重附到别处了,原拥有者瞬时失去连接。

回到攻击者这边,重附上来的会话就是 krishna 的桌面。命令行 whoami 出来 ignitekrishna,主机名 DC1。受害者的交互会话完整到手,全程零凭据窃取。

六、tsdiscon:把会话强制踢下线,但保留后台程序
tsdiscon 强制断开一个会话,进程还在后台跑。针对 Session 1 操作后,qwinsta 看到状态已经翻成 Disconnected。攻击场景里要么是清场前把用户踢走,要么是劫持完做个清理。
impacket-tstool ignite/krishna:Password@1@192.168.1.13 tsdiscon -session 1

七、logoff:直接签退
logoff 把会话整个终结掉,用户跑的所有进程全关。这里签退 Session 3,工具回 Signing-out SessionID: 3 … OK。跟 tsdiscon 不一样,这个动作会丢掉会话里所有没保存的内容,属于破坏性操作。
impacket-tstool ignite/krishna:Password@1@192.168.1.13 logoff -session 3

八、shutdown:远程重启
shutdown 给主机下发电源事件。-reboot 触发重启,工具回 Sending shutdown (reboot) event … OK。打到域控上就是高影响操作,红队实战里得掂量清楚再下手。
impacket-tstool ignite/krishna:Password@1@192.168.1.13 shutdown -reboot

九、msg:往会话里弹个消息
msg 往指定会话上弹个消息框。这里把 Welcome to Hacking Articles 推到 Session 1,工具回 Sending message to SessionID: 1 … OK。
impacket-tstool ignite/krishna:Password@1@192.168.1.13 msg -session 1 -message 'Welcome to Hacking Articles'

目标桌面上渲染出原生弹窗。除了骚扰用,还能用来证明攻击者能跟活跃用户的桌面交互——而且是可归因的那种。

十、不用密码怎么认证
tstool 复用了 Impacket 的认证栈,明文密码之外的东西也都能用——NTLM 哈希、Kerberos AES 密钥、缓存票据都行。在已经沦陷的域里凭据通常只能”回收”不能猜测,这条特性就让 tstool 在后渗透深水区也能继续工作。
PtH(哈希传递)
-hashes 提交管理员的 NTLM 哈希认证。qwinsta 输出正常返回,Pass-the-Hash 成功。
impacket-tstool -hashes :32196B56FFE6F45E294117B91A83BF38 ignite.local/administrator@192.168.1.13 qwinsta

PtK(密钥传递)
-aesKey 提交账号的 Kerberos AES256 密钥认证。即便报了 CCache file is not found. Skipping,工具会回落到基于密钥的 Kerberos 认证,照样返回会话表。这就是 Pass-the-Key 攻击。
impacket-tstool ignite.local/administrator@dc1.ignite.local -aesKey
e1182a9a34827cabac57a635ae47ce2b2945b4e9397d369b07d4d714c6c525b7 qwinsta

PtT(票据传递)
把 Kerberos ccache 导出到环境变量 KRB5CCNAME,配合 -k -no-pass 完全靠缓存票据认证。qwinsta 正常返回,Pass-the-Ticket 干净落地,闭环了”对域控的免密访问”。
export KRB5CCNAME=Administrator.ccache
impacket-tstool -k -no-pass ignite.local/administrator@dc1.ignite.local qwinsta

十一、总结一下
tstool 把 Windows 自带的终端服务管理面压缩成了一个紧凑的红队工具包。拿到一条已认证立足点之后,操作员能枚举会话、控制进程、劫持一条活跃的 RDP 会话(全程不用偷密码)、踢人或签退用户、重启主机、往桌面上弹消息,认证方式还覆盖 PtH/PtK/PtT。它”安静”是因为全程在用合法的 Windows 签名功能,不投递任何二进制——这就是为什么防御方必须把这个面盯死。
十二、缓解策略
- 最小权限,分层管理:tscon 劫持依赖”目标端已经有特权会话”,把本地管理员和 SYSTEM 权限收紧,这条路就堵死了大半。
- 限制 RDP 登录和远程控制:用组策略卡住”允许通过远程桌面服务登录”的账号清单;远程控制能禁用就禁用,非用不可就强制用户显式授权。
- 上 RestrictedAdmin 和 Remote Credential Guard:开启 RDP 受限管理模式;能干掉域控上的交互式/RDP 登录权就干掉。
- 凭据侧纵深防御:Protected Users 组、LAPS(本地管理员密码方案)管本地管理员密码、严格凭据分层、定期轮换 krbtgt 密钥,把 PtH/PtK/PtT 全堵上。
- 别只盯工具名,要盯行为:对 MSRPC 调用终端服务接口、事件 ID 4778/4779(重连/断连)、4634/4647(注销)、1074(关机)以及服务器上异常的 taskkill 活动全部建告警。
- 网络分段:域控的 TCP 135/445 访问限制在指定管理主机白名单里。
原文出处:https://www.hackingarticles.in/impacket-for-pentester-tstool/
实战参考:
- Impacket 项目:https://github.com/fortra/impacket
- Hacking Articles 工具栏目:https://www.hackingarticles.in/category/impacket/














暂无评论内容