Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-43229 — CVE-2021-43229 演练 | Kitploit
工具/GitHubGitHub/citizen13x/cve-2021-43229
漏洞分析漏洞利用逆向工程学习与教育二进制利用
GitHubcitizen13x/cve-2021-43229

CVE-2021-43229

CVE-2021-43229 演练

查看仓库
1134年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2021-43229 演练

公开信息

Windows NTFS 权限提升漏洞

与以下不同:

  • CVE-2021-43230
  • CVE-2021-43231

补丁:2021年12月14日

根据 Twitter 上的 @AravGarg3 所述,CVE-2021-43229 似乎是可利用的,并且与 整数溢出 有关。

来源:https://twitter.com/AravGarg3/status/1479447843458863104

Windows 10 版本

Windows 10 次要版本发布日期
13872021年11月22日
14152021年12月14日

第一部分 - 差异比较

使用 IDA Pro 中的 BinDiff,补丁差异比较结果如下:

三个候选函数脱颖而出:

  • NtfsRenameToPrivateDir
  • TxfAllocateAndStoreNameForTxLogging
  • TxfAllocateFullFilePathForChangeNotify

根据 Microsoft 12 月的 安全更新指南,有四个 CVE 与 NTFS 相关:

  • CVE-2021-43229:Windows NTFS 权限提升漏洞
  • CVE-2021-43230:Windows NTFS 权限提升漏洞
  • CVE-2021-43231:Windows NTFS 权限提升漏洞
  • CVE-2021-43240:NTFS 设置短名称权限提升漏洞

CVE-2021-43240 似乎与 NtSetShortNameInfo 有关。

NtfsRenameToPrivateDir、TxfAllocateAndStoreNameForTxLogging 和 TxAllocateFullFilePathForChangeNotify 三个函数都有相同的新长度检查,并且似乎与 CVE-2021-43229、CVE-2021-43230 和 CVE-2021-43231 相关,但不一定按此顺序。目前无法确定哪个对应哪个,Microsoft 对这方面的信息有些吝啬。

分析

在这三个 CVE 中,分配大小计算(目录路径长度 + 文件名长度)时发生整数溢出,导致基于池的缓冲区溢出,随后两次 memmove 操作目录路径和文件名。

第二部分 - 路径

第一次尝试:NtfsRenameToPrivateDir

到 NtfsRenameToPrivateDir 的路径如下所示:

root@kitploit:~
NtfsCommonSetInformation
       |__________________
       |                  |
       v                  v
NtfsSetLinkInfo   NtfsSetRenameInfo
       |__________________|
       |
       v
NtfsRemoveSupersededTarget
       |
       v
NtfsRenameToPrivateDir

首先,要调用 NtfsCommonSetInformation,只需调用 NtSetInformationFile。然后,要经过 NtfsSetLinkInfo 和 NtfsSetRenameInfo,分别使用 FileLinkInformationEx 和 FileRenameInformationEx 作为 NtSetInformationFile 中的文件信息类。

要通过 NtfsSetRenameInfo 到达 NtfsRemoveSupersededTarget,必须设置 FILE_RENAME_REPLACE_IF_EXISTS 和 FILE_RENAME_POSIX_SEMANTICS 标志。使用现有文件的名称重命名文件,以访问 NtfsRemoveSupersededTarget。对于 NtfsRenameToPrivateDir,稍微有些棘手,因为被替换的文件必须被某个进程打开。

不幸的是,在调用 NtfsRemoveSupersededTarget 之前会进行长度检查。

使用 NtfsSetLinkInfo 的方法与 NtfsSetRenameInfo 类似,只是标志名称不同,含义相同。但与 NtfsSetRenameInfo 一样,在调用 NtfsRemoveSupersededTarget 之前也会进行另一个检查。

第二次尝试:TxfAllocateAndStoreNameForTxLogging

到 TxfAllocateAndStoreNameForTxLogging 的路径如下所示:

root@kitploit:~
NtfsCommonCreate
      |
      v
NtfsCreateNewFile
      |
      v
TxfNewFileCreate
      |
      v
TxfAllocateAndStoreNameForTxfLogging

首先,要调用 NtfsCommonCreate,只需调用 CreateFile。

TxfNewFileCreate 函数前缀为 Txf,意为“事务性 NTFS”,在创建事务文件时被调用。TxfAllocateAndStoreNameForTxfLogging 在处理过程中被调用,以存储事务文件的路径。

只需要两个调用:

  • CreateTransaction
  • CreateFileTransacted

第三部分 - PoC 实现

下面显示了 TxfAllocateAndStoreNameForTxLogging 的易受攻击代码:

root@kitploit:~
...
and     di, 2
add     di, [rsi+UNICODE_STRING.Length]                      ; 文件名
add     di, [rsp+68h+RelativeNormalizedDirectoryPath.Length] ; 此处溢出
cmp     [rsp+68h+arg_20], r12b
jnz     loc_16592C

movzx   edx, di
add     rdx, size UNICODE_STRING ; NumberOfBytes
mov     ecx, cs:PoolType
or      ecx, 10h        ; PoolType
mov     r8d, 'afxT'     ; Tag
call    cs:__imp_ExAllocatePooliWthTag
...

为了触发溢出,需要创建一个长度超长的文件,超过 0xFFFF 字节(32767 个字符)。

出现的一个问题是,文件或目录名称不能超过 256 个字符(包括 NULL 字符)。为了解决这个问题,需要使用深层子文件夹。奇怪的是,即使成功创建了子文件夹,子文件也无法创建,这肯定是因为之前进行了某些检查。

使用 资源管理器 的地址栏,可以注意到显示目录路径的格式。这并不是我预期的格式,资源管理器 没有使用“经典”路径,而是使用了旧的 DOS 格式,即 8.3 短格式。

保持子文件夹创建方式不变,并在文件创建期间对子目录使用短名称,就可以解决问题。

需要注意的是,系统会向溢出的尺寸增加 16 个字节,这是 UNICODE_STRING 的大小,该结构将表示最终路径。这是因为请求的内存将包含 UNICODE_STRING 及其后面的缓冲区。

方法:

  • 创建长名称的子目录
  • 创建具有长名称的文件,并使用目录路径的短名称

当前条件:

  • 溢出覆盖了相当于 64KB 的大小
  • 分配的内存大小最多为 0x20C 字节
  • 分配的内存位于分页池中

第四部分 - 线索

来自 Synacktiv 在 SSTIC 2020 的一个有趣的报告可能是一个值得深入研究的思路,即针对 VS Heap。

CVE-2020-17087 是一个类似的利用案例,由 PixiePoint Security 使用上述技术进行了演示。

下载工具
SimiConf函数信息
NOK0.980.99NtfsCommonSetInformation$fin$0跳转修改
0.970.99NtSetShortNameInfo
0.960.99NtfsUpdateSecurity
NOK0.910.94NtfsRenameToPrivateDir$fin$1跳转修改
0.890.98NtfsInitializeFileInDirectory
OK0.880.95TxfAllocateAndStoreNameForTxLogging长度检查
OK0.870.93NtfsRenameToPrivateDir长度检查
OK0.810.95TxfAllocateFullFilePathForChangeNotify长度检查
0.760.94NtfsCommonSetInformation