一种会话劫持技术通杀全部Windows版本,但这真的是漏洞吗…

大家知道本地系统访问权限的Windows用户可以重置其他用户的密码,但其实,本地权限用户还可以劫持其他用户的会话呢,包括管理员用户,而这个过程不需要知道用户密码。

以色列安全研究员Alexander Korznikov在个人博客中披露,本地高权限用户可以劫持任何已登录Windows用户会话,而不需要知晓用户密码,所需工具也仅仅是内置命令行工具。即便已登录用户权限较高,也难以幸免。

发现过程

首先我们来看段视频:RDP劫持有sethc后门的主机

Korznikov最近在研究sethc/utilman登录界面后门,基本上每次都只用到了命令行。一个偶然的情况下,Korznikov查看了任务管理器(taskmgr.exe)中的用户项,然后点击“连接”,居然真的可以连上选中用户的会话。

Korznikov再用本地管理员权限尝试,发现这时就需要用户密码了。

注意事项

1. 必须要有全面控制访问权限或者能够连接的访问权限,来连接到另一个会话。 2. 用/dest:<SessionName>参数,可连接不同用户的会话。 3. 如果在<Password>参数中没有指定特定密码,且目标会话不是当前用户会话,那么tscon就会失效。

其实就是Windows登录界面的粘滞键是使用NT AUTHORITY/SYSTEM用户身份运行的,也就是以系统身份运行,拥有完全控制访问权限,可以连接到任一用户会话,无需密码。

这就有了我们上面所说的会话劫持。这里最有趣的点在于,用这个技术去劫持,系统不会请求合法用户登出,而是在没有任何通知的情况下,直接将用户踢出。

漏洞细节

本地用户若能获取NT AUTHORITY/SYSTEM权限执行命令,就能够劫持任何处于已登录用户的会话,而无需获得该用户的登录凭证。终端服务会话可以是连接状态也可以是未连接状态。

Korznikov认为这是个高危漏洞,可允许任何本地管理员劫持会话并访问:

1. 域管理员会话; 2. 被劫持用户正在处理的任何未保存文件; 3. 被劫持用户先前登录的任何其他系统或应用(可能包括其他远程桌面会话、网络共享映射、需要其他登录凭证的应用、邮箱等)

实现条件

要成功利用,攻击者必须物理接触目标设备;不过,用RDP会话,也可以远程实现攻击。

影响版本

Windows 2016(推特用户@GossiTheDog证实) Windows 2012 R2 Windows 2008 Windows 10 Windows 7

PoC

用命令行实现,这个微软文档可以帮助我们:https://technet.microsoft.com/en-us/library/cc771505(v=ws.11).aspx

实现这些只需要NT AUTHORITY/SYSTEM命令行。用psexec很容易实现,但前提是要有psexec.exe

psexec -s \\localhost cmd

另一种方法是创建一个服务,来连接目标会话。

1. 获取所有会话信息:

C:\Windows\system32>query user USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME administrator 1 Disc 1 3/12/2017 3:07 PM >localadmin rdp-tcp#55 2 Active . 3/12/2017 3:10 PM C:\Windows\system32>

2. 创建劫持用户会话的服务

C:\Windows\system32>sc create sesshijack binpath= "cmd.exe /k tscon 1 /dest:rdp-tcp#55" [SC] CreateService SUCCESS

3. 启动服务

net setart sesshijack

之后,当前会话就会替换成目标

视频

用命令行在Windows7上实现

用创建服务在Windows12 R2上实现

这个真的是漏洞么?

Korznikov发现的这个问题并不完全是新的,六年前,有个名叫Benjamin Delpy的法国安全研究员也在自己的博客中记录了类似的用户会话劫持技术。

所以,其实微软早就意识到这个问题的存在了,不过微软很可能没有将其视为漏洞,毕竟需要目标设备的本地管理员权限,微软很可能认为这是操作系统应有的行为。

安全研究员观点

可能有人会认为这不算漏洞。但Korznikov认为它还是有很高的利用价值,他举了个例子来说明:

某银行职员能够访问账务系统,并有登录凭证。 某天,该职员正常来上班,登录账务系统,并开始日常的工作。然后,到吃饭的点了,他就锁定了工作站,吃饭去了。 这时候,某系统管理员接近该员工的工作站,然后用管理员账户登录。根据银行的政策,管理员账户不能访问账务系统,但是只需要几行内置命令,这个管理员就可以劫持去吃饭的员工锁定的桌面。得手之后,这个管理员就可以以账务员工身份在账户系统中为所欲为。

Korznikov认为像这样的例子还有很多啊!

而且,攻击者不需要metasploit、incognito、mimikatz这样的工具,只要内置命令就可以!每一个管理员都可以伪装成任何登录用户,这个可以在物理访问的情况下实现,也可以通过远程桌面协议实现。

Korznikov还就这个问题跟6年前的发现者Benjamin Delpy沟通了一番,Delpy认为:“这是正常的Windows API,这就是设计流程,他们就这样用。像你之前提到的一样,如果你是管理员,你什么都能做。那么你为什么成为管理员以及如何成为管理员?如果某个低权限用户本地提权成为管理员,那才是问题,并不是我们讨论的设计流程。你什么都能做,你还可以修改终端服务,让该服务接受你的token并允许影子模式,而用户完全不会知道这个事情。”

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏kl的专栏

分布式链路追踪&应用监控APM软件-skywalking

当企业应用进入分布式微服务时代,应用服务依赖会越来越多,skywalking可以很好的解决服务调用链路追踪的问题,而且基于java探针技术,基本对应用零侵入零耦...

8517
来自专栏北京马哥教育

实战精华 | 搭建服务器的之后总结的一些个人经验

最近帮实验室装了两台服务器,计算用的服务器放在内网,通过一台堡垒机与外界相连。碰到很多小问题,在这里记录一下。 组建内网 这一部分没有太多好说的,堡垒机需要有两...

2864
来自专栏琯琯博客

awesome-sysadmin-cn资源

系统管理员 资源列表,内容包括:备份/克隆软件、云计算/云存储、协作软件、配置管理、日志管理、监控、项目管理 备份 备份软件 Amanda:客户端-服务器模型备...

65412
来自专栏阮一峰的网络日志

编译器的工作过程

源码要运行,必须先转成二进制的机器码。这是编译器的任务。 比如,下面这段源码(假定文件名叫做test.c)。 #include <stdio.h> int m...

3146
来自专栏北京马哥教育

每个极客都应该知道的Linux技巧

检查不是由你运行的程序 难度:高级 应用程序:bash(译注:UNIX或者LINUX的shell) 想象下这个场景-你已经准备好了要和同事在办公室里对战一局快速...

30410
来自专栏数据和云

故障恢复:从未知错误ORA-600 [3712]以猜测推理达成恢复

李真旭 Oracle ACE,云和恩墨技术专家 个人博客:www.killdb.com 在Oracle数据库的日常维护中,我们可能经常会遇到一些从未见过的错误,...

2986
来自专栏coding

django2.0入门教程第一节启动开发模式下的服务器

1602
来自专栏IT技术精选文摘

LVS集群的体系结构

1.引言 在过去的十几年中,Internet从几个研究机构相连为信息共享的网络发展成为拥有大量应用和服务的全球性网络,它正成为人们生活中不可缺少的 一部分。虽...

2508
来自专栏圆方圆学院精选

【董天一】IPFS家族(二)

Js版的使用方式跟go版本大同小异,这里不再详细讨论,有兴趣的读者可以直接去Github主页上查看相关信息。

2931
来自专栏IT笔记

大型架构之科普工具篇

当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。“ 消息 ”是在两台计算机间传送的数据单位。消息可以...

5546

扫码关注云+社区

领取腾讯云代金券