THELEIT
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

当您发现任意文件 delete as 时,您会怎么做NT AUTHORITY\SYSTEM?
在本文中,将展示一些很棒的技术,可以从任意文件删除、任意文件夹删除和其他看似影响不大的基于文件系统的漏洞利用原语中获得更多收益。
任意文件删除的问题
当您考虑如何在 Windows 上利用任意文件删除时,会遇到两个很大的障碍:
- 大多数关键的 Windows 操作系统文件都使用 DACL 锁定,即使是SYSTEM.相反,大多数操作系统文件都归 拥有TrustedInstaller,并且只有该帐户有权修改它们。(读者练习:找到仍然可以被删除或覆盖的关键 Windows 操作系统文件SYSTEM!)
- 即使您找到一个可以删除的文件SYSTEM,它也必须是在删除后导致“打开失败”(安全性降低)的文件。
可能出现的第三个问题是某些关键系统文件由于共享违规而始终无法访问。
经验表明,找到一个满足上述所有条件的要删除的文件非常困难。在查看通常位于C:\Windows,C:\Program Files或之内的地方时C:\Program Data,我们不知道有什么符合要求的地方。有一些先前的工作涉及利用防病毒和其他产品,但这取决于这些产品中的漏洞行为。
解决方案在别处找到:Windows Installer
要了解特权升级的途径,我们需要稍微解释一下 Windows Installer 服务的操作。下面的解释有所简化。
Windows Installer 服务负责执行应用程序的安装。应用程序作者提供一个.msi文件,它是一个数据库,定义了安装应用程序必须进行的更改:要创建的文件夹、要复制的文件、要修改的注册表项、要执行的自定义操作等等。
为确保在无法完成安装时保持系统完整性,并使完全恢复安装成为可能,Windows Installer 服务强制执行事务性。每次对系统进行更改时,Windows Installer 都会记录更改,并且每次使用正在安装的软件包中的较新版本覆盖系统上的现有文件时,它都会保留旧版本的副本。如果安装需要回滚,这些记录允许 Windows Installer 服务将系统恢复到其原始状态。在最简单的情况下,这些记录的位置是一个名为C:\Config.Msi。
在安装过程中,Windows Installer 服务创建一个名为 的文件夹C:\Config.Msi,并用回滚信息填充它。每当安装过程对系统进行更改时,Windows Installer 都会将更改记录在一个类型为.rbs(回滚脚本)的文件中C:\Config.Msi。此外,每当安装使用较新版本覆盖某些文件的较旧版本时,Windows Installer 都会将原始文件的副本放置在C:\Config.Msi.这种类型的文件将被赋予.rbf(回滚文件)扩展名。如果需要回滚不完整的安装,该服务将读取.rbs和.rbf文件并使用它们将系统恢复到安装前的状态。
必须防止该机制被篡改。如果恶意用户能够在读取.rbs和/或.rbf文件之前更改它们,则在回滚期间可能会发生对系统状态的任意更改。C:\Config.Msi因此,Windows Installer对包含的文件设置了强大的 DACL 。
但是,这里出现了一个空缺:如果攻击者具有任意文件夹删除漏洞怎么办?C:\Config.Msi他们可以使用它在 Windows Installer 创建后立即完全删除。然后攻击者可以C:\Config.Msi使用弱 DACL 重新创建(请注意,允许普通用户在 的根目录下创建文件夹C:\)。一旦 Windows Installer 在 中创建回滚文件C:\Config.Msi,攻击者就可以C:\Config.Msi用包含攻击者指定的.rbs和.rbf文件的欺诈版本替换。然后,在回滚时,Windows Installer 将对系统进行任意更改,如恶意回滚脚本中指定的那样。
请注意,这里唯一需要的利用原语是删除空文件夹的能力。移动或重命名文件夹同样有效。
从任意文件夹删除/移动/重命名到 SYSTEM EoP
如果您有用于删除、移动或重命名SYSTEM管理员上下文中的任意空文件夹的原语,则此漏洞具有广泛的适用性。该漏洞应该构建在 x64 或 x86 的发布配置中,以匹配目标系统的体系结构。运行漏洞利用程序后,它会提示您启动删除C:\Config.Msi.您可以通过触发任意文件夹删除漏洞来执行此操作,或者出于测试目的,您可以简单地rmdir C:\Config.Msi从提升的命令提示符运行。成功运行后,漏洞利用会将文件丢弃到C:\Program Files\Common Files\microsoft shared\ink\HID.DLL.然后你可以得到一个SYSTEM命令提示符,方法是启动屏幕键盘osk.exe,然后切换到安全桌面,例如按 Ctrl-Alt-Delete。
该漏洞包含一个.msi文件。主要的特别之处.msi在于它包含两个自定义操作:一个产生短暂的延迟,第二个引发错误。当 Windows Installer 服务尝试安装它.msi时,安装将中途停止并回滚。到回滚开始时,漏洞利用程序会将 的内容替换C:\Config.Msi为恶意的.rbs和.rbf..rbf包含恶意 HID.DLL 的位,并指示.rbsWindows Installer 将其“恢复”到我们想要的位置 (C:\Program Files\Common Files\microsoft shared\ink\)。
EoP利用的完整机制如下:
EoP 创建一个虚拟对象C:\Config.Msi并设置一个机会锁。
攻击者触发文件夹删除漏洞以在(或管理员)的上下文中删除C:\Config.Msi(或移动到其他地方)。由于 oplock,进程被迫等待。C:\Config.MsiSYSTEMSYSTEM
在 EoP 中,机会锁回调被调用。以下几个步骤发生在回调中。
EoP 将假人移到C:\Config.Msi别处。这样做是为了让 oplock 保持原位,并且易受攻击的进程被迫继续等待,同时文件系统位置C:\Config.Msi可用于其他目的(参见进一步信息)。
EoP 生成一个新线程,该线程调用 Windows Installer 服务来安装.msi,同时禁用 UI。
EoP 的回调线程继续并开始轮询是否存在C:\Config.Msi。由于我不清楚的原因,Windows Installer 将创建C:\Config.Msi,将其短暂用于临时文件,删除它,然后再次创建它以用于回滚脚本。回调线程轮询C:\Config.Msi以等待这些操作中的每一个发生。
一旦 EoP 检测到 Windows Installer 已C:\Config.Msi第二次创建,回调线程就会退出,从而释放 oplock。这允许易受攻击的进程继续并删除(或移动或重命名)C:\Config.Msi由 Windows Installer 创建的进程。
EoP 主线程恢复。它反复尝试C:\Config.Msi使用弱 DACL 创建。一旦易受攻击的进程删除(或移动或重命名)C:\Config.Msi,EoP 的创建操作就会成功。
EoP 监视其中的内容C:\Config.Msi并等待 Windows Installer 在.rbs那里创建一个文件。
EoP 反复尝试转移C:\Config.Msi到别处。一旦 Windows Installer 关闭其对 的句柄.rbs,移动就会成功,并且 EoP 会继续进行。
EoP 创建C:\Config.Msi最后一次。在其中,它放置了一个.rbs与原始.rbs.与 一起.rbs,它写了一个恶意的.rbf.
在 中指定的延迟和错误操作之后.msi,Windows Installer 执行回滚。它使用恶意的.rbs和.rbf,删除 DLL。
请注意,在第 7 步,存在有时会导致问题的竞争条件。如果易受攻击的进程没有立即唤醒并删除C:\Config.Msi,则机会窗口可能会丢失,因为 Windows Installer 将很快打开一个句柄C:\Config.Msi并开始在.rbs那里写入。到那时,删除C:\Config.Msi将不再有效,因为它不是一个空文件夹。为避免这种情况,建议在至少具有 4 个处理器内核的系统上运行 EoP。一个没有太多其他活动发生的安静系统可能是理想的。如果确实遇到故障,则有必要重试 EoP 并再次触发漏洞。
从任意文件删除到SYSTEM EoP
上述技术假定删除任意空文件夹的原语。但是,通常有文件删除原语而不是文件夹删除原语。Abdelhamid Naceri 的用户配置文件错误就是这种情况。为了在这种情况下实现SYSTEMEoP,他的漏洞使用了一个额外的技巧,我们现在将对此进行解释。
在 NTFS 中,与文件夹关联的元数据(索引数据)存储在该文件夹的备用数据流中。如果文件夹名为C:\MyFolder,则索引数据会在名为 的流中找到C:\MyFolder::$INDEX_ALLOCATION。可以在此处找到一些实施细节。但是,出于我们的目的,我们需要知道的是:删除::$INDEX_ALLOCATION文件夹的流实际上是从文件系统中删除该文件夹,并且可以将流名称(例如 )C:\MyFolder::$INDEX_ALLOCATION传递给需要文件名称的 API,包括DeleteFileW.
因此,如果您能够让一个以SYSTEMadmin 身份运行的进程将任意字符串传递给DeleteFileW,那么您不仅可以将其用作文件删除原语,还可以将其用作文件夹删除原语。SYSTEM从那里,您可以使用上面讨论的漏洞利用技术获得EoP。在我们的例子中,您要传递的字符串是C:\Config.Msi::$INDEX_ALLOCATION.
请注意,成功取决于易受攻击进程中存在的特定代码。如果易受攻击的进程只是调用DeleteFileA/DeleteFileW,你应该没问题。但在其他情况下,特权进程会执行其他相关操作,例如检查指定文件的属性。这就是为什么您不能通过运行从命令提示符测试此方案的原因del C:\Config.Msi::$INDEX_ALLOCATION。
从文件夹内容删除到 SYSTEM EoP
再次升级,让我们假设存在漏洞的SYSTEM进程不允许我们指定要删除的任意文件夹或文件,但我们可以让它删除任意文件夹的内容,或者递归地从一个文件夹中删除文件攻击者可写文件夹。这也可以用于 EoP 吗?
创建一个子文件夹,temp\folder1.
创建一个文件,temp\folder1\file1.txt.
在 上设置机会锁temp\folder1\file1.txt。
等待易受攻击的进程枚举其内容temp\folder1并尝试删除file1.txt它在那里找到的文件。这将触发机会锁。
当 oplock 触发时,在回调中执行以下操作
:移到file1.txt别处,这样它temp\folder1就是空的,可以删除。我们移动file1.txt而不是仅仅删除它,因为删除它需要我们首先释放 oplock。这样,我们维护机会锁,以便易受攻击的进程继续等待,同时我们执行下一步。
b.重新创建temp\folder1为“\RPC Controlfolder of the object namespace. c. Create a symlink at\RPC Control\file1.txtpointing toC:\Config.Msi::$INDEX_ALLOCATION”的连接点。
当回调完成时,机会锁被释放,易受攻击的进程继续执行。的删除file1.txt变成了删除C:\Config.Msi。
但请注意,仅设置从到的联结\RPC Control然后让任意文件删除漏洞发挥作用是不够的。那是因为\RPC Control它不是一个可枚举的文件系统位置,所以易受攻击的进程将无法\RPC Control\file1.txt通过枚举找到。相反,我们必须首先创建temp\folder1\file1.txt一个真正的文件,让易受攻击的进程通过枚举找到它。只是之后,当易受攻击的进程试图打开文件进行删除时,我们变成temp\folder1了一个指向对象命名空间的连接。
有关有效的利用代码,请参阅项目FolderContentsDeleteToFolderDelete。请注意,Windows 中的内置恶意软件检测将标记此进程并将其关闭。我建议为FolderContentsDeleteToFolderDelete.exe.
可以将这两个漏洞利用链接在一起。首先,运行FolderOrFileDeleteToSystem并等待它提示您触发特权删除Config.Msi.然后,运行FolderContentsDeleteToFolderDelete /target C:\Config.Msi。它将提示您触发特权删除内容C:\test1。
如果您的漏洞利用原语需要,您可以使用/initial命令行开关自定义此位置。出于测试目的,您可以通过del /q C:\test1\*从提升的命令提示符运行来模拟特权文件夹内容删除原语。FolderContentsDeleteToFolderDelete将把它变成删除C:\Config.Msi,这将允许FolderOrFileDeleteToSystem删除HID.DLL。最后,打开屏幕键盘并为您的SYSTEMshell 按 Ctrl-Alt-Delete。
从任意文件夹创建到永久 DoS
SYSTEM假设您有一个用于以管理员身份创建任意文件夹的漏洞利用原语。除非该文件夹是使用弱 DACL 创建的,否则听起来这根本不会产生任何安全影响。但令人惊讶的是,它确实如此:它可用于强大的拒绝服务。诀窍是创建一个这样的文件夹:
C:\Windows\System32\cng.sys
通常没有该名称的文件或文件夹。如果攻击者使用无关文件甚至空文件夹占用该文件系统位置,Windows 启动过程就会中断。确切的机制有点神秘。看起来 Windows 试图cng.sys从不正确的位置加载内核模块并失败,并且没有重试逻辑允许它继续并找到正确的驱动程序。结果是完全无法启动系统。也可以使用其他驱动程序来达到相同的效果。
根据手头的漏洞,这种 DoS 攻击甚至可以是远程 DoS,因为除了能够删除单个文件夹或文件之外不需要任何其他东西。
结论
我们在这里介绍的技术展示了如何使用一些相当弱的漏洞利用原语来产生巨大的效果。我们了解到:
- 任意文件夹删除/移动/重命名(即使是空文件夹),作为SYSTEM或admin,可用于升级到SYSTEM。
- 以管理员身份SYSTEM或以管理员身份任意删除文件通常可用于升级到SYSTEM.
- 以管理员身份删除任意文件夹的内容SYSTEM可用于升级到SYSTEM.
- 以SYSTEM管理员身份递归删除固定但攻击者可写的文件夹(例如临时文件夹)的内容,可用于升级到SYSTEM.
- 以SYSTEMadmin 或admin 身份创建的任意文件夹可用于永久性系统拒绝服务。
- 任意文件删除或覆盖,如SYSTEM或者管理员,即使没有内容的控制,也可以用于永久性系统拒绝服务。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)