白 - 权限提升和漏洞利用技巧 - zha0gongz1
2023-3-8 16:34:0 Author: www.cnblogs.com(查看原文) 阅读量:10 收藏

Windows服务

1.不安全的服务文件权限或路径

基本原理

Windows服务是一种在后台运行的计算机程序,它在概念上类似于Unix守护进程。

每个Windows服务都将其可执行文件的路径存储在称为BINARY_PATH_NAME的变量中。当启动服务时,会检查此变量并执行其下设置的.exe文件。

步骤

前提条件:Windows服务必须启用第3点权限,并且当前用户有启动或停止服务权限,否则必须等待系统重启才能执行恶意payload。

  1. 检查目标系统中的所有服务
  2. 枚举服务的所有权限集
  3. 查找SERVICE_ALL_ACCESSSERVICE_CHANGE_CONFIG是否已启用(这些权限允许用户修改服务配置和 bin 路径)
  4. 查询该服务以检查该服务是否以更高的权限运行
  5. 可使用命令或恶意文件更改服务的 BINARY_PATH_NAME (binpath)
  6. 重启或启动服务并获得更高权限shell

实操

使用 PowerUp脚本查找错误配置,枚举机器服务寻找打开了 binpath 的服务。

<#返回当前用户可以写入服务的路径或其配置的服务#>
powershell -ep bypass

.\powerup.ps

Get-ModifiableServiceFile

找到了一个名为“daclsvc”的服务,为避免工具误报,可使用Accesschk工具再次检查此服务以确认它确实设置了SERVICE_ALL_ACCESSSERVICE_CHANGE_CONFIG权限。

有启动 (service_start)权限 、停止权限,也有权更改服务“daclsvc”的可执行文件路径的权限

进一步查看一下该服务以何种权限运行

注意:大多数情况下,Windows会以 SYSTEM 或管理员权限运行所有服务

以本地系统权限运行

利用这个错误配置,可以使用scservice control(默认安装)来更改此服务的可执行文件路径

可将其设置为反弹shell的可执行文件路径。再次使用sc查询以检查设置的新路径是否正确

配置无误后,使用net(默认安装)启动此服务即可获得 SYSTEM 权限的shell

服务已运行

2.不安全的服务文件

基本原理

可执行文件是包含可以由操作系统执行的机器码指令构成的文件,可以是特定于平台的,也可以是跨平台

步骤

前提条件:服务的 .exe(二进制文件)权限是可写的或启用FILE_ALL_ACCESS权限以及启动/停止服务的权限

  • 1.枚举所有服务以检查全部原始.exe(二进制文件)是否可写
  • 2.使用恶意文件替换或更改原始二进制文件
  • 3.刷新或启动该服务,该服务将执行其 .exe 并以 SYSTEM 权限运行上面写入的任何内容

实操

使用 winPEAS 来枚举所有可执行文件权限配置错误的服务。

在 winpeas 探测结果中,我们可以看到filepermsvc服务的原始 .exe 为任意用户设置了AllAccess权限。简单来说就是“系统上的所有用户都可以对该文件进行任何操作(r、w、x)”,再次使用accesschk工具确认,这些自动化工具在加固的系统运行时可能触发告警

利用错误配置,只需修改脚本,或者在这里用恶意文件覆盖原始的 .exe

最后只需启动服务即可

注意:即使服务以localSystem权限运行,我们也有启动和停止服务的权限

3. 注册表 (.msi利用)

基本原理

.msi 文件专为 Windows 软件而设计的,其中包含了以标准化方式(由 Windows Installer 服务管理)安装应用程序所需的信息和文件。此利用手法体现在 Windows installer数据包 (.msi) 中,数据包默认是以管理员权限运行。这意味着任何执行 .msi 数据包的用户或应用程序都会自动获得管理员权限,而无需任何用户输入或身份验证。

步骤

前提条件:下面两个注册表项值的权限都设置为 TRUE ,才能允许通过管理员工权限安装 .msi

  1. 检查注册表,当前用户是否允许下载 .msi
# 必须设置为 1 (0×1) 表示启用
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated 
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated 
  1. 创建一个 .msi payload 传到目标机器上,执行该 .msi 即可获得 ADMIN/SYSTEM 权限

实操

检查注册表项

两者都设置为0×1,目标机器可以尝试使用该方法提权

创建一个恶意的 .msi payload(stageless)

至于如何传到目标机上,是格局打开五花八门的,例如在 HTTP、SMB 服务器托管此恶意文件,在目标端使用 certutil、PowerShell 或 SMB 从VPS或其他服务器下载 .msi payload

目标机运行 .msi

攻击端

4.未加引号的服务程序路径

Windows服务是一种在后台运行的计算机程序,在概念上类似于 Unix 守护进程

Windows每个服务都将其可执行文件的路径写在 BINARY_PATH_NAME的变量中。当系统启动服务时,会检查此变量并执行其下设置的 .exe文件

注意:这与上面在不安全的服务文件权限和路径所讲述的是同一回事,但是第一节中 binpath 变量是可写的,所以可以劫持。此节讲述的利用场景完全不同:在服务的 BINPATH 是安全的/不允许操作的情况下

基本原理

未加引号的服务程序路径(Unquoted Service Path)利用发生在安装了 包含空格但未包含引号的可执行程序路径的Windows服务中。

当 Windows启动服务时,系统会在服务配置中指定的路径中查找可执行文件。如果服务路径不包含引号且其中有空格,Windows 将尝试将路径的第一个单词作为可执行文件执行,并将其余单词用作命令行参数。

例如,对于服务程序的路径C:\Program Files\Script dir\service.exe
Windows系统将尝试执行:

C:\Program.exe
C:\Program Files\Script.exe (Here \Program Files dir is writable so the attacker can create a payload with the service’s extension to get it executed by OS during traversing)
C:\Program Files\Script dir\service.exe 

步骤

前提条件:1.必须有服务的路径,不包含引号和空格;2.与原二进制目录相比,在更高优先级的目录中拥有可写权限

1.枚举所有服务,检查是否有某个服务的 BinPath 未被引用并且包含空格或其他分隔符
2.然后在列出的未加引号的二进制路径中找到至少一个可写目录,并且与原始目录相比,它的优先级必须更高
3.使用 sc 查询服务以检查该服务是否以 (SYSTEM/Admin) 权限运行
4.在该可写目录中创建一个恶意文件
5.重启或启动服务以使用 SYSTEM 权限执行 .exe

实操

wmic service get name,displayname,pathname,startmode | findstr /i /v “C:\Windows\system32\” |findstr /i /v """

最后,服务路径有空格或未包含在引号中

进一步检查文件目录,与原始服务程序路径相比要具有更高优先级的可写路径

没有权限写入当前目录,继续查看其他目录

获取到可以创建恶意文件的地方,在未加引号的服务程序路径上的目录中拥有完全访问 (rwx) 权限,并且此处目录的执行优先级也更高。

将恶意文件复制到可写目录并将其名称更改为 Common.exe(因为操作系统将在遍历查找期间执行此目录)

现在只需使用net start <service-name>启动此服务,即可获得目标机器的管理员权限shell

简单总结下,原始目录是C:\Program Files\Unquoted Path Service\Common Files\UnquotedPathService.exe, 因为 BinPath 有空格但没有用引号括起来所以可被利用提权

因此正常情况下,每当此服务启动时,Windows系统都会通过以下方式读取此BinPath

C:\Program.exe (Program Not Found)
C:\Program Files\Unquoted.exe (Program Not Found)
C:\Program Files\Unquoted Path.exe (Program Not Found)
C:\Program Files\Unquoted Path Service\Common.exe (Program Not Found)
C:\Program Files\Unquoted Path Service\Common Files\UnquotedPathService.exe (Program Found)

所以系统在找到路径上的每个空格后,会加一个 .exe扩展名并执行。如果没有找到要执行的二进制文件,则将继续遍历,直到在完整的 BinPath 路径上找到正确的二进制文件。

攻击者要做的就是在原始服务路径之间找到一条可写路径,并使用相同的名称和扩展名创建其恶意文件,Windows 将遍历该名称和扩展名来查找执行二进制文件。

在此示例中,发现/Unquoted Path Service目录是可写的,因此创建了恶意文件Common.exe,使系统启动其服务时找到并执行。

5.弱注册表权限

基本原理

Windows系统中,操作系统、驱动程序、和系统安装组件、服务配置信息会存放在注册表中。而注册表,实际上是一个数据库,通过树类进行区分,如下图所示,会分成四个树类型。

微软官方介绍

在Windows中,服务有注册表键,这些键位于HKLM\SYSTEM\CurrentControlSet\Services<service_name>,攻击者可以使用 Windows 服务上的弱注册表权限,通过修改服务的配置设置以使用提升的权限运行,进行提权。

某些服务的注册表键值ImagePath,指定了其服务的可执行文件位置。ImagePath 值包含运行该服务的可执行文件的完整路径和文件名,以及该服务所需的执行参数或选项。

步骤

前提条件:必须有一个正在运行的SYSTEM/ADMIN权限的服务并且其注册表项具有可写权限

  1. 枚举系统服务,检查目标机注册表键是否可写
  2. 修改服务的 ImagePath键值(包含应用程序二进制的路径)
  3. 重启或启动服务,将以 SYSTEM 权限在其键值指定的路径中执行二进制文件

实操

枚举目标系统服务

检查此服务的注册表项权限

regsvc服务注册表键的权限为KEY_ALL_ACCESS,意味着允许用户或组可以完全访问注册表键值,包括查看,修改和删除值和子键

修改服务regsvcimagepath键值

更改注册表键值后,只需启动或重启服务即可以 SYSTEM/ADMIN 权限执行恶意文件


文章来源: https://www.cnblogs.com/zha0gongz1/p/17192109.html
如有侵权请联系:admin#unsafe.sh