You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SYSTEM上下文下访问与删除用户本地凭据的技术问询

从SYSTEM上下文访问/删除用户凭据的解决方案

核心原因

Windows凭据管理器的Web/Windows凭据默认存储在用户配置文件目录(%APPDATA%\Microsoft\Credentials、%LOCALAPPDATA%\Microsoft\Credentials),且默认安全描述符仅允许凭据所属用户访问。SYSTEM账户默认未加载普通用户的配置文件,也没有访问这些凭据的权限,因此直接调用CredEnumerate/CredRead会返回空结果。

方案一:注入凭据时修改安全描述符(优先推荐)

由于你完全控制凭据的注入流程,可在调用CredWrite时为凭据添加允许SYSTEM账户访问的安全描述符,让SYSTEM进程直接有权限枚举和删除这些凭据。

具体实现步骤

  1. 创建包含SYSTEM权限的安全描述符
    • 使用InitializeSecurityDescriptor初始化空的安全描述符
    • 通过CreateWellKnownSid传入WinLocalSystemSid获取SYSTEM账户的SID
    • 使用AddAccessAllowedAce向安全描述符中添加ACE,授予SYSTEM账户GENERIC_READ | GENERIC_WRITE | DELETE权限(满足枚举、读取、删除需求)
  2. 注入凭据时指定安全描述符
    • 填充CREDENTIAL结构体时,将pSecurityDescriptor成员指向上述创建的安全描述符

代码片段示例

// 获取SYSTEM账户的SID
BYTE systemSid[SECURITY_MAX_SID_SIZE];
DWORD sidSize = sizeof(systemSid);
if (!CreateWellKnownSid(WinLocalSystemSid, NULL, systemSid, &sidSize)) {
    // 处理错误
}

// 初始化安全描述符
SECURITY_DESCRIPTOR sd;
if (!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION)) {
    // 处理错误
}

// 创建ACL并添加ACE
ACL acl;
if (!InitializeAcl(&acl, sizeof(acl), ACL_REVISION)) {
    // 处理错误
}
if (!AddAccessAllowedAce(&acl, ACL_REVISION, GENERIC_READ | GENERIC_WRITE | DELETE, systemSid)) {
    // 处理错误
}

// 将ACL关联到安全描述符
if (!SetSecurityDescriptorDacl(&sd, TRUE, &acl, FALSE)) {
    // 处理错误
}

// 填充CREDENTIAL结构体并调用CredWrite
CREDENTIAL cred = {0};
cred.Type = CRED_TYPE_GENERIC; // 根据凭据类型调整
cred.TargetName = L"YourFakeCredentialTarget";
cred.CredentialBlobSize = ...;
cred.CredentialBlob = ...;
cred.pSecurityDescriptor = &sd; // 指定自定义安全描述符

if (!CredWrite(&cred, 0)) {
    // 处理错误
}

方案二:SYSTEM进程加载用户配置文件

如果需要访问所有用户的凭据(包括非你注入的),可通过SYSTEM进程加载目标用户的配置文件,让CredMan API能访问到该用户的凭据存储目录。

关键步骤

  1. 枚举本地用户账户:使用NetUserEnum获取本地所有用户的用户名
  2. 获取用户登录令牌:调用LogonUser(注意:若无用户密码,此方法受限;可针对性处理你注入凭据的目标用户)
  3. 加载用户配置文件:使用LoadUserProfile加载目标用户的配置文件,此时SYSTEM进程就能访问该用户的凭据目录
  4. 枚举/删除凭据:调用CredEnumerate/CredDelete完成操作
  5. 清理资源:操作完成后调用UnloadUserProfile释放配置文件

注意事项

  • 此方法需要处理用户令牌的获取,若无用户密码则无法调用LogonUser,仅适用于你知道目标用户凭据或能通过其他方式获取令牌的场景
  • 加载用户配置文件可能会影响用户当前的会话状态,需谨慎处理

验证说明

你提到LaZagne在用户上下文能找到凭据、SYSTEM上下文找不到,正是因为LaZagne默认依赖用户配置文件的加载,且默认凭据的安全描述符拒绝SYSTEM访问。修改注入凭据的安全描述符后,SYSTEM进程调用CredMan API就能正常枚举到你注入的虚假凭据。

内容的提问来源于stack exchange,提问作者Arif RiseAgainstHate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 03:15:21