SCM介绍
服务控制管理器(SCM)负责启动和停止Windows环境中的服务,包括设备驱动程序和启动应用程序。Microsoft 在 Windows 2000 及更高版本中引入了安全描述符定义语言 (SDDL),以便以更易读的格式提供安全描述符的文本表示。在 Windows 2000 之前,安全描述符表示为十六进制字节。与其他 Windows 对象一样,服务控制管理器的权限由自由访问控制列表 (DACL) 管理,DACL 也由 SDDL 表示
以下是服务控制管理器的主要功能:
-
服务管理:SCM负责管理所有注册在系统中的服务。这包括启动、停止、暂停和恢复服务。
-
服务启动类型:SCM允许为每个服务定义启动类型,包括自动启动、手动启动和禁用。自动启动的服务将在系统启动时自动启动,而手动启动的服务需要用户或其他服务显式启动。
-
依赖关系:SCM允许服务指定它们依赖的其他服务。这确保在启动服务之前,其依赖的服务已经启动。
-
事件通知:SCM能够向注册为服务控制程序的应用程序发送通知和事件。这使得应用程序能够响应服务的状态更改。
-
服务配置:SCM存储服务的配置信息,包括服务的二进制路径、启动参数等。
-
安全性:SCM负责确保只有具有足够权限的用户或进程可以修改或控制服务。
安全描述符定义语言 (SDDL)
安全描述符定义语言(Security Descriptor Definition Language,SDDL)是一种用于描述Windows安全描述符(Security Descriptors)的文本表示形式。安全描述符是Windows中用于定义对象(如文件、文件夹、注册表键等)访问控制规则的数据结构。SDDL为这些安全描述符提供了一种人类可读的、简洁的文本表示方法,通常用于配置和分析系统的安全设置。
SDDL 字符串包含了以下几个重要的部分:
-
所有者(Owner):用 S 表示。描述对象的所有者。
-
主要组(Primary Group):用 G 表示。描述对象的主要组。
-
DACL(Discretionary Access Control List):用 D 表示。描述对象的访问控制列表,定义了对象的权限。
-
SACL(System Access Control List):用 S 表示。描述对象的系统访问控制列表,用于审计目的。
SDDL 字符串的一般格式为:
Java |
其中:
-
O 表示所有者。
-
G 表示主要组。
-
D 表示访问控制列表(DACL)。
在DACL中,每个括号内的部分称为访问控制项(Access Control Entry,ACE)。ACE 由多个字段组成,用分号分隔,包括:访问权限、对象类型、继承规则、SID 等。
持久化思路
在渗透期间,如果已实现提升的访问权限,则可以通过 SDDL 修改服务控制管理器的权限,以便向“Everyone”组授予对服务控制管理器的权限。此操作可以用作持久性的一种形式,因为任何用户都可以在环境中创建一个服务,该服务将在每次计算机启动时以系统级别权限执行任意命令或有效负载
执行以下命令将快速检索服务控制管理器实用程序的 SDDL 权限
Java |
PowerShell 可以用于枚举所有用户组的 SDDL 权限并将其转换为可读格式
Java |
举例枚举“ scmanager ”实用程序的权限并显示关联的 SDDL 权限
Java |
具有标准级别访问权限的用户无法在 Windows 环境中创建服务。此权限仅属于高级用户,例如本地管理员。但是,修改服务控制管理器的安全描述符权限也可能允许任何用户创建将在 SYSTEM 帐户上下文下运行的服务。使用安全描述符定义语言,可以通过执行以下命令来修改这些权限:
Java |
上述命令中 SDDL 首字母缩略词的含义
服务配置实用程序可用于创建新服务。“ binPath ”参数可以存储服务启动后将执行的任意有效负载。需要注意的是,由于服务控制管理器的权限发生了变化,非提权用户也可以在windows环境上创建新的服务。如果防守方删除了恶意服务,权限仍将保留,允许标准用户继续创建新服务以保持持久性。
Java |
新服务将出现在 Windows 服务列表中。
当系统再次启动时,该服务将自动启动,并且有效负载将以系统级别权限执行。
原文始发于微信公众号(暴暴的皮卡丘):windows权限维持之SCM服务控制管理器
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论