分享

PsExec 未修补的本地提权漏洞

 昆仑圃 2020-12-19

PsExec 作为一个安全界黑白两道都喜欢的工具,一直都是比较淡定的存在。它最新的一个版本还停留在2016年...

简单的操作,便捷的命令,高粘性的操作界面,很难让人说不喜欢。

psexec 向目标主机contosodc1发送指令 hostname

嗯...这个PsExec本地提权的漏洞,出现有很长时日了。利用好这个漏洞可以让一个非管理员进程提升到System权限,前提是PsExec在本地或者在远程的目标机器中运行起来。

漏洞作者David Wells 可以确认,从Windows XP一直到Windows 10,只要运行了 PsExec V1.72(2006年发行) 到 V2.2(写本文时的最新版),都受影响。漏洞作者表示已经给足微软90天的修补时间,但是微软并没有对此做出补救。

左边:系统管理员尝试用Psexec.exe开启远程机器的cmd.exe

右侧:远程机器使用Poc截取控制权并以System权限启动MsPaint.exe程序

如果你不熟悉PsExec,那简单来说它就是一个系统管理工具,隶属于SysInternals suite (10多年以前已经被微软收购),这个工具可以在client端执行命令.下面是PsExec工作原理的一个简单综述:

PsExec包含了一个内置的资源名为'PSEXESVC',这是一个服务套件,当PsExec启动之后,会在目标机器释放,并以服务的方式并以System权限在目标系统里面启动。Psexec client端和远程PSEXESVC服务通过命名管道进行通信。值得注意的是,这个管道名字就叫做“\PSEXESVC”,专门响应和执行Psexec client端的指示和命令,诸如“运行什么程序”,“命令行回显”等等。

当然,安全起见,PSEXESVC 服务的 “\PSEXESVC”  命名管道是受保护的,只允许管理员有读写权限,因此就防止了本地低权限用户越权读写这个服务的管道。

“\PSEXESVC” 只给管理员读写权限

虽然看起来无懈可击,但是捏,低权限的应用还是有可能访问这个管道的。

怎么做呢?抢先创建命名管道“\PSEXESVC”!

当PSEXECSVC运行后,它会获取上面管道的句柄,而不是自个儿创建一个新的!这就为后面不可预料的结果埋下了祸根,它就是我们今天讨论的重点,下面我们来看看汇编代码,了解了解PSEXESVC是如何创建管道的。

    PsExecSvc正在创建 “\PSEXESVC”管道

图中我们可以看到它的nMaxInstances 参数,值为PIPE_UNLIMITED_INSTANCES,表示它不限制“\PSEXESVC”的管道实例数量。我们还能看到,它不会确保是否是自己的程序首先创建了 “\PSEXESVC” 这个命名管道,这种方式会把 openMode 参数设置为FILE_FLAG_FIRST_PIPE_INSTANCE。而PsEXEc使用的是PIPE_ACCESS_DUPLEX。这种情况下,他会尝试去创建这个命名管道,如果它已经存在,就会获取这个命令管道的句柄,同时也会继承已有管道的ACL(访问控制列表),那么此时就不一定是'只允许管理员访问'了。

这里弄了一个简单的'PipeHijack.exe'程序,目的是创建“\PSEXESVC”管道,授权给“David Wells”用户可读可写权限,而它并非管理员。

一个非管理员用户抢先创建“\PSEXESVC”管道

运行它之后,如果PsExec以远程或者本地的方式,并以本机器为目标开始运行,PSEXESVC实例就会获取那个管道的句柄,同时“David Wells”也可以对这个管道符进行读写,因此就实现了低权限应用与PSEXESVC SYSTEM服务通讯的过程。

行文到此就差不多收尾了,所需要做的就是怎么和PSEXESVC通讯。对PSEXESVC v2.2协议一通反向编译,拼凑出一套行之有效的路子,可以通过操控这个管道让本地机器以SYSTEM权限执行想要的二进制命令。这实际上就是充当PsExec client发送指令,所以到这里就很容易实现以SYSTEM权限执行想要的指令了。

更全面的PoC在这里:

https://github.com/tenable/poc/tree/master/Microsoft/Sysinternals/PsExecEscalate.cpp





















Proud Of You 冯曦妤 - A Little Love

HackerHub发布 | 转载请注明出处

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多