郑重声明:本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋点赞| 能量注入 ❤️关注| 信号锁定 🔔收藏| 数据归档 ⭐️评论| 保持连接💬
🌌立即前往👉晖度丨安全视界🚀
▶ 信息收集
▶ 漏洞检测
▶初始立足点
▶权限提升➢ Windows权限提升 ➢ 滥用Windows服务提权(上) 🔥🔥🔥
▶横向移动
▶ 报告/分析
▶ 教训/修复
目录
1.Windows权限提升
1.1 滥用Windows服务提权
1.1.1 Windows服务简介
1.1.1.1 Windows程序 vs. Windows服务
1. 普通桌面程序(非服务)
2. Windows服务(后台服务)
3.常见问题
1.1.1.2 三种服务滥用攻击方式
1.1.2 劫持服务二进制文件攻击实战
1.1.2.1 攻击场景
1.攻击链流程
2.攻击步骤详解
3.攻击利用的关键要点
4.攻击实操流程图
1.1.2.2 服务侦察与发现
1.获取服务列表
2.XAMPP服务路径异常安全分析
1.1.2.3 枚举服务二进制权限
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
1.Windows权限提升
在渗透测试中,我们通常以非特权用户身份获得初始立足点。但为了深入探测(如搜索敏感信息、提取密码哈希等),往往需要提升至管理员权限(比如:使用Mimikatz提取密码哈希),这个过程就是特权提升。
📊 权限提升三大路径:本文开始介绍:利用windows服务漏洞进行权限提升。
| 阶段 | 目标 | 关键方法 |
|---|---|---|
| 1. 枚举Windows | 获取系统情报 | 手动搜索 + 自动化工具 |
| 2. 滥用Windows服务 | 攻击服务漏洞 | 服务配置缺陷、权限滥用 |
| 3. 利用其他组件 | 扩大攻击面 | 计划任务、系统漏洞利用 |
1.1 滥用Windows服务提权
1.1.1 Windows服务简介
Windows服务:是在后台长期运行的程序,由服务控制管理器(SCM)统一管理,类似于Unix/Linux系统中的守护进程。
| 特性 | 描述 |
|---|---|
| 管理方式 | 服务管理工具、PowerShell、sc.exe命令行等工具进行管理。 |
| 运行账户 | 使用LocalSystem(NT AUTHORITY\SYSTEM 、BUILTIN\Administrators)、Network Service、Local Service、自定义账户等来运行其自身的服务。 |
| 安全重要性 | 滥用Windows服务可用于权限提升攻击 |
1.1.1.1Windows程序 vs. Windows服务
| 类型 | 运行账户选择 | 说明 |
|---|---|---|
| 普通Windows程序 | 使用当前登录用户的权限 | 启动时无需选择服务账户,直接继承启动它的用户权限 |
| Windows服务 | 必须配置特定的服务账户 | 安装时必须指定运行账户,独立于登录用户 |
📝 详细解释:
1.普通桌面程序(非服务)
当在Windows上双击一个.exe文件或从开始菜单启动程序时:
✅不选择服务账户
✅自动使用当前登录用户的身份和权限运行
✅ 如果当前用户是标准用户,程序就是标准权限
✅ 如果当前用户是管理员,程序可以请求提升权限(UAC弹窗)
例如:您以用户Alice登录,启动记事本,记事本就以Alice的权限运行。
2.Windows服务(后台服务)
服务是一种特殊的程序,由服务控制管理器(SCM)管理:
✅必须预先配置运行账户
✅ 配置在服务安装时设置,存储在注册表中
✅独立于任何登录用户,即使无人登录也能运行
✅ 常见的服务账户选项:
| 服务账户类型 | 权限级别 | 典型用途 |
|---|---|---|
| LocalSystem | 🟥 最高(SYSTEM) | 系统核心服务 |
| Local Service | 🟨 较低(本地受限) | 不需要网络访问的服务 |
| Network Service | 🟧 中等(网络受限) | 需要网络通信的服务 |
| 自定义用户账户 | 🟩 按账户权限 | 特定业务应用 |
类比理解:
普通程序👉 像您亲手做的任务,用您自己的权限
Windows服务👉 像您雇佣的工人,可以指定他使用哪种工作证(账户)
安全意义:
正是因为服务可以配置为高权限账户运行(如SYSTEM),而且长期后台运行,才使得我们之前讨论的服务漏洞(如二进制劫持)如此危险——攻击者只需替换文件,下次服务重启就会以高权限执行恶意代码。
3.常见问题
Q:我可以用管理员权限运行普通程序吗?
A:可以,通过“以管理员身份运行”,但这只是临时提升权限,与服务账户是不同概念。
Q:普通程序能像服务一样在后台运行吗?
A:技术上可以(如使用计划任务),但这不是标准的“Windows服务”,也不使用服务账户体系。
Q:为什么我的程序不能直接选择“以SYSTEM运行”?
A:SYSTEM是受保护的内置账户,只有通过服务机制或特殊漏洞利用才能获得此权限。
简单说:只有Windows服务才需要预先配置服务账户,普通桌面程序直接使用当前用户权限运行。这个区别是理解Windows权限提升攻击的关键基础!
1.1.1.2 三种服务滥用攻击方式
本系列文章主要介绍其中三种通过滥用服务来提权。
| 攻击类型 | 核心原理 | 关键条件 |
|---|---|---|
| 劫持服务二进制文件 | 替换可执行文件 | 对服务二进制文件有写入权限 |
| 劫持服务DLL文件 | 替换依赖的DLL | DLL加载路径不安全 |
| 利用未加引号的服务路径 | 路径解析漏洞 | 服务路径未用引号包裹且存在空格 |
1.1.2 劫持服务二进制文件攻击实战
1.1.2.1 攻击场景
软件开发人员安装服务时权限配置不当,使普通用户(Users组)对服务二进制文件拥有完全控制权(读写权限)。
1.攻击链流程
2.攻击步骤详解
侦察阶段:攻击者发现某个服务的二进制文件权限设置存在漏洞
替换阶段:将原始服务程序替换为恶意程序
触发阶段:
手动重启服务
或等待系统重启(若服务设置为自动启动)
提权阶段:恶意程序以服务账户(通常是LocalSystem)权限执行
3.攻击利用的关键要点
权限配置错误是根本原因
服务重启机制是攻击触发器
LocalSystem账户提供最高权限执行环境
4.攻击实操流程图
1.1.2.2 服务侦察与发现
我们的目标攻击主机是CLIENTWK220,我们先通过RDP远程桌面连接(输入用户名dave和密码)到这台主机,开始获取本主机“所有已安装的Windows服务的列表”。
1.获取服务列表
可选择各种方法,如:
①GUI中的services. msc,如下图:
②Get-Service:使用PowerShell查询
③Get-CimInstance(取代Get-WmiObject):使用PowerShell查询,这里使用此方法。
# 🎯 查询所有运行中的服务:> Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like'Running'}| 命令组件 | 作用 | 备注 |
|---|---|---|
| Get-CimInstance | 查询WMI对象 | 替代Get-WmiObject |
| win32_service | 服务信息类 | 包含服务的详细数据 |
| Select | 选择关键字段列 | Name、State、PathName |
| Where-Object | 过滤条件 | 只显示"Running"状态 |
🚩 关键发现:
XAMPP服务异常路径:Apache和MySQL安装在
C:\xampp\而非C:\Windows\System32风险提示:用户自己安装的服务往往权限配置不当,易成为攻击目标
⚠️注意:非交互式登录(如WinRM)或绑定shell来查询服务时,使用Get-CimInstance和Get-Service查询非管理员用户的服务时会出现“权限被拒绝”的错误。使用交互式登录如RDP,可以解决这个问题。
2.XAMPP服务路径异常安全分析
发现XAMPP服务异常路径,用户自定义安装的服务往往权限配置不当,易成为攻击目标。
| 对比维度 | 标准安全情况 | 当前风险情况 |
|---|---|---|
| 安装路径 | C:\Windows\System32\(系统受保护目录) | C:\xampp\(用户自定义目录) |
| 安装类型 | 系统级标准安装 | 用户级自定义安装 |
| 权限控制 | 严格系统ACL保护 | 依赖用户设置的松散权限 |
| 管理责任 | 操作系统厂商 | 软件开发/部署人员 |
🔗 攻击链条简化
非标准安装路径 → 宽松权限配置 → 二进制文件可被替换 → 服务重启执行恶意代码 → 系统权限沦陷🛡️ 关键安全启示:
对于系统管理员:
📍 监控非标准路径服务:定期审查不在
System32下的服务二进制🔐 严格权限审核:确保服务文件仅有必要的最小权限
📋 建立软件安装规范:限制用户自定义安装高权限服务
对于开发人员:
⚙️ 遵循最小权限原则:服务账户避免使用SYSTEM等高权限
📁 使用受保护目录:或将自定义目录纳入安全监控范围
🔧 明确权限需求:精准配置所需权限,避免“完全控制”
💎 总结要点
“非常规路径 + 宽松权限 = 高危攻击面”
1.1.2.3 枚举服务二进制权限
接下来,枚举这两个服务二进制文件的权限。可选择:
- 传统的icacls程序
- PowerShell的Get-ACL。
在这个例子中将使用icacls,它既可在PowerShell中使用,也可在Windows命令行中使用。
📊 权限对比:
| 对比维度 | Apache httpd.exe | MySQL mysqld.exe |
|---|---|---|
| 文件路径 | C:\xampp\apache\bin\httpd.exe | C:\xampp\mysql\bin\mysqld.exe |
关键用户组 (以dave登录) | BUILTIN\Users | BUILTIN\Users |
| 权限状态 | 🔒读取和执行 (RX) | 🚨完全控制 (F) |
| 权限含义 | - R:读取文件内容 - X:执行文件 | - F:完全控制 - R:读取 - W:写入/修改 - X:执行 - D:删除 |
| 继承标记 | 未明确(可能为默认) | 无(I)标记(手动设置) |
| 攻击可行性 | ❌不可行 (无法替换文件) | ✅完全可行 (可直接替换为恶意程序) |
| 风险等级 | 🟢 低风险 | 🔴 高危风险 |
| 安全影响 | 用户仅能运行合法程序 | 用户可植入任意恶意代码 |
🔑 关键权限说明
F:完全控制(读、写、执行、删除)
RX:读取和执行
(I):继承标记(本例中无此标记,说明权限是手动设置的)
在 icacls 的输出中,权限被标记为 I 时:表示该权限是继承的,但 I 并不是一个权限掩码,只是一个表示继承状态的标记。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。