首页
社区
课程
招聘
[原创]提权实录:通过命名管道劫持可写服务
发表于: 2天前 1392

[原创]提权实录:通过命名管道劫持可写服务

2天前
1392

在分析某 Windows 应用的服务组件时,发现其创建的命名管道访问控制配置宽松,允许低权限用户连接并发送指令,从而触发高权限的终止任意进程操作(taskkill)。进一步分析发现,被终止的服务会自动重启,而其可执行文件的权限配置错误,允许 Everyone 组读写。结合这两个缺陷,可构造一条完整的本地提权利用链。

命名管道(Named Pipe)是 Windows 操作系统提供的一种进程间通信(IPC)机制,允许不同进程(包括跨会话、跨权限级别)通过一个带名称的管道进行双向或单向数据交换。命名管道具有全局可见的名称(通常位于 \pipe\ 命名空间下,如 \\.\pipe\KeyServicePipe),支持多客户端连接,并可通过安全描述符(Security Descriptor) 设置访问控制列表(ACL),以限制哪些用户或组可以读取、写入或创建连接。

命名管道常被用作高权限服务与低权限客户端之间的通信通道。然而,若开发者未正确配置管道的 ACL(例如允许 Everyone 或 Authenticated Users 具有写权限),攻击者就可以作为客户端向服务端发送消息,从而使得服务执行敏感操作(如启动/终止进程、读取文件等),以此构成权限提升或远程代码执行的风险。

发现命名管道及查看其对应的 ACL 策略可以借助 Sysinternals Suite 内的 pipelistaccesschk。这里 0cat 向我推荐了一款可视化友好的工具:Pipetap。通过查看 Pipelist 发现存在一个 ACL 策略为 Everyone 可写的命名管道:KeyServicePipe

图片描述

该命名管道对应的进程也是以 System 权限运行着,完全符合我们挖掘提权的条件。

图片描述

根据命名管道服务进程定位到其可执行文件,接着通过 IDA 进行一键导出反编译代码。配合着 AI 进行分析,很容易就定位到相关信息。

首先是入口接收到信息并根据不同的偏移量解析客户端所发送过来的消息,根据这些偏移量得知消息包含 2 个部分:消息头和消息体,消息头为 12 个字节。

图片描述

其次是消息头的逻辑,我们可以看见其有三个部分,每个部分刚好 4 字节(DWORD)。三个部分分别为:会话 ID、消息类型、消息体长度。这些信息也是基于后续的调试输出所得知。读到消息类型后,会判断消息类型的范围必须在 1-37 之间。

图片描述

最后就进入消息分发,根据不同的消息类型进行分发。不同的消息类型对应不同的处理逻辑,在这里实际上踩了个坑,正常跟进向下的逻辑 Map 寻找,而实际上在服务创建的构造函数内就已经定义好了:sub_424FF0(v5, 消息类型, 消息处理函数)

图片描述


[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

收藏
免费 5
打赏
分享
最新回复 (3)
雪    币: 15658
活跃值: (9912)
能力值: ( LV12,RANK:274 )
在线值:
发帖
回帖
粉丝
2
学习了
1天前
0
雪    币: 823
活跃值: (1030)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
刚看了下全部都是 not queried; safe mode.
15小时前
0
雪    币: 12813
活跃值: (7121)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢分享
14小时前
0
游客
登录 | 注册 方可回帖
返回