• 白 - 权限提升和漏洞利用技巧


    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 启动此服务,即可获得目标机器的管理员权限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,攻击者可以使用 Windows 服务上的弱注册表权限,通过修改服务的配置设置以使用提升的权限运行,进行提权。

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

    步骤

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

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

    实操

    枚举目标系统服务

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

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

    修改服务regsvcimagepath键值

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


    __EOF__

  • 本文作者: zha0gongz1
  • 本文链接: https://www.cnblogs.com/H4ck3R-XiX/p/17192109.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    聊聊消息队列(MQ)那些事
    《TCP/IP网络编程》阅读笔记--Socket类型及协议设置
    MyBatis递归查询
    SpringCloud基础概念学习笔记(Eureka、Ribbon、Feign、Zuul)
    RDMA学习思路
    如何远程访问电脑?
    计算机毕业设计Java携手同游旅游社交平台(源码+系统+mysql数据库+Lw文档)
    【数据结构】P1 数据结构是什么、算法怎样度量
    Python 操作pdf文件(pdfplumber读取PDF写入Excel)
    线性回归模型(OLS)3
  • 原文地址:https://www.cnblogs.com/H4ck3R-XiX/p/17192109.html