11月3日笔记(根据凭据提权)
用户凭据操作
枚举 Unattended 凭据
无人值守(Unattended)安装允许应用程序在不需要管理员关注下自动安装。无人值守安装的问题是会在系统中残留一些配置文件,其中可能包含本地管理员的用户名和密码,常见的路径如下。
C:\sysprep.inf
C:\syspreg\sysprep.xml
C:\Windows\system32\sysprep.inf
C:\windows\system32\sysprep\sysprep.xml
C:\unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\PantheriUnattendiUnattended.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\System32\Sysprep\Unattend.xml
C:\Windows\System32\Sysprep\Panther\Unattend.xml
测试人员可以全盘搜索上述配置文件,并检索User、Accounts、LocalAccounts、UserAccounts、Administrator、Password等关键字来获取管理员凭据。
MetaSploit 提供了 post/windows/gather/enum unattend 模块,可以从 Unattend 配置文件中自动化检索出用户密码。
获取组策略凭据
微软在 Windows Server 2008中引入了组策略首选项,允许网络管理员对指定计算机和用户配置特定的设置。在大型企业或组织的域环境中,网络管理员往往会通过下发组策略的方式对所有加入域的计算机的本地管理员密码进行批量修改。
在新建一个组策略后,域控制器会自动在 SYSVOL 共享目录中生成一个 XML 文件该文件保存了组策略更新后的密码。SYSVOL 是在安装活动目录时创建的一个用于存储公共文件服务器副本的共享文件夹,主要存放登录脚本、组策略数据及其他域控制器需要的域信息等,并在所有经过身份验证的域用户或者域信任用户范围内共享。
在 SYSVOL 目录中搜索,可以找到一个名为“Groups.xml”的文件,其中的 cpassword字段保存了经过 AES 256 算法加密后的用户密码。
但是,微软在 2012年公布了该密码的加密私钥,这意味着任何经过认证的用户都可以读取保存在 XML 文件中的密码,并通过私钥将其进行解密。并且,由于通过组策略批量修改的本地管理员密码都是相同的,如果获得了一台机器的本地管理员密码,就可以获取整个域内所有机器的管理权限。
MetaSploit 框架内置 post/windows/gather/credentials/gpp 模块,可以自动化搜索位于SYSVOL 共享目录中的XML,并从中解密出用户密码。
HiveNightmare
2021年7月,Microsoft 发布紧急安全公告,公开了一个Windows 提权漏洞(CVE-2021-36934)。由于Windows 中多个系统文件的访问控制列表(ACL)过于宽松,使得任何标准用户都可以从系统卷影副本中读取包括 SAM、SYSTEM、SECURITY 在内的多个系统文件。由于 SAM 文件是存储用户密码哈希值的安全账户管理器,进而可以获取所有本地用户 NTLM Hash 值,通过暴力破解或哈希传递等方法就能实现本地权限提升。该漏洞影响 Windows 10 Version 1809 发布以来的所有 Windows 版本,包括 Windows11,被称为“HiveNightmare”。
示例:
系统保护在 Windows 操作系统中默认启用,因此如果已创建系统还原点,那么标准用户可直接从卷影副本中访问和转储 SAM、SYSTEM、SECURITY 文件。这些文件在系统中的原始路径如下:
C:Windows\System32\config\SAM
C:\Windows\System32\config\SECURITY
C:\Windows\System32\config\SYSTEM
1、以标准用户执行以下命令:
icacls C:\Windows\System32\config\SAM
若输出“BUILTIN\Users:(I)(RX)”,则表示该系统易受攻击。
2、将编译好的利用程序 HiveNightmare.exe上传到目标主机。直接运行后即可将 SAM、SYSTEM、SECURITY 转储到当前目录。
3、将三个文件复制到本地,使用 Impacket 项目中的 secretsdump.py 导出 SAM 文件中的用户哈希值。
得到用户的哈希值后,测试人员可以对其进行暴力破解,也可以直接使用本地管理员用户进行哈希传递,从而获取目标主机的 SYSTEM 权限。
Zerologon 域内提权
Zerologon(CVE-2020-1472)是Netlogon远程协议的一个特权提升洞,可以在不提供任何凭据的情况下通过身份验证,并实现域内提权。
该漏洞的最常见的利用方法是调用Netlogon中的RPC函数NetrServerPasswordSet2来重置域控制器的密码。注意,这里重置的是域控机器账户的密码,该密码由系统随机生成,密码强度是 120个字符,并且会定时更新。机器用户拥有域用户的一切属性,在特定意义上也是一种域用户。域内的机器账户以“机器名+ ”来命名,如域控制器 D C − 1 的机器用户就是 D C − 1 ”来命名,如域控制器DC-1的机器用户就是DC-1 ”来命名,如域控制器DC−1的机器用户就是DC−1。
机器账户是不允许登录的,所以不能直接通过重置后的机器账户来登陆域控制器但是,域控制器的机器账户在默认情况下拥有 DCSync 权限,因此可以通过 DCSync 攻击导出域管理员密码的哈希值,进而获取域控权限。
Print Spooler 提权漏洞
PrintNightmare
PrintNightmare 是广泛影响 Windows 系统各版本的严重安全漏洞,发生在 WindowsPrint Spooler 服务中,有两种变体,一种导致权限提升(CVE-2021-1675),另一种允许远程代码执行(CVE-2021-34527)。2021年6月8日,微软发布安全更新补丁,修复了50 个安全漏洞,其中包括一个 Windows Print Spooler 权限提升漏洞(CVE-2021-1675)又披露了 Windows Print Spooler 中的远程代码执行漏洞(CVE-2021-34527)。
标准用户可以通过 PrintNightmare 漏洞绕过 PfcAddPrinterDriver 的安全验证,并在打印服务器中安装恶意的驱动程序。若当前所控制的用户在域中,则可以连接到域控制器中的 Print Spooler 服务并在域控制器中安装恶意的驱动程序,进而接管整个域环境。
本地提权
① 使用 MetaSploit 生成一个恶意的 DLL 文件作为攻击载荷,要生成 64 位 DLL 文件,因为 Print Spooler 服务启动时执行的二进制文件 spoolsv.exe 为 64 位。
② 从 GitHub 下载相关利用工具,将编译好的 SharpPrintNightmare.exe 和 reverse _tcp.dll一起上传到目标主机。用标准用户权限执行以下命令,成功获取系统 SYSTEM 权限。
SharpPrintNightmare.exe reverse_tcp.dll